@enderfga/claw-orchestrator 7.2.0 → 7.4.0

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.
@@ -33,9 +33,11 @@ import * as os from 'node:os';
33
33
  import * as path from 'node:path';
34
34
  import { estimateTokens } from './models.js';
35
35
  import { sanitizeSecrets } from './sanitize.js';
36
- import { extractCreatedAgyConversationId, isAgyConversationId } from './agy-conversation.js';
36
+ import { extractCreatedAgyConversationId, extractAgyToolPermissionDenials, hasAgyToolPermissionDenial, isAgyConversationId, } from './agy-conversation.js';
37
37
  import { SESSION_EVENT } from './constants.js';
38
38
  import { BaseOneShotSession } from './base-oneshot-session.js';
39
+ const EMPTY_RESPONSE_ERROR = 'Antigravity returned an empty response; the turn failed but the session remains available for retry';
40
+ const TOOL_DENIAL_EMPTY_RESPONSE_ERROR = 'Antigravity returned an empty response after a tool permission denial; the turn failed but the session remains available for retry';
39
41
  // ─── PersistentAgySession ───────────────────────────────────────────────────
40
42
  export class PersistentAgySession extends BaseOneShotSession {
41
43
  /**
@@ -149,18 +151,14 @@ export class PersistentAgySession extends BaseOneShotSession {
149
151
  * `Created conversation <uuid>`; resumed ones only log lookups, so an
150
152
  * existing ID is never overwritten by a miss.
151
153
  */
152
- _harvestConversationId() {
154
+ _harvestConversationId(log) {
153
155
  // Once harvested (or seeded) the ID is final for the life of the session
154
- // — skip the synchronous whole-log re-read on every later turn.
156
+ // — skip the fallback match on every later turn.
155
157
  if (this.agyConversationId)
156
158
  return;
157
- try {
158
- const log = fs.readFileSync(this._logFile, 'utf8');
159
+ if (log) {
159
160
  this.agyConversationId = extractCreatedAgyConversationId(log);
160
161
  }
161
- catch {
162
- // Log file missing — agy failed before logging anything
163
- }
164
162
  if (!this.agyConversationId) {
165
163
  // Without an ID every later send silently starts a fresh conversation.
166
164
  // Make that observable — if this fires on every turn, agy most likely
@@ -176,6 +174,17 @@ export class PersistentAgySession extends BaseOneShotSession {
176
174
  _run(message, options) {
177
175
  const timeout = options.timeout || 300_000;
178
176
  const args = this._buildArgs(message, timeout, options.effort);
177
+ // The path is stable for the session, so remove the previous turn's file
178
+ // before spawning. If that cannot be proven, do not inspect the file at all:
179
+ // a stale denial must never be attributed to the current empty response.
180
+ let mayReadTurnLog = true;
181
+ try {
182
+ fs.unlinkSync(this._logFile);
183
+ }
184
+ catch (error) {
185
+ if (error.code !== 'ENOENT')
186
+ mayReadTurnLog = false;
187
+ }
179
188
  return new Promise((resolve, reject) => {
180
189
  let resultText = '';
181
190
  let stderr = '';
@@ -278,23 +287,33 @@ export class PersistentAgySession extends BaseOneShotSession {
278
287
  this.currentProc = null;
279
288
  if (pending)
280
289
  handleLine(pending, false);
290
+ const text = resultText.replace(/\n$/, '');
291
+ const emptyResponse = text.trim().length === 0;
292
+ let turnLog;
293
+ const needsLog = !this.agyConversationId || (!settled && code === 0 && !turnError);
294
+ if (mayReadTurnLog && needsLog) {
295
+ try {
296
+ turnLog = fs.readFileSync(this._logFile, 'utf8');
297
+ }
298
+ catch {
299
+ // Log file missing — agy failed before logging anything.
300
+ }
301
+ }
281
302
  // Harvest BEFORE the settled check: a turn that hit the wrapper timeout
282
303
  // has already rejected (settled), but agy may still have announced the
283
304
  // conversation before being killed. Skipping this would lose the id
284
305
  // permanently and every later send would silently start fresh. The
285
306
  // stream normally supplies it from the `init` event; this is the
286
307
  // fallback for a turn that died before emitting one.
287
- this._harvestConversationId();
308
+ this._harvestConversationId(turnLog);
288
309
  if (settled)
289
310
  return;
290
311
  settled = true;
291
- // One expression for the outcome: it feeds the counter here and the `stop_reason`
292
- // below, and it is the reject condition at the end of this handler. The exit code
293
- // stays in the conjunction — agy can report SUCCESS and then die in cleanup, and a
294
- // turn whose promise rejects is not a turn that succeeded.
295
- const ok = !turnError && !turnStatus && code === 0;
312
+ // One expression for the outcome feeds both the counter and `stop_reason`.
313
+ // A non-SUCCESS status with a partial reply still resolves below so callers do
314
+ // not lose useful output, but it deliberately remains a failed ledger turn.
315
+ const ok = !turnError && !turnStatus && code === 0 && !emptyResponse;
296
316
  this._recordTurnComplete(ok);
297
- const text = resultText.replace(/\n$/, '');
298
317
  // Real usage from the `result` event. estimateTokens() is the fallback
299
318
  // for a turn that produced no result event (killed, crashed, or an
300
319
  // output-format change) — it is a ~4-chars-per-token guess and was the
@@ -313,13 +332,16 @@ export class PersistentAgySession extends BaseOneShotSession {
313
332
  this._updateCost();
314
333
  }
315
334
  this._addHistory({ text, code });
335
+ const permissionDenials = extractAgyToolPermissionDenials(turnLog ?? '');
316
336
  const event = {
317
337
  type: 'result',
318
338
  result: text,
319
- // agy can exit 0 while reporting a non-SUCCESS status or an error in the
320
- // result event (e.g. a turn stopped early), so the status is
321
- // authoritative when present and the exit code is the fallback.
339
+ // agy can exit 0 while reporting a non-SUCCESS status, an error, or no
340
+ // usable response, so all terminal signals participate in the verdict.
322
341
  stop_reason: ok ? 'end_turn' : 'error',
342
+ ...(permissionDenials.length > 0
343
+ ? { permission_denials: permissionDenials.map((tool_name) => ({ tool_name })) }
344
+ : {}),
323
345
  };
324
346
  this.emit(SESSION_EVENT.RESULT, event);
325
347
  this.emit(SESSION_EVENT.TURN_COMPLETE, event);
@@ -331,6 +353,9 @@ export class PersistentAgySession extends BaseOneShotSession {
331
353
  else if (code !== 0) {
332
354
  reject(new Error(stderr || `Antigravity exited with code ${code}`));
333
355
  }
356
+ else if (emptyResponse) {
357
+ reject(new Error(hasAgyToolPermissionDenial(turnLog ?? '') ? TOOL_DENIAL_EMPTY_RESPONSE_ERROR : EMPTY_RESPONSE_ERROR));
358
+ }
334
359
  else {
335
360
  resolve({ text, event });
336
361
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-agy-session.js","sourceRoot":"","sources":["../../src/persistent-agy-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persistent-agy-session.js","sourceRoot":"","sources":["../../src/persistent-agy-session.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,42 @@ export declare class SessionManager {
77
77
  }): Promise<SessionInfo>;
78
78
  private _doStartSession;
79
79
  sendMessage(name: string, message: string, options?: SendOptions): Promise<SendResult>;
80
+ /**
81
+ * Continue a session's conversation in a new session on another engine.
82
+ *
83
+ * The source is left running and untouched — this is a fork, not a move: the
84
+ * two go their separate ways from here, and the caller stops the source if it
85
+ * is done with it. The new session inherits the source's working directory and
86
+ * its engine-neutral settings (permission and sandbox mode, effort, spend cap,
87
+ * system prompts, extra directories), and nothing tied to the source engine
88
+ * (model, tool allowlists written in its tool names, resume ids, profiles).
89
+ *
90
+ * The conversation travels as text in front of the new session's first message
91
+ * — see `src/handoff.ts` for why, and for what is kept when it does not all fit.
92
+ * With `message`, that first message is sent now and its reply returned; without
93
+ * it, the history waits for whatever the caller sends next.
94
+ */
95
+ handoffSession(name: string, opts: {
96
+ engine: EngineType;
97
+ model?: string;
98
+ newName?: string;
99
+ message?: string;
100
+ maxChars?: number;
101
+ customEngine?: SessionConfig['customEngine'];
102
+ }): Promise<{
103
+ name: string;
104
+ engine: EngineType;
105
+ from: {
106
+ name: string;
107
+ engine: EngineType;
108
+ };
109
+ carried: {
110
+ turns: number;
111
+ omitted: number;
112
+ chars: number;
113
+ };
114
+ result?: SendResult;
115
+ }>;
80
116
  /** Cumulative USD this session has spent, or 0 when the engine can't say. */
81
117
  private _spentUsd;
82
118
  private _statsSnapshot;
@@ -119,6 +119,7 @@ import { checkBudget, isBudgetExceeded } from './budget.js';
119
119
  import { InboxManager } from './inbox-manager.js';
120
120
  import { sanitizeCwd, validateName } from './validation.js';
121
121
  import { PersistentClaudeSession } from './persistent-session.js';
122
+ import { cloneTranscript, DEFAULT_HANDOFF_CHARS, MIN_HANDOFF_CHARS, newTranscript, recordExchange, renderHandoff, } from './handoff.js';
122
123
  import { PersistentGeminiSession } from './persistent-gemini-session.js';
123
124
  import { PersistentCodexSession } from './persistent-codex-session.js';
124
125
  import { PersistentCodexAppServerSession } from './persistent-codex-app-session.js';
@@ -616,7 +617,10 @@ export class SessionManager {
616
617
  const startedAt = Date.now();
617
618
  let turnError;
618
619
  try {
619
- const result = await managed.session.send(message, sendOpts);
620
+ // A session handed off from another engine carries that conversation in
621
+ // front of its first message; after that the engine holds it itself.
622
+ const outgoing = managed.pendingHandoff ? `${managed.pendingHandoff}\n\n${message}` : message;
623
+ const result = await managed.session.send(outgoing, sendOpts);
620
624
  // Update the resume-capable session ID if available (skip disk persist
621
625
  // for ephemeral sessions that were started with skipPersistence)
622
626
  const resumableId = this._managedResumeId(managed);
@@ -644,6 +648,14 @@ export class SessionManager {
644
648
  // through. The result event was dropped at this line, and it is the
645
649
  // only record of a blocked call: the turn itself still reports success.
646
650
  const permissionDenials = readPermissionDenials(evt);
651
+ // The record holds what the caller said, never the replayed history in
652
+ // front of it — a second handoff would otherwise nest one inside the other.
653
+ managed.transcript ??= newTranscript();
654
+ recordExchange(managed.transcript, 'user', message);
655
+ if (!turnError) {
656
+ recordExchange(managed.transcript, 'assistant', result.text);
657
+ managed.pendingHandoff = undefined;
658
+ }
647
659
  return {
648
660
  output: result.text,
649
661
  sessionId: this._managedResumeId(managed),
@@ -672,6 +684,71 @@ export class SessionManager {
672
684
  managed.sendChain = undefined;
673
685
  }
674
686
  }
687
+ // ─── Handoff ───────────────────────────────────────────────────────────
688
+ /**
689
+ * Continue a session's conversation in a new session on another engine.
690
+ *
691
+ * The source is left running and untouched — this is a fork, not a move: the
692
+ * two go their separate ways from here, and the caller stops the source if it
693
+ * is done with it. The new session inherits the source's working directory and
694
+ * its engine-neutral settings (permission and sandbox mode, effort, spend cap,
695
+ * system prompts, extra directories), and nothing tied to the source engine
696
+ * (model, tool allowlists written in its tool names, resume ids, profiles).
697
+ *
698
+ * The conversation travels as text in front of the new session's first message
699
+ * — see `src/handoff.ts` for why, and for what is kept when it does not all fit.
700
+ * With `message`, that first message is sent now and its reply returned; without
701
+ * it, the history waits for whatever the caller sends next.
702
+ */
703
+ async handoffSession(name, opts) {
704
+ const source = this._getSession(name);
705
+ const record = source.transcript;
706
+ if (!record || record.entries.length === 0) {
707
+ throw new Error(`Session '${name}' has no completed exchange to hand off yet`);
708
+ }
709
+ if (opts.maxChars !== undefined && (!Number.isFinite(opts.maxChars) || opts.maxChars < MIN_HANDOFF_CHARS)) {
710
+ throw new Error(`maxChars must be a number of at least ${MIN_HANDOFF_CHARS}`);
711
+ }
712
+ const fromEngine = (source.config.engine || 'claude');
713
+ const targetName = opts.newName ?? `${name}-${opts.engine}`;
714
+ const inherited = {
715
+ cwd: source.cwd,
716
+ permissionMode: source.config.permissionMode,
717
+ dangerouslySkipPermissions: source.config.dangerouslySkipPermissions,
718
+ sandboxMode: source.config.sandboxMode,
719
+ effort: source.config.effort,
720
+ maxBudgetUsd: source.config.maxBudgetUsd,
721
+ systemPrompt: source.config.systemPrompt,
722
+ appendSystemPrompt: source.config.appendSystemPrompt,
723
+ addDir: source.config.addDir,
724
+ };
725
+ for (const k of Object.keys(inherited)) {
726
+ if (inherited[k] === undefined)
727
+ delete inherited[k];
728
+ }
729
+ const rendered = renderHandoff(record, { engine: fromEngine, model: source.config.model, cwd: source.cwd }, opts.maxChars ?? DEFAULT_HANDOFF_CHARS);
730
+ await this.startSession({
731
+ ...inherited,
732
+ name: targetName,
733
+ engine: opts.engine,
734
+ ...(opts.model ? { model: opts.model } : {}),
735
+ ...(opts.customEngine ? { customEngine: opts.customEngine } : {}),
736
+ });
737
+ const target = this._getSession(targetName);
738
+ // The new session's record starts as the source's, so a second handoff from
739
+ // it carries the whole conversation rather than only the part it has seen.
740
+ target.transcript = cloneTranscript(record);
741
+ target.pendingHandoff = rendered.text;
742
+ const out = {
743
+ name: targetName,
744
+ engine: opts.engine,
745
+ from: { name, engine: fromEngine },
746
+ carried: { turns: rendered.turns, omitted: rendered.omitted, chars: rendered.text.length },
747
+ };
748
+ if (opts.message === undefined)
749
+ return out;
750
+ return { ...out, result: await this.sendMessage(targetName, opts.message) };
751
+ }
675
752
  // ─── Run ledger + budget bookkeeping ───────────────────────────────────
676
753
  //
677
754
  // Every helper here is defensive by design: a session that throws from