@sumicom/quicksave 0.8.9 → 0.8.11

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 (112) hide show
  1. package/dist/ai/cardBuilder.d.ts +67 -2
  2. package/dist/ai/cardBuilder.d.ts.map +1 -1
  3. package/dist/ai/cardBuilder.js +364 -26
  4. package/dist/ai/cardBuilder.js.map +1 -1
  5. package/dist/ai/claudeCliProvider.d.ts +14 -0
  6. package/dist/ai/claudeCliProvider.d.ts.map +1 -1
  7. package/dist/ai/claudeCliProvider.js +83 -2
  8. package/dist/ai/claudeCliProvider.js.map +1 -1
  9. package/dist/ai/claudeCodeProvider.d.ts.map +1 -1
  10. package/dist/ai/claudeCodeProvider.js +2 -0
  11. package/dist/ai/claudeCodeProvider.js.map +1 -1
  12. package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
  13. package/dist/ai/claudeSdkProvider.js +13 -2
  14. package/dist/ai/claudeSdkProvider.js.map +1 -1
  15. package/dist/ai/claudeTerminal/cardSynth.d.ts +63 -0
  16. package/dist/ai/claudeTerminal/cardSynth.d.ts.map +1 -0
  17. package/dist/ai/claudeTerminal/cardSynth.js +92 -0
  18. package/dist/ai/claudeTerminal/cardSynth.js.map +1 -0
  19. package/dist/ai/claudeTerminal/hookBridge.d.ts +56 -0
  20. package/dist/ai/claudeTerminal/hookBridge.d.ts.map +1 -0
  21. package/dist/ai/claudeTerminal/hookBridge.js +131 -0
  22. package/dist/ai/claudeTerminal/hookBridge.js.map +1 -0
  23. package/dist/ai/claudeTerminal/hookHandler.d.ts +18 -0
  24. package/dist/ai/claudeTerminal/hookHandler.d.ts.map +1 -0
  25. package/dist/ai/claudeTerminal/hookHandler.js +124 -0
  26. package/dist/ai/claudeTerminal/hookHandler.js.map +1 -0
  27. package/dist/ai/claudeTerminal/index.d.ts +5 -0
  28. package/dist/ai/claudeTerminal/index.d.ts.map +1 -0
  29. package/dist/ai/claudeTerminal/index.js +7 -0
  30. package/dist/ai/claudeTerminal/index.js.map +1 -0
  31. package/dist/ai/claudeTerminal/jsonlTail.d.ts +40 -0
  32. package/dist/ai/claudeTerminal/jsonlTail.d.ts.map +1 -0
  33. package/dist/ai/claudeTerminal/jsonlTail.js +129 -0
  34. package/dist/ai/claudeTerminal/jsonlTail.js.map +1 -0
  35. package/dist/ai/claudeTerminal/provider.d.ts +106 -0
  36. package/dist/ai/claudeTerminal/provider.d.ts.map +1 -0
  37. package/dist/ai/claudeTerminal/provider.js +579 -0
  38. package/dist/ai/claudeTerminal/provider.js.map +1 -0
  39. package/dist/ai/claudeTerminal/settingsBuilder.d.ts +44 -0
  40. package/dist/ai/claudeTerminal/settingsBuilder.d.ts.map +1 -0
  41. package/dist/ai/claudeTerminal/settingsBuilder.js +40 -0
  42. package/dist/ai/claudeTerminal/settingsBuilder.js.map +1 -0
  43. package/dist/ai/codexAppServer/cardAdapter.d.ts.map +1 -1
  44. package/dist/ai/codexAppServer/cardAdapter.js +13 -5
  45. package/dist/ai/codexAppServer/cardAdapter.js.map +1 -1
  46. package/dist/ai/codexAppServer/provider.d.ts +13 -2
  47. package/dist/ai/codexAppServer/provider.d.ts.map +1 -1
  48. package/dist/ai/codexAppServer/provider.js +161 -26
  49. package/dist/ai/codexAppServer/provider.js.map +1 -1
  50. package/dist/ai/profiles/project-sandbox.sb +26 -0
  51. package/dist/ai/provider.d.ts +29 -1
  52. package/dist/ai/provider.d.ts.map +1 -1
  53. package/dist/ai/provider.js +1 -0
  54. package/dist/ai/provider.js.map +1 -1
  55. package/dist/ai/queuedUserPrompts.d.ts +8 -0
  56. package/dist/ai/queuedUserPrompts.d.ts.map +1 -0
  57. package/dist/ai/queuedUserPrompts.js +19 -0
  58. package/dist/ai/queuedUserPrompts.js.map +1 -0
  59. package/dist/ai/realtimeTranscription.d.ts +39 -0
  60. package/dist/ai/realtimeTranscription.d.ts.map +1 -0
  61. package/dist/ai/realtimeTranscription.js +154 -0
  62. package/dist/ai/realtimeTranscription.js.map +1 -0
  63. package/dist/ai/sandboxMcp.d.ts +7 -0
  64. package/dist/ai/sandboxMcp.d.ts.map +1 -1
  65. package/dist/ai/sandboxMcp.js +4 -0
  66. package/dist/ai/sandboxMcp.js.map +1 -1
  67. package/dist/ai/sandboxMcpStdio.d.ts +1 -1
  68. package/dist/ai/sandboxMcpStdio.js +120 -47
  69. package/dist/ai/sandboxMcpStdio.js.map +1 -1
  70. package/dist/ai/sessionManager.d.ts +14 -0
  71. package/dist/ai/sessionManager.d.ts.map +1 -1
  72. package/dist/ai/sessionManager.js +147 -3
  73. package/dist/ai/sessionManager.js.map +1 -1
  74. package/dist/ai/sessionRegistry.d.ts +6 -0
  75. package/dist/ai/sessionRegistry.d.ts.map +1 -1
  76. package/dist/ai/sessionRegistry.js +13 -0
  77. package/dist/ai/sessionRegistry.js.map +1 -1
  78. package/dist/ai/sessionRegistryLocator.d.ts +14 -0
  79. package/dist/ai/sessionRegistryLocator.d.ts.map +1 -0
  80. package/dist/ai/sessionRegistryLocator.js +44 -0
  81. package/dist/ai/sessionRegistryLocator.js.map +1 -0
  82. package/dist/ai/systemPrompt.d.ts.map +1 -1
  83. package/dist/ai/systemPrompt.js +1 -0
  84. package/dist/ai/systemPrompt.js.map +1 -1
  85. package/dist/ai/voiceStream.d.ts +74 -0
  86. package/dist/ai/voiceStream.d.ts.map +1 -0
  87. package/dist/ai/voiceStream.js +179 -0
  88. package/dist/ai/voiceStream.js.map +1 -0
  89. package/dist/ai/voiceTranscription.d.ts +33 -0
  90. package/dist/ai/voiceTranscription.d.ts.map +1 -0
  91. package/dist/ai/voiceTranscription.js +122 -0
  92. package/dist/ai/voiceTranscription.js.map +1 -0
  93. package/dist/files/fileBrowser.d.ts.map +1 -1
  94. package/dist/files/fileBrowser.js +3 -2
  95. package/dist/files/fileBrowser.js.map +1 -1
  96. package/dist/handlers/legacyBusAdapter.d.ts +1 -1
  97. package/dist/handlers/legacyBusAdapter.d.ts.map +1 -1
  98. package/dist/handlers/legacyBusAdapter.js +6 -1
  99. package/dist/handlers/legacyBusAdapter.js.map +1 -1
  100. package/dist/handlers/messageHandler.d.ts +5 -0
  101. package/dist/handlers/messageHandler.d.ts.map +1 -1
  102. package/dist/handlers/messageHandler.js +100 -5
  103. package/dist/handlers/messageHandler.js.map +1 -1
  104. package/dist/index.js +2 -2
  105. package/dist/index.js.map +1 -1
  106. package/dist/service/ipcClient.js +1 -1
  107. package/dist/service/ipcClient.js.map +1 -1
  108. package/dist/service/run.d.ts.map +1 -1
  109. package/dist/service/run.js +74 -3
  110. package/dist/service/run.js.map +1 -1
  111. package/dist/service/types.js +1 -1
  112. package/package.json +6 -3
@@ -0,0 +1,26 @@
1
+ (version 1)
2
+ (deny default)
3
+ (import "system.sb")
4
+
5
+ ;; Allow all file reads
6
+ (allow file-read*)
7
+
8
+ ;; Deny all file writes by default
9
+ (deny file-write*)
10
+
11
+ ;; Allow writes ONLY within the project directory (excluding .git/)
12
+ (allow file-write* (subpath (param "CWD")))
13
+ (deny file-write* (subpath (string-append (param "CWD") "/.git")))
14
+
15
+ ;; Allow process execution
16
+ (allow process-fork)
17
+ (allow process-exec)
18
+
19
+ ;; Allow signals to own process
20
+ (allow signal (target self))
21
+
22
+ ;; Allow sysctl reads (needed by many tools)
23
+ (allow sysctl-read)
24
+
25
+ ;; Allow network access (builds may need to fetch dependencies)
26
+ (allow network*)
@@ -1,4 +1,4 @@
1
- import type { AgentId, Attachment, CardEvent, CardStreamEnd, ContextUsageBreakdown } from '@sumicom/quicksave-shared';
1
+ import type { AgentId, Attachment, CardEvent, CardStreamEnd, ContextUsageBreakdown, SessionQueueState } from '@sumicom/quicksave-shared';
2
2
  import type { StreamCardBuilder } from './cardBuilder.js';
3
3
  export declare const CLAUDE_PERMISSION_MODES: readonly ["default", "acceptEdits", "bypassPermissions", "plan", "auto"];
4
4
  export declare const CODEX_PERMISSION_PRESETS: readonly ["read-only", "default", "auto-review", "full-access"];
@@ -15,9 +15,24 @@ export type ProviderHistoryMode = 'claude-jsonl' | 'memory';
15
15
  /** Represents a running provider session. */
16
16
  export interface ProviderSession {
17
17
  sendUserMessage(prompt: string, attachments?: readonly Attachment[]): void;
18
+ interruptThenSendUserMessage?(prompt: string, attachments?: readonly Attachment[]): void;
18
19
  interrupt(): void;
19
20
  kill(): void;
20
21
  readonly alive: boolean;
22
+ /** Optional — `terminalManager` terminal id when this provider owns a PTY
23
+ * the PWA should render alongside the structured card stream. Only the
24
+ * `claude-terminal` provider sets this today. SessionManager copies it into
25
+ * the session config so the PWA can pick it up via the existing
26
+ * config-updated channel. */
27
+ readonly terminalId?: string;
28
+ /** Optional in-memory queue snapshot for provider sessions that serialize
29
+ * user turns instead of accepting mid-turn input directly. */
30
+ getQueueState?(): SessionQueueState | null;
31
+ /** Optional — inject the provider's queued user message into the current
32
+ * active turn instead of waiting for the next turn. */
33
+ steerQueuedMessage?(opts?: {
34
+ interruptCurrentTurn?: boolean;
35
+ }): Promise<boolean> | boolean;
21
36
  /** Optional — ask the provider for a breakdown of current context window
22
37
  * usage. Only supported by the Claude Code CLI (via `get_context_usage`
23
38
  * control_request). Returns null on providers that don't support it. */
@@ -56,6 +71,8 @@ export interface ProviderCallbacks {
56
71
  * resets the 5-minute (or 1h) cache TTL on the server. SessionManager uses
57
72
  * this to anchor the PWA's countdown without waiting for the turn to end. */
58
73
  onCacheTouch?(sessionId: string): void;
74
+ /** Fired when a provider's in-memory user-message queue changes. */
75
+ onQueueStateChange?(sessionId: string): void;
59
76
  onModelDetected(model: string): void;
60
77
  /** Fired when the underlying provider process has fully exited. SessionManager
61
78
  * uses this to remove the session from its in-memory map and emit
@@ -91,6 +108,10 @@ export interface StartSessionOpts {
91
108
  * hook consults to auto-approve every tool. Presence of the file means bypass
92
109
  * is active. Only ClaudeCliProvider uses it; other providers ignore it. */
93
110
  bypassFlagPath?: string;
111
+ /** Correlation id minted by the daemon at spawn. Threaded into the sandbox
112
+ * MCP server's `--corr` so it can locate this session's registry entry
113
+ * before the real sessionId exists. See `sandboxMcp.ts` / `sandboxMcpStdio.ts`. */
114
+ mcpCorrId?: string;
94
115
  }
95
116
  export interface ResumeSessionOpts {
96
117
  sessionId: string;
@@ -105,6 +126,9 @@ export interface ResumeSessionOpts {
105
126
  reasoningEffort?: string;
106
127
  contextWindow?: number;
107
128
  bypassFlagPath?: string;
129
+ /** See {@link StartSessionOpts.mcpCorrId}. On resume the stdio server also
130
+ * gets `--session-id`, so this is belt-and-suspenders for cold re-spawns. */
131
+ mcpCorrId?: string;
108
132
  }
109
133
  export declare const DEFAULT_AGENT_LABELS: Record<AgentId, string>;
110
134
  export declare function getAgentLabel(agentId: AgentId): string;
@@ -115,6 +139,10 @@ export interface AgentCapabilities {
115
139
  supportsResume: boolean;
116
140
  supportsSandbox: boolean;
117
141
  supportsStreaming: boolean;
142
+ /** Opt-in only: true when attachments are forwarded into the provider turn. */
143
+ supportsAttachments?: true;
144
+ /** Positive list of attachment kinds the provider forwards. */
145
+ supportedAttachmentKinds?: Array<Attachment['kind']>;
118
146
  }
119
147
  export type ProbeResult = {
120
148
  version?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,7 @@ export function isFullAccessPermission(agentId, level) {
56
56
  }
57
57
  export const DEFAULT_AGENT_LABELS = {
58
58
  'claude-code': 'Claude Code',
59
+ 'claude-terminal': 'Claude (Terminal)',
59
60
  'codex': 'Codex',
60
61
  'opencode': 'OpenCode',
61
62
  'pi': 'Pi',
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,MAAM;IACN,MAAM;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW;IACX,SAAS;IACT,aAAa;IACb,aAAa;CACL,CAAC;AAMX,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAA8C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAAgB;IAC7D,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,OAAgB,EAAE,KAAc;IAChF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,uBAAuB,CAAC,KAAK,CAAC;eAChC,KAAK,KAAK,mBAAmB;eAC7B,KAAK,KAAK,MAAM;eAChB,KAAK,KAAK,MAAM;eAChB,KAAK,KAAK,aAAa,CAAC;IAC/B,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,OAAgB,EAChB,KAAc;IAEd,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,uBAAuB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,2EAA2E;QAC3E,IAAI,KAAK,KAAK,mBAAmB;YAAE,OAAO,aAAa,CAAC;QACxD,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,WAAW,CAAC;QACzC,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,aAAa,CAAC;QAC3C,IAAI,KAAK,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,KAAsB;IAC7E,OAAO,OAAO,KAAK,OAAO;QACxB,CAAC,CAAC,KAAK,KAAK,aAAa;QACzB,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC;AACpC,CAAC;AAqGD,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IAC3D,aAAa,EAAE,aAAa;IAC5B,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,oBAAoB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,MAAM;IACN,MAAM;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW;IACX,SAAS;IACT,aAAa;IACb,aAAa;CACL,CAAC;AAMX,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,uBAA6C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,wBAA8C,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAAgB;IAC7D,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,OAAgB,EAAE,KAAc;IAChF,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,uBAAuB,CAAC,KAAK,CAAC;eAChC,KAAK,KAAK,mBAAmB;eAC7B,KAAK,KAAK,MAAM;eAChB,KAAK,KAAK,MAAM;eAChB,KAAK,KAAK,aAAa,CAAC;IAC/B,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,OAAgB,EAChB,KAAc;IAEd,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,uBAAuB,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,2EAA2E;QAC3E,IAAI,KAAK,KAAK,mBAAmB;YAAE,OAAO,aAAa,CAAC;QACxD,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,WAAW,CAAC;QACzC,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,aAAa,CAAC;QAC3C,IAAI,KAAK,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,KAAsB;IAC7E,OAAO,OAAO,KAAK,OAAO;QACxB,CAAC,CAAC,KAAK,KAAK,aAAa;QACzB,CAAC,CAAC,KAAK,KAAK,mBAAmB,CAAC;AACpC,CAAC;AA2HD,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IAC3D,aAAa,EAAE,aAAa;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,oBAAoB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;AAClD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Attachment, SessionQueueState } from '@sumicom/quicksave-shared';
2
+ export interface QueuedUserPrompt {
3
+ prompt: string;
4
+ attachments?: readonly Attachment[];
5
+ }
6
+ export declare function previewQueuedPrompt(prompt: string): string;
7
+ export declare function queueStateFor(queued: readonly QueuedUserPrompt[], canInterruptCurrentTurn: boolean): SessionQueueState | null;
8
+ //# sourceMappingURL=queuedUserPrompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queuedUserPrompts.d.ts","sourceRoot":"","sources":["../../src/ai/queuedUserPrompts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI/E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACrC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,gBAAgB,EAAE,EACnC,uBAAuB,EAAE,OAAO,GAC/B,iBAAiB,GAAG,IAAI,CAS1B"}
@@ -0,0 +1,19 @@
1
+ const QUEUE_PREVIEW_MAX = 80;
2
+ export function previewQueuedPrompt(prompt) {
3
+ const normalized = prompt.replace(/\s+/g, ' ').trim();
4
+ return normalized.length > QUEUE_PREVIEW_MAX
5
+ ? `${normalized.slice(0, QUEUE_PREVIEW_MAX - 3)}...`
6
+ : normalized;
7
+ }
8
+ export function queueStateFor(queued, canInterruptCurrentTurn) {
9
+ if (queued.length === 0)
10
+ return null;
11
+ const queuedPromptPreviews = queued.map((turn) => previewQueuedPrompt(turn.prompt));
12
+ return {
13
+ pendingUserMessages: queued.length,
14
+ latestPromptPreview: queuedPromptPreviews[queuedPromptPreviews.length - 1],
15
+ queuedPromptPreviews,
16
+ canInterruptCurrentTurn,
17
+ };
18
+ }
19
+ //# sourceMappingURL=queuedUserPrompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queuedUserPrompts.js","sourceRoot":"","sources":["../../src/ai/queuedUserPrompts.ts"],"names":[],"mappings":"AAIA,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAO7B,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,OAAO,UAAU,CAAC,MAAM,GAAG,iBAAiB;QAC1C,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,KAAK;QACpD,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmC,EACnC,uBAAgC;IAEhC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACpF,OAAO;QACL,mBAAmB,EAAE,MAAM,CAAC,MAAM;QAClC,mBAAmB,EAAE,oBAAoB,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1E,oBAAoB;QACpB,uBAAuB;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { VoiceConfig } from '@sumicom/quicksave-shared';
2
+ export interface RealtimeCallbacks {
3
+ onPartial(text: string): void;
4
+ onFinal(text: string): void;
5
+ onError(message: string): void;
6
+ onClose?(): void;
7
+ }
8
+ /** Minimal surface we use from a WebSocket; satisfied by `ws`. */
9
+ export interface RealtimeSocket {
10
+ send(data: string): void;
11
+ close(): void;
12
+ on(event: 'open' | 'message' | 'error' | 'close', cb: (arg?: unknown) => void): void;
13
+ }
14
+ export type SocketFactory = (url: string, headers: Record<string, string>) => RealtimeSocket;
15
+ /** Derive the realtime WS URL from an http(s) base URL. */
16
+ export declare function realtimeUrl(baseUrl: string): string;
17
+ export declare class RealtimeTranscriber {
18
+ private readonly config;
19
+ private readonly sampleRate;
20
+ private readonly cb;
21
+ private readonly factory;
22
+ private socket;
23
+ private opened;
24
+ private closed;
25
+ private appendedSinceCommit;
26
+ private readonly pending;
27
+ constructor(config: VoiceConfig, sampleRate: number, cb: RealtimeCallbacks, factory?: SocketFactory);
28
+ start(): void;
29
+ /** Queue a frame of PCM16 mono audio for transcription. */
30
+ appendAudio(pcm16: Buffer | Uint8Array): void;
31
+ /** Signal end-of-utterance so the server finalizes the transcript. Skipped
32
+ * when nothing new was appended (server VAD may have already committed). */
33
+ commit(): void;
34
+ close(): void;
35
+ private send;
36
+ private rawSend;
37
+ private handleMessage;
38
+ }
39
+ //# sourceMappingURL=realtimeTranscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtimeTranscription.d.ts","sourceRoot":"","sources":["../../src/ai/realtimeTranscription.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACtF;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,cAAc,CAAC;AAK7F,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,qBAAa,mBAAmB;IAQ5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAGrB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,iBAAiB,EACrB,OAAO,GAAE,aAA8B;IAG1D,KAAK,IAAI,IAAI;IA+Cb,2DAA2D;IAC3D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAM7C;iFAC6E;IAC7E,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,aAAa;CA+BtB"}
@@ -0,0 +1,154 @@
1
+ // SPDX-FileCopyrightText: 2026 King Young Technology
2
+ // SPDX-License-Identifier: MIT
3
+ /**
4
+ * Agent-side bridge to a streaming, OpenAI-Realtime-compatible transcription
5
+ * API. Runs on the agent (Node) so there is no browser CORS limit and the same
6
+ * code path serves OpenAI's hosted endpoint and self-hosted servers that speak
7
+ * the Realtime protocol.
8
+ *
9
+ * Lifecycle: construct → `start()` (opens the WS, configures the session) →
10
+ * `appendAudio(pcm16)` repeatedly as frames arrive → `commit()` at end of
11
+ * utterance → `close()`. Partial/final transcripts arrive via callbacks.
12
+ *
13
+ * The `ws` constructor is injectable so unit tests can drive the protocol
14
+ * without a real socket.
15
+ */
16
+ import WS from 'ws';
17
+ const defaultFactory = (url, headers) => new WS(url, { headers });
18
+ /** Derive the realtime WS URL from an http(s) base URL. */
19
+ export function realtimeUrl(baseUrl) {
20
+ const trimmed = baseUrl.trim().replace(/\/+$/, '');
21
+ const ws = trimmed.replace(/^http:/, 'ws:').replace(/^https:/, 'wss:');
22
+ return `${ws}/realtime?intent=transcription`;
23
+ }
24
+ export class RealtimeTranscriber {
25
+ config;
26
+ sampleRate;
27
+ cb;
28
+ factory;
29
+ socket = null;
30
+ opened = false;
31
+ closed = false;
32
+ appendedSinceCommit = false;
33
+ pending = [];
34
+ constructor(config, sampleRate, cb, factory = defaultFactory) {
35
+ this.config = config;
36
+ this.sampleRate = sampleRate;
37
+ this.cb = cb;
38
+ this.factory = factory;
39
+ }
40
+ start() {
41
+ if (!(this.sampleRate > 0)) {
42
+ this.cb.onError('Invalid audio sample rate');
43
+ return;
44
+ }
45
+ if (!this.config.streamModel.trim()) {
46
+ this.cb.onError('No streaming model configured. Set a realtime model (e.g. gpt-4o-transcribe) in Settings.');
47
+ return;
48
+ }
49
+ // GA Realtime API: no `OpenAI-Beta` header (the beta interface is gone).
50
+ const headers = {};
51
+ if (this.config.apiKey.trim())
52
+ headers.Authorization = `Bearer ${this.config.apiKey.trim()}`;
53
+ const socket = this.factory(realtimeUrl(this.config.baseUrl), headers);
54
+ this.socket = socket;
55
+ socket.on('open', () => {
56
+ this.opened = true;
57
+ // Configure the transcription session (GA shape): raw PCM16 in at our
58
+ // capture rate, chosen model. `gpt-realtime-whisper` requires manual
59
+ // commit (no server VAD), which matches our explicit `commit()`.
60
+ this.rawSend(JSON.stringify({
61
+ type: 'session.update',
62
+ session: {
63
+ type: 'transcription',
64
+ audio: {
65
+ input: {
66
+ format: { type: 'audio/pcm', rate: this.sampleRate },
67
+ transcription: { model: this.config.streamModel.trim() },
68
+ },
69
+ },
70
+ },
71
+ }));
72
+ for (const msg of this.pending.splice(0))
73
+ this.rawSend(msg);
74
+ });
75
+ socket.on('message', (data) => this.handleMessage(data));
76
+ socket.on('error', (err) => {
77
+ this.cb.onError(err instanceof Error ? err.message : 'Realtime socket error');
78
+ });
79
+ socket.on('close', () => {
80
+ this.closed = true;
81
+ this.cb.onClose?.();
82
+ });
83
+ }
84
+ /** Queue a frame of PCM16 mono audio for transcription. */
85
+ appendAudio(pcm16) {
86
+ const audio = Buffer.from(pcm16).toString('base64');
87
+ this.appendedSinceCommit = true;
88
+ this.send(JSON.stringify({ type: 'input_audio_buffer.append', audio }));
89
+ }
90
+ /** Signal end-of-utterance so the server finalizes the transcript. Skipped
91
+ * when nothing new was appended (server VAD may have already committed). */
92
+ commit() {
93
+ if (!this.appendedSinceCommit)
94
+ return;
95
+ this.appendedSinceCommit = false;
96
+ this.send(JSON.stringify({ type: 'input_audio_buffer.commit' }));
97
+ }
98
+ close() {
99
+ this.closed = true;
100
+ this.socket?.close();
101
+ this.socket = null;
102
+ }
103
+ send(msg) {
104
+ if (this.closed)
105
+ return;
106
+ if (!this.opened) {
107
+ this.pending.push(msg);
108
+ return;
109
+ }
110
+ this.rawSend(msg);
111
+ }
112
+ rawSend(msg) {
113
+ try {
114
+ this.socket?.send(msg);
115
+ }
116
+ catch (err) {
117
+ this.cb.onError(err instanceof Error ? err.message : 'Failed to send to realtime socket');
118
+ }
119
+ }
120
+ handleMessage(data) {
121
+ let evt;
122
+ try {
123
+ const text = typeof data === 'string' ? data : Buffer.isBuffer(data) ? data.toString('utf8') : String(data);
124
+ evt = JSON.parse(text);
125
+ }
126
+ catch {
127
+ return; // ignore unparseable frames
128
+ }
129
+ const type = typeof evt.type === 'string' ? evt.type : '';
130
+ // Tolerant matching so minor schema drift across providers/versions still
131
+ // routes partial vs final correctly.
132
+ if (type.endsWith('input_audio_transcription.delta')) {
133
+ if (typeof evt.delta === 'string' && evt.delta.length > 0)
134
+ this.cb.onPartial(evt.delta);
135
+ return;
136
+ }
137
+ if (type.endsWith('input_audio_transcription.completed')) {
138
+ if (typeof evt.transcript === 'string')
139
+ this.cb.onFinal(evt.transcript);
140
+ return;
141
+ }
142
+ if (type === 'error') {
143
+ const code = typeof evt.error?.code === 'string' ? evt.error.code : '';
144
+ const msg = typeof evt.error?.message === 'string' ? evt.error.message : 'Realtime API error';
145
+ // Benign: committing an empty/too-short buffer — typically because server
146
+ // VAD already flushed it. Recognition is unaffected, so don't surface it.
147
+ if (code === 'input_audio_buffer_commit_empty' || /buffer too small|buffer is empty/i.test(msg)) {
148
+ return;
149
+ }
150
+ this.cb.onError(msg);
151
+ }
152
+ }
153
+ }
154
+ //# sourceMappingURL=realtimeTranscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtimeTranscription.js","sourceRoot":"","sources":["../../src/ai/realtimeTranscription.ts"],"names":[],"mappings":"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"}
@@ -46,5 +46,12 @@ export declare function buildSandboxMcpServerConfig(opts: {
46
46
  cwd: string;
47
47
  /** When resuming, lets the server's UpdateSessionStatus dry-run read the registry file. */
48
48
  sessionId?: string;
49
+ /** Correlation id for fresh sessions, where `sessionId` isn't known yet at
50
+ * spawn. Becomes `--corr`; the stdio server resolves its registry file by
51
+ * matching this against each entry's `mcpCorrId`. See `sandboxMcpStdio.ts`. */
52
+ corrId?: string;
53
+ /** Hide SandboxBash from the MCP inventory. Codex has native shell execution
54
+ * and only needs UpdateSessionStatus from this server. */
55
+ includeSandboxBash?: boolean;
49
56
  }): SandboxMcpServerConfig;
50
57
  //# sourceMappingURL=sandboxMcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxMcp.d.ts","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAKH,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,kBAAkB,6BAA+B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,wCAAqC,CAAC;AACpE,eAAO,MAAM,0BAA0B,gDAA6C,CAAC;AAErF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD;;wFAEoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,sBAAsB,CAiBzB"}
1
+ {"version":3,"file":"sandboxMcp.d.ts","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAKH,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AACpD,eAAO,MAAM,kBAAkB,6BAA+B,CAAC;AAC/D,eAAO,MAAM,iBAAiB,wCAAqC,CAAC;AACpE,eAAO,MAAM,0BAA0B,gDAA6C,CAAC;AAErF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD;;wFAEoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;oFAEgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;+DAC2D;IAC3D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,sBAAsB,CAmBzB"}
@@ -50,6 +50,10 @@ export function buildSandboxMcpServerConfig(opts) {
50
50
  const args = [scriptPath, '--cwd', opts.cwd];
51
51
  if (opts.sessionId)
52
52
  args.push('--session-id', opts.sessionId);
53
+ if (opts.corrId)
54
+ args.push('--corr', opts.corrId);
55
+ if (opts.includeSandboxBash === false)
56
+ args.push('--no-sandbox-bash');
53
57
  return { type: 'stdio', command, args };
54
58
  }
55
59
  //# sourceMappingURL=sandboxMcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxMcp.js","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,+BAA+B;AAC/B;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,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,0BAA0B,GAAG,GAAG,kBAAkB,qBAAqB,CAAC;AAQrF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAS3C;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,wEAAwE;IACxE,+BAA+B;IAC/B,6EAA6E;IAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK;QACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC;QAC9D,CAAC,CAAC,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"sandboxMcp.js","sourceRoot":"","sources":["../../src/ai/sandboxMcp.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,+BAA+B;AAC/B;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,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,0BAA0B,GAAG,GAAG,kBAAkB,qBAAqB,CAAC;AAQrF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAgB3C;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,wEAAwE;IACxE,+BAA+B;IAC/B,6EAA6E;IAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK;QACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC;QAC9D,CAAC,CAAC,MAAM,CAAC;IAEX,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEtE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC"}
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Standalone stdio MCP server for project-scoped sandbox bash.
4
4
  *
5
- * Usage: node sandboxMcpStdio.js --cwd /path/to/project
5
+ * Usage: node sandboxMcpStdio.js --cwd /path/to/project [--no-sandbox-bash]
6
6
  *
7
7
  * Provides a `SandboxBash` tool that executes shell commands within a
8
8
  * kernel-level sandbox: