@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.
- package/README.md +4 -3
- package/configs/autoloop-planner-prompt.md +7 -0
- package/dist/bin/mcp-server.js +1 -0
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/src/agy-conversation.d.ts +9 -0
- package/dist/src/agy-conversation.js +15 -0
- package/dist/src/agy-conversation.js.map +1 -1
- package/dist/src/autoloop/dispatcher.d.ts +7 -0
- package/dist/src/autoloop/dispatcher.js +95 -10
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/autoloop/planner-tools.d.ts +13 -12
- package/dist/src/autoloop/planner-tools.js +203 -126
- package/dist/src/autoloop/planner-tools.js.map +1 -1
- package/dist/src/handoff.d.ts +80 -0
- package/dist/src/handoff.js +154 -0
- package/dist/src/handoff.js.map +1 -0
- package/dist/src/index.js +39 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/openai-compat.d.ts +1 -0
- package/dist/src/openai-compat.js +1 -1
- package/dist/src/openai-compat.js.map +1 -1
- package/dist/src/persistent-agy-session.js +43 -18
- package/dist/src/persistent-agy-session.js.map +1 -1
- package/dist/src/session-manager.d.ts +36 -0
- package/dist/src/session-manager.js +78 -1
- package/dist/src/session-manager.js.map +1 -1
- package/openclaw.plugin.json +1 -0
- package/package.json +1 -1
- package/skills/SKILL.md +3 -3
- package/skills/references/autoloop.md +28 -0
- package/skills/references/multi-engine.md +27 -9
- package/skills/references/sessions.md +47 -0
- package/skills/references/tools.md +21 -1
|
@@ -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
|
|
156
|
+
// — skip the fallback match on every later turn.
|
|
155
157
|
if (this.agyConversationId)
|
|
156
158
|
return;
|
|
157
|
-
|
|
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
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
|
|
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
|
|
320
|
-
//
|
|
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
|
-
|
|
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
|