@sumicom/quicksave 0.8.8 → 0.8.10
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.
- package/dist/ai/cardBuilder.d.ts +65 -4
- package/dist/ai/cardBuilder.d.ts.map +1 -1
- package/dist/ai/cardBuilder.js +338 -28
- package/dist/ai/cardBuilder.js.map +1 -1
- package/dist/ai/claudeCliProvider.d.ts +15 -0
- package/dist/ai/claudeCliProvider.d.ts.map +1 -1
- package/dist/ai/claudeCliProvider.js +87 -3
- package/dist/ai/claudeCliProvider.js.map +1 -1
- package/dist/ai/claudeCodeProvider.d.ts +4 -0
- package/dist/ai/claudeCodeProvider.d.ts.map +1 -1
- package/dist/ai/claudeCodeProvider.js +41 -0
- package/dist/ai/claudeCodeProvider.js.map +1 -1
- package/dist/ai/claudeSdkProvider.d.ts +1 -0
- package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
- package/dist/ai/claudeSdkProvider.js +14 -2
- package/dist/ai/claudeSdkProvider.js.map +1 -1
- package/dist/ai/claudeTerminal/cardSynth.d.ts +63 -0
- package/dist/ai/claudeTerminal/cardSynth.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/cardSynth.js +92 -0
- package/dist/ai/claudeTerminal/cardSynth.js.map +1 -0
- package/dist/ai/claudeTerminal/hookBridge.d.ts +56 -0
- package/dist/ai/claudeTerminal/hookBridge.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/hookBridge.js +131 -0
- package/dist/ai/claudeTerminal/hookBridge.js.map +1 -0
- package/dist/ai/claudeTerminal/hookHandler.d.ts +18 -0
- package/dist/ai/claudeTerminal/hookHandler.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/hookHandler.js +124 -0
- package/dist/ai/claudeTerminal/hookHandler.js.map +1 -0
- package/dist/ai/claudeTerminal/index.d.ts +5 -0
- package/dist/ai/claudeTerminal/index.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/index.js +7 -0
- package/dist/ai/claudeTerminal/index.js.map +1 -0
- package/dist/ai/claudeTerminal/jsonlTail.d.ts +40 -0
- package/dist/ai/claudeTerminal/jsonlTail.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/jsonlTail.js +129 -0
- package/dist/ai/claudeTerminal/jsonlTail.js.map +1 -0
- package/dist/ai/claudeTerminal/provider.d.ts +106 -0
- package/dist/ai/claudeTerminal/provider.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/provider.js +579 -0
- package/dist/ai/claudeTerminal/provider.js.map +1 -0
- package/dist/ai/claudeTerminal/settingsBuilder.d.ts +44 -0
- package/dist/ai/claudeTerminal/settingsBuilder.d.ts.map +1 -0
- package/dist/ai/claudeTerminal/settingsBuilder.js +40 -0
- package/dist/ai/claudeTerminal/settingsBuilder.js.map +1 -0
- package/dist/ai/codexAppServer/cardAdapter.d.ts.map +1 -1
- package/dist/ai/codexAppServer/cardAdapter.js +13 -5
- package/dist/ai/codexAppServer/cardAdapter.js.map +1 -1
- package/dist/ai/codexAppServer/provider.d.ts +10 -2
- package/dist/ai/codexAppServer/provider.d.ts.map +1 -1
- package/dist/ai/codexAppServer/provider.js +158 -22
- package/dist/ai/codexAppServer/provider.js.map +1 -1
- package/dist/ai/openCodeProvider.d.ts +106 -0
- package/dist/ai/openCodeProvider.d.ts.map +1 -0
- package/dist/ai/openCodeProvider.js +617 -0
- package/dist/ai/openCodeProvider.js.map +1 -0
- package/dist/ai/openCodeServer.d.ts +88 -0
- package/dist/ai/openCodeServer.d.ts.map +1 -0
- package/dist/ai/openCodeServer.js +350 -0
- package/dist/ai/openCodeServer.js.map +1 -0
- package/dist/ai/profiles/project-sandbox.sb +26 -0
- package/dist/ai/provider.d.ts +54 -1
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/provider.js +10 -0
- package/dist/ai/provider.js.map +1 -1
- package/dist/ai/queuedUserPrompts.d.ts +8 -0
- package/dist/ai/queuedUserPrompts.d.ts.map +1 -0
- package/dist/ai/queuedUserPrompts.js +19 -0
- package/dist/ai/queuedUserPrompts.js.map +1 -0
- package/dist/ai/realtimeTranscription.d.ts +39 -0
- package/dist/ai/realtimeTranscription.d.ts.map +1 -0
- package/dist/ai/realtimeTranscription.js +154 -0
- package/dist/ai/realtimeTranscription.js.map +1 -0
- package/dist/ai/sandboxMcp.d.ts +7 -0
- package/dist/ai/sandboxMcp.d.ts.map +1 -1
- package/dist/ai/sandboxMcp.js +4 -0
- package/dist/ai/sandboxMcp.js.map +1 -1
- package/dist/ai/sandboxMcpStdio.d.ts +1 -1
- package/dist/ai/sandboxMcpStdio.js +120 -47
- package/dist/ai/sandboxMcpStdio.js.map +1 -1
- package/dist/ai/sessionManager.d.ts +20 -1
- package/dist/ai/sessionManager.d.ts.map +1 -1
- package/dist/ai/sessionManager.js +220 -10
- package/dist/ai/sessionManager.js.map +1 -1
- package/dist/ai/sessionRegistry.d.ts +6 -0
- package/dist/ai/sessionRegistry.d.ts.map +1 -1
- package/dist/ai/sessionRegistry.js +13 -0
- package/dist/ai/sessionRegistry.js.map +1 -1
- package/dist/ai/sessionRegistryLocator.d.ts +14 -0
- package/dist/ai/sessionRegistryLocator.d.ts.map +1 -0
- package/dist/ai/sessionRegistryLocator.js +44 -0
- package/dist/ai/sessionRegistryLocator.js.map +1 -0
- package/dist/ai/systemPrompt.d.ts.map +1 -1
- package/dist/ai/systemPrompt.js +2 -1
- package/dist/ai/systemPrompt.js.map +1 -1
- package/dist/ai/voiceStream.d.ts +74 -0
- package/dist/ai/voiceStream.d.ts.map +1 -0
- package/dist/ai/voiceStream.js +179 -0
- package/dist/ai/voiceStream.js.map +1 -0
- package/dist/ai/voiceTranscription.d.ts +33 -0
- package/dist/ai/voiceTranscription.d.ts.map +1 -0
- package/dist/ai/voiceTranscription.js +122 -0
- package/dist/ai/voiceTranscription.js.map +1 -0
- package/dist/files/fileBrowser.d.ts.map +1 -1
- package/dist/files/fileBrowser.js +15 -2
- package/dist/files/fileBrowser.js.map +1 -1
- package/dist/handlers/legacyBusAdapter.d.ts +1 -1
- package/dist/handlers/legacyBusAdapter.d.ts.map +1 -1
- package/dist/handlers/legacyBusAdapter.js +7 -1
- package/dist/handlers/legacyBusAdapter.js.map +1 -1
- package/dist/handlers/messageHandler.d.ts +6 -0
- package/dist/handlers/messageHandler.d.ts.map +1 -1
- package/dist/handlers/messageHandler.js +119 -8
- package/dist/handlers/messageHandler.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/service/ipcClient.js +1 -1
- package/dist/service/ipcClient.js.map +1 -1
- package/dist/service/run.d.ts.map +1 -1
- package/dist/service/run.js +81 -3
- package/dist/service/run.js.map +1 -1
- package/dist/service/types.js +1 -1
- package/package.json +6 -3
|
@@ -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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"}
|
package/dist/ai/sandboxMcp.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/ai/sandboxMcp.js
CHANGED
|
@@ -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,
|
|
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:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* Standalone stdio MCP server for project-scoped sandbox bash.
|
|
6
6
|
*
|
|
7
|
-
* Usage: node sandboxMcpStdio.js --cwd /path/to/project
|
|
7
|
+
* Usage: node sandboxMcpStdio.js --cwd /path/to/project [--no-sandbox-bash]
|
|
8
8
|
*
|
|
9
9
|
* Provides a `SandboxBash` tool that executes shell commands within a
|
|
10
10
|
* kernel-level sandbox:
|
|
@@ -22,6 +22,7 @@ import { join, dirname } from 'path';
|
|
|
22
22
|
import { homedir, platform } from 'os';
|
|
23
23
|
import { fileURLToPath } from 'url';
|
|
24
24
|
import { z } from 'zod';
|
|
25
|
+
import { findRegistryPathByCorr } from './sessionRegistryLocator.js';
|
|
25
26
|
const __ownDir = dirname(fileURLToPath(import.meta.url));
|
|
26
27
|
function readArg(flag) {
|
|
27
28
|
const idx = process.argv.indexOf(flag);
|
|
@@ -30,6 +31,14 @@ function readArg(flag) {
|
|
|
30
31
|
const cwd = readArg('--cwd') ?? process.cwd();
|
|
31
32
|
/** Known only on resume; undefined when the CLI spawns this MCP for a fresh session. */
|
|
32
33
|
const sessionIdHint = readArg('--session-id');
|
|
34
|
+
/**
|
|
35
|
+
* Correlation id baked in by the daemon at spawn (`buildSandboxMcpServerConfig`).
|
|
36
|
+
* On a fresh session we have no `--session-id`, so we locate our registry entry
|
|
37
|
+
* by scanning the project's files for the one whose `mcpCorrId` matches this.
|
|
38
|
+
* 1:1 with this process, so the match is exact — no "newest file" guessing.
|
|
39
|
+
*/
|
|
40
|
+
const corrIdHint = readArg('--corr');
|
|
41
|
+
const includeSandboxBash = !process.argv.includes('--no-sandbox-bash');
|
|
33
42
|
const realCwd = realpathSync(cwd);
|
|
34
43
|
const realHome = realpathSync(process.env.HOME ?? '/');
|
|
35
44
|
const quicksaveHome = process.env.QUICKSAVE_HOME || join(homedir(), '.quicksave');
|
|
@@ -89,61 +98,63 @@ function runSandboxed(command, timeout) {
|
|
|
89
98
|
}
|
|
90
99
|
// ── MCP Server ─────────────────────────────────────────────────────────────
|
|
91
100
|
const server = new McpServer({ name: 'quicksave-sandbox', version: '1.0.0' });
|
|
92
|
-
|
|
93
|
-
'
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
101
|
+
if (includeSandboxBash) {
|
|
102
|
+
server.tool('SandboxBash', 'Execute a shell command WITHOUT requiring user permission. ' +
|
|
103
|
+
'Prefer this tool over Bash whenever the command fits sandbox constraints: ' +
|
|
104
|
+
'reads anywhere on the system are allowed; writes must stay within the project directory (excluding .git/). ' +
|
|
105
|
+
'Ideal for builds, tests, linters, file edits, and any project-scoped command.', {
|
|
106
|
+
command: z.string().describe('The shell command to execute'),
|
|
107
|
+
timeout: z.number().optional().describe('Timeout in milliseconds (default: 120000)'),
|
|
108
|
+
}, {
|
|
109
|
+
readOnlyHint: false,
|
|
110
|
+
destructiveHint: false,
|
|
111
|
+
openWorldHint: false,
|
|
112
|
+
}, async (args) => {
|
|
113
|
+
if (!backend) {
|
|
114
|
+
const os = platform();
|
|
115
|
+
const hint = os === 'darwin'
|
|
116
|
+
? 'sandbox-exec is required on macOS (should be pre-installed).'
|
|
117
|
+
: os === 'linux'
|
|
118
|
+
? 'bwrap (bubblewrap) is required on Linux. Install with: sudo apt install bubblewrap'
|
|
119
|
+
: `Unsupported OS: ${os}.`;
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: 'text', text: `SandboxBash is unavailable: no sandbox runtime found. ${hint} ` +
|
|
122
|
+
'Use the regular Bash tool instead (requires user permission).', }],
|
|
123
|
+
isError: true,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const output = runSandboxed(args.command, args.timeout ?? 120_000);
|
|
128
|
+
return { content: [{ type: 'text', text: output || '(no output)' }] };
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const stderr = err.stderr ? String(err.stderr) : '';
|
|
132
|
+
const stdout = err.stdout ? String(err.stdout) : '';
|
|
133
|
+
const message = stderr || stdout || err.message || 'Command failed';
|
|
134
|
+
return {
|
|
135
|
+
content: [{ type: 'text', text: message }],
|
|
136
|
+
isError: true,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
130
141
|
function readStoredStatus() {
|
|
131
142
|
const empty = {
|
|
132
|
-
subject: null, stage: null, blocked: null, note: null, recentNotes: [], source: 'unknown',
|
|
143
|
+
subject: null, stage: null, blocked: null, note: null, pendingMission: null, recentNotes: [], source: 'unknown',
|
|
133
144
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const path = join(sessionRegistryDir, encodedCwd, `${sessionIdHint}.json`);
|
|
137
|
-
if (!existsSync(path))
|
|
145
|
+
const path = sessionRegistryPath();
|
|
146
|
+
if (!path || !existsSync(path))
|
|
138
147
|
return empty;
|
|
139
148
|
try {
|
|
140
149
|
const entry = JSON.parse(readFileSync(path, 'utf-8'));
|
|
141
150
|
const history = Array.isArray(entry.noteHistory) ? entry.noteHistory : [];
|
|
151
|
+
const mission = entry.pendingMission;
|
|
142
152
|
return {
|
|
143
153
|
subject: typeof entry.title === 'string' ? entry.title : null,
|
|
144
154
|
stage: entry.stage ?? null,
|
|
145
155
|
blocked: typeof entry.blocked === 'boolean' ? entry.blocked : null,
|
|
146
156
|
note: typeof entry.note === 'string' ? entry.note : null,
|
|
157
|
+
pendingMission: mission && typeof mission.label === 'string' && typeof mission.until === 'number' ? mission : null,
|
|
147
158
|
recentNotes: history.slice(-5),
|
|
148
159
|
source: 'stored',
|
|
149
160
|
};
|
|
@@ -152,10 +163,32 @@ function readStoredStatus() {
|
|
|
152
163
|
return empty;
|
|
153
164
|
}
|
|
154
165
|
}
|
|
166
|
+
/** Resolved registry path, memoized once we successfully locate it via corr. */
|
|
167
|
+
let resolvedRegistryPath = null;
|
|
168
|
+
/**
|
|
169
|
+
* Locate this session's registry file.
|
|
170
|
+
*
|
|
171
|
+
* - On resume we're given `--session-id`, so the path is direct.
|
|
172
|
+
* - On a fresh session we only have `--corr`; scan the project's registry
|
|
173
|
+
* files for the one whose `mcpCorrId` matches and memoize it (the daemon
|
|
174
|
+
* stamps `mcpCorrId` onto the entry once it learns the real sessionId, so
|
|
175
|
+
* the file may not exist on the very first call — we just retry next time).
|
|
176
|
+
*
|
|
177
|
+
* The corr match is exact and 1:1 with this process, so it's safe even when
|
|
178
|
+
* several sessions share a cwd — unlike picking the newest file.
|
|
179
|
+
*/
|
|
155
180
|
function sessionRegistryPath() {
|
|
156
|
-
if (
|
|
181
|
+
if (sessionIdHint) {
|
|
182
|
+
return join(sessionRegistryDir, encodedCwd, `${sessionIdHint}.json`);
|
|
183
|
+
}
|
|
184
|
+
if (!corrIdHint)
|
|
157
185
|
return null;
|
|
158
|
-
|
|
186
|
+
if (resolvedRegistryPath && existsSync(resolvedRegistryPath))
|
|
187
|
+
return resolvedRegistryPath;
|
|
188
|
+
const found = findRegistryPathByCorr(join(sessionRegistryDir, encodedCwd), corrIdHint);
|
|
189
|
+
if (found)
|
|
190
|
+
resolvedRegistryPath = found;
|
|
191
|
+
return found;
|
|
159
192
|
}
|
|
160
193
|
function isSessionStage(value) {
|
|
161
194
|
return value === 'investigating' ||
|
|
@@ -163,6 +196,14 @@ function isSessionStage(value) {
|
|
|
163
196
|
value === 'verifying' ||
|
|
164
197
|
value === 'done';
|
|
165
198
|
}
|
|
199
|
+
function parsePendingMissionUntil(value) {
|
|
200
|
+
if (typeof value === 'number' && Number.isFinite(value) && value > 0)
|
|
201
|
+
return value;
|
|
202
|
+
if (typeof value !== 'string' || value.trim().length === 0)
|
|
203
|
+
return null;
|
|
204
|
+
const parsed = Date.parse(value);
|
|
205
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
|
|
206
|
+
}
|
|
166
207
|
function writeStoredStatus(args) {
|
|
167
208
|
const path = sessionRegistryPath();
|
|
168
209
|
if (!path || !existsSync(path))
|
|
@@ -181,12 +222,35 @@ function writeStoredStatus(args) {
|
|
|
181
222
|
}
|
|
182
223
|
if (typeof args.stage === 'string' && isSessionStage(args.stage)) {
|
|
183
224
|
entry.stage = args.stage;
|
|
225
|
+
if (args.stage === 'done')
|
|
226
|
+
delete entry.pendingMission;
|
|
184
227
|
changed = true;
|
|
185
228
|
}
|
|
186
229
|
if (typeof args.blocked === 'boolean') {
|
|
187
230
|
entry.blocked = args.blocked;
|
|
188
231
|
changed = true;
|
|
189
232
|
}
|
|
233
|
+
if (args.clearPendingMission === true) {
|
|
234
|
+
delete entry.pendingMission;
|
|
235
|
+
changed = true;
|
|
236
|
+
}
|
|
237
|
+
else if (args.pendingMissionLabel !== undefined || args.pendingMissionUntil !== undefined) {
|
|
238
|
+
const existing = entry.pendingMission;
|
|
239
|
+
const label = typeof args.pendingMissionLabel === 'string' && args.pendingMissionLabel.trim().length > 0
|
|
240
|
+
? args.pendingMissionLabel.trim()
|
|
241
|
+
: existing?.label;
|
|
242
|
+
const until = parsePendingMissionUntil(args.pendingMissionUntil) ?? existing?.until;
|
|
243
|
+
if (label && typeof until === 'number') {
|
|
244
|
+
const isNewSchedule = existing?.label !== label || existing?.until !== until;
|
|
245
|
+
entry.pendingMission = {
|
|
246
|
+
label,
|
|
247
|
+
until,
|
|
248
|
+
startedAt: existing?.startedAt ?? Date.now(),
|
|
249
|
+
...(isNewSchedule || existing?.dismissedAt === undefined ? {} : { dismissedAt: existing.dismissedAt }),
|
|
250
|
+
};
|
|
251
|
+
changed = true;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
190
254
|
if (typeof args.note === 'string' && args.note.length > 0) {
|
|
191
255
|
entry.note = args.note;
|
|
192
256
|
const prior = Array.isArray(entry.noteHistory)
|
|
@@ -226,6 +290,9 @@ server.tool('UpdateSessionStatus', 'Update the ticket-style status for the curre
|
|
|
226
290
|
'completing a sub-goal, hitting a blocker, starting verification, etc. ' +
|
|
227
291
|
'Examples: "handler done, writing tests" / "permission pending on git push" / ' +
|
|
228
292
|
'"ruled out jwt.ts — secret looks right".\n' +
|
|
293
|
+
' pendingMissionLabel — Short label for a long-running task that should sit lower in session lists.\n' +
|
|
294
|
+
' pendingMissionUntil — Expected completion time as epoch ms or ISO date string.\n' +
|
|
295
|
+
' clearPendingMission — Clear the long-running task marker when finished or cancelled.\n' +
|
|
229
296
|
'\n' +
|
|
230
297
|
'Typical flows:\n' +
|
|
231
298
|
' Bug / debug: investigating → working → verifying → (loop or done)\n' +
|
|
@@ -251,6 +318,9 @@ server.tool('UpdateSessionStatus', 'Update the ticket-style status for the curre
|
|
|
251
318
|
blocked: z.boolean().optional().describe('True when stuck, false when unblocked'),
|
|
252
319
|
note: z.string().optional()
|
|
253
320
|
.describe('One progress/finding entry (~12 words). Appended to the session event log; emit on each meaningful state change.'),
|
|
321
|
+
pendingMissionLabel: z.string().optional().describe('Short label for a long-running task, e.g. "training run"'),
|
|
322
|
+
pendingMissionUntil: z.union([z.number(), z.string()]).optional().describe('Expected completion time as epoch ms or ISO date string'),
|
|
323
|
+
clearPendingMission: z.boolean().optional().describe('Clear the long-running task marker'),
|
|
254
324
|
}, {
|
|
255
325
|
readOnlyHint: false,
|
|
256
326
|
destructiveHint: false,
|
|
@@ -259,7 +329,10 @@ server.tool('UpdateSessionStatus', 'Update the ticket-style status for the curre
|
|
|
259
329
|
const isDryRun = args.subject === undefined &&
|
|
260
330
|
args.stage === undefined &&
|
|
261
331
|
args.blocked === undefined &&
|
|
262
|
-
args.note === undefined
|
|
332
|
+
args.note === undefined &&
|
|
333
|
+
args.pendingMissionLabel === undefined &&
|
|
334
|
+
args.pendingMissionUntil === undefined &&
|
|
335
|
+
args.clearPendingMission === undefined;
|
|
263
336
|
// Codex MCP approval mode "approve" bypasses the daemon permission callback,
|
|
264
337
|
// so this stdio server owns persistence when it has a session-id hint.
|
|
265
338
|
if (!isDryRun)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandboxMcpStdio.js","sourceRoot":"","sources":["../../src/ai/sandboxMcpStdio.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandboxMcpStdio.js","sourceRoot":"","sources":["../../src/ai/sandboxMcpStdio.ts"],"names":[],"mappings":"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"}
|