@duetso/agent 0.2.2 → 0.2.4
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 +19 -11
- package/dist/package.json +4 -4
- package/dist/src/cli/config.d.ts +10 -0
- package/dist/src/cli/config.d.ts.map +1 -0
- package/dist/src/cli/config.js +24 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +16 -13
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/inline-slash.d.ts +2 -1
- package/dist/src/cli/inline-slash.d.ts.map +1 -1
- package/dist/src/cli/inline-slash.js +14 -5
- package/dist/src/cli/inline-slash.js.map +1 -1
- package/dist/src/cli/memory-query.d.ts +1 -1
- package/dist/src/cli/model.d.ts +1 -1
- package/dist/src/cli/model.d.ts.map +1 -1
- package/dist/src/cli/model.js +1 -1
- package/dist/src/cli/model.js.map +1 -1
- package/dist/src/cli/route.d.ts +84 -0
- package/dist/src/cli/route.d.ts.map +1 -0
- package/dist/src/cli/route.js +261 -0
- package/dist/src/cli/route.js.map +1 -0
- package/dist/src/cli/rpc.d.ts +52 -9
- package/dist/src/cli/rpc.d.ts.map +1 -1
- package/dist/src/cli/rpc.js +195 -28
- package/dist/src/cli/rpc.js.map +1 -1
- package/dist/src/cli/run.d.ts +8 -1
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +24 -7
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/cli/shared.d.ts +4 -3
- package/dist/src/cli/shared.d.ts.map +1 -1
- package/dist/src/cli/shared.js +3 -4
- package/dist/src/cli/shared.js.map +1 -1
- package/dist/src/cli/shutdown.d.ts +4 -2
- package/dist/src/cli/shutdown.d.ts.map +1 -1
- package/dist/src/cli/shutdown.js +4 -2
- package/dist/src/cli/shutdown.js.map +1 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +12 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/structured-output.d.ts +2 -0
- package/dist/src/core/structured-output.d.ts.map +1 -1
- package/dist/src/core/structured-output.js +1 -0
- package/dist/src/core/structured-output.js.map +1 -1
- package/dist/src/lib/system-reminder.d.ts +14 -0
- package/dist/src/lib/system-reminder.d.ts.map +1 -0
- package/dist/src/lib/system-reminder.js +53 -0
- package/dist/src/lib/system-reminder.js.map +1 -0
- package/dist/src/lib/walk-ancestors.d.ts +9 -0
- package/dist/src/lib/walk-ancestors.d.ts.map +1 -0
- package/dist/src/lib/walk-ancestors.js +28 -0
- package/dist/src/lib/walk-ancestors.js.map +1 -0
- package/dist/src/memory/observational-prompts.d.ts.map +1 -1
- package/dist/src/memory/observational-prompts.js +2 -1
- package/dist/src/memory/observational-prompts.js.map +1 -1
- package/dist/src/memory/observational.d.ts +31 -4
- package/dist/src/memory/observational.d.ts.map +1 -1
- package/dist/src/memory/observational.js +43 -4
- package/dist/src/memory/observational.js.map +1 -1
- package/dist/src/model-resolution/catalog.d.ts +2 -2
- package/dist/src/model-resolution/catalog.d.ts.map +1 -1
- package/dist/src/model-resolution/catalog.js +61 -33
- package/dist/src/model-resolution/catalog.js.map +1 -1
- package/dist/src/model-resolution/duet-gateway.d.ts +3 -3
- package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
- package/dist/src/model-resolution/duet-gateway.js +119 -19
- package/dist/src/model-resolution/duet-gateway.js.map +1 -1
- package/dist/src/model-resolution/model-gateway.d.ts.map +1 -0
- package/dist/src/{cli → model-resolution}/model-gateway.js +10 -6
- package/dist/src/model-resolution/model-gateway.js.map +1 -0
- package/dist/src/model-resolution/resolver.d.ts +11 -4
- package/dist/src/model-resolution/resolver.d.ts.map +1 -1
- package/dist/src/model-resolution/resolver.js +39 -8
- package/dist/src/model-resolution/resolver.js.map +1 -1
- package/dist/src/model-routing/advisor-transcript.d.ts +36 -0
- package/dist/src/model-routing/advisor-transcript.d.ts.map +1 -0
- package/dist/src/model-routing/advisor-transcript.js +103 -0
- package/dist/src/model-routing/advisor-transcript.js.map +1 -0
- package/dist/src/model-routing/advisor.d.ts +27 -0
- package/dist/src/model-routing/advisor.d.ts.map +1 -0
- package/dist/src/model-routing/advisor.js +20 -0
- package/dist/src/model-routing/advisor.js.map +1 -0
- package/dist/src/model-routing/classifier.d.ts +57 -0
- package/dist/src/model-routing/classifier.d.ts.map +1 -0
- package/dist/src/model-routing/classifier.js +63 -0
- package/dist/src/model-routing/classifier.js.map +1 -0
- package/dist/src/model-routing/loader.d.ts +48 -0
- package/dist/src/model-routing/loader.d.ts.map +1 -0
- package/dist/src/model-routing/loader.js +79 -0
- package/dist/src/model-routing/loader.js.map +1 -0
- package/dist/src/model-routing/prompts.d.ts +22 -0
- package/dist/src/model-routing/prompts.d.ts.map +1 -0
- package/dist/src/model-routing/prompts.js +87 -0
- package/dist/src/model-routing/prompts.js.map +1 -0
- package/dist/src/model-routing/resolve.d.ts +40 -0
- package/dist/src/model-routing/resolve.d.ts.map +1 -0
- package/dist/src/model-routing/resolve.js +76 -0
- package/dist/src/model-routing/resolve.js.map +1 -0
- package/dist/src/model-routing/router.d.ts +149 -0
- package/dist/src/model-routing/router.d.ts.map +1 -0
- package/dist/src/model-routing/router.js +235 -0
- package/dist/src/model-routing/router.js.map +1 -0
- package/dist/src/model-routing/step-triggers.d.ts +27 -0
- package/dist/src/model-routing/step-triggers.d.ts.map +1 -0
- package/dist/src/model-routing/step-triggers.js +20 -0
- package/dist/src/model-routing/step-triggers.js.map +1 -0
- package/dist/src/model-routing/table.d.ts +126 -0
- package/dist/src/model-routing/table.d.ts.map +1 -0
- package/dist/src/model-routing/table.js +351 -0
- package/dist/src/model-routing/table.js.map +1 -0
- package/dist/src/session/session.d.ts +40 -23
- package/dist/src/session/session.d.ts.map +1 -1
- package/dist/src/session/session.js +173 -97
- package/dist/src/session/session.js.map +1 -1
- package/dist/src/tasks/quiescence.d.ts +13 -0
- package/dist/src/tasks/quiescence.d.ts.map +1 -0
- package/dist/src/tasks/quiescence.js +11 -0
- package/dist/src/tasks/quiescence.js.map +1 -0
- package/dist/src/tasks/task-manager.d.ts +101 -0
- package/dist/src/tasks/task-manager.d.ts.map +1 -0
- package/dist/src/tasks/task-manager.js +311 -0
- package/dist/src/tasks/task-manager.js.map +1 -0
- package/dist/src/tasks/types.d.ts +85 -0
- package/dist/src/tasks/types.d.ts.map +1 -0
- package/dist/src/tasks/types.js +2 -0
- package/dist/src/tasks/types.js.map +1 -0
- package/dist/src/tui/app.d.ts +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +12 -2
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/initial-prompt.d.ts.map +1 -1
- package/dist/src/tui/initial-prompt.js +0 -3
- package/dist/src/tui/initial-prompt.js.map +1 -1
- package/dist/src/tui/session-subscription.d.ts +3 -0
- package/dist/src/tui/session-subscription.d.ts.map +1 -1
- package/dist/src/tui/session-subscription.js +29 -5
- package/dist/src/tui/session-subscription.js.map +1 -1
- package/dist/src/tui/sidebar.d.ts +3 -0
- package/dist/src/tui/sidebar.d.ts.map +1 -1
- package/dist/src/tui/sidebar.js +19 -3
- package/dist/src/tui/sidebar.js.map +1 -1
- package/dist/src/tui/slash-commands.d.ts +12 -9
- package/dist/src/tui/slash-commands.d.ts.map +1 -1
- package/dist/src/tui/slash-commands.js +48 -10
- package/dist/src/tui/slash-commands.js.map +1 -1
- package/dist/src/tui/status-controller.d.ts +14 -9
- package/dist/src/tui/status-controller.d.ts.map +1 -1
- package/dist/src/tui/status-controller.js +26 -7
- package/dist/src/tui/status-controller.js.map +1 -1
- package/dist/src/tui/task-lane-renderer.d.ts +30 -0
- package/dist/src/tui/task-lane-renderer.d.ts.map +1 -0
- package/dist/src/tui/task-lane-renderer.js +93 -0
- package/dist/src/tui/task-lane-renderer.js.map +1 -0
- package/dist/src/tui/task-tree.d.ts +47 -0
- package/dist/src/tui/task-tree.d.ts.map +1 -0
- package/dist/src/tui/task-tree.js +190 -0
- package/dist/src/tui/task-tree.js.map +1 -0
- package/dist/src/tui/tool-formatters.js +3 -0
- package/dist/src/tui/tool-formatters.js.map +1 -1
- package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
- package/dist/src/turn-runner/agent-events.js +1 -0
- package/dist/src/turn-runner/agent-events.js.map +1 -1
- package/dist/src/turn-runner/duration.d.ts +2 -2
- package/dist/src/turn-runner/duration.js +3 -3
- package/dist/src/turn-runner/duration.js.map +1 -1
- package/dist/src/turn-runner/prompts.d.ts +5 -1
- package/dist/src/turn-runner/prompts.d.ts.map +1 -1
- package/dist/src/turn-runner/prompts.js +30 -6
- package/dist/src/turn-runner/prompts.js.map +1 -1
- package/dist/src/turn-runner/runtime-clock.d.ts +20 -0
- package/dist/src/turn-runner/runtime-clock.d.ts.map +1 -0
- package/dist/src/turn-runner/runtime-clock.js +38 -0
- package/dist/src/turn-runner/runtime-clock.js.map +1 -0
- package/dist/src/turn-runner/shell-state-handle.d.ts +0 -3
- package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -1
- package/dist/src/turn-runner/shell-state-handle.js +5 -55
- package/dist/src/turn-runner/shell-state-handle.js.map +1 -1
- package/dist/src/turn-runner/skill-context.d.ts +6 -7
- package/dist/src/turn-runner/skill-context.d.ts.map +1 -1
- package/dist/src/turn-runner/skill-context.js +10 -10
- package/dist/src/turn-runner/skill-context.js.map +1 -1
- package/dist/src/turn-runner/skills.d.ts.map +1 -1
- package/dist/src/turn-runner/skills.js +2 -22
- package/dist/src/turn-runner/skills.js.map +1 -1
- package/dist/src/turn-runner/state-compaction.d.ts +7 -5
- package/dist/src/turn-runner/state-compaction.d.ts.map +1 -1
- package/dist/src/turn-runner/state-compaction.js +69 -10
- package/dist/src/turn-runner/state-compaction.js.map +1 -1
- package/dist/src/turn-runner/state-machine-decisions.d.ts +135 -0
- package/dist/src/turn-runner/state-machine-decisions.d.ts.map +1 -0
- package/dist/src/turn-runner/state-machine-decisions.js +443 -0
- package/dist/src/turn-runner/state-machine-decisions.js.map +1 -0
- package/dist/src/turn-runner/state-machine-session.d.ts +13 -28
- package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -1
- package/dist/src/turn-runner/state-machine-session.js +18 -55
- package/dist/src/turn-runner/state-machine-session.js.map +1 -1
- package/dist/src/turn-runner/subagent.d.ts +156 -0
- package/dist/src/turn-runner/subagent.d.ts.map +1 -0
- package/dist/src/turn-runner/subagent.js +164 -0
- package/dist/src/turn-runner/subagent.js.map +1 -0
- package/dist/src/turn-runner/task-tools.d.ts +76 -0
- package/dist/src/turn-runner/task-tools.d.ts.map +1 -0
- package/dist/src/turn-runner/task-tools.js +370 -0
- package/dist/src/turn-runner/task-tools.js.map +1 -0
- package/dist/src/turn-runner/tools.d.ts +65 -17
- package/dist/src/turn-runner/tools.d.ts.map +1 -1
- package/dist/src/turn-runner/tools.js +173 -59
- package/dist/src/turn-runner/tools.js.map +1 -1
- package/dist/src/turn-runner/turn-runner.d.ts +205 -135
- package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
- package/dist/src/turn-runner/turn-runner.js +1311 -714
- package/dist/src/turn-runner/turn-runner.js.map +1 -1
- package/dist/src/turn-runner/usage-accounting.d.ts +4 -0
- package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -1
- package/dist/src/turn-runner/usage-accounting.js +19 -0
- package/dist/src/turn-runner/usage-accounting.js.map +1 -1
- package/dist/src/types/config.d.ts +9 -1
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/types/config.js +2 -1
- package/dist/src/types/config.js.map +1 -1
- package/dist/src/types/protocol.d.ts +124 -30
- package/dist/src/types/protocol.d.ts.map +1 -1
- package/dist/src/types/state-machine.d.ts +10 -12
- package/dist/src/types/state-machine.d.ts.map +1 -1
- package/dist/src/types/state-machine.js.map +1 -1
- package/package.json +4 -4
- package/dist/src/cli/model-gateway.d.ts.map +0 -1
- package/dist/src/cli/model-gateway.js.map +0 -1
- package/dist/src/turn-runner/state-machine-controller.d.ts +0 -140
- package/dist/src/turn-runner/state-machine-controller.d.ts.map +0 -1
- package/dist/src/turn-runner/state-machine-controller.js +0 -501
- package/dist/src/turn-runner/state-machine-controller.js.map +0 -1
- /package/dist/src/{cli → model-resolution}/model-gateway.d.ts +0 -0
|
@@ -41,37 +41,12 @@ export function currentScheduledState(stateMachine) {
|
|
|
41
41
|
export function isWaitingOnScheduledState(stateMachine) {
|
|
42
42
|
return Boolean(currentScheduledState(stateMachine) && !stateMachine?.terminal);
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* When this holds, the parent owes a `select_state_machine_state` to advance
|
|
51
|
-
* the machine: the user's answer comes back as an ordinary parent prompt, and
|
|
52
|
-
* if the parent replies in text without selecting a state the machine would
|
|
53
|
-
* silently stall at the asking state. The turn runner uses this to enforce the
|
|
54
|
-
* transition the same way it does after a state completes. Bookkeeping events
|
|
55
|
-
* that don't move the machine (`runner_decided`, `state_definition_updated`,
|
|
56
|
-
* `state_machine_started`) are skipped as noise; a real lifecycle move ends
|
|
57
|
-
* the wait.
|
|
58
|
-
*/
|
|
59
|
-
export function isAwaitingUserAnswer(stateMachine) {
|
|
60
|
-
if (!stateMachine || stateMachine.terminal)
|
|
61
|
-
return false;
|
|
62
|
-
for (let i = stateMachine.history.length - 1; i >= 0; i--) {
|
|
63
|
-
const event = stateMachine.history[i];
|
|
64
|
-
if (event.type === "state_asked_user")
|
|
65
|
-
return true;
|
|
66
|
-
if (event.type === "state_started" ||
|
|
67
|
-
event.type === "state_completed" ||
|
|
68
|
-
event.type === "state_failed" ||
|
|
69
|
-
event.type === "state_interrupted" ||
|
|
70
|
-
event.type === "state_machine_completed") {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
44
|
+
/** The active inert park, if the machine currently holds without execution or a wake. */
|
|
45
|
+
export function currentParkState(stateMachine) {
|
|
46
|
+
if (!stateMachine?.currentState || stateMachine.terminal)
|
|
47
|
+
return undefined;
|
|
48
|
+
const state = findState(stateMachine, stateMachine.currentState);
|
|
49
|
+
return state?.kind === "park" ? state : undefined;
|
|
75
50
|
}
|
|
76
51
|
export function recordRunnerDecision(stateMachine, decision) {
|
|
77
52
|
return {
|
|
@@ -180,7 +155,7 @@ export const MISCONFIGURED_POLL_GATE_THRESHOLD = 3;
|
|
|
180
155
|
* streak. The only way to accumulate consecutive same-poll completions is an
|
|
181
156
|
* always-exit-0 command (e.g. `echo waiting for review`) being re-selected as
|
|
182
157
|
* the same gate, which is exactly the hot-loop we want to surface. The
|
|
183
|
-
* current in-flight success is not yet recorded when the
|
|
158
|
+
* current in-flight success is not yet recorded when the turn loop calls
|
|
184
159
|
* this, so the returned count reflects only prior completions.
|
|
185
160
|
*/
|
|
186
161
|
export function consecutivePollGateSuccesses(stateMachine, pollName) {
|
|
@@ -199,7 +174,6 @@ export function consecutivePollGateSuccesses(stateMachine, pollName) {
|
|
|
199
174
|
if ((event.type === "state_started" ||
|
|
200
175
|
event.type === "state_failed" ||
|
|
201
176
|
event.type === "state_interrupted" ||
|
|
202
|
-
event.type === "state_asked_user" ||
|
|
203
177
|
event.type === "state_definition_updated") &&
|
|
204
178
|
event.state !== pollName) {
|
|
205
179
|
break;
|
|
@@ -213,8 +187,9 @@ export function consecutivePollGateSuccesses(stateMachine, pollName) {
|
|
|
213
187
|
* between — before the runner injects a loop warning into the next decision
|
|
214
188
|
* prompt. Set above a normal retry-with-correction streak (re-running a state
|
|
215
189
|
* two or three times with a fixed `override.prompt` is legitimate) so the
|
|
216
|
-
* warning targets idle "holding" loops where the parent re-selects
|
|
217
|
-
* "keep waiting"
|
|
190
|
+
* warning targets idle "holding" loops where the parent re-selects executable
|
|
191
|
+
* work to "keep waiting" rather than productive retries. Park states are
|
|
192
|
+
* exempt because re-selecting the same park is a legal no-work hold.
|
|
218
193
|
*/
|
|
219
194
|
export const REPEATED_SELECTION_LOOP_THRESHOLD = 5;
|
|
220
195
|
/**
|
|
@@ -234,11 +209,10 @@ export const REPEATED_SELECTION_LOOP_WINDOW_MS = 15 * 60 * 1000;
|
|
|
234
209
|
* "holding" state again and again to "keep waiting" — a no-op, since selecting a
|
|
235
210
|
* state runs it immediately rather than suspending the machine. Unlike
|
|
236
211
|
* `consecutivePollGateSuccesses` (which counts completions of an always-true
|
|
237
|
-
* poll), this counts `state_started` events for
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
* other work never accumulates.
|
|
212
|
+
* poll), this telemetry counts `state_started` events for every state kind;
|
|
213
|
+
* the trip policy separately exempts park. A lifecycle event naming a
|
|
214
|
+
* *different* state means the machine actually moved on, so the streak resets
|
|
215
|
+
* and a normal plan that revisits a state after doing other work never accumulates.
|
|
242
216
|
*/
|
|
243
217
|
export function repeatedStateSelectionStreak(stateMachine, stateName) {
|
|
244
218
|
let count = 0;
|
|
@@ -261,7 +235,6 @@ export function repeatedStateSelectionStreak(stateMachine, stateName) {
|
|
|
261
235
|
if ((event.type === "state_completed" ||
|
|
262
236
|
event.type === "state_failed" ||
|
|
263
237
|
event.type === "state_interrupted" ||
|
|
264
|
-
event.type === "state_asked_user" ||
|
|
265
238
|
event.type === "state_definition_updated" ||
|
|
266
239
|
event.type === "state_machine_reactivated") &&
|
|
267
240
|
event.state !== stateName) {
|
|
@@ -277,9 +250,12 @@ export function repeatedStateSelectionStreak(stateMachine, stateName) {
|
|
|
277
250
|
* read as an idle hot loop, or undefined otherwise. This is the single source of
|
|
278
251
|
* truth for the trip condition — the turn runner uses the returned count to word
|
|
279
252
|
* its loop-warning reminder, and tests assert against this same function rather
|
|
280
|
-
* than re-deriving the threshold/window comparison.
|
|
253
|
+
* than re-deriving the threshold/window comparison. Park always returns
|
|
254
|
+
* undefined because repeated park selection deliberately performs no work.
|
|
281
255
|
*/
|
|
282
256
|
export function repeatedSelectionLoopCount(stateMachine, stateName) {
|
|
257
|
+
if (findState(stateMachine, stateName)?.kind === "park")
|
|
258
|
+
return undefined;
|
|
283
259
|
const { count, spanMs } = repeatedStateSelectionStreak(stateMachine, stateName);
|
|
284
260
|
if (count < REPEATED_SELECTION_LOOP_THRESHOLD || spanMs > REPEATED_SELECTION_LOOP_WINDOW_MS) {
|
|
285
261
|
return undefined;
|
|
@@ -326,19 +302,6 @@ export function recordStateInterrupted(stateMachine, state, reason, output) {
|
|
|
326
302
|
updatedAt: now,
|
|
327
303
|
};
|
|
328
304
|
}
|
|
329
|
-
export function recordStateAskedUser(stateMachine, state, questions) {
|
|
330
|
-
const now = Date.now();
|
|
331
|
-
return {
|
|
332
|
-
...stateMachine,
|
|
333
|
-
history: appendHistory(stateMachine.history, {
|
|
334
|
-
type: "state_asked_user",
|
|
335
|
-
timestamp: now,
|
|
336
|
-
state,
|
|
337
|
-
questions,
|
|
338
|
-
}),
|
|
339
|
-
updatedAt: now,
|
|
340
|
-
};
|
|
341
|
-
}
|
|
342
305
|
export function recordStateMachineCompleted(stateMachine, terminal) {
|
|
343
306
|
const now = Date.now();
|
|
344
307
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine-session.js","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state-machine-session.js","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { ScopeId, TaskId } from "../tasks/types.js";
|
|
2
|
+
import type { Agent, AgentEvent, AgentMessage, AgentTool } from "@earendil-works/pi-agent-core";
|
|
3
|
+
import type { ThinkingLevel, Usage } from "@earendil-works/pi-ai";
|
|
4
|
+
import type { Skill } from "@earendil-works/pi-coding-agent";
|
|
5
|
+
import { classifyRoute, type ClassifyRouteOptions } from "../model-routing/classifier.js";
|
|
6
|
+
import { type RouteResolutionCatalog, type ResolvedTarget } from "../model-routing/resolve.js";
|
|
7
|
+
import type { RoutingTable } from "../model-routing/table.js";
|
|
8
|
+
import type { TurnEventOrigin, TurnOptions, TurnState, TurnTokenUsage } from "../types/protocol.js";
|
|
9
|
+
import type { StateMachineDefinition } from "../types/state-machine.js";
|
|
10
|
+
import type { TurnRunnerControlResult } from "./tools.js";
|
|
11
|
+
/** Complete internal description accepted by the shared sub-agent executor. */
|
|
12
|
+
export interface SubagentSpec {
|
|
13
|
+
/** User prompt that defines the child agent's complete task. */
|
|
14
|
+
prompt: string;
|
|
15
|
+
/** Optional role or behavior layer applied only to this child. */
|
|
16
|
+
systemPrompt?: string;
|
|
17
|
+
/** Skill names the child may use; omission inherits the available skill set. */
|
|
18
|
+
allowedSkills?: string[];
|
|
19
|
+
/** Working directory for the child's coding tools. */
|
|
20
|
+
cwd?: string;
|
|
21
|
+
/** Exact or virtual model setting for this child. */
|
|
22
|
+
model?: string;
|
|
23
|
+
/** Reasoning effort applied to the child model. */
|
|
24
|
+
thinkingLevel?: ThinkingLevel;
|
|
25
|
+
/** Whether to seed the child with the parent's current transcript. */
|
|
26
|
+
forkContext?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** Terminal outcome consumed by the sub-agent's owner after one prompt run. */
|
|
29
|
+
export type SubagentResult = {
|
|
30
|
+
type: "complete";
|
|
31
|
+
result?: string;
|
|
32
|
+
} | {
|
|
33
|
+
type: "failed";
|
|
34
|
+
error: string;
|
|
35
|
+
} | {
|
|
36
|
+
type: "interrupted";
|
|
37
|
+
};
|
|
38
|
+
/** One in-flight execution created from a {@link SubagentSpec}. */
|
|
39
|
+
export interface SubagentRun {
|
|
40
|
+
/** Starts the sub-agent using the executor-owned prompt and transcript. */
|
|
41
|
+
prompt(): Promise<SubagentResult>;
|
|
42
|
+
/** Aborts the sub-agent and makes its prompt settle as interrupted. */
|
|
43
|
+
interrupt(reason: string): void;
|
|
44
|
+
/** Text-only partial output, excluding any forked seed transcript. */
|
|
45
|
+
partialAssistantText(): string | undefined;
|
|
46
|
+
/** The reason passed to interrupt, or undefined while uninterrupted. */
|
|
47
|
+
interruptedReason(): string | undefined;
|
|
48
|
+
}
|
|
49
|
+
export interface SubagentAgentConfigInput {
|
|
50
|
+
/** Transient child turn state containing resolved options and seed messages. */
|
|
51
|
+
state: TurnState;
|
|
52
|
+
/** Identity layer placed before host system instructions for a fresh child. */
|
|
53
|
+
prependSystemPrompt?: string;
|
|
54
|
+
/** Per-child role layer placed after host system instructions. */
|
|
55
|
+
appendSystemPrompt?: string;
|
|
56
|
+
/** Fully rendered system prompt reused verbatim by an unrestricted context fork. */
|
|
57
|
+
systemPrompt?: string;
|
|
58
|
+
/** Skills rendered into the child system prompt; undefined means unrestricted. */
|
|
59
|
+
skills?: Skill[];
|
|
60
|
+
/** Runtime tools bound to this child's working directory and permissions. */
|
|
61
|
+
tools: AgentTool[];
|
|
62
|
+
/** Child-only memory identity and wire horizon; omission selects the parent runtime. */
|
|
63
|
+
memoryContext?: SubagentMemoryContext;
|
|
64
|
+
}
|
|
65
|
+
/** Child-local memory identity and mutable wire-shaping state. */
|
|
66
|
+
export interface SubagentMemoryContext {
|
|
67
|
+
/** Durable scratch namespace derived from the parent session and task id. */
|
|
68
|
+
sessionId?: string;
|
|
69
|
+
/** Horizon mutated only by this child's context transform. */
|
|
70
|
+
horizon: import("../types/protocol.js").WireGuardHorizon;
|
|
71
|
+
}
|
|
72
|
+
interface SubagentMachineContext {
|
|
73
|
+
definition: StateMachineDefinition;
|
|
74
|
+
currentState: string;
|
|
75
|
+
}
|
|
76
|
+
export interface SubagentExecutionContext {
|
|
77
|
+
/** Origin attached to every streamed child event and usage tick. */
|
|
78
|
+
origin: TurnEventOrigin;
|
|
79
|
+
/** Active relay definition used to keep a state worker inside its assigned state. */
|
|
80
|
+
machineContext?: SubagentMachineContext;
|
|
81
|
+
/** Scope owned by a spawned child; its nested tasks are cascade-stopped on close. */
|
|
82
|
+
childScopeId?: `task:${TaskId}`;
|
|
83
|
+
/** Scope that owns the spawn task and is the parent of childScopeId. */
|
|
84
|
+
ownerScopeId?: ScopeId;
|
|
85
|
+
/** Isolated observational-memory identity and horizon for this child. */
|
|
86
|
+
memoryContext?: SubagentMemoryContext;
|
|
87
|
+
/** Transcript source of the agent that called spawn_agent. */
|
|
88
|
+
forkSource?: {
|
|
89
|
+
messages(): AgentMessage[];
|
|
90
|
+
systemPrompt(): string | undefined;
|
|
91
|
+
};
|
|
92
|
+
/** Runtime agent published after construction for recursively spawned forks. */
|
|
93
|
+
agent?: Agent;
|
|
94
|
+
}
|
|
95
|
+
export interface SubagentExecutorDeps {
|
|
96
|
+
/** Builds the pi agent after the executor has resolved model, prompt, skills, and tools. */
|
|
97
|
+
createAgent(input: SubagentAgentConfigInput, onControlResult: (result: TurnRunnerControlResult) => void): Agent;
|
|
98
|
+
/** Resolves a child skill allowlist and expands slash-skill prompts against it. */
|
|
99
|
+
skillContext: {
|
|
100
|
+
/** Resolves allowed skill names or returns undefined for an unrestricted child. */
|
|
101
|
+
resolveSkills(spec: SubagentSpec, ctx: SubagentExecutionContext): Skill[] | undefined;
|
|
102
|
+
/** Expands slash commands using only the skills available to this child. */
|
|
103
|
+
resolveSlashSkillPrompt(prompt: string, skills: Skill[] | undefined): string;
|
|
104
|
+
/** Rebuilds the system prompt when a fork restricts the parent's skill catalog. */
|
|
105
|
+
createSystemPromptWithAppendedLayers(input: {
|
|
106
|
+
skills: readonly Skill[];
|
|
107
|
+
}): string;
|
|
108
|
+
};
|
|
109
|
+
/** Parent options copied into a child before per-spec model and effort overrides. */
|
|
110
|
+
inheritedOptions(): TurnOptions;
|
|
111
|
+
/** Resolves an explicit virtual model override to its existing default route. */
|
|
112
|
+
resolveModel(model: string | undefined): Pick<ResolvedTarget, "modelName" | "thinkingLevel"> | undefined;
|
|
113
|
+
/** Returns a snapshot of the parent transcript when forkContext is enabled. */
|
|
114
|
+
seedMessages(spec: SubagentSpec, ctx: SubagentExecutionContext): AgentMessage[];
|
|
115
|
+
/** Returns the byte-identical parent system prompt used by unrestricted forks. */
|
|
116
|
+
parentSystemPrompt(ctx: SubagentExecutionContext): string | undefined;
|
|
117
|
+
/** Creates coding tools using the child's resolved cwd. */
|
|
118
|
+
createTools(cwd: string | undefined, ctx: SubagentExecutionContext): {
|
|
119
|
+
tools: AgentTool[];
|
|
120
|
+
};
|
|
121
|
+
/** Retries the existing transient provider failures without changing child semantics. */
|
|
122
|
+
retryTransientServerErrors(agent: Agent): Promise<void>;
|
|
123
|
+
/** Streams pi events through the turn protocol with the child origin attached. */
|
|
124
|
+
emitAgentEvent(event: AgentEvent, origin: TurnEventOrigin): void;
|
|
125
|
+
/** Adds one child completion's usage to the turn aggregate. */
|
|
126
|
+
recordUsage(usage: TurnTokenUsage | Usage | undefined, modelId: string | undefined): void;
|
|
127
|
+
/** Emits the aggregate usage snapshot after a child completion. */
|
|
128
|
+
emitTurnUsage(origin: TurnEventOrigin): void;
|
|
129
|
+
}
|
|
130
|
+
/** Build the single executor used by every internal sub-agent spec builder. */
|
|
131
|
+
export declare function createSubagentExecutor(deps: SubagentExecutorDeps): (spec: SubagentSpec, ctx: SubagentExecutionContext) => SubagentRun;
|
|
132
|
+
export interface ClassifySpawnModelDeps {
|
|
133
|
+
/** Active routing table used to distinguish concrete settings from virtual tiers. */
|
|
134
|
+
table: RoutingTable;
|
|
135
|
+
/** Concrete-model capability lookup used by the pure resolution kernel. */
|
|
136
|
+
resolveCatalog: RouteResolutionCatalog;
|
|
137
|
+
/** Provider-call settings for the stateless classifier. */
|
|
138
|
+
classifierOptions: ClassifyRouteOptions;
|
|
139
|
+
/** Test seam for the one classifier call; production uses classifyRoute directly. */
|
|
140
|
+
classify?: typeof classifyRoute;
|
|
141
|
+
}
|
|
142
|
+
/** Concrete child target selected from the parent's model setting. */
|
|
143
|
+
export interface SpawnModelSelection {
|
|
144
|
+
/** Concrete catalog name inherited or selected for child execution. */
|
|
145
|
+
modelName: string;
|
|
146
|
+
/** Route-owned effort, present only when a virtual setting selected it. */
|
|
147
|
+
thinkingLevel?: ThinkingLevel;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Resolve a child model without consulting the session's mutable ModelRouter.
|
|
151
|
+
* Concrete settings inherit verbatim; virtual settings make one stateless
|
|
152
|
+
* classify call on the child prompt and resolve that decision immediately.
|
|
153
|
+
*/
|
|
154
|
+
export declare function classifySpawnModel(prompt: string, parentSetting: string, deps: ClassifySpawnModelDeps): Promise<SpawnModelSelection>;
|
|
155
|
+
export {};
|
|
156
|
+
//# sourceMappingURL=subagent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { assistantText } from "../core/serializer.js";
|
|
2
|
+
import { classifyRoute, } from "../model-routing/classifier.js";
|
|
3
|
+
import { resolveRoute, } from "../model-routing/resolve.js";
|
|
4
|
+
import { createForkContextReminder, createStateAgentSystemPromptLayer } from "./prompts.js";
|
|
5
|
+
import { usageFromMessages } from "./usage-accounting.js";
|
|
6
|
+
/** Build the single executor used by every internal sub-agent spec builder. */
|
|
7
|
+
export function createSubagentExecutor(deps) {
|
|
8
|
+
return (spec, ctx) => {
|
|
9
|
+
const controls = [];
|
|
10
|
+
const seedMessages = deps.seedMessages(spec, ctx);
|
|
11
|
+
// Capture the seeded prefix length up front. The sub-agent's result,
|
|
12
|
+
// partial text, and recorded usage are all computed by slicing this prefix
|
|
13
|
+
// off agent.state.messages so a forked parent transcript isn't folded into
|
|
14
|
+
// this run. Reading `seedMessages.length` lazily at each call site would be
|
|
15
|
+
// wrong if the agent ever appended into the seed array in place, so snapshot
|
|
16
|
+
// the count once.
|
|
17
|
+
const seedMessageCount = seedMessages.length;
|
|
18
|
+
const resolvedModel = deps.resolveModel(spec.model);
|
|
19
|
+
const inheritedOptions = deps.inheritedOptions();
|
|
20
|
+
const childModelOptions = resolvedModel
|
|
21
|
+
? { model: resolvedModel.modelName, thinkingLevel: resolvedModel.thinkingLevel }
|
|
22
|
+
: {
|
|
23
|
+
...(spec.model ? { model: spec.model } : {}),
|
|
24
|
+
...(spec.thinkingLevel ? { thinkingLevel: spec.thinkingLevel } : {}),
|
|
25
|
+
};
|
|
26
|
+
const state = {
|
|
27
|
+
status: "running",
|
|
28
|
+
mode: "agent",
|
|
29
|
+
options: {
|
|
30
|
+
...inheritedOptions,
|
|
31
|
+
...childModelOptions,
|
|
32
|
+
},
|
|
33
|
+
agent: {
|
|
34
|
+
status: "running",
|
|
35
|
+
messages: seedMessages,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
const childSkills = deps.skillContext.resolveSkills(spec, ctx);
|
|
39
|
+
// Expand `/skill` slash commands the same way the parent prompt path does,
|
|
40
|
+
// scoped to the skills this state is actually allowed to use. Lets state
|
|
41
|
+
// prompts say "use the /foo skill to do xyz" and have the skill body
|
|
42
|
+
// injected, instead of shipping the literal `/foo` text to the model.
|
|
43
|
+
const expandedPrompt = deps.skillContext.resolveSlashSkillPrompt(spec.prompt, childSkills);
|
|
44
|
+
const forkContext = spec.forkContext === true;
|
|
45
|
+
const identityLayer = createStateAgentSystemPromptLayer(ctx.machineContext);
|
|
46
|
+
// When forking, the sub-agent's identity + per-state systemPrompt layers
|
|
47
|
+
// ride in the tail user turn so the system prompt can stay byte-identical to
|
|
48
|
+
// the parent's and preserve the provider prompt-cache prefix. There is one
|
|
49
|
+
// exception: a state that restricts skills via allowedSkills must NOT inherit
|
|
50
|
+
// the parent's full skill catalog. resolveSkills returns undefined only for
|
|
51
|
+
// an unrestricted state; when it returns a concrete allowlist we rebuild the
|
|
52
|
+
// system prompt around that allowlist instead of reusing the parent's verbatim,
|
|
53
|
+
// trading the cache prefix for the allowlist contract.
|
|
54
|
+
const forkSystemPrompt = forkContext
|
|
55
|
+
? childSkills === undefined
|
|
56
|
+
? deps.parentSystemPrompt(ctx)
|
|
57
|
+
: deps.skillContext.createSystemPromptWithAppendedLayers({ skills: childSkills })
|
|
58
|
+
: undefined;
|
|
59
|
+
const tailPrompt = forkContext
|
|
60
|
+
? [createForkContextReminder(), identityLayer, spec.systemPrompt, expandedPrompt]
|
|
61
|
+
.filter((part) => Boolean(part))
|
|
62
|
+
.join("\n\n")
|
|
63
|
+
: expandedPrompt;
|
|
64
|
+
const agent = deps.createAgent({
|
|
65
|
+
state,
|
|
66
|
+
...(forkSystemPrompt ? { systemPrompt: forkSystemPrompt } : {}),
|
|
67
|
+
prependSystemPrompt: forkContext ? undefined : identityLayer,
|
|
68
|
+
appendSystemPrompt: forkContext ? undefined : spec.systemPrompt,
|
|
69
|
+
skills: childSkills,
|
|
70
|
+
...deps.createTools(spec.cwd, ctx),
|
|
71
|
+
...(ctx.memoryContext ? { memoryContext: ctx.memoryContext } : {}),
|
|
72
|
+
}, (result) => {
|
|
73
|
+
if (result.type === "none")
|
|
74
|
+
return;
|
|
75
|
+
if (controls.length > 0) {
|
|
76
|
+
throw new Error("A sub-agent pass produced more than one control result.");
|
|
77
|
+
}
|
|
78
|
+
controls.push(result);
|
|
79
|
+
});
|
|
80
|
+
ctx.agent = agent;
|
|
81
|
+
let unsubscribe;
|
|
82
|
+
let interruptedReason;
|
|
83
|
+
const finish = () => {
|
|
84
|
+
const control = controls[0] ?? { type: "none" };
|
|
85
|
+
if (control.type !== "none") {
|
|
86
|
+
return { type: "failed", error: `Sub-agent emitted unsupported control: ${control.type}` };
|
|
87
|
+
}
|
|
88
|
+
if (agent.state.errorMessage) {
|
|
89
|
+
return { type: "failed", error: agent.state.errorMessage };
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
type: "complete",
|
|
93
|
+
result: assistantText(agent.state.messages.slice(seedMessageCount)),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
// A sub-agent runs a turn just like the parent — a loop of completion
|
|
97
|
+
// calls — so it streams a `usage` event per completion from its own
|
|
98
|
+
// `message_end` events. The finally block falls back to summing the whole
|
|
99
|
+
// message list only when no `message_end` fired (stubbed-agent test path).
|
|
100
|
+
let recordedMessageUsage = false;
|
|
101
|
+
return {
|
|
102
|
+
prompt: async () => {
|
|
103
|
+
unsubscribe = agent.subscribe((event) => {
|
|
104
|
+
deps.emitAgentEvent(event, ctx.origin);
|
|
105
|
+
if (event.type !== "message_end" || event.message.role !== "assistant")
|
|
106
|
+
return;
|
|
107
|
+
deps.recordUsage(event.message.usage, event.message.model);
|
|
108
|
+
recordedMessageUsage = true;
|
|
109
|
+
if (event.message.usage.totalTokens > 0)
|
|
110
|
+
deps.emitTurnUsage(ctx.origin);
|
|
111
|
+
});
|
|
112
|
+
try {
|
|
113
|
+
await agent.prompt(tailPrompt);
|
|
114
|
+
await deps.retryTransientServerErrors(agent);
|
|
115
|
+
return interruptedReason ? { type: "interrupted" } : finish();
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (interruptedReason)
|
|
119
|
+
return { type: "interrupted" };
|
|
120
|
+
if (error instanceof Error)
|
|
121
|
+
return { type: "failed", error: error.message };
|
|
122
|
+
return { type: "failed", error: String(error) };
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
if (!recordedMessageUsage) {
|
|
126
|
+
deps.recordUsage(usageFromMessages(agent.state.messages.slice(seedMessageCount)), agent.state.model.id);
|
|
127
|
+
deps.emitTurnUsage(ctx.origin);
|
|
128
|
+
}
|
|
129
|
+
unsubscribe?.();
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
interrupt: (reason) => {
|
|
133
|
+
interruptedReason = reason;
|
|
134
|
+
agent.abort();
|
|
135
|
+
agent.clearAllQueues();
|
|
136
|
+
unsubscribe?.();
|
|
137
|
+
},
|
|
138
|
+
partialAssistantText: () => assistantText(agent.state.messages.slice(seedMessageCount)) || undefined,
|
|
139
|
+
interruptedReason: () => interruptedReason,
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Resolve a child model without consulting the session's mutable ModelRouter.
|
|
145
|
+
* Concrete settings inherit verbatim; virtual settings make one stateless
|
|
146
|
+
* classify call on the child prompt and resolve that decision immediately.
|
|
147
|
+
*/
|
|
148
|
+
export async function classifySpawnModel(prompt, parentSetting, deps) {
|
|
149
|
+
const tier = deps.table.tiers[parentSetting];
|
|
150
|
+
if (!tier)
|
|
151
|
+
return { modelName: parentSetting };
|
|
152
|
+
const classify = deps.classify ?? classifyRoute;
|
|
153
|
+
const decision = await classify({
|
|
154
|
+
tierName: parentSetting,
|
|
155
|
+
tier,
|
|
156
|
+
guidance: deps.table.classifier.guidance,
|
|
157
|
+
lastStepDelta: prompt,
|
|
158
|
+
hasImages: false,
|
|
159
|
+
trigger: "turn_start",
|
|
160
|
+
}, deps.classifierOptions);
|
|
161
|
+
const resolved = resolveRoute(deps.table, parentSetting, decision.route, { hasImages: false }, deps.resolveCatalog);
|
|
162
|
+
return { modelName: resolved.modelName, thinkingLevel: resolved.thinkingLevel };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=subagent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/turn-runner/subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import { Type, type Static, type TSchema } from "typebox";
|
|
3
|
+
import type { RuntimeClock } from "./runtime-clock.js";
|
|
4
|
+
import type { TaskManager } from "../tasks/task-manager.js";
|
|
5
|
+
import type { ScopeId, TaskId, TaskSnapshot } from "../tasks/types.js";
|
|
6
|
+
import type { SubagentRun, SubagentSpec } from "./subagent.js";
|
|
7
|
+
export declare const spawnAgentSchema: Type.TObject<{
|
|
8
|
+
prompt: Type.TString;
|
|
9
|
+
fork_context: Type.TOptional<Type.TBoolean>;
|
|
10
|
+
cwd: Type.TOptional<Type.TString>;
|
|
11
|
+
allowed_skills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
12
|
+
run_in_background: Type.TOptional<Type.TBoolean>;
|
|
13
|
+
timeout: Type.TOptional<Type.TNumber>;
|
|
14
|
+
}>;
|
|
15
|
+
export type SpawnAgentParams = Static<typeof spawnAgentSchema>;
|
|
16
|
+
export interface SpawnAgentDependencies {
|
|
17
|
+
/** Single lifecycle owner shared with bash and the task administration tools. */
|
|
18
|
+
taskManager: TaskManager;
|
|
19
|
+
/** Default foreground wait budget in milliseconds. */
|
|
20
|
+
defaultWaitBudgetMs: number;
|
|
21
|
+
/** Runtime clock used by the shared B1 wording. */
|
|
22
|
+
clock: RuntimeClock;
|
|
23
|
+
/** Scope of the agent that called spawn_agent. */
|
|
24
|
+
ownerScopeId: () => ScopeId;
|
|
25
|
+
/** Build the child only after its stable task identity and scope exist. */
|
|
26
|
+
createRun(input: {
|
|
27
|
+
spec: SubagentSpec;
|
|
28
|
+
taskId: TaskId;
|
|
29
|
+
ownerScopeId: ScopeId;
|
|
30
|
+
childScopeId: `task:${TaskId}`;
|
|
31
|
+
}): Promise<SubagentRun>;
|
|
32
|
+
/** Remove child-scoped scratch after all work in its scope has unwound. */
|
|
33
|
+
dropScratch?(taskId: TaskId): Promise<void>;
|
|
34
|
+
/** Register settlement delivery posture with the parent loop. */
|
|
35
|
+
onTaskStarted?: (id: TaskId, foregroundPending: boolean) => void;
|
|
36
|
+
/** Resolve foreground delivery bookkeeping. */
|
|
37
|
+
onForegroundResult?: (id: TaskId, converted: boolean) => void;
|
|
38
|
+
}
|
|
39
|
+
/** Create the restricted public spawn_agent surface on the shared task rails. */
|
|
40
|
+
export declare function createSpawnAgentTool(deps: SpawnAgentDependencies): AgentTool<typeof spawnAgentSchema>;
|
|
41
|
+
export interface BackgroundableDependencies {
|
|
42
|
+
/** Single lifecycle owner used for starting, racing, inspecting, and stopping work. */
|
|
43
|
+
taskManager: TaskManager;
|
|
44
|
+
/** Default foreground wait budget; individual calls may override it in seconds. */
|
|
45
|
+
defaultWaitBudgetMs: number;
|
|
46
|
+
/** Runtime time source used for stable elapsed wording. */
|
|
47
|
+
clock: RuntimeClock;
|
|
48
|
+
/** Scope whose closure must stop the task. */
|
|
49
|
+
ownerScopeId: () => ScopeId;
|
|
50
|
+
/** Convert validated tool arguments into the human-facing task label. */
|
|
51
|
+
label: (params: Record<string, unknown>) => string;
|
|
52
|
+
/** Register whether a new task is immediately deliverable or still racing foreground. */
|
|
53
|
+
onTaskStarted?: (id: TaskId, foregroundPending: boolean) => void;
|
|
54
|
+
/** Resolve foreground delivery: true converts to background; false suppresses its FIFO notice. */
|
|
55
|
+
onForegroundResult?: (id: TaskId, converted: boolean) => void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Turn a normal pi tool into task-backed work. The wrapped tool always executes under the
|
|
59
|
+
* task's AbortSignal; a foreground budget expiry changes only its delivery mode, never its
|
|
60
|
+
* lifetime.
|
|
61
|
+
*/
|
|
62
|
+
export declare function wrapBackgroundable<TParameters extends TSchema, TDetails>(tool: AgentTool<TParameters, TDetails>, deps: BackgroundableDependencies): AgentTool;
|
|
63
|
+
/** B1: the only source for foreground wait-budget conversion wording. */
|
|
64
|
+
export declare function stillRunningNotice(snapshot: TaskSnapshot, now?: number): string;
|
|
65
|
+
/** B2: the only source for explicit background-start wording. */
|
|
66
|
+
export declare function startedInBackgroundNotice(snapshot: TaskSnapshot): string;
|
|
67
|
+
/** B3: the only source for batched settlement nudges and idle re-prompts. */
|
|
68
|
+
export declare function settlementNotice(settlements: readonly TaskSnapshot[]): string;
|
|
69
|
+
/** One-shot parent context for executors that could not survive process recovery. */
|
|
70
|
+
export declare function lostTaskRecoveryReminder(tasks: readonly TaskSnapshot[]): string;
|
|
71
|
+
/** Create the sequential admin lane. These tools only inspect existing tasks. */
|
|
72
|
+
export declare function createTaskAdminTools(input: {
|
|
73
|
+
taskManager: TaskManager;
|
|
74
|
+
clock: RuntimeClock;
|
|
75
|
+
}): AgentTool[];
|
|
76
|
+
//# sourceMappingURL=task-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-tools.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/task-tools.ts"],"names":[],"mappings":"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"}
|