@enderfga/claw-orchestrator 7.12.1 → 7.14.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 +14 -11
- package/configs/engines/README.md +20 -0
- package/configs/engines/dsh.json +17 -0
- package/configs/engines/kimi-code.json +17 -0
- package/dist/bin/cli.js +123 -34
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/acp-server.js +4 -2
- package/dist/src/acp-server.js.map +1 -1
- package/dist/src/autoloop/dispatcher.d.ts +19 -0
- package/dist/src/autoloop/dispatcher.js +57 -0
- package/dist/src/autoloop/dispatcher.js.map +1 -1
- package/dist/src/autoloop/runner.d.ts +102 -2
- package/dist/src/autoloop/runner.js +367 -44
- package/dist/src/autoloop/runner.js.map +1 -1
- package/dist/src/autoloop/types.d.ts +17 -0
- package/dist/src/autoloop/types.js.map +1 -1
- package/dist/src/dashboard/index.html +79 -73
- package/dist/src/embedded-server.js +35 -7
- package/dist/src/embedded-server.js.map +1 -1
- package/dist/src/engine-presets.d.ts +7 -3
- package/dist/src/engine-presets.js +39 -6
- package/dist/src/engine-presets.js.map +1 -1
- package/dist/src/engine-spawn.d.ts +8 -1
- package/dist/src/engine-spawn.js +13 -3
- package/dist/src/engine-spawn.js.map +1 -1
- package/dist/src/index.js +78 -71
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/agent-step.d.ts +3 -0
- package/dist/src/kernel/agent-step.js.map +1 -1
- package/dist/src/kernel/engine.d.ts +5 -2
- package/dist/src/kernel/engine.js +11 -12
- package/dist/src/kernel/engine.js.map +1 -1
- package/dist/src/kernel/nodes/autoloop.d.ts +32 -2
- package/dist/src/kernel/nodes/autoloop.js +122 -15
- package/dist/src/kernel/nodes/autoloop.js.map +1 -1
- package/dist/src/kernel/nodes/goal.d.ts +94 -0
- package/dist/src/kernel/nodes/goal.js +386 -0
- package/dist/src/kernel/nodes/goal.js.map +1 -0
- package/dist/src/kernel/nodes/index.d.ts +2 -1
- package/dist/src/kernel/nodes/index.js +3 -1
- package/dist/src/kernel/nodes/index.js.map +1 -1
- package/dist/src/kernel/templates/index.d.ts +27 -3
- package/dist/src/kernel/templates/index.js +78 -1
- package/dist/src/kernel/templates/index.js.map +1 -1
- package/dist/src/kernel/types.d.ts +41 -2
- package/dist/src/kernel/types.js.map +1 -1
- package/dist/src/persistent-acp-session.d.ts +76 -0
- package/dist/src/persistent-acp-session.js +409 -0
- package/dist/src/persistent-acp-session.js.map +1 -0
- package/dist/src/persistent-agy-session.js +1 -0
- package/dist/src/persistent-agy-session.js.map +1 -1
- package/dist/src/persistent-codex-app-session.d.ts +55 -26
- package/dist/src/persistent-codex-app-session.js +109 -24
- package/dist/src/persistent-codex-app-session.js.map +1 -1
- package/dist/src/persistent-codex-session.js +1 -0
- package/dist/src/persistent-codex-session.js.map +1 -1
- package/dist/src/persistent-cursor-session.js +1 -0
- package/dist/src/persistent-cursor-session.js.map +1 -1
- package/dist/src/persistent-custom-session.js +2 -0
- package/dist/src/persistent-custom-session.js.map +1 -1
- package/dist/src/persistent-gemini-session.js +1 -0
- package/dist/src/persistent-gemini-session.js.map +1 -1
- package/dist/src/persistent-grok-session.js +1 -0
- package/dist/src/persistent-grok-session.js.map +1 -1
- package/dist/src/persistent-opencode-session.js +1 -0
- package/dist/src/persistent-opencode-session.js.map +1 -1
- package/dist/src/persistent-session.js +1 -0
- package/dist/src/persistent-session.js.map +1 -1
- package/dist/src/sanitize.d.ts +10 -0
- package/dist/src/sanitize.js +26 -0
- package/dist/src/sanitize.js.map +1 -1
- package/dist/src/session-manager.d.ts +25 -20
- package/dist/src/session-manager.js +92 -43
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/types.d.ts +35 -1
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/skills/SKILL.md +8 -5
- package/skills/references/acp.md +4 -0
- package/skills/references/autoloop.md +27 -2
- package/skills/references/claude-cli-tracking.md +3 -1
- package/skills/references/cli.md +79 -39
- package/skills/references/dashboard.md +5 -1
- package/skills/references/multi-engine.md +39 -10
- package/skills/references/tools.md +77 -65
- package/skills/references/workflow.md +87 -13
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `goal` node — a Codex `/goal` run on one `codex-app` thread.
|
|
3
|
+
*
|
|
4
|
+
* Codex's app-server runs a goal itself: `thread/goal/set` starts its turn loop,
|
|
5
|
+
* which keeps going until the goal is `complete`, out of budget, blocked, or
|
|
6
|
+
* stopped by a usage limit. What the kernel adds is what a long unattended run
|
|
7
|
+
* needs around that loop:
|
|
8
|
+
*
|
|
9
|
+
* - **Reattach, never restart.** The thread id is checkpointed as soon as the
|
|
10
|
+
* session opens. A resumed run hands it to `thread/resume`, and a resume
|
|
11
|
+
* that comes back on a different thread fails the attempt instead of quietly
|
|
12
|
+
* starting the objective over.
|
|
13
|
+
* - **Resume what stalls, within a bound.** A usage-limited goal, a paused
|
|
14
|
+
* one, or an active goal with no turn and no news for `stallMs` is set back
|
|
15
|
+
* to `active` after a backoff. Every attempt counts before it is made, and
|
|
16
|
+
* past `capacityRetry.max` the node fails for good.
|
|
17
|
+
* - **Repair on the same thread.** Revisited after a red verifier, the node
|
|
18
|
+
* sets a new objective on the thread it already has — the failing checks
|
|
19
|
+
* first, then the original objective — so the agent keeps its context.
|
|
20
|
+
* - **Steer live.** Text from `workflow_steer` goes into the running turn via
|
|
21
|
+
* `turn/steer`; with no turn running it waits for the next one.
|
|
22
|
+
*/
|
|
23
|
+
import { SESSION_EVENT } from '../../constants.js';
|
|
24
|
+
import { repairBrief } from './agent.js';
|
|
25
|
+
const TERMINAL = new Set(['complete', 'budgetLimited', 'blocked']);
|
|
26
|
+
/** Error codes that mean "the endpoint is out of capacity right now", not "this goal is wrong". */
|
|
27
|
+
const TRANSIENT_ERRORS = new Set([
|
|
28
|
+
'serverOverloaded',
|
|
29
|
+
'usageLimitExceeded',
|
|
30
|
+
'rateLimitExceeded',
|
|
31
|
+
'httpConnectionFailed',
|
|
32
|
+
'responseStreamConnectionFailed',
|
|
33
|
+
'responseStreamDisconnected',
|
|
34
|
+
'responseTooManyFailedAttempts',
|
|
35
|
+
'internalServerError',
|
|
36
|
+
]);
|
|
37
|
+
const DEFAULT_RETRY = { max: 20, backoffMs: 60_000 };
|
|
38
|
+
/** Codex refuses a goal objective longer than this many characters. */
|
|
39
|
+
export const GOAL_OBJECTIVE_MAX_CHARS = 4_000;
|
|
40
|
+
const chars = (s) => [...s].length;
|
|
41
|
+
/**
|
|
42
|
+
* The objective a revisit sets: what the agent must hear first (steers, the
|
|
43
|
+
* failing checks), then the original objective. The original always survives
|
|
44
|
+
* whole; when the two do not fit in Codex's limit the preface is cut, and the
|
|
45
|
+
* full check output stays in the run's evidence.
|
|
46
|
+
*/
|
|
47
|
+
export function composeObjective(preface, objective) {
|
|
48
|
+
if (preface.length === 0)
|
|
49
|
+
return objective;
|
|
50
|
+
const sep = '\n\n---\n\n';
|
|
51
|
+
const cut = '\n[cut to fit the goal objective limit]';
|
|
52
|
+
const head = preface.join('\n\n');
|
|
53
|
+
const room = GOAL_OBJECTIVE_MAX_CHARS - chars(objective) - chars(sep);
|
|
54
|
+
if (chars(head) <= room)
|
|
55
|
+
return `${head}${sep}${objective}`;
|
|
56
|
+
if (room <= chars(cut))
|
|
57
|
+
return objective;
|
|
58
|
+
return `${[...head].slice(0, room - chars(cut)).join('')}${cut}${sep}${objective}`;
|
|
59
|
+
}
|
|
60
|
+
const MAX_BACKOFF_MS = 15 * 60_000;
|
|
61
|
+
const DEFAULT_STALL_MS = 5 * 60_000;
|
|
62
|
+
const TICK_MS = 1_000;
|
|
63
|
+
/** Progress (tokens, seconds) is checkpointed at most this often; status changes always are. */
|
|
64
|
+
const PUBLISH_EVERY_MS = 10_000;
|
|
65
|
+
/** The cached goal is refreshed from the server this often, in case a notification was missed. */
|
|
66
|
+
const POLL_EVERY_MS = 60_000;
|
|
67
|
+
export async function executeGoalNode(node, ctx) {
|
|
68
|
+
const spec = node;
|
|
69
|
+
const manager = ctx.manager;
|
|
70
|
+
if (!manager?.codexGoalSession)
|
|
71
|
+
return { ok: false, error: 'goal node requires a session manager' };
|
|
72
|
+
if (!spec.objective?.trim())
|
|
73
|
+
return { ok: false, error: `goal node '${spec.id}' has no objective` };
|
|
74
|
+
if (chars(spec.objective) > GOAL_OBJECTIVE_MAX_CHARS) {
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
error: `goal node '${spec.id}': the objective is ${chars(spec.objective)} characters and Codex accepts at most ` +
|
|
78
|
+
`${GOAL_OBJECTIVE_MAX_CHARS}; put the full brief in a file in the working directory and name that file in the objective`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const prior = ctx.record.nodes[spec.id]?.data;
|
|
82
|
+
// Codex writes a thread to disk with its first turn, so a thread whose goal
|
|
83
|
+
// was never set cannot be resumed, and there is nothing on it to keep.
|
|
84
|
+
const priorThread = typeof prior?.threadId === 'string' && prior.threadId && (prior.status !== 'unset' || prior.tokensUsed > 0)
|
|
85
|
+
? prior.threadId
|
|
86
|
+
: undefined;
|
|
87
|
+
// A thread whose goal had not finished is picked up where it was. A finished
|
|
88
|
+
// one means this is a revisit — the verifier sent the run back.
|
|
89
|
+
const resuming = !!priorThread && !TERMINAL.has(prior?.status ?? '');
|
|
90
|
+
// The first visit may start on a thread the caller names; after that the
|
|
91
|
+
// checkpoint decides.
|
|
92
|
+
const startThread = priorThread ?? (spec.threadId?.trim() || undefined);
|
|
93
|
+
const retry = { ...DEFAULT_RETRY, ...spec.capacityRetry };
|
|
94
|
+
const stallMs = spec.stallMs ?? DEFAULT_STALL_MS;
|
|
95
|
+
const data = {
|
|
96
|
+
threadId: priorThread ?? '',
|
|
97
|
+
objective: prior?.objective ?? spec.objective,
|
|
98
|
+
status: prior?.status ?? 'unset',
|
|
99
|
+
tokensUsed: prior?.tokensUsed ?? 0,
|
|
100
|
+
timeUsedSeconds: prior?.timeUsedSeconds ?? 0,
|
|
101
|
+
resumes: prior?.resumes ?? 0,
|
|
102
|
+
...(prior?.lastMessage ? { lastMessage: prior.lastMessage } : {}),
|
|
103
|
+
costUsd: prior?.costUsd ?? 0,
|
|
104
|
+
reportedCostUsd: prior?.reportedCostUsd ?? 0,
|
|
105
|
+
...(prior?.lastError ? { lastError: prior.lastError } : {}),
|
|
106
|
+
};
|
|
107
|
+
const reported = prior?.reportedCostUsd ?? 0;
|
|
108
|
+
let sessionName = '';
|
|
109
|
+
// Codex reports thread totals, so the spend only ever grows; a reopened
|
|
110
|
+
// session that has not been told the totals yet must not pull it back down.
|
|
111
|
+
const readCost = () => {
|
|
112
|
+
if (!sessionName)
|
|
113
|
+
return;
|
|
114
|
+
try {
|
|
115
|
+
const cost = manager.getStatus?.(sessionName).stats.costUsd;
|
|
116
|
+
if (typeof cost === 'number' && cost > (data.costUsd ?? 0))
|
|
117
|
+
data.costUsd = cost;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// The session is gone; keep the last figure.
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
let lastPublish = 0;
|
|
124
|
+
const publish = (force = false) => {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
if (!force && now - lastPublish < PUBLISH_EVERY_MS)
|
|
127
|
+
return;
|
|
128
|
+
lastPublish = now;
|
|
129
|
+
readCost();
|
|
130
|
+
ctx.publish({ ...data });
|
|
131
|
+
};
|
|
132
|
+
const spent = () => {
|
|
133
|
+
readCost();
|
|
134
|
+
const delta = Math.max(0, (data.costUsd ?? 0) - reported);
|
|
135
|
+
data.reportedCostUsd = reported + delta;
|
|
136
|
+
return delta;
|
|
137
|
+
};
|
|
138
|
+
const absorb = (goal) => {
|
|
139
|
+
if (!goal)
|
|
140
|
+
return;
|
|
141
|
+
const changed = goal.status !== data.status;
|
|
142
|
+
data.status = goal.status;
|
|
143
|
+
data.objective = goal.objective;
|
|
144
|
+
data.tokensUsed = goal.tokensUsed;
|
|
145
|
+
data.timeUsedSeconds = goal.timeUsedSeconds;
|
|
146
|
+
publish(changed);
|
|
147
|
+
};
|
|
148
|
+
const fail = (error) => {
|
|
149
|
+
const costUsd = spent();
|
|
150
|
+
publish(true);
|
|
151
|
+
return { ok: false, error, data: { ...data }, costUsd };
|
|
152
|
+
};
|
|
153
|
+
let lastNews = Date.now();
|
|
154
|
+
// Set by an error the server will not retry itself and that names a capacity
|
|
155
|
+
// problem; cleared by the next sign of life. Read on its own it would stay set
|
|
156
|
+
// after the goal recovered and resume a healthy thread between two turns.
|
|
157
|
+
let capacityError = false;
|
|
158
|
+
let closed = false;
|
|
159
|
+
// The loop naps between checks; any news from the session ends the nap early,
|
|
160
|
+
// so a status change is acted on when it arrives, not on the next tick.
|
|
161
|
+
let wake = null;
|
|
162
|
+
const nap = (ms) => new Promise((resolve) => {
|
|
163
|
+
const done = () => {
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
wake = null;
|
|
166
|
+
resolve();
|
|
167
|
+
};
|
|
168
|
+
const timer = setTimeout(done, Math.max(1, ms));
|
|
169
|
+
timer.unref?.();
|
|
170
|
+
wake = done;
|
|
171
|
+
});
|
|
172
|
+
const onGoal = (...args) => {
|
|
173
|
+
lastNews = Date.now();
|
|
174
|
+
absorb(args[0]);
|
|
175
|
+
wake?.();
|
|
176
|
+
};
|
|
177
|
+
const onActivity = () => {
|
|
178
|
+
lastNews = Date.now();
|
|
179
|
+
capacityError = false;
|
|
180
|
+
};
|
|
181
|
+
const onError = (...args) => {
|
|
182
|
+
const e = args[0];
|
|
183
|
+
if (!e)
|
|
184
|
+
return;
|
|
185
|
+
data.lastError = { message: e.message, code: e.code, at: e.at };
|
|
186
|
+
capacityError = !e.willRetry && TRANSIENT_ERRORS.has(e.code ?? '');
|
|
187
|
+
publish(true);
|
|
188
|
+
wake?.();
|
|
189
|
+
};
|
|
190
|
+
const onClose = () => {
|
|
191
|
+
closed = true;
|
|
192
|
+
wake?.();
|
|
193
|
+
};
|
|
194
|
+
const onResult = (...args) => {
|
|
195
|
+
const text = args[0]?.result;
|
|
196
|
+
if (typeof text === 'string' && text.trim())
|
|
197
|
+
data.lastMessage = text.slice(-4000);
|
|
198
|
+
};
|
|
199
|
+
// One session at a time; a new one after the app-server exits, on the same
|
|
200
|
+
// thread. Named per visit, attempt and reopen, so an abandoned attempt that is
|
|
201
|
+
// still unwinding cannot stop the live one's session.
|
|
202
|
+
let session;
|
|
203
|
+
let opened = 0;
|
|
204
|
+
const release = async () => {
|
|
205
|
+
readCost();
|
|
206
|
+
if (session) {
|
|
207
|
+
session.off('goal:updated', onGoal);
|
|
208
|
+
session.off(SESSION_EVENT.TEXT, onActivity);
|
|
209
|
+
session.off('codex:error', onError);
|
|
210
|
+
session.off(SESSION_EVENT.CLOSE, onClose);
|
|
211
|
+
session.off(SESSION_EVENT.RESULT, onResult);
|
|
212
|
+
session = undefined;
|
|
213
|
+
}
|
|
214
|
+
if (sessionName)
|
|
215
|
+
await manager.stopSession(sessionName).catch(() => undefined);
|
|
216
|
+
};
|
|
217
|
+
const open = async (threadId) => {
|
|
218
|
+
await release();
|
|
219
|
+
const visit = ctx.record.nodes[spec.id]?.visits ?? 1;
|
|
220
|
+
sessionName = `${ctx.runId}-${spec.id}-v${visit}a${ctx.attempt}${opened > 0 ? `-r${opened}` : ''}`;
|
|
221
|
+
opened += 1;
|
|
222
|
+
try {
|
|
223
|
+
await manager.startSession({
|
|
224
|
+
name: sessionName,
|
|
225
|
+
engine: 'codex-app',
|
|
226
|
+
cwd: spec.cwd || ctx.cwd,
|
|
227
|
+
model: spec.model,
|
|
228
|
+
effort: spec.effort,
|
|
229
|
+
sandboxMode: spec.sandboxMode,
|
|
230
|
+
launcher: spec.launcher,
|
|
231
|
+
permissionMode: 'bypassPermissions',
|
|
232
|
+
// The node checkpoints the thread id itself; a registry entry would only
|
|
233
|
+
// let a later session of the same name pick the thread up behind its back.
|
|
234
|
+
noSessionPersistence: true,
|
|
235
|
+
...(threadId ? { resumeSessionId: threadId } : {}),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
return `could not start the codex-app session: ${err.message}`;
|
|
240
|
+
}
|
|
241
|
+
const live = manager.codexGoalSession?.(sessionName);
|
|
242
|
+
if (!live?.codexThreadId)
|
|
243
|
+
return 'the codex-app session has no thread';
|
|
244
|
+
if (threadId && live.codexThreadId !== threadId) {
|
|
245
|
+
return `could not resume codex thread ${threadId} (got ${live.codexThreadId}); refusing to start the goal over`;
|
|
246
|
+
}
|
|
247
|
+
session = live;
|
|
248
|
+
closed = false;
|
|
249
|
+
capacityError = false;
|
|
250
|
+
lastNews = Date.now();
|
|
251
|
+
live.on('goal:updated', onGoal);
|
|
252
|
+
live.on(SESSION_EVENT.TEXT, onActivity);
|
|
253
|
+
live.on('codex:error', onError);
|
|
254
|
+
live.on(SESSION_EVENT.CLOSE, onClose);
|
|
255
|
+
live.on(SESSION_EVENT.RESULT, onResult);
|
|
256
|
+
data.threadId = live.codexThreadId;
|
|
257
|
+
publish(true);
|
|
258
|
+
return undefined;
|
|
259
|
+
};
|
|
260
|
+
ctx.setHandle({ abort: () => undefined });
|
|
261
|
+
const steers = [];
|
|
262
|
+
try {
|
|
263
|
+
const opening = await open(startThread);
|
|
264
|
+
if (opening)
|
|
265
|
+
return fail(opening);
|
|
266
|
+
// ── Set or pick up the goal ────────────────────────────────────────────
|
|
267
|
+
if (resuming) {
|
|
268
|
+
const goal = await session.getGoal();
|
|
269
|
+
if (goal) {
|
|
270
|
+
absorb(goal);
|
|
271
|
+
if (goal.status === 'paused' || goal.status === 'usageLimited') {
|
|
272
|
+
absorb(await session.setGoal({ status: 'active' }));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
absorb(await session.setGoal({ objective: data.objective, tokenBudget: spec.tokenBudget ?? null }));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
const preface = [...ctx.takeSteer(), ...(priorThread ? [repairBrief(ctx, spec.id)] : [])].filter((t) => !!t);
|
|
281
|
+
const objective = composeObjective(preface, spec.objective);
|
|
282
|
+
if (startThread)
|
|
283
|
+
await session.clearGoal();
|
|
284
|
+
absorb(await session.setGoal({ objective, tokenBudget: spec.tokenBudget ?? null }));
|
|
285
|
+
}
|
|
286
|
+
publish(true);
|
|
287
|
+
// ── Wait for the goal to finish ────────────────────────────────────────
|
|
288
|
+
let lastPoll = Date.now();
|
|
289
|
+
let retryAt = null;
|
|
290
|
+
// One counter for every kind of recovery: counted when scheduled, not when
|
|
291
|
+
// it succeeds, so a recovery that keeps failing still reaches the bound.
|
|
292
|
+
const spendRecovery = (why) => {
|
|
293
|
+
data.resumes += 1;
|
|
294
|
+
publish(true);
|
|
295
|
+
if (data.resumes > retry.max) {
|
|
296
|
+
return fail(`goal did not recover after ${retry.max} resume attempts (last: ${why}${data.lastError ? `, ${data.lastError.code ?? data.lastError.message}` : ''})`);
|
|
297
|
+
}
|
|
298
|
+
const backoff = Math.min(MAX_BACKOFF_MS, retry.backoffMs * 2 ** Math.min(data.resumes - 1, 10));
|
|
299
|
+
retryAt = Date.now() + backoff;
|
|
300
|
+
ctx.logger.info(`[goal ${ctx.runId}/${spec.id}] ${why}; resuming in ${backoff}ms`);
|
|
301
|
+
return undefined;
|
|
302
|
+
};
|
|
303
|
+
for (;;) {
|
|
304
|
+
if (ctx.signal.aborted) {
|
|
305
|
+
await session?.interrupt().catch(() => undefined);
|
|
306
|
+
await session?.setGoal({ status: 'paused' }).catch(() => undefined);
|
|
307
|
+
return fail('cancelled');
|
|
308
|
+
}
|
|
309
|
+
if (closed) {
|
|
310
|
+
// The app-server is gone; the thread is on disk. Reattach after a backoff.
|
|
311
|
+
if (retryAt === null) {
|
|
312
|
+
const stop = spendRecovery('the codex app-server exited');
|
|
313
|
+
if (stop)
|
|
314
|
+
return stop;
|
|
315
|
+
}
|
|
316
|
+
if (Date.now() >= (retryAt ?? 0)) {
|
|
317
|
+
retryAt = null;
|
|
318
|
+
const reopening = await open(data.threadId);
|
|
319
|
+
if (reopening)
|
|
320
|
+
return fail(reopening);
|
|
321
|
+
const goal = await session.getGoal();
|
|
322
|
+
absorb(goal);
|
|
323
|
+
if (goal && (goal.status === 'paused' || goal.status === 'usageLimited')) {
|
|
324
|
+
absorb(await session.setGoal({ status: 'active' }));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
await nap(Math.min(TICK_MS, Math.max(0, (retryAt ?? 0) - Date.now())));
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
const live = session;
|
|
331
|
+
steers.push(...ctx.takeSteer());
|
|
332
|
+
while (steers.length > 0 && live.turnActive) {
|
|
333
|
+
const r = await live.steer(steers[0]).catch(() => ({ steered: false }));
|
|
334
|
+
if (!r.steered)
|
|
335
|
+
break;
|
|
336
|
+
steers.shift();
|
|
337
|
+
}
|
|
338
|
+
if (Date.now() - lastPoll >= POLL_EVERY_MS) {
|
|
339
|
+
lastPoll = Date.now();
|
|
340
|
+
absorb(await live.getGoal().catch(() => live.goal));
|
|
341
|
+
}
|
|
342
|
+
const status = data.status;
|
|
343
|
+
if (status === 'complete') {
|
|
344
|
+
const costUsd = spent();
|
|
345
|
+
publish(true);
|
|
346
|
+
return {
|
|
347
|
+
ok: true,
|
|
348
|
+
output: `goal complete: ${data.tokensUsed} tokens, ${data.timeUsedSeconds}s`,
|
|
349
|
+
data: { ...data },
|
|
350
|
+
costUsd,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
if (status === 'budgetLimited')
|
|
354
|
+
return fail(`goal stopped: token budget spent (${data.tokensUsed} tokens)`);
|
|
355
|
+
if (status === 'blocked') {
|
|
356
|
+
return fail(`goal blocked${data.lastError ? `: ${data.lastError.message}` : ''}`);
|
|
357
|
+
}
|
|
358
|
+
const stalled = status === 'active' && !live.turnActive && (Date.now() - lastNews >= stallMs || capacityError);
|
|
359
|
+
const needsResume = status === 'paused' || status === 'usageLimited' || stalled;
|
|
360
|
+
if (!needsResume) {
|
|
361
|
+
retryAt = null;
|
|
362
|
+
}
|
|
363
|
+
else if (retryAt === null) {
|
|
364
|
+
const stop = spendRecovery(stalled ? 'stalled' : status);
|
|
365
|
+
if (stop)
|
|
366
|
+
return stop;
|
|
367
|
+
}
|
|
368
|
+
else if (Date.now() >= retryAt) {
|
|
369
|
+
retryAt = null;
|
|
370
|
+
lastNews = Date.now();
|
|
371
|
+
capacityError = false;
|
|
372
|
+
absorb(await live.setGoal({ status: 'active' }).catch(() => live.goal));
|
|
373
|
+
}
|
|
374
|
+
const untilRetry = retryAt === null ? TICK_MS : retryAt - Date.now();
|
|
375
|
+
const untilStall = stallMs - (Date.now() - lastNews);
|
|
376
|
+
await nap(Math.min(TICK_MS, untilRetry, Math.max(1, untilStall)));
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
catch (err) {
|
|
380
|
+
return fail(`goal node failed: ${err.message}`);
|
|
381
|
+
}
|
|
382
|
+
finally {
|
|
383
|
+
await release();
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=goal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../../src/kernel/nodes/goal.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,11 @@ import type { RunKernel } from '../engine.js';
|
|
|
3
3
|
import { executeAgentNode } from './agent.js';
|
|
4
4
|
import { executeCouncilNode } from './council.js';
|
|
5
5
|
import { executeFanoutNode } from './fanout.js';
|
|
6
|
+
import { executeGoalNode } from './goal.js';
|
|
6
7
|
import { executeHumanGateNode } from './human-gate.js';
|
|
7
8
|
import { executeRouterNode } from './router.js';
|
|
8
9
|
import { executeVerifierNode } from './verifier.js';
|
|
9
10
|
import { makeSubflowExecutor, type WorkflowResolver } from './subflow.js';
|
|
10
|
-
export { executeAgentNode, executeCouncilNode, executeFanoutNode, executeHumanGateNode, executeRouterNode, executeVerifierNode, };
|
|
11
|
+
export { executeAgentNode, executeCouncilNode, executeFanoutNode, executeGoalNode, executeHumanGateNode, executeRouterNode, executeVerifierNode, };
|
|
11
12
|
export { makeSubflowExecutor, type WorkflowResolver };
|
|
12
13
|
export declare function registerDefaultExecutors(kernel: RunKernel, resolve?: WorkflowResolver): RunKernel;
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { executeAgentNode } from './agent.js';
|
|
3
3
|
import { executeCouncilNode } from './council.js';
|
|
4
4
|
import { executeFanoutNode } from './fanout.js';
|
|
5
|
+
import { executeGoalNode } from './goal.js';
|
|
5
6
|
import { executeHumanGateNode } from './human-gate.js';
|
|
6
7
|
import { executeRouterNode } from './router.js';
|
|
7
8
|
import { executeVerifierNode } from './verifier.js';
|
|
8
9
|
import { makeSubflowExecutor } from './subflow.js';
|
|
9
|
-
export { executeAgentNode, executeCouncilNode, executeFanoutNode, executeHumanGateNode, executeRouterNode, executeVerifierNode, };
|
|
10
|
+
export { executeAgentNode, executeCouncilNode, executeFanoutNode, executeGoalNode, executeHumanGateNode, executeRouterNode, executeVerifierNode, };
|
|
10
11
|
export { makeSubflowExecutor };
|
|
11
12
|
export function registerDefaultExecutors(kernel, resolve) {
|
|
12
13
|
kernel.setExecutor('agent', executeAgentNode);
|
|
13
14
|
kernel.setExecutor('fanout', executeFanoutNode);
|
|
14
15
|
kernel.setExecutor('council', executeCouncilNode);
|
|
16
|
+
kernel.setExecutor('goal', executeGoalNode);
|
|
15
17
|
kernel.setExecutor('verifier', executeVerifierNode);
|
|
16
18
|
kernel.setExecutor('human_gate', executeHumanGateNode);
|
|
17
19
|
kernel.setExecutor('router', executeRouterNode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel/nodes/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAyB,MAAM,cAAc,CAAC;AAE1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,CAAC;AACF,OAAO,EAAE,mBAAmB,EAAyB,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,OAA0B;IACpF,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel/nodes/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAyB,MAAM,cAAc,CAAC;AAE1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACpB,CAAC;AACF,OAAO,EAAE,mBAAmB,EAAyB,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,OAA0B;IACpF,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC9C,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACvD,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* writes. Each is a builder rather than a constant because they all need the
|
|
7
7
|
* caller's task, agents, and cwd.
|
|
8
8
|
*/
|
|
9
|
-
import type
|
|
10
|
-
import type { CouncilNode, FanoutAgentSpec, FanoutNode, WorkflowSpec } from '../types.js';
|
|
9
|
+
import { type AcceptanceContract } from '../../verify/contract.js';
|
|
10
|
+
import type { CouncilNode, FanoutAgentSpec, FanoutNode, GoalNode, WorkflowSpec } from '../types.js';
|
|
11
11
|
/** Worst case for a fan-out node: each agent in turn, including its start, then synthesis. */
|
|
12
12
|
export declare function fanoutNodeBudget(agents: number, synthesize: boolean | undefined, agentTimeoutMs?: number): number;
|
|
13
13
|
/**
|
|
@@ -63,6 +63,30 @@ export interface SolveArgs extends CommonArgs {
|
|
|
63
63
|
* verification passed.
|
|
64
64
|
*/
|
|
65
65
|
export declare function solveWorkflow(args: SolveArgs): WorkflowSpec;
|
|
66
|
+
export interface GoalArgs extends CommonArgs {
|
|
67
|
+
/** Model for the `codex-app` thread; omitted means codex's own default. */
|
|
68
|
+
model?: string;
|
|
69
|
+
effort?: string;
|
|
70
|
+
sandboxMode?: GoalNode['sandboxMode'];
|
|
71
|
+
/** Argv prefix codex runs under, e.g. a sandbox wrapper. */
|
|
72
|
+
launcher?: string[];
|
|
73
|
+
/** Start on this existing codex-app thread (its goal is replaced). */
|
|
74
|
+
threadId?: string;
|
|
75
|
+
tokenBudget?: number;
|
|
76
|
+
/** Wall-clock budget for one goal pass. Omitted means none. */
|
|
77
|
+
goalTimeoutMs?: number;
|
|
78
|
+
/** How many times a red verifier may send the goal back. Default 1. */
|
|
79
|
+
maxRepairs?: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* A Codex `/goal` judged by checks it did not write: goal → verify → repair.
|
|
83
|
+
*
|
|
84
|
+
* The goal runs on one `codex-app` thread until Codex calls it complete. That
|
|
85
|
+
* is the agent's opinion; the verifier's contract is the verdict. On red, the
|
|
86
|
+
* router sends control back to the same thread with the failing checks while
|
|
87
|
+
* repair budget remains.
|
|
88
|
+
*/
|
|
89
|
+
export declare function goalWorkflow(args: GoalArgs): WorkflowSpec;
|
|
66
90
|
import type { EngineType } from '../../types.js';
|
|
67
91
|
export interface LegacyCouncilArgs {
|
|
68
92
|
task: string;
|
|
@@ -112,7 +136,7 @@ export interface LegacyUltraplanArgs {
|
|
|
112
136
|
timeoutMs: number;
|
|
113
137
|
}
|
|
114
138
|
export declare function legacyUltraplanWorkflow(args: LegacyUltraplanArgs): WorkflowSpec;
|
|
115
|
-
export type TemplateName = 'council' | 'fanout' | 'solve';
|
|
139
|
+
export type TemplateName = 'council' | 'fanout' | 'solve' | 'goal';
|
|
116
140
|
export declare const TEMPLATE_NAMES: readonly TemplateName[];
|
|
117
141
|
export interface UltraappArgs {
|
|
118
142
|
/** UltraApp's own run id, which its store is keyed by. */
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* writes. Each is a builder rather than a constant because they all need the
|
|
7
7
|
* caller's task, agents, and cwd.
|
|
8
8
|
*/
|
|
9
|
+
import { DEFAULT_CHECK_TIMEOUT_MS, DEFAULT_HTTP_TIMEOUT_MS, DEFAULT_SCREENSHOT_TIMEOUT_MS, } from '../../verify/contract.js';
|
|
9
10
|
import { DEFAULT_AGENT_TIMEOUT_MS as FANOUT_AGENT_TIMEOUT_MS } from '../../fanout.js';
|
|
10
11
|
import { DEFAULT_AGENT_TIMEOUT_MS as COUNCIL_AGENT_TIMEOUT_MS, DEFAULT_MAX_ROUNDS, EMPTY_RESPONSE_MAX_RETRIES, EMPTY_RESPONSE_RETRY_DELAY_MS, FOLLOWUP_MAX_RETRIES, FOLLOWUP_TIMEOUT_MS, INTER_ROUND_DELAY_MS, SESSION_READY_TIMEOUT_MS, } from '../../constants.js';
|
|
11
12
|
// A fan-out or council node's timeout is a backstop for the whole mode, not a
|
|
@@ -173,6 +174,82 @@ export function solveWorkflow(args) {
|
|
|
173
174
|
nodes,
|
|
174
175
|
};
|
|
175
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* A Codex `/goal` judged by checks it did not write: goal → verify → repair.
|
|
179
|
+
*
|
|
180
|
+
* The goal runs on one `codex-app` thread until Codex calls it complete. That
|
|
181
|
+
* is the agent's opinion; the verifier's contract is the verdict. On red, the
|
|
182
|
+
* router sends control back to the same thread with the failing checks while
|
|
183
|
+
* repair budget remains.
|
|
184
|
+
*/
|
|
185
|
+
export function goalWorkflow(args) {
|
|
186
|
+
const maxRepairs = args.maxRepairs ?? 1;
|
|
187
|
+
const goal = {
|
|
188
|
+
id: 'goal',
|
|
189
|
+
kind: 'goal',
|
|
190
|
+
objective: args.task,
|
|
191
|
+
cwd: args.cwd,
|
|
192
|
+
model: args.model,
|
|
193
|
+
effort: args.effort,
|
|
194
|
+
sandboxMode: args.sandboxMode,
|
|
195
|
+
launcher: args.launcher,
|
|
196
|
+
threadId: args.threadId,
|
|
197
|
+
tokenBudget: args.tokenBudget,
|
|
198
|
+
timeoutMs: args.goalTimeoutMs,
|
|
199
|
+
// A goal that ends out of budget or blocked still goes to the verifier, so
|
|
200
|
+
// the verdict says what state the tree was left in.
|
|
201
|
+
onFailure: 'continue',
|
|
202
|
+
};
|
|
203
|
+
return {
|
|
204
|
+
name: 'goal',
|
|
205
|
+
cwd: args.cwd,
|
|
206
|
+
contract: args.contract,
|
|
207
|
+
maxNodeVisits: maxRepairs + 3,
|
|
208
|
+
nodes: [
|
|
209
|
+
goal,
|
|
210
|
+
{
|
|
211
|
+
id: 'verify',
|
|
212
|
+
kind: 'verifier',
|
|
213
|
+
contract: 'run',
|
|
214
|
+
cwd: args.cwd,
|
|
215
|
+
onFailure: 'continue',
|
|
216
|
+
// A judge that times a training run takes hours; the kernel's 30-minute
|
|
217
|
+
// node default would cut the verdict off. Sized from the checks.
|
|
218
|
+
timeoutMs: contractBudget(args.contract),
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
id: 'repair-gate',
|
|
222
|
+
kind: 'router',
|
|
223
|
+
routes: [
|
|
224
|
+
{
|
|
225
|
+
when: {
|
|
226
|
+
type: 'and',
|
|
227
|
+
all: [
|
|
228
|
+
{ type: 'node_failed', node: 'verify' },
|
|
229
|
+
{ type: 'visits_lt', node: 'goal', n: maxRepairs + 1 },
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
to: 'goal',
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/** Every check run once, in turn, at its own timeout, plus a margin for evidence. */
|
|
240
|
+
function contractBudget(contract) {
|
|
241
|
+
const checks = contract?.checks ?? [];
|
|
242
|
+
const sum = checks.reduce((total, c) => {
|
|
243
|
+
const spec = ('spec' in c ? c.spec : c);
|
|
244
|
+
const fallback = spec.type === 'http'
|
|
245
|
+
? DEFAULT_HTTP_TIMEOUT_MS
|
|
246
|
+
: spec.type === 'screenshot'
|
|
247
|
+
? DEFAULT_SCREENSHOT_TIMEOUT_MS
|
|
248
|
+
: DEFAULT_CHECK_TIMEOUT_MS;
|
|
249
|
+
return total + (spec.timeoutMs && spec.timeoutMs > 0 ? spec.timeoutMs : fallback);
|
|
250
|
+
}, 0);
|
|
251
|
+
return Math.max(30 * 60_000, sum * ((contract?.fixOnFailureRounds ?? 0) + 1) + 5 * 60_000);
|
|
252
|
+
}
|
|
176
253
|
import { LEGACY_NODE } from '../projections.js';
|
|
177
254
|
export function legacyCouncilWorkflow(args) {
|
|
178
255
|
return {
|
|
@@ -262,7 +339,7 @@ export function legacyUltraplanWorkflow(args) {
|
|
|
262
339
|
],
|
|
263
340
|
};
|
|
264
341
|
}
|
|
265
|
-
export const TEMPLATE_NAMES = ['council', 'fanout', 'solve'];
|
|
342
|
+
export const TEMPLATE_NAMES = ['council', 'fanout', 'solve', 'goal'];
|
|
266
343
|
/**
|
|
267
344
|
* UltraApp's build pipeline.
|
|
268
345
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel/templates/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel/templates/index.ts"],"names":[],"mappings":"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"}
|