@sumicom/quicksave 0.6.0 → 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 (122) hide show
  1. package/dist/ai/asyncQueue.d.ts +7 -6
  2. package/dist/ai/asyncQueue.d.ts.map +1 -1
  3. package/dist/ai/asyncQueue.js +31 -21
  4. package/dist/ai/asyncQueue.js.map +1 -1
  5. package/dist/ai/cardBuilder.d.ts +22 -2
  6. package/dist/ai/cardBuilder.d.ts.map +1 -1
  7. package/dist/ai/cardBuilder.js +275 -30
  8. package/dist/ai/cardBuilder.js.map +1 -1
  9. package/dist/ai/claudeCliProvider.d.ts +21 -0
  10. package/dist/ai/claudeCliProvider.d.ts.map +1 -0
  11. package/dist/ai/claudeCliProvider.js +527 -0
  12. package/dist/ai/claudeCliProvider.js.map +1 -0
  13. package/dist/ai/claudeCodeProvider.d.ts +18 -0
  14. package/dist/ai/claudeCodeProvider.d.ts.map +1 -0
  15. package/dist/ai/claudeCodeProvider.js +30 -0
  16. package/dist/ai/claudeCodeProvider.js.map +1 -0
  17. package/dist/ai/claudeSdkProvider.d.ts +20 -0
  18. package/dist/ai/claudeSdkProvider.d.ts.map +1 -0
  19. package/dist/ai/claudeSdkProvider.js +428 -0
  20. package/dist/ai/claudeSdkProvider.js.map +1 -0
  21. package/dist/ai/codexMcpProvider.d.ts +15 -0
  22. package/dist/ai/codexMcpProvider.d.ts.map +1 -0
  23. package/dist/ai/codexMcpProvider.js +442 -0
  24. package/dist/ai/codexMcpProvider.js.map +1 -0
  25. package/dist/ai/codexSdkProvider.d.ts +35 -0
  26. package/dist/ai/codexSdkProvider.d.ts.map +1 -0
  27. package/dist/ai/codexSdkProvider.js +422 -0
  28. package/dist/ai/codexSdkProvider.js.map +1 -0
  29. package/dist/ai/commitSummary.d.ts +4 -0
  30. package/dist/ai/commitSummary.d.ts.map +1 -1
  31. package/dist/ai/commitSummary.js +80 -40
  32. package/dist/ai/commitSummary.js.map +1 -1
  33. package/dist/ai/debugLogger.d.ts +24 -0
  34. package/dist/ai/debugLogger.d.ts.map +1 -0
  35. package/dist/ai/debugLogger.js +55 -0
  36. package/dist/ai/debugLogger.js.map +1 -0
  37. package/dist/ai/provider.d.ts +57 -0
  38. package/dist/ai/provider.d.ts.map +1 -0
  39. package/dist/ai/provider.js +2 -0
  40. package/dist/ai/provider.js.map +1 -0
  41. package/dist/ai/sandboxMcp.d.ts +12 -0
  42. package/dist/ai/sandboxMcp.d.ts.map +1 -0
  43. package/dist/ai/sandboxMcp.js +12 -0
  44. package/dist/ai/sandboxMcp.js.map +1 -0
  45. package/dist/ai/sandboxMcpStdio.d.ts +16 -0
  46. package/dist/ai/sandboxMcpStdio.d.ts.map +1 -0
  47. package/dist/ai/sandboxMcpStdio.js +127 -0
  48. package/dist/ai/sandboxMcpStdio.js.map +1 -0
  49. package/dist/ai/sessionManager.d.ts +105 -0
  50. package/dist/ai/sessionManager.d.ts.map +1 -0
  51. package/dist/ai/sessionManager.js +716 -0
  52. package/dist/ai/sessionManager.js.map +1 -0
  53. package/dist/ai/sessionRegistry.d.ts +28 -0
  54. package/dist/ai/sessionRegistry.d.ts.map +1 -0
  55. package/dist/ai/sessionRegistry.js +148 -0
  56. package/dist/ai/sessionRegistry.js.map +1 -0
  57. package/dist/config.d.ts +1 -0
  58. package/dist/config.d.ts.map +1 -1
  59. package/dist/config.js +12 -0
  60. package/dist/config.js.map +1 -1
  61. package/dist/connection/connection.d.ts +1 -0
  62. package/dist/connection/connection.d.ts.map +1 -1
  63. package/dist/connection/connection.js +19 -1
  64. package/dist/connection/connection.js.map +1 -1
  65. package/dist/git/operations.d.ts +26 -1
  66. package/dist/git/operations.d.ts.map +1 -1
  67. package/dist/git/operations.js +83 -2
  68. package/dist/git/operations.js.map +1 -1
  69. package/dist/handlers/messageHandler.d.ts +24 -3
  70. package/dist/handlers/messageHandler.d.ts.map +1 -1
  71. package/dist/handlers/messageHandler.js +378 -24
  72. package/dist/handlers/messageHandler.js.map +1 -1
  73. package/dist/index.js +23 -40
  74. package/dist/index.js.map +1 -1
  75. package/dist/service/debugHttpServer.d.ts +27 -0
  76. package/dist/service/debugHttpServer.d.ts.map +1 -0
  77. package/dist/service/debugHttpServer.js +189 -0
  78. package/dist/service/debugHttpServer.js.map +1 -0
  79. package/dist/service/ensureDaemon.d.ts.map +1 -1
  80. package/dist/service/ensureDaemon.js +15 -2
  81. package/dist/service/ensureDaemon.js.map +1 -1
  82. package/dist/service/ipcClient.js +1 -1
  83. package/dist/service/run.d.ts.map +1 -1
  84. package/dist/service/run.js +42 -15
  85. package/dist/service/run.js.map +1 -1
  86. package/dist/service/singleton.d.ts +4 -0
  87. package/dist/service/singleton.d.ts.map +1 -1
  88. package/dist/service/singleton.js +28 -2
  89. package/dist/service/singleton.js.map +1 -1
  90. package/package.json +7 -3
  91. package/dist/ai/asyncQueue.test.d.ts +0 -2
  92. package/dist/ai/asyncQueue.test.d.ts.map +0 -1
  93. package/dist/ai/asyncQueue.test.js +0 -56
  94. package/dist/ai/asyncQueue.test.js.map +0 -1
  95. package/dist/ai/claudeCodeService.d.ts +0 -122
  96. package/dist/ai/claudeCodeService.d.ts.map +0 -1
  97. package/dist/ai/claudeCodeService.js +0 -869
  98. package/dist/ai/claudeCodeService.js.map +0 -1
  99. package/dist/ai/sessionStore.test.d.ts +0 -2
  100. package/dist/ai/sessionStore.test.d.ts.map +0 -1
  101. package/dist/ai/sessionStore.test.js +0 -99
  102. package/dist/ai/sessionStore.test.js.map +0 -1
  103. package/dist/connection/pubsub.test.d.ts +0 -2
  104. package/dist/connection/pubsub.test.d.ts.map +0 -1
  105. package/dist/connection/pubsub.test.js +0 -96
  106. package/dist/connection/pubsub.test.js.map +0 -1
  107. package/dist/git/operations.test.d.ts +0 -2
  108. package/dist/git/operations.test.d.ts.map +0 -1
  109. package/dist/git/operations.test.js +0 -300
  110. package/dist/git/operations.test.js.map +0 -1
  111. package/dist/handlers/messageHandler.test.d.ts +0 -2
  112. package/dist/handlers/messageHandler.test.d.ts.map +0 -1
  113. package/dist/handlers/messageHandler.test.js +0 -361
  114. package/dist/handlers/messageHandler.test.js.map +0 -1
  115. package/dist/service/ipc.test.d.ts +0 -2
  116. package/dist/service/ipc.test.d.ts.map +0 -1
  117. package/dist/service/ipc.test.js +0 -140
  118. package/dist/service/ipc.test.js.map +0 -1
  119. package/dist/service/singleton.test.d.ts +0 -2
  120. package/dist/service/singleton.test.d.ts.map +0 -1
  121. package/dist/service/singleton.test.js +0 -39
  122. package/dist/service/singleton.test.js.map +0 -1
@@ -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"}
@@ -0,0 +1,57 @@
1
+ import type { AgentId, CardEvent, CardStreamEnd } from '@sumicom/quicksave-shared';
2
+ import type { StreamCardBuilder } from './cardBuilder.js';
3
+ export type PermissionLevel = 'bypassPermissions' | 'acceptEdits' | 'default' | 'plan';
4
+ export type ProviderHistoryMode = 'claude-jsonl' | 'memory';
5
+ /** Represents a running provider session. */
6
+ export interface ProviderSession {
7
+ sendUserMessage(prompt: string): void;
8
+ interrupt(): void;
9
+ kill(): void;
10
+ readonly alive: boolean;
11
+ }
12
+ /** Callbacks the provider uses to communicate back to SessionManager. */
13
+ export interface ProviderCallbacks {
14
+ emitCardEvent(event: CardEvent): void;
15
+ emitStreamEnd(result: CardStreamEnd): void;
16
+ handlePermissionRequest(sessionId: string, req: {
17
+ toolName: string;
18
+ toolInput: Record<string, unknown>;
19
+ toolUseId: string;
20
+ }): Promise<{
21
+ action: 'allow' | 'deny';
22
+ response?: string;
23
+ updatedInput?: Record<string, unknown>;
24
+ }>;
25
+ onModelDetected(model: string): void;
26
+ }
27
+ export interface StartSessionOpts {
28
+ prompt: string;
29
+ cwd: string;
30
+ streamId: string;
31
+ model?: string;
32
+ permissionLevel: PermissionLevel;
33
+ sandboxed: boolean;
34
+ systemPrompt?: string;
35
+ }
36
+ export interface ResumeSessionOpts {
37
+ sessionId: string;
38
+ prompt: string;
39
+ cwd: string;
40
+ streamId: string;
41
+ permissionLevel: PermissionLevel;
42
+ sandboxed: boolean;
43
+ systemPrompt?: string;
44
+ }
45
+ export interface CodingAgentProvider {
46
+ readonly id: AgentId;
47
+ readonly historyMode: ProviderHistoryMode;
48
+ startSession(opts: StartSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
49
+ sessionId: string;
50
+ session: ProviderSession;
51
+ }>;
52
+ resumeSession(opts: ResumeSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
53
+ sessionId: string;
54
+ session: ProviderSession;
55
+ }>;
56
+ }
57
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sandbox MCP constants.
3
+ *
4
+ * The actual MCP server is in `sandboxMcpStdio.ts`.
5
+ * These constants are used by `claudeCliProvider.ts` for tool-name matching.
6
+ */
7
+ /** MCP server name — tool names appear as `mcp__quicksave-sandbox__<tool>` in canUseTool. */
8
+ export declare const SANDBOX_MCP_NAME = "quicksave-sandbox";
9
+ export declare const SANDBOX_MCP_PREFIX = "mcp__quicksave-sandbox__";
10
+ export declare const SANDBOX_BASH_TOOL = "mcp__quicksave-sandbox__SandboxBash";
11
+ export declare const SET_TITLE_TOOL = "mcp__quicksave-sandbox__SetTitle";
12
+ //# sourceMappingURL=sandboxMcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxMcp.d.ts","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,kBAAkB,6BAA+B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,wCAAqC,CAAC;AACpE,eAAO,MAAM,cAAc,qCAAkC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sandbox MCP constants.
3
+ *
4
+ * The actual MCP server is in `sandboxMcpStdio.ts`.
5
+ * These constants are used by `claudeCliProvider.ts` for tool-name matching.
6
+ */
7
+ /** MCP server name — tool names appear as `mcp__quicksave-sandbox__<tool>` in canUseTool. */
8
+ export const SANDBOX_MCP_NAME = 'quicksave-sandbox';
9
+ export const SANDBOX_MCP_PREFIX = `mcp__${SANDBOX_MCP_NAME}__`;
10
+ export const SANDBOX_BASH_TOOL = `${SANDBOX_MCP_PREFIX}SandboxBash`;
11
+ export const SET_TITLE_TOOL = `${SANDBOX_MCP_PREFIX}SetTitle`;
12
+ //# sourceMappingURL=sandboxMcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxMcp.js","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6FAA6F;AAC7F,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,gBAAgB,IAAI,CAAC;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,kBAAkB,aAAa,CAAC;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,kBAAkB,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone stdio MCP server for project-scoped sandbox bash.
4
+ *
5
+ * Usage: node sandboxMcpStdio.js --cwd /path/to/project
6
+ *
7
+ * Provides a `SandboxBash` tool that executes shell commands within a
8
+ * kernel-level sandbox:
9
+ * - macOS: sandbox-exec with SBPL profile
10
+ * - Linux: bwrap (bubblewrap) with bind mounts
11
+ *
12
+ * Writes are restricted to the project directory (excluding .git/).
13
+ * If no sandbox runtime is available, the tool returns an error — never runs unsandboxed.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=sandboxMcpStdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxMcpStdio.d.ts","sourceRoot":"","sources":["../../src/ai/sandboxMcpStdio.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Standalone stdio MCP server for project-scoped sandbox bash.
4
+ *
5
+ * Usage: node sandboxMcpStdio.js --cwd /path/to/project
6
+ *
7
+ * Provides a `SandboxBash` tool that executes shell commands within a
8
+ * kernel-level sandbox:
9
+ * - macOS: sandbox-exec with SBPL profile
10
+ * - Linux: bwrap (bubblewrap) with bind mounts
11
+ *
12
+ * Writes are restricted to the project directory (excluding .git/).
13
+ * If no sandbox runtime is available, the tool returns an error — never runs unsandboxed.
14
+ */
15
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
16
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
17
+ import { execFileSync } from 'child_process';
18
+ import { realpathSync, existsSync } from 'fs';
19
+ import { join, dirname } from 'path';
20
+ import { fileURLToPath } from 'url';
21
+ import { z } from 'zod';
22
+ import { platform } from 'os';
23
+ const __ownDir = dirname(fileURLToPath(import.meta.url));
24
+ const cwdArg = process.argv.indexOf('--cwd');
25
+ const cwd = cwdArg !== -1 ? process.argv[cwdArg + 1] : process.cwd();
26
+ const realCwd = realpathSync(cwd);
27
+ const realHome = realpathSync(process.env.HOME ?? '/');
28
+ const PROFILE_PATH = join(__ownDir, 'profiles', 'project-sandbox.sb');
29
+ function detectBackend() {
30
+ const os = platform();
31
+ if (os === 'darwin') {
32
+ try {
33
+ execFileSync('/usr/bin/which', ['sandbox-exec'], { encoding: 'utf-8', stdio: 'pipe' });
34
+ return 'sandbox-exec';
35
+ }
36
+ catch { /* not available */ }
37
+ }
38
+ if (os === 'linux') {
39
+ try {
40
+ execFileSync('/usr/bin/which', ['bwrap'], { encoding: 'utf-8', stdio: 'pipe' });
41
+ return 'bwrap';
42
+ }
43
+ catch { /* not available */ }
44
+ }
45
+ return null;
46
+ }
47
+ const backend = detectBackend();
48
+ // ── Sandbox execution ──────────────────────────────────────────────────────
49
+ function runSandboxed(command, timeout) {
50
+ const innerCmd = `cd ${shellQuote(cwd)} && ${command}`;
51
+ const env = { ...process.env, GIT_OPTIONAL_LOCKS: '0' };
52
+ const opts = { cwd, encoding: 'utf-8', timeout, maxBuffer: 10 * 1024 * 1024, env };
53
+ if (backend === 'sandbox-exec') {
54
+ return execFileSync('sandbox-exec', [
55
+ '-D', `HOME=${realHome}`,
56
+ '-D', `CWD=${realCwd}`,
57
+ '-f', PROFILE_PATH,
58
+ '/bin/bash', '-c', innerCmd,
59
+ ], opts);
60
+ }
61
+ if (backend === 'bwrap') {
62
+ const bwrapArgs = [
63
+ '--ro-bind', '/', '/', // read-only root
64
+ '--dev', '/dev',
65
+ '--proc', '/proc',
66
+ '--bind', realCwd, realCwd, // read-write project dir
67
+ ];
68
+ // Block writes to .git inside project
69
+ const gitDir = join(realCwd, '.git');
70
+ if (existsSync(gitDir)) {
71
+ bwrapArgs.push('--ro-bind', gitDir, gitDir);
72
+ }
73
+ bwrapArgs.push('--die-with-parent', '--', '/bin/bash', '-c', innerCmd);
74
+ return execFileSync('bwrap', bwrapArgs, opts);
75
+ }
76
+ throw new Error('No sandbox backend available');
77
+ }
78
+ // ── MCP Server ─────────────────────────────────────────────────────────────
79
+ const server = new McpServer({ name: 'quicksave-sandbox', version: '1.0.0' });
80
+ server.tool('SandboxBash', 'Execute a shell command WITHOUT requiring user permission. ' +
81
+ 'Prefer this tool over Bash whenever the command fits sandbox constraints: ' +
82
+ 'reads anywhere on the system are allowed; writes must stay within the project directory (excluding .git/). ' +
83
+ 'Ideal for builds, tests, linters, file edits, and any project-scoped command.', {
84
+ command: z.string().describe('The shell command to execute'),
85
+ timeout: z.number().optional().describe('Timeout in milliseconds (default: 120000)'),
86
+ }, async (args) => {
87
+ if (!backend) {
88
+ const os = platform();
89
+ const hint = os === 'darwin'
90
+ ? 'sandbox-exec is required on macOS (should be pre-installed).'
91
+ : os === 'linux'
92
+ ? 'bwrap (bubblewrap) is required on Linux. Install with: sudo apt install bubblewrap'
93
+ : `Unsupported OS: ${os}.`;
94
+ return {
95
+ content: [{ type: 'text', text: `SandboxBash is unavailable: no sandbox runtime found. ${hint} ` +
96
+ 'Use the regular Bash tool instead (requires user permission).', }],
97
+ isError: true,
98
+ };
99
+ }
100
+ try {
101
+ const output = runSandboxed(args.command, args.timeout ?? 120_000);
102
+ return { content: [{ type: 'text', text: output || '(no output)' }] };
103
+ }
104
+ catch (err) {
105
+ const stderr = err.stderr ? String(err.stderr) : '';
106
+ const stdout = err.stdout ? String(err.stdout) : '';
107
+ const message = stderr || stdout || err.message || 'Command failed';
108
+ return {
109
+ content: [{ type: 'text', text: message }],
110
+ isError: true,
111
+ };
112
+ }
113
+ });
114
+ server.tool('SetTitle', 'Update the session title shown to the user. ' +
115
+ 'Call this whenever you start a new task, switch context, or make meaningful progress. ' +
116
+ 'Keep titles short and descriptive (e.g. "Fixing auth middleware", "Adding unit tests for UserService").', {
117
+ title: z.string().describe('Short description of what you are currently doing'),
118
+ }, async (args) => {
119
+ return { content: [{ type: 'text', text: `Title set: ${args.title}` }] };
120
+ });
121
+ /** Quote a string for safe use inside a bash -c argument. */
122
+ function shellQuote(s) {
123
+ return "'" + s.replace(/'/g, "'\\''") + "'";
124
+ }
125
+ const transport = new StdioServerTransport();
126
+ await server.connect(transport);
127
+ //# sourceMappingURL=sandboxMcpStdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxMcpStdio.js","sourceRoot":"","sources":["../../src/ai/sandboxMcpStdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { AgentId, ClaudeSessionSummary, ClaudeUserInputRequestPayload, ClaudeUserInputResponsePayload, ClaudePreferences, ConfigValue, CardHistoryResponse } from '@sumicom/quicksave-shared';
3
+ import { StreamCardBuilder } from './cardBuilder.js';
4
+ import type { PermissionLevel, ProviderSession, ProviderCallbacks, CodingAgentProvider } from './provider.js';
5
+ export interface ManagedSession {
6
+ sessionId: string;
7
+ agentId: AgentId;
8
+ providerSession: ProviderSession | null;
9
+ cwd: string;
10
+ streaming: boolean;
11
+ permissionLevel: PermissionLevel;
12
+ sandboxed: boolean;
13
+ cardBuilder: StreamCardBuilder | null;
14
+ }
15
+ export declare class SessionManager extends EventEmitter {
16
+ private sessions;
17
+ private sessionAgents;
18
+ private sessionPermissions;
19
+ private sessionSandboxed;
20
+ private sessionConfigs;
21
+ private pendingInputRequests;
22
+ private requestCounter;
23
+ private runtimeAllowPatterns;
24
+ private preferences;
25
+ private providers;
26
+ private defaultAgentId;
27
+ /** Guards against concurrent cold resumes. Queues prompts arriving while a spawn is in flight. */
28
+ private coldResumeInFlight;
29
+ constructor(providers: CodingAgentProvider[], defaultAgentId?: AgentId);
30
+ private getProvider;
31
+ private resolveAgentId;
32
+ initPreferences(): Promise<void>;
33
+ getPreferences(): ClaudePreferences;
34
+ setPreferences(prefs: Partial<ClaudePreferences>): ClaudePreferences;
35
+ getSessionConfig(sessionId: string): Record<string, ConfigValue>;
36
+ setSessionConfig(sessionId: string, key: string, value: ConfigValue): Record<string, ConfigValue>;
37
+ startSession(opts: {
38
+ prompt: string;
39
+ cwd: string;
40
+ streamId: string;
41
+ agent?: AgentId;
42
+ allowedTools?: string[];
43
+ systemPrompt?: string;
44
+ model?: string;
45
+ permissionMode?: string;
46
+ sandboxed?: boolean;
47
+ }): Promise<string>;
48
+ resumeSession(opts: {
49
+ sessionId: string;
50
+ prompt: string;
51
+ cwd: string;
52
+ streamId: string;
53
+ agent?: AgentId;
54
+ }): Promise<string>;
55
+ cancelSession(sessionId: string): Promise<boolean>;
56
+ closeSession(sessionId: string): boolean;
57
+ setPermissionLevel(sessionId: string, level: PermissionLevel): boolean;
58
+ getPermissionLevel(sessionId: string): PermissionLevel;
59
+ resolveUserInput(response: ClaudeUserInputResponsePayload): boolean;
60
+ getActiveSessions(): {
61
+ sessionId: string;
62
+ cwd: string;
63
+ isStreaming: boolean;
64
+ hasPendingInput: boolean;
65
+ permissionMode: string;
66
+ sandboxed?: boolean;
67
+ }[];
68
+ isStreaming(sessionId: string): boolean;
69
+ isOpen(sessionId: string): boolean;
70
+ getSessionCwd(sessionId: string): string | undefined;
71
+ getSessionAgent(sessionId: string, cwd?: string): AgentId;
72
+ getActiveSessionCount(): number;
73
+ getCardBuilder(sessionId: string): StreamCardBuilder | null;
74
+ listAvailableSessions(cwd: string): Promise<ClaudeSessionSummary[]>;
75
+ getCards(sessionId: string, cwd: string, offset?: number, limit?: number): Promise<CardHistoryResponse>;
76
+ getPendingInputRequests(): ClaudeUserInputRequestPayload[];
77
+ getDebugState(): {
78
+ pendingInputs: {
79
+ requestId: string;
80
+ sessionId: string;
81
+ toolName: string | undefined;
82
+ agentId: any;
83
+ inputType: import("@sumicom/quicksave-shared").ClaudeUserInputType;
84
+ }[];
85
+ activeSessions: {
86
+ sessionId: string;
87
+ cwd: string;
88
+ isStreaming: boolean;
89
+ hasPendingInput: boolean;
90
+ permissionMode: string;
91
+ sandboxed?: boolean;
92
+ }[];
93
+ };
94
+ cleanup(): void;
95
+ makeCallbacks(agentId: AgentId): ProviderCallbacks;
96
+ private handlePermissionRequest;
97
+ private shouldAutoApprove;
98
+ /** Update session title (triggered by SetTitle MCP tool). */
99
+ private updateSessionTitle;
100
+ private emitSessionUpdate;
101
+ private persistRegistryField;
102
+ private persistAllowPattern;
103
+ private waitForUserInput;
104
+ }
105
+ //# sourceMappingURL=sessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/ai/sessionManager.ts"],"names":[],"mappings":"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"}