a commander opens in /chat, where you were already reading
Clicking one in the Live list navigated to /command-hq — out of the screen, into a different route with a different layout, having lost your place in the list you were scanning. I argued for that in the commit before this one: /chat renders the transcript without the category, cost, watcher state or the disarm control. It loses to a simpler argument. A commander IS a chat — same harness, same transcript, resumable by the same route — and being thrown out of the page you are reading costs more than metadata you did not ask for. Command HQ is where you go to MANAGE a commander, which is a separate errand from reading what it just said. Verified rather than assumed, because a commander's cwd is not one of /chat's directory groups: the default-group load misses, and GET /chat/sessions/:id falls through to the by-id scan, which returns all six messages and the real cwd with it. So the detail panel resumes it with no cwd hint at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,6 @@ import { useChatPwds, useClaudeSessions } from 'state/useClaudeSessions';
|
||||
import type { LiveSession } from 'state/useLiveSessions';
|
||||
import { useLiveSessions } from 'state/useLiveSessions';
|
||||
import { useSelectedChatSession } from '../../channels';
|
||||
import { commandHqSessionPath } from '../CommandHQ/command-hq-routes';
|
||||
import { chatNewPath, chatSessionPath, cwdFromSplat } from './chat-routes';
|
||||
import { DirPickerModal } from './DirPickerModal';
|
||||
import { LiveMarker, SessionRow, shortenPath, useScrollActiveIntoView, useSessionRowActions } from './SessionRow';
|
||||
@@ -368,16 +367,17 @@ const LiveView = ({ activeId, home }: { activeId?: string; home: string | null }
|
||||
*/
|
||||
const LiveRow = ({ session, activeId, home }: { session: LiveSession; activeId?: string; home: string | null }) => {
|
||||
const transcriptId = session.claudeSessionId;
|
||||
// A commander opens in Command HQ. `/chat/<id>` would render the same transcript with none of what makes
|
||||
// it a commander legible — no category, no cost, no watcher state, and no way to disarm it.
|
||||
const to = transcriptId
|
||||
? session.isCommander
|
||||
? commandHqSessionPath(transcriptId, undefined)
|
||||
: chatSessionPath(transcriptId)
|
||||
: undefined;
|
||||
// A commander opens HERE, in /chat, like any other row.
|
||||
//
|
||||
// This briefly linked to Command HQ, on the argument that /chat renders the transcript without the
|
||||
// category, cost, watcher state or the disarm control. That argument loses to a simpler one: sending
|
||||
// somebody out of the screen they are reading, into a different route with a different layout, is a
|
||||
// bigger loss than the metadata they did not ask for. A commander IS a chat — the same harness, the same
|
||||
// transcript, resumable by the same route. Command HQ is where you go to MANAGE one, which is a separate
|
||||
// errand from reading what it just said.
|
||||
return (
|
||||
<DataRow
|
||||
to={to}
|
||||
to={transcriptId ? chatSessionPath(transcriptId) : undefined}
|
||||
title={session.title ?? 'Starting…'}
|
||||
selected={!!transcriptId && transcriptId === activeId}
|
||||
meta={[
|
||||
|
||||
Reference in New Issue
Block a user