Desktop builds get their MCP helpers back — every _ccs_* tool was silently
missing from every desktop turn in 7.10.0 — and worktree isolation ships, giving
each session and task its own git worktree and branch.
Desktop: every _ccs_* MCP helper was missing (affects 7.10.0)
- In an Electron build the helper scripts resolve inside
app.asar, which cannot
be read as a directory, soask_user,notify_user,set_ui_stateand
check_user_messagesfailed to spawn — silently, on every desktop turn.
helperPath()redirects to theapp.asar.unpackedcopy that electron-builder
already writes. A no-op in web and Docker mode, where no path contains
app.asar. Anything a helperrequires has to be unpacked too, or it fails one
level deeper.
Worktree isolation
- Each session and task gets its own git worktree and branch, so two units of
work in one project no longer share a working copy. New endpoints:
/api/sessions/:id/git-status,/git-commit,/git-merge. - It bootstraps on a machine with no git identity.
gitonly invents a
user@hostauthor when the hostname allows it; a container or a CI runner
refuses with "Author identity unknown", and because the bootstrap runs inside
POST /api/tasksthat failure took the whole request down with it. The project's
own Docker image is such a machine. A fallback author is supplied — and only
when there is nothing to override, so a commit in your own project stays yours.
This coverscommitAll()and the--no-ffmerge as well, both of which write
commits, and treats an explicitly emptyuser.emailas absent rather than as an
identity. - Four defects found in review before release: the chat started a new session on
the second message (the reuse check compared the worktree path instead of the
project root, losing history and--resume); the file browser answered 403 for
an isolated session, which also unset the project highlight, its bots and its
chat defaults; a fork pointed two conversations at one directory and one branch;
and MCPcreate_task/create_chainhanded the caller's own worktree down to
the child. - Known limit: isolation reaches the chat,
POST /api/tasks,
POST /api/sessionsand fork. Telegram, the scheduler, the chain runner and the
MCP creators still create rows without a worktree, so a project can hold both
isolated and non-isolated units at once. - A worktree failure now logs its reason, including git's own stderr, before it
propagates — the absence of that is what made the first attempt at this feature
look like an unknown regression.