a commander is a commander wherever it is opened
Fixing a regression I introduced last night. Commander rows in the Live list were changed to open in /chat rather than navigating to Command HQ — right, and it cost the composer its commander controls, because `isCommander` was computed from the ROUTE: `manager.context === 'command-hq'`. So the same commander, rendered on a different screen, silently lost "exit and hand back, then re-arm" — the only fire behaviour a watcher wants, and the one the dialog makes default inside a commander. GET /chat/sessions/:id now reports isCommander, derived from the session's own cwd by the same isCommandersDir already used by the sessions list and /chat/live. The answer travels with the conversation. The composer reads one value, manager.isCommander, true when EITHER source says so — and both are needed. The screen knows when Command HQ starts a commander, before a session or a transcript exists for any route to report on. The session knows once it does, wherever it is opened. Screen-only was this bug; session-only would have broken the brand-new composer, which is where the whole thing starts. Verified on a real commander rather than by reading: 172cdd8c resolves cwd=…/commanders and isCommander=true. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -257,6 +257,16 @@ chatRouter.get('/sessions/:id', async (ctx) => {
|
||||
offset: windowed ? start : 0,
|
||||
title: context?.title ?? null,
|
||||
partCount: context?.partCount ?? 1,
|
||||
/*
|
||||
Whether this conversation is a commander, derived from ITS OWN cwd rather than from the screen asking.
|
||||
|
||||
The composer offers "exit and hand back, then re-arm" — the only fire behaviour a watcher wants — and
|
||||
decided whether to by looking at the route it was rendered on. So the same commander, opened from
|
||||
/chat instead of Command HQ, silently lost the control that is the whole point of it. A commander is a
|
||||
commander wherever it is rendered, and `detail.cwd` is the transcript's own directory, so this answer
|
||||
travels with the conversation.
|
||||
*/
|
||||
isCommander: isCommandersDir(who.email, detail.cwd),
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user