chat: carry claude's own session uuid on the result event
The sidecar knew which transcript file a turn had landed in and kept it to itself — setClaudeSession fed --resume and nothing else. A session officer started was therefore unaddressable from the platform side. Put it on the result event so it crosses the wire. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -115,6 +115,12 @@ export type ServerMessage =
|
|||||||
type: 'result';
|
type: 'result';
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
cost: MessageCost;
|
cost: MessageCost;
|
||||||
|
// Claude's OWN session uuid — the name of the transcript file under ~/.claude/projects/<slug>/.
|
||||||
|
// Distinct from `sessionId`, which is the key officer made up. Until this crossed the wire the
|
||||||
|
// platform had no way to address a session it had started: the mapping was captured inside the
|
||||||
|
// sidecar (claude-manager's setClaudeSession) and never left it. Absent if the harness didn't
|
||||||
|
// report one.
|
||||||
|
claudeSessionId?: string;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
type: 'sync:messages';
|
type: 'sync:messages';
|
||||||
@@ -177,6 +183,7 @@ export type ChatEvent =
|
|||||||
| {
|
| {
|
||||||
type: 'result';
|
type: 'result';
|
||||||
cost: MessageCost;
|
cost: MessageCost;
|
||||||
|
claudeSessionId?: string;
|
||||||
}
|
}
|
||||||
| { type: 'error'; message: string }
|
| { type: 'error'; message: string }
|
||||||
| { type: 'stopped' }
|
| { type: 'stopped' }
|
||||||
|
|||||||
@@ -115,7 +115,9 @@ function handleResult(
|
|||||||
callbacks.onSessionId(sessionId);
|
callbacks.onSessionId(sessionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
callbacks.onEvent({ type: 'result', cost });
|
// Carried on the event as well as into sidecar-local state: the callback only feeds `--resume` here,
|
||||||
|
// so without this the platform never learns which transcript file a session it started ended up in.
|
||||||
|
callbacks.onEvent({ type: 'result', cost, claudeSessionId: sessionId });
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleSystem(msg: Record<string, unknown>, callbacks: StreamParserCallbacks): void {
|
function handleSystem(msg: Record<string, unknown>, callbacks: StreamParserCallbacks): void {
|
||||||
|
|||||||
@@ -67,7 +67,13 @@ export function createTurnStream(sessionId: string): TurnStream {
|
|||||||
];
|
];
|
||||||
|
|
||||||
case 'result':
|
case 'result':
|
||||||
return [...flush(), { msg: { type: 'result', sessionId, cost: event.cost }, durable: true }];
|
return [
|
||||||
|
...flush(),
|
||||||
|
{
|
||||||
|
msg: { type: 'result', sessionId, cost: event.cost, claudeSessionId: event.claudeSessionId },
|
||||||
|
durable: true,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
case 'error':
|
case 'error':
|
||||||
return [{ msg: { type: 'error', message: event.message }, durable: true }];
|
return [{ msg: { type: 'error', message: event.message }, durable: true }];
|
||||||
|
|||||||
Reference in New Issue
Block a user