@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.
Files changed (235) hide show
  1. package/README.md +19 -11
  2. package/dist/package.json +4 -4
  3. package/dist/src/cli/config.d.ts +10 -0
  4. package/dist/src/cli/config.d.ts.map +1 -0
  5. package/dist/src/cli/config.js +24 -0
  6. package/dist/src/cli/config.js.map +1 -0
  7. package/dist/src/cli/help.d.ts.map +1 -1
  8. package/dist/src/cli/help.js +16 -13
  9. package/dist/src/cli/help.js.map +1 -1
  10. package/dist/src/cli/inline-slash.d.ts +2 -1
  11. package/dist/src/cli/inline-slash.d.ts.map +1 -1
  12. package/dist/src/cli/inline-slash.js +14 -5
  13. package/dist/src/cli/inline-slash.js.map +1 -1
  14. package/dist/src/cli/memory-query.d.ts +1 -1
  15. package/dist/src/cli/model.d.ts +1 -1
  16. package/dist/src/cli/model.d.ts.map +1 -1
  17. package/dist/src/cli/model.js +1 -1
  18. package/dist/src/cli/model.js.map +1 -1
  19. package/dist/src/cli/route.d.ts +84 -0
  20. package/dist/src/cli/route.d.ts.map +1 -0
  21. package/dist/src/cli/route.js +261 -0
  22. package/dist/src/cli/route.js.map +1 -0
  23. package/dist/src/cli/rpc.d.ts +52 -9
  24. package/dist/src/cli/rpc.d.ts.map +1 -1
  25. package/dist/src/cli/rpc.js +195 -28
  26. package/dist/src/cli/rpc.js.map +1 -1
  27. package/dist/src/cli/run.d.ts +8 -1
  28. package/dist/src/cli/run.d.ts.map +1 -1
  29. package/dist/src/cli/run.js +24 -7
  30. package/dist/src/cli/run.js.map +1 -1
  31. package/dist/src/cli/shared.d.ts +4 -3
  32. package/dist/src/cli/shared.d.ts.map +1 -1
  33. package/dist/src/cli/shared.js +3 -4
  34. package/dist/src/cli/shared.js.map +1 -1
  35. package/dist/src/cli/shutdown.d.ts +4 -2
  36. package/dist/src/cli/shutdown.d.ts.map +1 -1
  37. package/dist/src/cli/shutdown.js +4 -2
  38. package/dist/src/cli/shutdown.js.map +1 -1
  39. package/dist/src/cli.d.ts +2 -0
  40. package/dist/src/cli.d.ts.map +1 -1
  41. package/dist/src/cli.js +12 -0
  42. package/dist/src/cli.js.map +1 -1
  43. package/dist/src/core/structured-output.d.ts +2 -0
  44. package/dist/src/core/structured-output.d.ts.map +1 -1
  45. package/dist/src/core/structured-output.js +1 -0
  46. package/dist/src/core/structured-output.js.map +1 -1
  47. package/dist/src/lib/system-reminder.d.ts +14 -0
  48. package/dist/src/lib/system-reminder.d.ts.map +1 -0
  49. package/dist/src/lib/system-reminder.js +53 -0
  50. package/dist/src/lib/system-reminder.js.map +1 -0
  51. package/dist/src/lib/walk-ancestors.d.ts +9 -0
  52. package/dist/src/lib/walk-ancestors.d.ts.map +1 -0
  53. package/dist/src/lib/walk-ancestors.js +28 -0
  54. package/dist/src/lib/walk-ancestors.js.map +1 -0
  55. package/dist/src/memory/observational-prompts.d.ts.map +1 -1
  56. package/dist/src/memory/observational-prompts.js +2 -1
  57. package/dist/src/memory/observational-prompts.js.map +1 -1
  58. package/dist/src/memory/observational.d.ts +31 -4
  59. package/dist/src/memory/observational.d.ts.map +1 -1
  60. package/dist/src/memory/observational.js +43 -4
  61. package/dist/src/memory/observational.js.map +1 -1
  62. package/dist/src/model-resolution/catalog.d.ts +2 -2
  63. package/dist/src/model-resolution/catalog.d.ts.map +1 -1
  64. package/dist/src/model-resolution/catalog.js +61 -33
  65. package/dist/src/model-resolution/catalog.js.map +1 -1
  66. package/dist/src/model-resolution/duet-gateway.d.ts +3 -3
  67. package/dist/src/model-resolution/duet-gateway.d.ts.map +1 -1
  68. package/dist/src/model-resolution/duet-gateway.js +119 -19
  69. package/dist/src/model-resolution/duet-gateway.js.map +1 -1
  70. package/dist/src/model-resolution/model-gateway.d.ts.map +1 -0
  71. package/dist/src/{cli → model-resolution}/model-gateway.js +10 -6
  72. package/dist/src/model-resolution/model-gateway.js.map +1 -0
  73. package/dist/src/model-resolution/resolver.d.ts +11 -4
  74. package/dist/src/model-resolution/resolver.d.ts.map +1 -1
  75. package/dist/src/model-resolution/resolver.js +39 -8
  76. package/dist/src/model-resolution/resolver.js.map +1 -1
  77. package/dist/src/model-routing/advisor-transcript.d.ts +36 -0
  78. package/dist/src/model-routing/advisor-transcript.d.ts.map +1 -0
  79. package/dist/src/model-routing/advisor-transcript.js +103 -0
  80. package/dist/src/model-routing/advisor-transcript.js.map +1 -0
  81. package/dist/src/model-routing/advisor.d.ts +27 -0
  82. package/dist/src/model-routing/advisor.d.ts.map +1 -0
  83. package/dist/src/model-routing/advisor.js +20 -0
  84. package/dist/src/model-routing/advisor.js.map +1 -0
  85. package/dist/src/model-routing/classifier.d.ts +57 -0
  86. package/dist/src/model-routing/classifier.d.ts.map +1 -0
  87. package/dist/src/model-routing/classifier.js +63 -0
  88. package/dist/src/model-routing/classifier.js.map +1 -0
  89. package/dist/src/model-routing/loader.d.ts +48 -0
  90. package/dist/src/model-routing/loader.d.ts.map +1 -0
  91. package/dist/src/model-routing/loader.js +79 -0
  92. package/dist/src/model-routing/loader.js.map +1 -0
  93. package/dist/src/model-routing/prompts.d.ts +22 -0
  94. package/dist/src/model-routing/prompts.d.ts.map +1 -0
  95. package/dist/src/model-routing/prompts.js +87 -0
  96. package/dist/src/model-routing/prompts.js.map +1 -0
  97. package/dist/src/model-routing/resolve.d.ts +40 -0
  98. package/dist/src/model-routing/resolve.d.ts.map +1 -0
  99. package/dist/src/model-routing/resolve.js +76 -0
  100. package/dist/src/model-routing/resolve.js.map +1 -0
  101. package/dist/src/model-routing/router.d.ts +149 -0
  102. package/dist/src/model-routing/router.d.ts.map +1 -0
  103. package/dist/src/model-routing/router.js +235 -0
  104. package/dist/src/model-routing/router.js.map +1 -0
  105. package/dist/src/model-routing/step-triggers.d.ts +27 -0
  106. package/dist/src/model-routing/step-triggers.d.ts.map +1 -0
  107. package/dist/src/model-routing/step-triggers.js +20 -0
  108. package/dist/src/model-routing/step-triggers.js.map +1 -0
  109. package/dist/src/model-routing/table.d.ts +126 -0
  110. package/dist/src/model-routing/table.d.ts.map +1 -0
  111. package/dist/src/model-routing/table.js +351 -0
  112. package/dist/src/model-routing/table.js.map +1 -0
  113. package/dist/src/session/session.d.ts +40 -23
  114. package/dist/src/session/session.d.ts.map +1 -1
  115. package/dist/src/session/session.js +173 -97
  116. package/dist/src/session/session.js.map +1 -1
  117. package/dist/src/tasks/quiescence.d.ts +13 -0
  118. package/dist/src/tasks/quiescence.d.ts.map +1 -0
  119. package/dist/src/tasks/quiescence.js +11 -0
  120. package/dist/src/tasks/quiescence.js.map +1 -0
  121. package/dist/src/tasks/task-manager.d.ts +101 -0
  122. package/dist/src/tasks/task-manager.d.ts.map +1 -0
  123. package/dist/src/tasks/task-manager.js +311 -0
  124. package/dist/src/tasks/task-manager.js.map +1 -0
  125. package/dist/src/tasks/types.d.ts +85 -0
  126. package/dist/src/tasks/types.d.ts.map +1 -0
  127. package/dist/src/tasks/types.js +2 -0
  128. package/dist/src/tasks/types.js.map +1 -0
  129. package/dist/src/tui/app.d.ts +1 -1
  130. package/dist/src/tui/app.d.ts.map +1 -1
  131. package/dist/src/tui/app.js +12 -2
  132. package/dist/src/tui/app.js.map +1 -1
  133. package/dist/src/tui/initial-prompt.d.ts.map +1 -1
  134. package/dist/src/tui/initial-prompt.js +0 -3
  135. package/dist/src/tui/initial-prompt.js.map +1 -1
  136. package/dist/src/tui/session-subscription.d.ts +3 -0
  137. package/dist/src/tui/session-subscription.d.ts.map +1 -1
  138. package/dist/src/tui/session-subscription.js +29 -5
  139. package/dist/src/tui/session-subscription.js.map +1 -1
  140. package/dist/src/tui/sidebar.d.ts +3 -0
  141. package/dist/src/tui/sidebar.d.ts.map +1 -1
  142. package/dist/src/tui/sidebar.js +19 -3
  143. package/dist/src/tui/sidebar.js.map +1 -1
  144. package/dist/src/tui/slash-commands.d.ts +12 -9
  145. package/dist/src/tui/slash-commands.d.ts.map +1 -1
  146. package/dist/src/tui/slash-commands.js +48 -10
  147. package/dist/src/tui/slash-commands.js.map +1 -1
  148. package/dist/src/tui/status-controller.d.ts +14 -9
  149. package/dist/src/tui/status-controller.d.ts.map +1 -1
  150. package/dist/src/tui/status-controller.js +26 -7
  151. package/dist/src/tui/status-controller.js.map +1 -1
  152. package/dist/src/tui/task-lane-renderer.d.ts +30 -0
  153. package/dist/src/tui/task-lane-renderer.d.ts.map +1 -0
  154. package/dist/src/tui/task-lane-renderer.js +93 -0
  155. package/dist/src/tui/task-lane-renderer.js.map +1 -0
  156. package/dist/src/tui/task-tree.d.ts +47 -0
  157. package/dist/src/tui/task-tree.d.ts.map +1 -0
  158. package/dist/src/tui/task-tree.js +190 -0
  159. package/dist/src/tui/task-tree.js.map +1 -0
  160. package/dist/src/tui/tool-formatters.js +3 -0
  161. package/dist/src/tui/tool-formatters.js.map +1 -1
  162. package/dist/src/turn-runner/agent-events.d.ts.map +1 -1
  163. package/dist/src/turn-runner/agent-events.js +1 -0
  164. package/dist/src/turn-runner/agent-events.js.map +1 -1
  165. package/dist/src/turn-runner/duration.d.ts +2 -2
  166. package/dist/src/turn-runner/duration.js +3 -3
  167. package/dist/src/turn-runner/duration.js.map +1 -1
  168. package/dist/src/turn-runner/prompts.d.ts +5 -1
  169. package/dist/src/turn-runner/prompts.d.ts.map +1 -1
  170. package/dist/src/turn-runner/prompts.js +30 -6
  171. package/dist/src/turn-runner/prompts.js.map +1 -1
  172. package/dist/src/turn-runner/runtime-clock.d.ts +20 -0
  173. package/dist/src/turn-runner/runtime-clock.d.ts.map +1 -0
  174. package/dist/src/turn-runner/runtime-clock.js +38 -0
  175. package/dist/src/turn-runner/runtime-clock.js.map +1 -0
  176. package/dist/src/turn-runner/shell-state-handle.d.ts +0 -3
  177. package/dist/src/turn-runner/shell-state-handle.d.ts.map +1 -1
  178. package/dist/src/turn-runner/shell-state-handle.js +5 -55
  179. package/dist/src/turn-runner/shell-state-handle.js.map +1 -1
  180. package/dist/src/turn-runner/skill-context.d.ts +6 -7
  181. package/dist/src/turn-runner/skill-context.d.ts.map +1 -1
  182. package/dist/src/turn-runner/skill-context.js +10 -10
  183. package/dist/src/turn-runner/skill-context.js.map +1 -1
  184. package/dist/src/turn-runner/skills.d.ts.map +1 -1
  185. package/dist/src/turn-runner/skills.js +2 -22
  186. package/dist/src/turn-runner/skills.js.map +1 -1
  187. package/dist/src/turn-runner/state-compaction.d.ts +7 -5
  188. package/dist/src/turn-runner/state-compaction.d.ts.map +1 -1
  189. package/dist/src/turn-runner/state-compaction.js +69 -10
  190. package/dist/src/turn-runner/state-compaction.js.map +1 -1
  191. package/dist/src/turn-runner/state-machine-decisions.d.ts +135 -0
  192. package/dist/src/turn-runner/state-machine-decisions.d.ts.map +1 -0
  193. package/dist/src/turn-runner/state-machine-decisions.js +443 -0
  194. package/dist/src/turn-runner/state-machine-decisions.js.map +1 -0
  195. package/dist/src/turn-runner/state-machine-session.d.ts +13 -28
  196. package/dist/src/turn-runner/state-machine-session.d.ts.map +1 -1
  197. package/dist/src/turn-runner/state-machine-session.js +18 -55
  198. package/dist/src/turn-runner/state-machine-session.js.map +1 -1
  199. package/dist/src/turn-runner/subagent.d.ts +156 -0
  200. package/dist/src/turn-runner/subagent.d.ts.map +1 -0
  201. package/dist/src/turn-runner/subagent.js +164 -0
  202. package/dist/src/turn-runner/subagent.js.map +1 -0
  203. package/dist/src/turn-runner/task-tools.d.ts +76 -0
  204. package/dist/src/turn-runner/task-tools.d.ts.map +1 -0
  205. package/dist/src/turn-runner/task-tools.js +370 -0
  206. package/dist/src/turn-runner/task-tools.js.map +1 -0
  207. package/dist/src/turn-runner/tools.d.ts +65 -17
  208. package/dist/src/turn-runner/tools.d.ts.map +1 -1
  209. package/dist/src/turn-runner/tools.js +173 -59
  210. package/dist/src/turn-runner/tools.js.map +1 -1
  211. package/dist/src/turn-runner/turn-runner.d.ts +205 -135
  212. package/dist/src/turn-runner/turn-runner.d.ts.map +1 -1
  213. package/dist/src/turn-runner/turn-runner.js +1311 -714
  214. package/dist/src/turn-runner/turn-runner.js.map +1 -1
  215. package/dist/src/turn-runner/usage-accounting.d.ts +4 -0
  216. package/dist/src/turn-runner/usage-accounting.d.ts.map +1 -1
  217. package/dist/src/turn-runner/usage-accounting.js +19 -0
  218. package/dist/src/turn-runner/usage-accounting.js.map +1 -1
  219. package/dist/src/types/config.d.ts +9 -1
  220. package/dist/src/types/config.d.ts.map +1 -1
  221. package/dist/src/types/config.js +2 -1
  222. package/dist/src/types/config.js.map +1 -1
  223. package/dist/src/types/protocol.d.ts +124 -30
  224. package/dist/src/types/protocol.d.ts.map +1 -1
  225. package/dist/src/types/state-machine.d.ts +10 -12
  226. package/dist/src/types/state-machine.d.ts.map +1 -1
  227. package/dist/src/types/state-machine.js.map +1 -1
  228. package/package.json +4 -4
  229. package/dist/src/cli/model-gateway.d.ts.map +0 -1
  230. package/dist/src/cli/model-gateway.js.map +0 -1
  231. package/dist/src/turn-runner/state-machine-controller.d.ts +0 -140
  232. package/dist/src/turn-runner/state-machine-controller.d.ts.map +0 -1
  233. package/dist/src/turn-runner/state-machine-controller.js +0 -501
  234. package/dist/src/turn-runner/state-machine-controller.js.map +0 -1
  235. /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
- * True when an agent state called `ask_user_question` and the machine is still
46
- * suspended at that state — i.e. scanning history from the tail, the first
47
- * state-lifecycle event is `state_asked_user`, with no later state start,
48
- * completion, failure, interruption, or terminal.
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 controller calls
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 a state to
217
- * "keep waiting" — which never suspends anything — rather than productive retries.
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 any state kind, because the
238
- * idle loop is driven by the parent re-selecting, not by a poll's exit code. A
239
- * lifecycle event naming a *different* state means the machine actually moved
240
- * on, so the streak resets and a normal plan that revisits a state after doing
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":"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"}
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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"}