feat(electrobun): session continuity — Claude JSONL listing, resume/continue sidecar support, session picker UI
This commit is contained in:
parent
0e217b9dae
commit
485abb4774
9 changed files with 626 additions and 4 deletions
|
|
@ -41,7 +41,10 @@ interface QueryMessage {
|
|||
cwd?: string;
|
||||
maxTurns?: number;
|
||||
maxBudgetUsd?: number;
|
||||
/** @deprecated Use resumeMode='resume' + resumeSessionId instead. */
|
||||
resumeSessionId?: string;
|
||||
/** Session continuity: 'new' (default), 'continue' (most recent), 'resume' (specific). */
|
||||
resumeMode?: 'new' | 'continue' | 'resume';
|
||||
permissionMode?: string;
|
||||
settingSources?: string[];
|
||||
systemPrompt?: string;
|
||||
|
|
@ -74,7 +77,7 @@ async function handleMessage(msg: Record<string, unknown>) {
|
|||
}
|
||||
|
||||
async function handleQuery(msg: QueryMessage) {
|
||||
const { sessionId, prompt, cwd, maxTurns, maxBudgetUsd, resumeSessionId, permissionMode, settingSources, systemPrompt, model, claudeConfigDir, additionalDirectories, worktreeName, extraEnv } = msg;
|
||||
const { sessionId, prompt, cwd, maxTurns, maxBudgetUsd, resumeSessionId, resumeMode, permissionMode, settingSources, systemPrompt, model, claudeConfigDir, additionalDirectories, worktreeName, extraEnv } = msg;
|
||||
|
||||
if (sessions.has(sessionId)) {
|
||||
send({ type: 'error', sessionId, message: 'Session already running' });
|
||||
|
|
@ -112,6 +115,20 @@ async function handleQuery(msg: QueryMessage) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Build resume/continue options based on resumeMode
|
||||
let resumeOpt: string | undefined;
|
||||
let continueOpt: boolean | undefined;
|
||||
if (resumeMode === 'continue') {
|
||||
continueOpt = true;
|
||||
log(`Session ${sessionId}: continuing most recent session`);
|
||||
} else if (resumeMode === 'resume' && resumeSessionId) {
|
||||
resumeOpt = resumeSessionId;
|
||||
log(`Session ${sessionId}: resuming SDK session ${resumeSessionId}`);
|
||||
} else if (resumeSessionId && !resumeMode) {
|
||||
// Legacy: direct resumeSessionId without resumeMode
|
||||
resumeOpt = resumeSessionId;
|
||||
}
|
||||
|
||||
const q = query({
|
||||
prompt,
|
||||
options: {
|
||||
|
|
@ -121,7 +138,8 @@ async function handleQuery(msg: QueryMessage) {
|
|||
env: cleanEnv,
|
||||
maxTurns: maxTurns ?? undefined,
|
||||
maxBudgetUsd: maxBudgetUsd ?? undefined,
|
||||
resume: resumeSessionId ?? undefined,
|
||||
resume: resumeOpt,
|
||||
continue: continueOpt,
|
||||
allowedTools: [
|
||||
'Bash', 'Read', 'Write', 'Edit', 'Glob', 'Grep',
|
||||
'WebSearch', 'WebFetch', 'TodoWrite', 'NotebookEdit',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue