diff --git a/src/workspaces/officerdev/src/apps/ChatHistory/ChatDetailPanel.tsx b/src/workspaces/officerdev/src/apps/ChatHistory/ChatDetailPanel.tsx index 791257fc..105a447b 100644 --- a/src/workspaces/officerdev/src/apps/ChatHistory/ChatDetailPanel.tsx +++ b/src/workspaces/officerdev/src/apps/ChatHistory/ChatDetailPanel.tsx @@ -123,6 +123,15 @@ function DetailBar({ sessionTitle, cwd, partCount, isConnected, isGenerating, on } type NewChatProps = { + /** + * The harness that owns this conversation, as `harness/model` — e.g. `opencode/big-pickle`. + * + * Load-bearing on resume, not cosmetic. The server routes by model: anything starting `claude-code` + * goes to the Claude sidecar, everything else to OpenCode. Send nothing and it falls back to the + * user's default, which is how a `ses_…` id ended up being handed to `claude --resume` — a + * wrong-harness dispatch rather than a degradation. + */ + model?: string | null; resumeSummary?: string; resumeSessionId?: string; initialMessages?: ChatMessage[]; @@ -191,7 +200,10 @@ function NewChat(props: NewChatProps) { { initialMessages={selected.initialMessages} total={selected.total} initialOffset={selected.initialOffset} + model={selected.model} sessionCwd={selected.cwd} sessionTitle={title} partCount={selected.partCount}