autodev-cli 1.4.186 → 1.4.188

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.
@@ -0,0 +1,122 @@
1
+ /** Callbacks the host (tui.ts) injects so hook emission + redaction stay in one place. */
2
+ export interface AcpHostHooks {
3
+ /** Emit ONE hook event to .autodev/hooks-events.jsonl (host adds redaction). */
4
+ emitHook(name: string, extra: Record<string, unknown>): void;
5
+ /** Human log line. */
6
+ log(msg: string): void;
7
+ }
8
+ export interface AcpTurnResult {
9
+ clean: boolean;
10
+ stopReason: string;
11
+ error?: string;
12
+ }
13
+ /** A decoded session/update notification (pure; unit-tested). */
14
+ export type AcpUpdate = {
15
+ kind: 'assistant';
16
+ text: string;
17
+ } | {
18
+ kind: 'tool_call';
19
+ id: string;
20
+ name: string;
21
+ input: unknown;
22
+ } | {
23
+ kind: 'tool_result';
24
+ id: string;
25
+ outputText: string;
26
+ status: string;
27
+ } | {
28
+ kind: 'other';
29
+ };
30
+ /**
31
+ * Decode a raw JSON-RPC message that is a session/update notification into the
32
+ * minimal shape the host maps to hooks. Returns {kind:'other'} for anything we
33
+ * don't forward (queue/model/mcp/x.ai bookkeeping notifications, etc.). PURE.
34
+ */
35
+ export declare function decodeAcpUpdate(msg: unknown): AcpUpdate;
36
+ /** Best-effort flatten of a tool_call_update's output into a short string. PURE. */
37
+ export declare function extractToolOutput(u: Record<string, unknown>): string;
38
+ /**
39
+ * Classify a session/prompt RESULT into clean-vs-error for the exit file. PURE.
40
+ * - end_turn / max_tokens / max_turn_requests → clean (exit 0)
41
+ * - cancelled → clean (an intentional interrupt, not a failure)
42
+ * - a JSON-RPC error, or any other stopReason → error (exit 1)
43
+ */
44
+ export declare function classifyAcpResult(result: {
45
+ result?: {
46
+ stopReason?: string;
47
+ };
48
+ error?: {
49
+ message?: string;
50
+ };
51
+ }): AcpTurnResult;
52
+ /**
53
+ * One persistent `grok agent stdio` process for a workspace root. Not exported as
54
+ * a singleton — the host (tui.ts) keeps a Map<root, GrokAcpSession> and reuses it.
55
+ */
56
+ export declare class GrokAcpSession {
57
+ private readonly root;
58
+ private readonly model;
59
+ private readonly bin;
60
+ private readonly hooks;
61
+ private readonly extraArgs;
62
+ private child;
63
+ private buf;
64
+ private nextId;
65
+ private readonly pending;
66
+ private _sessionId;
67
+ private _wantSessionId;
68
+ private _ready;
69
+ private _busy;
70
+ private _startCount;
71
+ private earlyStderr;
72
+ /** The active PRIMARY turn's stdout sink (assistant text). Null between turns. */
73
+ private _sink;
74
+ /** Tool-call names by id, so a tool_result can carry the originating name. */
75
+ private readonly _toolNames;
76
+ /** Accumulates assistant chunks so Notification hooks are line-granular, not
77
+ * per-token (grok streams a few chars per chunk — one bubble per token floods
78
+ * the office feed). Flushed on each newline and at turn end. */
79
+ private _narrationBuf;
80
+ constructor(opts: {
81
+ root: string;
82
+ model?: string;
83
+ bin: string;
84
+ hooks: AcpHostHooks;
85
+ initialSessionId?: string;
86
+ extraArgs?: string[];
87
+ });
88
+ get pid(): number | undefined;
89
+ get sessionId(): string | undefined;
90
+ isBusy(): boolean;
91
+ isAlive(): boolean;
92
+ /** Spawn + initialize + session/new|load, once. Respawns transparently if dead. */
93
+ ensureReady(): Promise<void>;
94
+ private _startup;
95
+ private _spawnChild;
96
+ private _onExit;
97
+ private _onStdout;
98
+ private _handle;
99
+ private _onUpdate;
100
+ /** Emit completed narration lines as Notification hooks. `final` flushes the
101
+ * trailing partial line (turn end). Keeps the office feed line-granular. */
102
+ private _flushNarration;
103
+ /**
104
+ * Run ONE primary turn: send the prompt and await turn end. Streams assistant
105
+ * text to `sink`. Emits Stop/StopFailure + SessionEnd via the host hooks. The
106
+ * process stays alive afterward.
107
+ */
108
+ runTurn(promptText: string, sink: (text: string) => void): Promise<AcpTurnResult>;
109
+ /**
110
+ * Deliver a mid-run STEER to the LIVE process: send an additional
111
+ * session/prompt that grok QUEUES (FIFO) and runs next — without exiting.
112
+ * Returns true if handed to the live agent, false if no live session.
113
+ */
114
+ steer(text: string): boolean;
115
+ /** Cancel the running turn (process stays alive). */
116
+ cancel(): void;
117
+ /** Kill the persistent process. Preserves the known session id for a later load. */
118
+ close(): void;
119
+ private _request;
120
+ private _send;
121
+ get stderrSnapshot(): string;
122
+ }
@@ -0,0 +1,506 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // GrokAcpSession — a PERSISTENT `grok agent stdio` process, one per workspace
4
+ // root, that stays alive across MANY turns in a SINGLE process.
5
+ //
6
+ // This is the foundation of the persistent-process agent model. Instead of
7
+ // spawning `grok --prompt-file … --output-format streaming-json` once PER TURN
8
+ // (which exits every turn and forces a per-turn `--resume`, the entire source of
9
+ // the resume pain), we launch ONE long-lived agent that speaks the Agent Client
10
+ // Protocol (ACP, JSON-RPC 2.0 over stdio) and drive it turn-by-turn:
11
+ //
12
+ // spawn once → `initialize` → `session/new` (or `session/load` to RESTORE a
13
+ // prior session's context on a (re)start) → then, per turn, `session/prompt`
14
+ // and await the turn's completion, KEEPING THE PROCESS ALIVE between turns.
15
+ //
16
+ // Resume now happens ONLY at (re)start via `session/load` — exactly as the user
17
+ // asked ("Resume only when we restart the session").
18
+ //
19
+ // Wire protocol (reverse-engineered against grok 1.0.13; frames captured in the
20
+ // shipping report):
21
+ // - Framing: line-delimited JSON-RPC 2.0 (mirrors StdioMcpClient in
22
+ // src/mcpEmailTest.ts). NOT LSP Content-Length.
23
+ // - initialize {protocolVersion:1, clientCapabilities:{}} ->
24
+ // {protocolVersion, agentCapabilities:{loadSession:true,…}}
25
+ // - session/new {cwd, mcpServers:[]} -> {sessionId, models:{…}}
26
+ // (grok STILL loads its own config MCP servers — mcp_initialized fires even
27
+ // with mcpServers:[], so office/operate MCP keeps working.)
28
+ // - session/load {sessionId, cwd, mcpServers:[]} -> replays the conversation as
29
+ // session/update notifications, then resolves — restores in-process context.
30
+ // - session/prompt {sessionId, prompt:[{type:'text',text}]} ->
31
+ // {stopReason:'end_turn'|'cancelled'|…, _meta:{usage,…}} (the
32
+ // turn-end signal: resolves at turn end).
33
+ // - session/update NOTIFICATIONS stream during a turn:
34
+ // agent_message_chunk {content:{type:'text',text}} -> assistant narration
35
+ // tool_call {toolCallId,title,rawInput} -> PreToolUse
36
+ // tool_call_update {toolCallId,status:'completed',…} -> PostToolUse
37
+ // - session/cancel {sessionId} (notification) cancels the running turn; the
38
+ // process STAYS ALIVE (a later prompt returns normally). Used for stop.
39
+ // - A second session/prompt sent mid-turn is QUEUED by grok (FIFO) and run
40
+ // after the current turn — this is how a mid-run STEER reaches the live
41
+ // process without exiting it.
42
+ //
43
+ // With `--always-approve` grok never sends session/request_permission, and with
44
+ // EMPTY client capabilities grok performs its own fs/terminal I/O (verified) —
45
+ // so the client stays tiny. We still defensively answer any agent→client request.
46
+ // ---------------------------------------------------------------------------
47
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
48
+ if (k2 === undefined) k2 = k;
49
+ var desc = Object.getOwnPropertyDescriptor(m, k);
50
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
51
+ desc = { enumerable: true, get: function() { return m[k]; } };
52
+ }
53
+ Object.defineProperty(o, k2, desc);
54
+ }) : (function(o, m, k, k2) {
55
+ if (k2 === undefined) k2 = k;
56
+ o[k2] = m[k];
57
+ }));
58
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
59
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
60
+ }) : function(o, v) {
61
+ o["default"] = v;
62
+ });
63
+ var __importStar = (this && this.__importStar) || (function () {
64
+ var ownKeys = function(o) {
65
+ ownKeys = Object.getOwnPropertyNames || function (o) {
66
+ var ar = [];
67
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
68
+ return ar;
69
+ };
70
+ return ownKeys(o);
71
+ };
72
+ return function (mod) {
73
+ if (mod && mod.__esModule) return mod;
74
+ var result = {};
75
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
76
+ __setModuleDefault(result, mod);
77
+ return result;
78
+ };
79
+ })();
80
+ Object.defineProperty(exports, "__esModule", { value: true });
81
+ exports.GrokAcpSession = void 0;
82
+ exports.decodeAcpUpdate = decodeAcpUpdate;
83
+ exports.extractToolOutput = extractToolOutput;
84
+ exports.classifyAcpResult = classifyAcpResult;
85
+ const child_process = __importStar(require("child_process"));
86
+ /**
87
+ * Decode a raw JSON-RPC message that is a session/update notification into the
88
+ * minimal shape the host maps to hooks. Returns {kind:'other'} for anything we
89
+ * don't forward (queue/model/mcp/x.ai bookkeeping notifications, etc.). PURE.
90
+ */
91
+ function decodeAcpUpdate(msg) {
92
+ const m = msg;
93
+ if (!m || m.method !== 'session/update' || !m.params || !m.params.update) {
94
+ return { kind: 'other' };
95
+ }
96
+ const u = m.params.update;
97
+ const su = u['sessionUpdate'];
98
+ if (su === 'agent_message_chunk') {
99
+ const content = u['content'];
100
+ if (content && content.type === 'text' && typeof content.text === 'string') {
101
+ return { kind: 'assistant', text: content.text };
102
+ }
103
+ return { kind: 'other' };
104
+ }
105
+ if (su === 'tool_call') {
106
+ const id = String(u['toolCallId'] ?? '');
107
+ // Prefer grok's real tool name from _meta['x.ai/tool'].name; fall back to title.
108
+ const meta = u['_meta'];
109
+ const name = String(meta?.['x.ai/tool']?.name || u['title'] || '').trim();
110
+ return { kind: 'tool_call', id, name, input: u['rawInput'] };
111
+ }
112
+ if (su === 'tool_call_update') {
113
+ const status = String(u['status'] ?? '');
114
+ if (status !== 'completed' && status !== 'failed') {
115
+ return { kind: 'other' };
116
+ }
117
+ const id = String(u['toolCallId'] ?? '');
118
+ return { kind: 'tool_result', id, status, outputText: extractToolOutput(u) };
119
+ }
120
+ return { kind: 'other' };
121
+ }
122
+ /** Best-effort flatten of a tool_call_update's output into a short string. PURE. */
123
+ function extractToolOutput(u) {
124
+ const raw = u['rawOutput'];
125
+ if (typeof raw === 'string') {
126
+ return raw;
127
+ }
128
+ if (raw && typeof raw === 'object') {
129
+ try {
130
+ return JSON.stringify(raw);
131
+ }
132
+ catch { /* ignore */ }
133
+ }
134
+ const content = u['content'];
135
+ if (Array.isArray(content)) {
136
+ const parts = [];
137
+ for (const c of content) {
138
+ const cc = c;
139
+ if (cc?.type === 'text' && typeof cc.text === 'string') {
140
+ parts.push(cc.text);
141
+ }
142
+ else if (cc?.type === 'diff' && typeof cc.newText === 'string') {
143
+ parts.push(cc.newText);
144
+ }
145
+ }
146
+ if (parts.length) {
147
+ return parts.join('\n');
148
+ }
149
+ }
150
+ return '';
151
+ }
152
+ /**
153
+ * Classify a session/prompt RESULT into clean-vs-error for the exit file. PURE.
154
+ * - end_turn / max_tokens / max_turn_requests → clean (exit 0)
155
+ * - cancelled → clean (an intentional interrupt, not a failure)
156
+ * - a JSON-RPC error, or any other stopReason → error (exit 1)
157
+ */
158
+ function classifyAcpResult(result) {
159
+ if (result.error) {
160
+ return { clean: false, stopReason: 'error', error: String(result.error.message || 'jsonrpc error') };
161
+ }
162
+ const sr = String(result.result?.stopReason ?? '');
163
+ const CLEAN = new Set(['end_turn', 'max_tokens', 'max_turn_requests', 'cancelled']);
164
+ return { clean: CLEAN.has(sr), stopReason: sr || 'unknown' };
165
+ }
166
+ /**
167
+ * One persistent `grok agent stdio` process for a workspace root. Not exported as
168
+ * a singleton — the host (tui.ts) keeps a Map<root, GrokAcpSession> and reuses it.
169
+ */
170
+ class GrokAcpSession {
171
+ root;
172
+ model;
173
+ bin;
174
+ hooks;
175
+ extraArgs;
176
+ child = null;
177
+ buf = '';
178
+ nextId = 1;
179
+ pending = new Map();
180
+ _sessionId;
181
+ _wantSessionId; // id to session/load on (re)start
182
+ _ready = null;
183
+ _busy = false;
184
+ _startCount = 0;
185
+ earlyStderr = '';
186
+ /** The active PRIMARY turn's stdout sink (assistant text). Null between turns. */
187
+ _sink = null;
188
+ /** Tool-call names by id, so a tool_result can carry the originating name. */
189
+ _toolNames = new Map();
190
+ /** Accumulates assistant chunks so Notification hooks are line-granular, not
191
+ * per-token (grok streams a few chars per chunk — one bubble per token floods
192
+ * the office feed). Flushed on each newline and at turn end. */
193
+ _narrationBuf = '';
194
+ constructor(opts) {
195
+ this.root = opts.root;
196
+ this.model = opts.model;
197
+ this.bin = opts.bin;
198
+ this.hooks = opts.hooks;
199
+ this._wantSessionId = opts.initialSessionId;
200
+ this.extraArgs = opts.extraArgs ?? [];
201
+ }
202
+ get pid() { return this.child?.pid; }
203
+ get sessionId() { return this._sessionId; }
204
+ isBusy() { return this._busy; }
205
+ isAlive() { return !!this.child && this.child.exitCode === null && !this.child.killed; }
206
+ /** Spawn + initialize + session/new|load, once. Respawns transparently if dead. */
207
+ async ensureReady() {
208
+ if (this.isAlive() && this._sessionId) {
209
+ return;
210
+ }
211
+ if (this._ready) {
212
+ return this._ready;
213
+ }
214
+ this._ready = this._startup().catch((err) => { this._ready = null; throw err; });
215
+ return this._ready;
216
+ }
217
+ async _startup() {
218
+ this._spawnChild();
219
+ await this._request('initialize', {
220
+ protocolVersion: 1,
221
+ clientCapabilities: {},
222
+ });
223
+ // Resume-on-(re)start: if a prior session id is known, session/load restores
224
+ // its in-process context; on any failure, fall back to a fresh session/new.
225
+ const want = this._wantSessionId;
226
+ if (want) {
227
+ try {
228
+ const r = await this._request('session/load', { sessionId: want, cwd: this.root, mcpServers: [] });
229
+ if (!r.error) {
230
+ this._sessionId = want;
231
+ this.hooks.log(`Grok ACP: restored session ${want.slice(0, 8)}… (session/load) — context intact`);
232
+ }
233
+ }
234
+ catch (err) {
235
+ this.hooks.log(`Grok ACP: session/load ${want.slice(0, 8)}… failed (${err?.message ?? err}); starting fresh`);
236
+ }
237
+ }
238
+ if (!this._sessionId) {
239
+ const sn = await this._request('session/new', { cwd: this.root, mcpServers: [] });
240
+ const sid = sn.result?.sessionId;
241
+ if (!sid) {
242
+ throw new Error('session/new returned no sessionId');
243
+ }
244
+ this._sessionId = sid;
245
+ this.hooks.log(`Grok ACP: new persistent session ${sid.slice(0, 8)}…`);
246
+ }
247
+ this._wantSessionId = this._sessionId;
248
+ this.hooks.emitHook('SessionStart', { source: this._startCount > 1 ? 'resume' : 'startup' });
249
+ }
250
+ _spawnChild() {
251
+ this._startCount++;
252
+ const args = ['agent', '--always-approve'];
253
+ if (this.model) {
254
+ args.push('-m', this.model);
255
+ }
256
+ args.push('--no-leader', ...this.extraArgs, 'stdio');
257
+ const child = child_process.spawn(this.bin, args, {
258
+ cwd: this.root,
259
+ stdio: ['pipe', 'pipe', 'pipe'],
260
+ env: { ...process.env, TERM: process.env['TERM'] || 'xterm-256color' },
261
+ });
262
+ this.child = child;
263
+ this.buf = '';
264
+ this.earlyStderr = '';
265
+ child.stdout?.setEncoding('utf8');
266
+ child.stdout?.on('data', (chunk) => this._onStdout(chunk));
267
+ child.stderr?.on('data', (chunk) => {
268
+ const s = chunk.toString();
269
+ if (this.earlyStderr.length < 4000) {
270
+ this.earlyStderr += s;
271
+ }
272
+ });
273
+ child.on('exit', (code, sig) => this._onExit(code, sig));
274
+ child.on('error', (err) => this.hooks.log(`Grok ACP: child error: ${err.message}`));
275
+ }
276
+ _onExit(code, sig) {
277
+ this.hooks.log(`Grok ACP: agent process exited (code=${code} sig=${sig})`);
278
+ this.child = null;
279
+ this._ready = null;
280
+ this._sink = null;
281
+ this._busy = false;
282
+ // Reject any in-flight requests so an awaiting turn resolves (as an error) and
283
+ // the loop can retry — the next turn respawns + session/load restores context.
284
+ const err = { error: { message: `grok agent exited (code=${code} sig=${sig})` } };
285
+ for (const [, p] of this.pending) {
286
+ try {
287
+ p.resolve(err);
288
+ }
289
+ catch { /* ignore */ }
290
+ }
291
+ this.pending.clear();
292
+ }
293
+ _onStdout(chunk) {
294
+ this.buf += chunk;
295
+ let nl;
296
+ while ((nl = this.buf.indexOf('\n')) >= 0) {
297
+ const line = this.buf.slice(0, nl).trim();
298
+ this.buf = this.buf.slice(nl + 1);
299
+ if (!line) {
300
+ continue;
301
+ }
302
+ let msg;
303
+ try {
304
+ msg = JSON.parse(line);
305
+ }
306
+ catch {
307
+ continue;
308
+ }
309
+ this._handle(msg);
310
+ }
311
+ }
312
+ _handle(msg) {
313
+ const id = msg['id'];
314
+ // Response to one of our requests.
315
+ if (typeof id === 'number' && (msg['result'] !== undefined || msg['error'] !== undefined) && this.pending.has(id)) {
316
+ const p = this.pending.get(id);
317
+ this.pending.delete(id);
318
+ p.resolve(msg);
319
+ return;
320
+ }
321
+ // Request FROM the agent (we are the client). With empty caps grok does its
322
+ // own fs/terminal, but answer defensively so nothing ever wedges.
323
+ if (msg['method'] && id !== undefined) {
324
+ const method = String(msg['method']);
325
+ if (method === 'session/request_permission') {
326
+ const params = msg['params'];
327
+ const opts = params?.options ?? [];
328
+ const allow = opts.find((o) => /allow/i.test(o.optionId || o.kind || '')) || opts[0];
329
+ this._send({ jsonrpc: '2.0', id, result: { outcome: { outcome: 'selected', optionId: allow?.optionId } } });
330
+ }
331
+ else {
332
+ // Unknown/unsupported client method → tell grok to handle it itself.
333
+ this._send({ jsonrpc: '2.0', id, error: { code: -32601, message: 'client capability not provided' } });
334
+ }
335
+ return;
336
+ }
337
+ // Notification from the agent.
338
+ if (msg['method'] === 'session/update') {
339
+ this._onUpdate(decodeAcpUpdate(msg));
340
+ }
341
+ }
342
+ _onUpdate(u) {
343
+ if (u.kind === 'assistant') {
344
+ if (this._sink) {
345
+ try {
346
+ this._sink(u.text);
347
+ }
348
+ catch { /* ignore */ }
349
+ }
350
+ this._narrationBuf += u.text;
351
+ this._flushNarration(false);
352
+ return;
353
+ }
354
+ if (u.kind === 'tool_call') {
355
+ if (!u.name || u.name.startsWith('mcp__')) {
356
+ return;
357
+ } // office logs MCP tools server-side
358
+ this._toolNames.set(u.id, u.name);
359
+ this.hooks.emitHook('PreToolUse', { tool_name: u.name, tool_input: u.input, tool_use_id: u.id });
360
+ return;
361
+ }
362
+ if (u.kind === 'tool_result') {
363
+ const name = this._toolNames.get(u.id);
364
+ if (!name) {
365
+ return;
366
+ } // no matching Pre (skipped mcp tool / replay) — don't emit orphan
367
+ this._toolNames.delete(u.id);
368
+ if (u.status === 'failed') {
369
+ this.hooks.emitHook('PostToolUseFailure', { tool_name: name, tool_use_id: u.id, outcome: 'error', tool_output: { text: u.outputText.slice(0, 2000) } });
370
+ }
371
+ else {
372
+ this.hooks.emitHook('PostToolUse', { tool_name: name, tool_use_id: u.id, tool_output: { text: u.outputText.slice(0, 2000) } });
373
+ }
374
+ }
375
+ }
376
+ /** Emit completed narration lines as Notification hooks. `final` flushes the
377
+ * trailing partial line (turn end). Keeps the office feed line-granular. */
378
+ _flushNarration(final) {
379
+ let nl;
380
+ while ((nl = this._narrationBuf.indexOf('\n')) >= 0) {
381
+ const line = this._narrationBuf.slice(0, nl);
382
+ this._narrationBuf = this._narrationBuf.slice(nl + 1);
383
+ if (line.trim()) {
384
+ this.hooks.emitHook('Notification', { message: line, title: 'grok', tool_name: 'grok' });
385
+ }
386
+ }
387
+ if (final && this._narrationBuf.trim()) {
388
+ this.hooks.emitHook('Notification', { message: this._narrationBuf, title: 'grok', tool_name: 'grok' });
389
+ }
390
+ if (final) {
391
+ this._narrationBuf = '';
392
+ }
393
+ }
394
+ /**
395
+ * Run ONE primary turn: send the prompt and await turn end. Streams assistant
396
+ * text to `sink`. Emits Stop/StopFailure + SessionEnd via the host hooks. The
397
+ * process stays alive afterward.
398
+ */
399
+ async runTurn(promptText, sink) {
400
+ await this.ensureReady();
401
+ this._busy = true;
402
+ this._sink = sink;
403
+ let res;
404
+ try {
405
+ const r = await this._request('session/prompt', {
406
+ sessionId: this._sessionId,
407
+ prompt: [{ type: 'text', text: promptText }],
408
+ });
409
+ res = classifyAcpResult(r);
410
+ }
411
+ catch (err) {
412
+ res = { clean: false, stopReason: 'exception', error: err?.message ?? String(err) };
413
+ }
414
+ finally {
415
+ this._flushNarration(true);
416
+ this._sink = null;
417
+ this._busy = false;
418
+ }
419
+ if (res.clean) {
420
+ this.hooks.emitHook('Stop', {});
421
+ this.hooks.emitHook('SessionEnd', { reason: 'completed' });
422
+ }
423
+ else {
424
+ this.hooks.emitHook('StopFailure', { exit_code: 1 });
425
+ this.hooks.emitHook('SessionEnd', { reason: 'error' });
426
+ }
427
+ return res;
428
+ }
429
+ /**
430
+ * Deliver a mid-run STEER to the LIVE process: send an additional
431
+ * session/prompt that grok QUEUES (FIFO) and runs next — without exiting.
432
+ * Returns true if handed to the live agent, false if no live session.
433
+ */
434
+ steer(text) {
435
+ if (!this.isAlive() || !this._sessionId) {
436
+ return false;
437
+ }
438
+ const t = text.trim();
439
+ if (!t) {
440
+ return false;
441
+ }
442
+ // Fire-and-forget: resolves on its own promptId; we don't tie it to exitFile.
443
+ this._request('session/prompt', { sessionId: this._sessionId, prompt: [{ type: 'text', text: t }] })
444
+ .catch(() => { });
445
+ return true;
446
+ }
447
+ /** Cancel the running turn (process stays alive). */
448
+ cancel() {
449
+ if (!this.isAlive() || !this._sessionId) {
450
+ return;
451
+ }
452
+ this._send({ jsonrpc: '2.0', method: 'session/cancel', params: { sessionId: this._sessionId } });
453
+ }
454
+ /** Kill the persistent process. Preserves the known session id for a later load. */
455
+ close() {
456
+ const c = this.child;
457
+ this.child = null;
458
+ this._ready = null;
459
+ this._sink = null;
460
+ this._busy = false;
461
+ for (const [, p] of this.pending) {
462
+ try {
463
+ p.resolve({ error: { message: 'closed' } });
464
+ }
465
+ catch { /* ignore */ }
466
+ }
467
+ this.pending.clear();
468
+ if (c) {
469
+ try {
470
+ c.stdin?.end();
471
+ }
472
+ catch { /* ignore */ }
473
+ try {
474
+ c.kill('SIGKILL');
475
+ }
476
+ catch { /* ignore */ }
477
+ }
478
+ }
479
+ _request(method, params) {
480
+ const id = this.nextId++;
481
+ return new Promise((resolve) => {
482
+ this.pending.set(id, { resolve });
483
+ const ok = this._send({ jsonrpc: '2.0', id, method, params });
484
+ if (!ok) {
485
+ this.pending.delete(id);
486
+ resolve({ error: { message: 'stdin write failed (agent not running)' } });
487
+ }
488
+ });
489
+ }
490
+ _send(obj) {
491
+ const c = this.child;
492
+ if (!c || !c.stdin || c.stdin.destroyed) {
493
+ return false;
494
+ }
495
+ try {
496
+ c.stdin.write(JSON.stringify(obj) + '\n');
497
+ return true;
498
+ }
499
+ catch {
500
+ return false;
501
+ }
502
+ }
503
+ get stderrSnapshot() { return this.earlyStderr; }
504
+ }
505
+ exports.GrokAcpSession = GrokAcpSession;
506
+ //# sourceMappingURL=GrokAcpSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrokAcpSession.js","sourceRoot":"","sources":["../../../src/providers/grok/GrokAcpSession.ts"],"names":[],"mappings":"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"}