@sumicom/quicksave 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/ai/cardBuilder.d.ts +14 -3
  2. package/dist/ai/cardBuilder.d.ts.map +1 -1
  3. package/dist/ai/cardBuilder.js +219 -66
  4. package/dist/ai/cardBuilder.js.map +1 -1
  5. package/dist/ai/claudeCliProvider.d.ts +2 -0
  6. package/dist/ai/claudeCliProvider.d.ts.map +1 -1
  7. package/dist/ai/claudeCliProvider.js +81 -20
  8. package/dist/ai/claudeCliProvider.js.map +1 -1
  9. package/dist/ai/claudeCodeProvider.d.ts +18 -0
  10. package/dist/ai/claudeCodeProvider.d.ts.map +1 -0
  11. package/dist/ai/claudeCodeProvider.js +30 -0
  12. package/dist/ai/claudeCodeProvider.js.map +1 -0
  13. package/dist/ai/claudeSdkProvider.d.ts +2 -0
  14. package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
  15. package/dist/ai/claudeSdkProvider.js +13 -3
  16. package/dist/ai/claudeSdkProvider.js.map +1 -1
  17. package/dist/ai/codexMcpProvider.d.ts +15 -0
  18. package/dist/ai/codexMcpProvider.d.ts.map +1 -0
  19. package/dist/ai/codexMcpProvider.js +442 -0
  20. package/dist/ai/codexMcpProvider.js.map +1 -0
  21. package/dist/ai/codexSdkProvider.d.ts +35 -0
  22. package/dist/ai/codexSdkProvider.d.ts.map +1 -0
  23. package/dist/ai/codexSdkProvider.js +422 -0
  24. package/dist/ai/codexSdkProvider.js.map +1 -0
  25. package/dist/ai/debugLogger.d.ts +24 -0
  26. package/dist/ai/debugLogger.d.ts.map +1 -0
  27. package/dist/ai/debugLogger.js +55 -0
  28. package/dist/ai/debugLogger.js.map +1 -0
  29. package/dist/ai/provider.d.ts +4 -1
  30. package/dist/ai/provider.d.ts.map +1 -1
  31. package/dist/ai/sessionManager.d.ts +13 -8
  32. package/dist/ai/sessionManager.d.ts.map +1 -1
  33. package/dist/ai/sessionManager.js +148 -27
  34. package/dist/ai/sessionManager.js.map +1 -1
  35. package/dist/config.d.ts +1 -0
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +12 -0
  38. package/dist/config.js.map +1 -1
  39. package/dist/connection/connection.d.ts +1 -0
  40. package/dist/connection/connection.d.ts.map +1 -1
  41. package/dist/connection/connection.js +19 -1
  42. package/dist/connection/connection.js.map +1 -1
  43. package/dist/git/operations.d.ts +20 -0
  44. package/dist/git/operations.d.ts.map +1 -1
  45. package/dist/git/operations.js +52 -0
  46. package/dist/git/operations.js.map +1 -1
  47. package/dist/handlers/messageHandler.d.ts +16 -0
  48. package/dist/handlers/messageHandler.d.ts.map +1 -1
  49. package/dist/handlers/messageHandler.js +289 -19
  50. package/dist/handlers/messageHandler.js.map +1 -1
  51. package/dist/index.js +22 -2
  52. package/dist/index.js.map +1 -1
  53. package/dist/service/debugHttpServer.d.ts +27 -0
  54. package/dist/service/debugHttpServer.d.ts.map +1 -0
  55. package/dist/service/debugHttpServer.js +189 -0
  56. package/dist/service/debugHttpServer.js.map +1 -0
  57. package/dist/service/ipcClient.js +1 -1
  58. package/dist/service/run.d.ts.map +1 -1
  59. package/dist/service/run.js +21 -1
  60. package/dist/service/run.js.map +1 -1
  61. package/package.json +4 -2
  62. package/dist/ai/asyncQueue.test.d.ts +0 -2
  63. package/dist/ai/asyncQueue.test.d.ts.map +0 -1
  64. package/dist/ai/asyncQueue.test.js +0 -56
  65. package/dist/ai/asyncQueue.test.js.map +0 -1
  66. package/dist/ai/sessionStore.test.d.ts +0 -2
  67. package/dist/ai/sessionStore.test.d.ts.map +0 -1
  68. package/dist/ai/sessionStore.test.js +0 -99
  69. package/dist/ai/sessionStore.test.js.map +0 -1
  70. package/dist/connection/pubsub.test.d.ts +0 -2
  71. package/dist/connection/pubsub.test.d.ts.map +0 -1
  72. package/dist/connection/pubsub.test.js +0 -96
  73. package/dist/connection/pubsub.test.js.map +0 -1
  74. package/dist/git/operations.test.d.ts +0 -2
  75. package/dist/git/operations.test.d.ts.map +0 -1
  76. package/dist/git/operations.test.js +0 -300
  77. package/dist/git/operations.test.js.map +0 -1
  78. package/dist/handlers/messageHandler.test.d.ts +0 -2
  79. package/dist/handlers/messageHandler.test.d.ts.map +0 -1
  80. package/dist/handlers/messageHandler.test.js +0 -361
  81. package/dist/handlers/messageHandler.test.js.map +0 -1
  82. package/dist/service/ipc.test.d.ts +0 -2
  83. package/dist/service/ipc.test.d.ts.map +0 -1
  84. package/dist/service/ipc.test.js +0 -140
  85. package/dist/service/ipc.test.js.map +0 -1
  86. package/dist/service/singleton.test.d.ts +0 -2
  87. package/dist/service/singleton.test.d.ts.map +0 -1
  88. package/dist/service/singleton.test.js +0 -39
  89. package/dist/service/singleton.test.js.map +0 -1
@@ -0,0 +1,422 @@
1
+ import { Codex } from '@openai/codex-sdk';
2
+ // ── Mapping helpers ──
3
+ function mapApprovalPolicy(level) {
4
+ switch (level) {
5
+ case 'bypassPermissions': return 'never';
6
+ case 'acceptEdits': return 'on-request';
7
+ case 'plan':
8
+ case 'default':
9
+ default: return 'untrusted';
10
+ }
11
+ }
12
+ function mapSandboxMode(level, sandboxed) {
13
+ if (level === 'plan')
14
+ return 'read-only';
15
+ if (sandboxed)
16
+ return 'workspace-write';
17
+ return 'danger-full-access';
18
+ }
19
+ /**
20
+ * Consume all events from a Codex runStreamed() call and emit card events.
21
+ * Returns when the event stream is exhausted.
22
+ */
23
+ /** @internal Exported for testing. */
24
+ export async function consumeCodexStream(events, thread, ctx, signal) {
25
+ const { cb, callbacks, streamId } = ctx;
26
+ const emitCard = (event) => callbacks.emitCardEvent(event);
27
+ let textBuffer = '';
28
+ let bufferTimer = null;
29
+ const tracker = { lastAssistantText: '', lastReasoningText: '' };
30
+ let turnEndEmitted = false;
31
+ const flushText = () => {
32
+ if (textBuffer) {
33
+ emitCard(cb.assistantText(textBuffer));
34
+ textBuffer = '';
35
+ }
36
+ if (bufferTimer) {
37
+ clearTimeout(bufferTimer);
38
+ bufferTimer = null;
39
+ }
40
+ };
41
+ const bufferText = (text) => {
42
+ textBuffer += text;
43
+ if (!bufferTimer) {
44
+ bufferTimer = setTimeout(flushText, 150);
45
+ }
46
+ if (textBuffer.length > 2048) {
47
+ flushText();
48
+ }
49
+ };
50
+ const emitStreamEnd = (end) => {
51
+ if (turnEndEmitted)
52
+ return;
53
+ turnEndEmitted = true;
54
+ callbacks.emitStreamEnd(end);
55
+ };
56
+ try {
57
+ for await (const event of events) {
58
+ if (signal?.aborted)
59
+ break;
60
+ switch (event.type) {
61
+ case 'thread.started':
62
+ cb.updateSessionId(event.thread_id);
63
+ ctx.onThreadStarted?.(event.thread_id);
64
+ break;
65
+ case 'turn.started':
66
+ break;
67
+ case 'turn.completed': {
68
+ flushText();
69
+ const fin = cb.finalizeAssistantText();
70
+ if (fin)
71
+ emitCard(fin);
72
+ emitStreamEnd({
73
+ streamId,
74
+ sessionId: thread.id ?? '',
75
+ success: true,
76
+ tokenUsage: event.usage
77
+ ? { input: event.usage.input_tokens, output: event.usage.output_tokens }
78
+ : undefined,
79
+ });
80
+ break;
81
+ }
82
+ case 'turn.failed': {
83
+ flushText();
84
+ const fin = cb.finalizeAssistantText();
85
+ if (fin)
86
+ emitCard(fin);
87
+ emitStreamEnd({
88
+ streamId,
89
+ sessionId: thread.id ?? '',
90
+ success: false,
91
+ error: event.error.message,
92
+ });
93
+ break;
94
+ }
95
+ case 'item.started':
96
+ routeItemStarted(event.item, cb, emitCard, flushText, bufferText, tracker);
97
+ break;
98
+ case 'item.updated':
99
+ routeItemUpdated(event.item, cb, emitCard, bufferText, tracker);
100
+ break;
101
+ case 'item.completed':
102
+ flushText();
103
+ routeItemCompleted(event.item, cb, emitCard);
104
+ break;
105
+ case 'error':
106
+ emitCard(cb.systemMessage(event.message, 'error'));
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ finally {
112
+ if (bufferTimer)
113
+ clearTimeout(bufferTimer);
114
+ }
115
+ // If the stream ended without turn.completed/turn.failed, emit a success end
116
+ if (!turnEndEmitted) {
117
+ flushText();
118
+ const fin = cb.finalizeAssistantText();
119
+ if (fin)
120
+ emitCard(fin);
121
+ emitStreamEnd({
122
+ streamId,
123
+ sessionId: thread.id ?? '',
124
+ success: true,
125
+ });
126
+ }
127
+ }
128
+ function routeItemStarted(item, cb, emitCard, flushText, bufferText, tracker) {
129
+ switch (item.type) {
130
+ case 'reasoning':
131
+ tracker.lastReasoningText = item.text;
132
+ if (item.text)
133
+ emitCard(cb.thinkingBlock(item.text));
134
+ break;
135
+ case 'agent_message':
136
+ tracker.lastAssistantText = item.text;
137
+ if (item.text)
138
+ bufferText(item.text);
139
+ break;
140
+ case 'command_execution':
141
+ flushText();
142
+ emitCard(cb.toolUse('Bash', { command: item.command }, item.id));
143
+ break;
144
+ case 'file_change': {
145
+ flushText();
146
+ const paths = item.changes.map(c => c.path);
147
+ const kinds = item.changes.map(c => c.kind);
148
+ const toolName = kinds.every(k => k === 'add') ? 'Write' : 'Edit';
149
+ emitCard(cb.toolUse(toolName, { files: paths }, item.id));
150
+ break;
151
+ }
152
+ case 'mcp_tool_call':
153
+ flushText();
154
+ emitCard(cb.toolUse(`${item.server}:${item.tool}`, item.arguments ?? {}, item.id));
155
+ break;
156
+ case 'web_search':
157
+ flushText();
158
+ emitCard(cb.toolUse('WebSearch', { query: item.query }, item.id));
159
+ break;
160
+ case 'error':
161
+ emitCard(cb.systemMessage(item.message, 'error'));
162
+ break;
163
+ }
164
+ }
165
+ function routeItemUpdated(item, cb, emitCard, bufferText, tracker) {
166
+ switch (item.type) {
167
+ case 'agent_message': {
168
+ const delta = item.text.slice(tracker.lastAssistantText.length);
169
+ tracker.lastAssistantText = item.text;
170
+ if (delta)
171
+ bufferText(delta);
172
+ break;
173
+ }
174
+ case 'command_execution': {
175
+ const cardEvt = cb.toolResult(item.id, item.aggregated_output, item.status === 'failed');
176
+ if (cardEvt)
177
+ emitCard(cardEvt);
178
+ break;
179
+ }
180
+ case 'reasoning': {
181
+ const delta = item.text.slice(tracker.lastReasoningText.length);
182
+ tracker.lastReasoningText = item.text;
183
+ if (delta.trim())
184
+ emitCard(cb.thinkingBlock(delta));
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ function routeItemCompleted(item, cb, emitCard) {
190
+ switch (item.type) {
191
+ case 'agent_message': {
192
+ // Finalize streaming text
193
+ const fin = cb.finalizeAssistantText();
194
+ if (fin)
195
+ emitCard(fin);
196
+ break;
197
+ }
198
+ case 'command_execution': {
199
+ const resultText = item.aggregated_output
200
+ + (item.exit_code != null ? `\n[exit code: ${item.exit_code}]` : '');
201
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
202
+ if (cardEvt)
203
+ emitCard(cardEvt);
204
+ break;
205
+ }
206
+ case 'file_change': {
207
+ const resultText = item.changes.map(c => `${c.kind}: ${c.path}`).join('\n');
208
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
209
+ if (cardEvt)
210
+ emitCard(cardEvt);
211
+ break;
212
+ }
213
+ case 'mcp_tool_call': {
214
+ let resultText = '';
215
+ if (item.error) {
216
+ resultText = `Error: ${item.error.message}`;
217
+ }
218
+ else if (item.result) {
219
+ resultText = item.result.content
220
+ ?.map((block) => block.text ?? JSON.stringify(block))
221
+ .join('\n') ?? '';
222
+ }
223
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
224
+ if (cardEvt)
225
+ emitCard(cardEvt);
226
+ break;
227
+ }
228
+ case 'web_search': {
229
+ const cardEvt = cb.toolResult(item.id, `Search: ${item.query}`, false);
230
+ if (cardEvt)
231
+ emitCard(cardEvt);
232
+ break;
233
+ }
234
+ }
235
+ }
236
+ // ============================================================================
237
+ // CodexSdkSession — wraps a Codex Thread for the ProviderSession interface
238
+ // ============================================================================
239
+ class CodexSdkSession {
240
+ pendingStreamIds = [];
241
+ thread;
242
+ abortController = null;
243
+ cardBuilder;
244
+ callbacks;
245
+ closed = false;
246
+ constructor(args) {
247
+ this.thread = args.thread;
248
+ this.cardBuilder = args.cardBuilder;
249
+ this.callbacks = args.callbacks;
250
+ }
251
+ get alive() {
252
+ return !this.closed;
253
+ }
254
+ sendUserMessage(prompt) {
255
+ if (this.closed)
256
+ return;
257
+ const streamId = this.pendingStreamIds.shift() ?? `codex-stream-${Date.now()}`;
258
+ void this.runTurn(prompt, streamId);
259
+ }
260
+ interrupt() {
261
+ if (this.abortController) {
262
+ this.abortController.abort();
263
+ this.abortController = null;
264
+ }
265
+ }
266
+ kill() {
267
+ this.closed = true;
268
+ this.interrupt();
269
+ }
270
+ /** Expose abort controller and streaming state for the initial turn (set from outside). */
271
+ setAbortController(ac) { this.abortController = ac; }
272
+ clearAbortController() { this.abortController = null; }
273
+ async runTurn(prompt, streamId) {
274
+ if (this.closed)
275
+ return;
276
+ this.abortController = new AbortController();
277
+ const cb = this.cardBuilder;
278
+ cb.startNewTurn(streamId);
279
+ cb.userMessage(prompt);
280
+ try {
281
+ const streamed = await this.thread.runStreamed(prompt, {
282
+ signal: this.abortController.signal,
283
+ });
284
+ await consumeCodexStream(streamed.events, this.thread, {
285
+ cb,
286
+ callbacks: this.callbacks,
287
+ streamId,
288
+ }, this.abortController.signal);
289
+ }
290
+ catch (error) {
291
+ const aborted = this.abortController?.signal.aborted;
292
+ const sessionId = this.thread.id ?? '';
293
+ const emitCard = (e) => this.callbacks.emitCardEvent(e);
294
+ if (aborted) {
295
+ emitCard(cb.systemMessage('User interrupted'));
296
+ this.callbacks.emitStreamEnd({
297
+ streamId, sessionId, success: false, interrupted: true,
298
+ });
299
+ }
300
+ else {
301
+ const msg = error instanceof Error ? error.message : 'Codex turn failed';
302
+ console.error(`[codex-sdk] turn error:`, msg);
303
+ this.callbacks.emitStreamEnd({
304
+ streamId, sessionId, success: false, error: msg,
305
+ });
306
+ }
307
+ }
308
+ finally {
309
+ this.abortController = null;
310
+ await cb.persistCards().catch((err) => {
311
+ console.error('[codex-sdk] failed to persist cards:', err);
312
+ });
313
+ cb.clearCards();
314
+ }
315
+ }
316
+ }
317
+ // ============================================================================
318
+ // CodexSdkProvider — implements CodingAgentProvider via @openai/codex-sdk
319
+ // ============================================================================
320
+ export class CodexSdkProvider {
321
+ id = 'codex';
322
+ historyMode = 'memory';
323
+ async startSession(opts, cardBuilder, callbacks) {
324
+ const codex = new Codex({ apiKey: process.env.OPENAI_API_KEY });
325
+ const threadOptions = buildThreadOptions(opts);
326
+ const thread = codex.startThread(threadOptions);
327
+ const session = new CodexSdkSession({
328
+ thread,
329
+ cardBuilder,
330
+ callbacks,
331
+ });
332
+ // Run the first turn, waiting for thread.started to get the sessionId
333
+ const sessionId = await this.runFirstTurn(thread, opts.prompt, opts.streamId, session, cardBuilder, callbacks);
334
+ return { sessionId, session };
335
+ }
336
+ async resumeSession(opts, cardBuilder, callbacks) {
337
+ const codex = new Codex({ apiKey: process.env.OPENAI_API_KEY });
338
+ const threadOptions = buildThreadOptions(opts);
339
+ const thread = codex.resumeThread(opts.sessionId, threadOptions);
340
+ cardBuilder.updateSessionId(opts.sessionId);
341
+ const session = new CodexSdkSession({
342
+ thread,
343
+ cardBuilder,
344
+ callbacks,
345
+ });
346
+ // Already have sessionId — fire and forget
347
+ session.sendUserMessage(opts.prompt);
348
+ return { sessionId: opts.sessionId, session };
349
+ }
350
+ /**
351
+ * Run the first turn, awaiting `thread.started` for the sessionId.
352
+ * The rest of the event stream processes in the background.
353
+ */
354
+ runFirstTurn(thread, prompt, streamId, session, cardBuilder, callbacks) {
355
+ return new Promise((resolve, reject) => {
356
+ const timeout = setTimeout(() => {
357
+ reject(new Error('Timeout waiting for Codex thread.started event'));
358
+ }, 30_000);
359
+ let resolved = false;
360
+ const ac = new AbortController();
361
+ session.setAbortController(ac);
362
+ cardBuilder.startNewTurn(streamId);
363
+ cardBuilder.userMessage(prompt);
364
+ (async () => {
365
+ try {
366
+ const streamed = await thread.runStreamed(prompt, { signal: ac.signal });
367
+ await consumeCodexStream(streamed.events, thread, {
368
+ cb: cardBuilder,
369
+ callbacks,
370
+ streamId,
371
+ onThreadStarted: (threadId) => {
372
+ if (!resolved) {
373
+ resolved = true;
374
+ clearTimeout(timeout);
375
+ resolve(threadId);
376
+ }
377
+ },
378
+ }, ac.signal);
379
+ }
380
+ catch (error) {
381
+ if (!resolved) {
382
+ clearTimeout(timeout);
383
+ reject(error);
384
+ return;
385
+ }
386
+ // Already resolved — emit error to the stream
387
+ const msg = error instanceof Error ? error.message : 'Codex turn failed';
388
+ console.error(`[codex-sdk] initial turn error:`, msg);
389
+ callbacks.emitStreamEnd({
390
+ streamId,
391
+ sessionId: thread.id ?? '',
392
+ success: false,
393
+ error: msg,
394
+ });
395
+ }
396
+ finally {
397
+ session.clearAbortController();
398
+ await cardBuilder.persistCards().catch((err) => {
399
+ console.error('[codex-sdk] failed to persist cards:', err);
400
+ });
401
+ cardBuilder.clearCards();
402
+ // If thread.started never arrived but thread.id was set by the SDK
403
+ if (!resolved) {
404
+ clearTimeout(timeout);
405
+ resolve(thread.id ?? `codex-${Date.now()}`);
406
+ }
407
+ }
408
+ })();
409
+ });
410
+ }
411
+ }
412
+ function buildThreadOptions(opts) {
413
+ const model = 'model' in opts ? opts.model : undefined;
414
+ return {
415
+ model: model && !model.startsWith('claude-') ? model : undefined,
416
+ workingDirectory: opts.cwd,
417
+ sandboxMode: mapSandboxMode(opts.permissionLevel, opts.sandboxed),
418
+ approvalPolicy: mapApprovalPolicy(opts.permissionLevel),
419
+ skipGitRepoCheck: true,
420
+ };
421
+ }
422
+ //# sourceMappingURL=codexSdkProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSdkProvider.js","sourceRoot":"","sources":["../../src/ai/codexSdkProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Per-session debug logger that writes JSONL files under ~/.quicksave/debug/.
3
+ * Active when QUICKSAVE_DEBUG=1 or in dev mode (same gate as debug CLI commands).
4
+ *
5
+ * Files per session:
6
+ * - <sessionId>-raw.jsonl — every raw message from the CLI process
7
+ * - <sessionId>-cards.jsonl — every CardEvent pushed to the PWA
8
+ * - <sessionId>-snapshots.jsonl — card builder state snapshots (on clearCards)
9
+ */
10
+ export declare class DebugLogger {
11
+ private static enabled;
12
+ private static dirReady;
13
+ private sessionId;
14
+ constructor(sessionId: string);
15
+ updateSessionId(sessionId: string): void;
16
+ /** Log a raw message received from the CLI stdout. */
17
+ logRawEvent(msg: unknown): Promise<void>;
18
+ /** Log a CardEvent being emitted to the PWA. */
19
+ logCardEvent(event: unknown): Promise<void>;
20
+ /** Log a card builder snapshot (all cards at time of clear). */
21
+ logCardBuilderSnapshot(cards: unknown[]): Promise<void>;
22
+ private append;
23
+ }
24
+ //# sourceMappingURL=debugLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debugLogger.d.ts","sourceRoot":"","sources":["../../src/ai/debugLogger.ts"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAoB;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAEhC,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAI7B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxC,sDAAsD;IAChD,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,gDAAgD;IAC1C,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,gEAAgE;IAC1D,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAI/C,MAAM;CAerB"}
@@ -0,0 +1,55 @@
1
+ import { appendFile, mkdir } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ import { isDebugEnabled } from '../service/types.js';
5
+ const DEBUG_DIR = join(homedir(), '.quicksave', 'debug');
6
+ /**
7
+ * Per-session debug logger that writes JSONL files under ~/.quicksave/debug/.
8
+ * Active when QUICKSAVE_DEBUG=1 or in dev mode (same gate as debug CLI commands).
9
+ *
10
+ * Files per session:
11
+ * - <sessionId>-raw.jsonl — every raw message from the CLI process
12
+ * - <sessionId>-cards.jsonl — every CardEvent pushed to the PWA
13
+ * - <sessionId>-snapshots.jsonl — card builder state snapshots (on clearCards)
14
+ */
15
+ export class DebugLogger {
16
+ static enabled = isDebugEnabled();
17
+ static dirReady = false;
18
+ sessionId;
19
+ constructor(sessionId) {
20
+ this.sessionId = sessionId;
21
+ }
22
+ updateSessionId(sessionId) {
23
+ this.sessionId = sessionId;
24
+ }
25
+ /** Log a raw message received from the CLI stdout. */
26
+ async logRawEvent(msg) {
27
+ await this.append('raw', msg);
28
+ }
29
+ /** Log a CardEvent being emitted to the PWA. */
30
+ async logCardEvent(event) {
31
+ await this.append('cards', event);
32
+ }
33
+ /** Log a card builder snapshot (all cards at time of clear). */
34
+ async logCardBuilderSnapshot(cards) {
35
+ await this.append('snapshots', { timestamp: Date.now(), cards });
36
+ }
37
+ async append(suffix, data) {
38
+ if (!DebugLogger.enabled)
39
+ return;
40
+ try {
41
+ if (!DebugLogger.dirReady) {
42
+ await mkdir(DEBUG_DIR, { recursive: true });
43
+ DebugLogger.dirReady = true;
44
+ }
45
+ const shortId = this.sessionId.length > 12 ? this.sessionId.slice(0, 12) : this.sessionId;
46
+ const filePath = join(DEBUG_DIR, `${shortId}-${suffix}.jsonl`);
47
+ const line = JSON.stringify(data) + '\n';
48
+ await appendFile(filePath, line);
49
+ }
50
+ catch {
51
+ // Debug logging must never break the main flow
52
+ }
53
+ }
54
+ }
55
+ //# sourceMappingURL=debugLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debugLogger.js","sourceRoot":"","sources":["../../src/ai/debugLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAExB,SAAS,CAAS;IAE1B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,WAAW,CAAC,GAAY;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,YAAY,CAAC,KAAc;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,sBAAsB,CAAC,KAAgB;QAC3C,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,IAAa;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QACjC,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,IAAI,MAAM,QAAQ,CAAC,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACzC,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC"}
@@ -1,6 +1,7 @@
1
- import type { CardEvent, CardStreamEnd } from '@sumicom/quicksave-shared';
1
+ import type { AgentId, CardEvent, CardStreamEnd } from '@sumicom/quicksave-shared';
2
2
  import type { StreamCardBuilder } from './cardBuilder.js';
3
3
  export type PermissionLevel = 'bypassPermissions' | 'acceptEdits' | 'default' | 'plan';
4
+ export type ProviderHistoryMode = 'claude-jsonl' | 'memory';
4
5
  /** Represents a running provider session. */
5
6
  export interface ProviderSession {
6
7
  sendUserMessage(prompt: string): void;
@@ -42,6 +43,8 @@ export interface ResumeSessionOpts {
42
43
  systemPrompt?: string;
43
44
  }
44
45
  export interface CodingAgentProvider {
46
+ readonly id: AgentId;
47
+ readonly historyMode: ProviderHistoryMode;
45
48
  startSession(opts: StartSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
46
49
  sessionId: string;
47
50
  session: ProviderSession;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvF,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,SAAS,IAAI,IAAI,CAAC;IAClB,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC/E,OAAO,CAAC;QACT,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CACV,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAE5D,aAAa,CACX,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7D"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AACvF,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE5D,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,SAAS,IAAI,IAAI,CAAC;IAClB,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC/E,OAAO,CAAC;QACT,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAE1C,YAAY,CACV,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAE5D,aAAa,CACX,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CAC7D"}
@@ -1,9 +1,10 @@
1
1
  import { EventEmitter } from 'events';
2
- import type { ClaudeSessionSummary, ClaudeUserInputRequestPayload, ClaudeUserInputResponsePayload, ClaudePreferences, ConfigValue, CardHistoryResponse } from '@sumicom/quicksave-shared';
2
+ import type { AgentId, ClaudeSessionSummary, ClaudeUserInputRequestPayload, ClaudeUserInputResponsePayload, ClaudePreferences, ConfigValue, CardHistoryResponse } from '@sumicom/quicksave-shared';
3
3
  import { StreamCardBuilder } from './cardBuilder.js';
4
4
  import type { PermissionLevel, ProviderSession, ProviderCallbacks, CodingAgentProvider } from './provider.js';
5
5
  export interface ManagedSession {
6
6
  sessionId: string;
7
+ agentId: AgentId;
7
8
  providerSession: ProviderSession | null;
8
9
  cwd: string;
9
10
  streaming: boolean;
@@ -13,6 +14,7 @@ export interface ManagedSession {
13
14
  }
14
15
  export declare class SessionManager extends EventEmitter {
15
16
  private sessions;
17
+ private sessionAgents;
16
18
  private sessionPermissions;
17
19
  private sessionSandboxed;
18
20
  private sessionConfigs;
@@ -20,14 +22,13 @@ export declare class SessionManager extends EventEmitter {
20
22
  private requestCounter;
21
23
  private runtimeAllowPatterns;
22
24
  private preferences;
23
- private provider;
24
- /** SDK-based provider (alternative to CLI). Selected by QUICKSAVE_PROVIDER=sdk env var. */
25
- private sdkProvider;
25
+ private providers;
26
+ private defaultAgentId;
26
27
  /** Guards against concurrent cold resumes. Queues prompts arriving while a spawn is in flight. */
27
28
  private coldResumeInFlight;
28
- constructor(provider: CodingAgentProvider, sdkProvider?: CodingAgentProvider);
29
- /** Select provider based on QUICKSAVE_PROVIDER env var. Default: CLI. */
30
- private getActiveProvider;
29
+ constructor(providers: CodingAgentProvider[], defaultAgentId?: AgentId);
30
+ private getProvider;
31
+ private resolveAgentId;
31
32
  initPreferences(): Promise<void>;
32
33
  getPreferences(): ClaudePreferences;
33
34
  setPreferences(prefs: Partial<ClaudePreferences>): ClaudePreferences;
@@ -37,6 +38,7 @@ export declare class SessionManager extends EventEmitter {
37
38
  prompt: string;
38
39
  cwd: string;
39
40
  streamId: string;
41
+ agent?: AgentId;
40
42
  allowedTools?: string[];
41
43
  systemPrompt?: string;
42
44
  model?: string;
@@ -48,6 +50,7 @@ export declare class SessionManager extends EventEmitter {
48
50
  prompt: string;
49
51
  cwd: string;
50
52
  streamId: string;
53
+ agent?: AgentId;
51
54
  }): Promise<string>;
52
55
  cancelSession(sessionId: string): Promise<boolean>;
53
56
  closeSession(sessionId: string): boolean;
@@ -65,6 +68,7 @@ export declare class SessionManager extends EventEmitter {
65
68
  isStreaming(sessionId: string): boolean;
66
69
  isOpen(sessionId: string): boolean;
67
70
  getSessionCwd(sessionId: string): string | undefined;
71
+ getSessionAgent(sessionId: string, cwd?: string): AgentId;
68
72
  getActiveSessionCount(): number;
69
73
  getCardBuilder(sessionId: string): StreamCardBuilder | null;
70
74
  listAvailableSessions(cwd: string): Promise<ClaudeSessionSummary[]>;
@@ -88,12 +92,13 @@ export declare class SessionManager extends EventEmitter {
88
92
  }[];
89
93
  };
90
94
  cleanup(): void;
91
- makeCallbacks(_initialSessionId: string): ProviderCallbacks;
95
+ makeCallbacks(agentId: AgentId): ProviderCallbacks;
92
96
  private handlePermissionRequest;
93
97
  private shouldAutoApprove;
94
98
  /** Update session title (triggered by SetTitle MCP tool). */
95
99
  private updateSessionTitle;
96
100
  private emitSessionUpdate;
101
+ private persistRegistryField;
97
102
  private persistAllowPattern;
98
103
  private waitForUserInput;
99
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"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"}