@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
@@ -0,0 +1,443 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { INTERRUPTED_STATE_MACHINE_STATE } from "../types/state-machine.js";
5
+ import { parseDurationToMs, parseWakeAtToMs } from "./duration.js";
6
+ import { consecutivePollGateSuccesses, createStateMachineSession, currentScheduledState, elapsedSinceStateStarted, findState, MISCONFIGURED_POLL_GATE_THRESHOLD, persistStateDefinition, recordRunnerDecision, recordStateCompleted, recordStateFailed, recordStateInterrupted, recordStateMachineCompleted, recordStateMachineReactivated, recordStateSleep, recordStateStarted, } from "./state-machine-session.js";
7
+ export { consecutivePollGateSuccesses, MISCONFIGURED_POLL_GATE_THRESHOLD, repeatedSelectionLoopCount, repeatedStateSelectionStreak, REPEATED_SELECTION_LOOP_THRESHOLD, REPEATED_SELECTION_LOOP_WINDOW_MS, } from "./state-machine-session.js";
8
+ export function hydrate(stateMachine) {
9
+ return stateMachine;
10
+ }
11
+ export function getSession(stateMachine) {
12
+ return stateMachine;
13
+ }
14
+ export function startSession(input) {
15
+ return createStateMachineSession(input.prompt, input.definition, input.currentState);
16
+ }
17
+ export function markTerminalAcknowledged(session) {
18
+ if (!session.terminal || session.terminalAcknowledged)
19
+ return session;
20
+ return {
21
+ ...session,
22
+ terminalAcknowledged: true,
23
+ updatedAt: Date.now(),
24
+ };
25
+ }
26
+ export function failActiveSession(session, state, error) {
27
+ return {
28
+ session: recordStateFailed(session, state, error),
29
+ outcome: { type: "terminal", status: "error", error },
30
+ };
31
+ }
32
+ export function supersede(session, reason) {
33
+ return recordStateMachineCompleted(session, {
34
+ state: session.currentState ?? "",
35
+ status: "cancelled",
36
+ reason,
37
+ });
38
+ }
39
+ export function planDecision(stateMachine, decision, now = Date.now()) {
40
+ let session = recordRunnerDecision(stateMachine, decision);
41
+ const selectedState = findState(session, decision.state);
42
+ if (!selectedState) {
43
+ const validStates = session.definition.states.map((state) => state.name);
44
+ const message = `Unknown state: ${decision.state}. Valid states: ${validStates.join(", ")}`;
45
+ session = recordStateFailed(session, session.currentState ?? decision.state, message);
46
+ return {
47
+ session,
48
+ work: {
49
+ terminal: {
50
+ status: "error",
51
+ error: message,
52
+ stateName: session.currentState ?? decision.state,
53
+ ledger: "recorded",
54
+ notifyStarted: false,
55
+ },
56
+ },
57
+ };
58
+ }
59
+ const isTerminal = selectedState.kind === "terminal";
60
+ if (!isTerminal && session.terminal) {
61
+ session = recordStateMachineReactivated(session, selectedState.name);
62
+ }
63
+ const effectiveState = isTerminal
64
+ ? selectedState
65
+ : applyStateOverride(selectedState, decision.override);
66
+ const shouldPersistOverride = !isTerminal &&
67
+ decision.override !== undefined &&
68
+ decision.persistOverride !== false &&
69
+ effectiveState !== selectedState;
70
+ if (shouldPersistOverride) {
71
+ session = persistStateDefinition(session, effectiveState);
72
+ }
73
+ session = recordStateStarted(session, effectiveState, isTerminal ? undefined : decision.input);
74
+ switch (effectiveState.kind) {
75
+ case "agent":
76
+ return {
77
+ session,
78
+ work: {
79
+ run: {
80
+ subagent: subagentSpec(effectiveState, session.currentInput),
81
+ stateName: effectiveState.name,
82
+ },
83
+ },
84
+ };
85
+ case "script":
86
+ return {
87
+ session,
88
+ work: {
89
+ run: {
90
+ shell: {
91
+ command: renderTemplate(effectiveState.command, session.currentInput ?? {}),
92
+ cwd: effectiveState.cwd,
93
+ timeoutMs: effectiveState.timeoutMs,
94
+ successCodes: effectiveState.successCodes,
95
+ },
96
+ stateName: effectiveState.name,
97
+ },
98
+ },
99
+ };
100
+ case "poll": {
101
+ const elapsedMs = elapsedSinceStateStarted(session, effectiveState.name);
102
+ if (effectiveState.timeoutMs !== undefined && elapsedMs >= effectiveState.timeoutMs) {
103
+ const message = `Poll state "${effectiveState.name}" timed out after ${elapsedMs}ms.`;
104
+ return {
105
+ session,
106
+ work: {
107
+ terminal: {
108
+ status: "error",
109
+ error: message,
110
+ stateName: effectiveState.name,
111
+ ledger: "failed",
112
+ notifyStarted: true,
113
+ },
114
+ },
115
+ };
116
+ }
117
+ return {
118
+ session,
119
+ work: {
120
+ run: {
121
+ shell: {
122
+ command: renderTemplate(effectiveState.command, session.currentInput ?? {}),
123
+ cwd: effectiveState.cwd,
124
+ successCodes: effectiveState.successCodes,
125
+ },
126
+ stateName: effectiveState.name,
127
+ pollPolicy: { intervalMs: effectiveState.intervalMs },
128
+ },
129
+ },
130
+ };
131
+ }
132
+ case "timer": {
133
+ const wakeAt = resolveTimerWakeAt(effectiveState, session, now);
134
+ return { session, work: { schedule: { wakeAt, stateName: effectiveState.name } } };
135
+ }
136
+ case "park":
137
+ return { session, work: { park: { stateName: effectiveState.name } } };
138
+ case "terminal": {
139
+ const reason = decision.reason ?? effectiveState.reason;
140
+ return {
141
+ session,
142
+ work: {
143
+ terminal: {
144
+ status: effectiveState.status,
145
+ result: reason,
146
+ stateName: effectiveState.name,
147
+ ledger: "completed",
148
+ notifyStarted: true,
149
+ },
150
+ },
151
+ };
152
+ }
153
+ }
154
+ }
155
+ export function planWake(stateMachine, now = Date.now()) {
156
+ const state = currentScheduledState(stateMachine);
157
+ if (!state || !stateMachine)
158
+ return undefined;
159
+ if (state.kind === "poll") {
160
+ const elapsedMs = elapsedSinceStateStarted(stateMachine, state.name);
161
+ if (state.timeoutMs !== undefined && elapsedMs >= state.timeoutMs) {
162
+ const message = `Poll state "${state.name}" timed out after ${elapsedMs}ms.`;
163
+ return {
164
+ session: stateMachine,
165
+ work: {
166
+ terminal: {
167
+ status: "error",
168
+ error: message,
169
+ stateName: state.name,
170
+ ledger: "failed",
171
+ notifyStarted: false,
172
+ },
173
+ },
174
+ };
175
+ }
176
+ return {
177
+ session: stateMachine,
178
+ work: {
179
+ run: {
180
+ shell: {
181
+ command: renderTemplate(state.command, stateMachine.currentInput ?? {}),
182
+ cwd: state.cwd,
183
+ successCodes: state.successCodes,
184
+ },
185
+ stateName: state.name,
186
+ pollPolicy: { intervalMs: state.intervalMs },
187
+ },
188
+ },
189
+ };
190
+ }
191
+ resolveTimerWakeAt(state, stateMachine, now);
192
+ return {
193
+ session: stateMachine,
194
+ // A wake command means the persisted timer has fired. The turn loop's
195
+ // schedule branch completes immediately when wakeAt is not in the future;
196
+ // preserve the old `runTimerState(state, true)` behavior even if the
197
+ // caller's clock arrives a few milliseconds before the stored deadline.
198
+ work: { schedule: { wakeAt: now, stateName: state.name } },
199
+ };
200
+ }
201
+ export function recordScheduled(stateMachine, stateName, wakeAt) {
202
+ const state = findState(stateMachine, stateName);
203
+ if (!state || (state.kind !== "poll" && state.kind !== "timer")) {
204
+ throw new Error(`Scheduled state "${stateName}" is missing from the active definition.`);
205
+ }
206
+ return {
207
+ session: recordStateSleep(stateMachine, state, wakeAt),
208
+ outcome: { type: "sleep", wakeAt },
209
+ };
210
+ }
211
+ export function recordPlannedTerminal(stateMachine, terminal) {
212
+ const outcome = {
213
+ type: "terminal",
214
+ status: terminal.status,
215
+ ...(terminal.result !== undefined ? { result: terminal.result } : {}),
216
+ ...(terminal.error !== undefined ? { error: terminal.error } : {}),
217
+ };
218
+ if (terminal.ledger === "recorded")
219
+ return { session: stateMachine, outcome };
220
+ if (terminal.ledger === "failed") {
221
+ return {
222
+ session: recordStateFailed(stateMachine, terminal.stateName, terminal.error ?? "Failed"),
223
+ outcome,
224
+ };
225
+ }
226
+ return {
227
+ session: recordStateMachineCompleted(stateMachine, {
228
+ state: terminal.stateName,
229
+ status: terminal.status === "error" ? "failed" : terminal.status,
230
+ reason: terminal.result,
231
+ }),
232
+ outcome,
233
+ };
234
+ }
235
+ export function recordSettled(stateMachine, stateName, kind, result, partial, now = Date.now()) {
236
+ if (result.type === "complete") {
237
+ const output = { result: result.result };
238
+ return {
239
+ session: recordStateCompleted(stateMachine, stateName, output),
240
+ outcome: { type: "state_completed", stateName, output },
241
+ };
242
+ }
243
+ if (result.type === "interrupted") {
244
+ const session = recordInterrupted(stateMachine, stateName, ("reason" in result ? result.reason : undefined) ?? "Interrupted", partial);
245
+ return { session, outcome: { type: "interrupted" } };
246
+ }
247
+ if (result.type === "failed") {
248
+ if (kind === "poll") {
249
+ const state = findState(stateMachine, stateName);
250
+ if (!state || state.kind !== "poll") {
251
+ throw new Error(`Poll state "${stateName}" is missing from the active definition.`);
252
+ }
253
+ const wakeAt = now + parseDurationToMs(state.intervalMs, `poll "${stateName}" intervalMs`);
254
+ return {
255
+ session: recordStateSleep(stateMachine, state, wakeAt),
256
+ outcome: { type: "sleep", wakeAt },
257
+ };
258
+ }
259
+ return {
260
+ session: recordStateFailed(stateMachine, stateName, result.error),
261
+ outcome: { type: "terminal", status: "error", error: result.error },
262
+ };
263
+ }
264
+ if (kind === "timer") {
265
+ return {
266
+ session: recordStateCompleted(stateMachine, stateName, result.output),
267
+ outcome: { type: "state_completed", stateName, output: result.output },
268
+ };
269
+ }
270
+ if (!isShellCommandOutput(result.output)) {
271
+ throw new Error(`${kind} state "${stateName}" settled without shell output.`);
272
+ }
273
+ const output = kind === "poll"
274
+ ? normalizePollShellOutput(result.output, stateName)
275
+ : normalizeStructuredShellOutput(result.output, stateName);
276
+ if (kind === "poll") {
277
+ const successStreak = consecutivePollGateSuccesses(stateMachine, stateName) + 1;
278
+ if (successStreak >= MISCONFIGURED_POLL_GATE_THRESHOLD) {
279
+ const message = misconfiguredPollGateMessage(stateName, successStreak);
280
+ return {
281
+ session: recordStateFailed(stateMachine, stateName, message),
282
+ outcome: { type: "terminal", status: "error", error: message },
283
+ };
284
+ }
285
+ }
286
+ return {
287
+ session: recordStateCompleted(stateMachine, stateName, output),
288
+ outcome: { type: "state_completed", stateName, output },
289
+ };
290
+ }
291
+ function subagentSpec(state, input) {
292
+ return {
293
+ prompt: renderTemplate(state.prompt, input ?? {}),
294
+ ...(state.systemPrompt ? { systemPrompt: state.systemPrompt } : {}),
295
+ ...(state.allowedSkills ? { allowedSkills: state.allowedSkills } : {}),
296
+ ...(state.cwd ? { cwd: state.cwd } : {}),
297
+ ...(state.model ? { model: state.model } : {}),
298
+ ...(state.thinkingLevel ? { thinkingLevel: state.thinkingLevel } : {}),
299
+ ...(state.forkContext ? { forkContext: true } : {}),
300
+ };
301
+ }
302
+ export function applyStateOverride(state, override) {
303
+ if (!override || override.kind !== state.kind)
304
+ return state;
305
+ const merged = { ...state, ...override.state };
306
+ if (merged.kind === "timer" && override.kind === "timer") {
307
+ const overrideState = override.state;
308
+ if ("wakeAt" in overrideState && overrideState.wakeAt !== undefined) {
309
+ delete merged.wakeAfterMs;
310
+ }
311
+ else if ("wakeAfterMs" in overrideState && overrideState.wakeAfterMs !== undefined) {
312
+ delete merged.wakeAt;
313
+ }
314
+ }
315
+ return merged;
316
+ }
317
+ function resolveTimerWakeAt(state, session, now) {
318
+ if (state.wakeAt !== undefined) {
319
+ return parseWakeAtToMs(state.wakeAt, `timer "${state.name}" wakeAt`);
320
+ }
321
+ if (state.wakeAfterMs === undefined) {
322
+ throw new Error(`Timer state "${state.name}" must specify wakeAt or wakeAfterMs.`);
323
+ }
324
+ const wakeAfterMs = parseDurationToMs(state.wakeAfterMs, `timer "${state.name}" wakeAfterMs`);
325
+ const startedAt = session.progress?.states[state.name]?.startedAt ?? now;
326
+ return startedAt + wakeAfterMs;
327
+ }
328
+ export function renderTemplate(template, input) {
329
+ return template.replace(/\{\{\s*input\.([A-Za-z0-9_.-]+)\s*\}\}/g, (_match, path) => {
330
+ const value = path.split(".").reduce((current, key) => {
331
+ if (!current || typeof current !== "object")
332
+ return undefined;
333
+ return current[key];
334
+ }, input);
335
+ return value === undefined || value === null
336
+ ? ""
337
+ : typeof value === "string"
338
+ ? value
339
+ : JSON.stringify(value);
340
+ });
341
+ }
342
+ function normalizeStructuredShellOutput(shellOutput, stateName) {
343
+ const stdout = shellOutput.stdout.trim();
344
+ const stderr = shellOutput.stderr.trim();
345
+ const cappedStdout = capStreamForPrompt(stdout, stateName, "stdout");
346
+ const parsed = parseStructuredOutput(stdout);
347
+ return {
348
+ ...shellOutput,
349
+ stdout: cappedStdout,
350
+ stderr: capStreamForPrompt(stderr, stateName, "stderr"),
351
+ parsed: parsed.result === stdout ? { result: cappedStdout } : parsed,
352
+ };
353
+ }
354
+ function normalizePollShellOutput(shellOutput, stateName) {
355
+ return {
356
+ ...shellOutput,
357
+ stdout: capStreamForPrompt(shellOutput.stdout.trim(), stateName, "stdout"),
358
+ stderr: capStreamForPrompt(shellOutput.stderr.trim(), stateName, "stderr"),
359
+ parsed: parseJsonObject(shellOutput.stdout),
360
+ };
361
+ }
362
+ const MAX_STATE_OUTPUT_STREAM_CHARS = 16_000;
363
+ function capStreamForPrompt(stream, stateName, label) {
364
+ if (stream.length <= MAX_STATE_OUTPUT_STREAM_CHARS)
365
+ return stream;
366
+ const overflowPath = writeOverflowFile(stream, stateName, label);
367
+ const headChars = Math.floor(MAX_STATE_OUTPUT_STREAM_CHARS * 0.3);
368
+ const tailChars = MAX_STATE_OUTPUT_STREAM_CHARS - headChars;
369
+ const head = stream.slice(0, headChars);
370
+ const tail = stream.slice(stream.length - tailChars);
371
+ const omitted = stream.length - headChars - tailChars;
372
+ return (`${head}\n\n` +
373
+ `…[${label} truncated for the orchestrator: ${omitted} of ${stream.length} ` +
374
+ `characters omitted. Full ${label} written to ${overflowPath} — read that file ` +
375
+ `(or hand its path to a downstream state) if you need the complete output.]…\n\n` +
376
+ `${tail}`);
377
+ }
378
+ function writeOverflowFile(content, stateName, label) {
379
+ const dir = join(tmpdir(), "duet-relay-output");
380
+ mkdirSync(dir, { recursive: true });
381
+ const safeState = stateName.replace(/[^A-Za-z0-9_.-]/g, "_");
382
+ const file = join(dir, `${safeState}-${label}-${Date.now()}.log`);
383
+ writeFileSync(file, content, "utf8");
384
+ return file;
385
+ }
386
+ export function parseStructuredOutput(stdout) {
387
+ const trimmed = stdout.trim();
388
+ if (!trimmed)
389
+ return {};
390
+ try {
391
+ const parsed = JSON.parse(trimmed);
392
+ return typeof parsed === "object" && parsed !== null
393
+ ? parsed
394
+ : { result: parsed };
395
+ }
396
+ catch {
397
+ return { result: trimmed };
398
+ }
399
+ }
400
+ export function parseJsonObject(text) {
401
+ const trimmed = text.trim();
402
+ if (!trimmed)
403
+ return {};
404
+ try {
405
+ const parsed = JSON.parse(trimmed);
406
+ return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
407
+ ? parsed
408
+ : {};
409
+ }
410
+ catch {
411
+ return {};
412
+ }
413
+ }
414
+ function isShellCommandOutput(output) {
415
+ return (typeof output === "object" &&
416
+ output !== null &&
417
+ "stdout" in output &&
418
+ "stderr" in output &&
419
+ "exitCode" in output);
420
+ }
421
+ function recordInterrupted(session, stateName, reason, output) {
422
+ const last = session.history.at(-1);
423
+ if (session.currentState === INTERRUPTED_STATE_MACHINE_STATE &&
424
+ last?.type === "state_interrupted" &&
425
+ last.state === stateName) {
426
+ return {
427
+ ...session,
428
+ history: [
429
+ ...session.history.slice(0, -1),
430
+ { ...last, reason: reason ?? last.reason, output: output ?? last.output },
431
+ ],
432
+ updatedAt: Date.now(),
433
+ };
434
+ }
435
+ return recordStateInterrupted(session, stateName, reason, output);
436
+ }
437
+ function misconfiguredPollGateMessage(stateName, successStreak) {
438
+ return (`Poll state "${stateName}" completed successfully ${successStreak} times in a row with no state change in between. ` +
439
+ "A poll's command must exit success ONLY when the awaited condition is actually met and exit non-success otherwise, so intervalMs can space out re-checks; " +
440
+ 'a command that exits 0 on every tick (e.g. `echo waiting for review`) is read as "condition met" and hot-loops the relay instead of waiting. ' +
441
+ "If this gate is waiting on a human approval or reply, model it as an agent state that asks the user a question and stops — the reply wakes the relay — rather than as a poll.");
442
+ }
443
+ //# sourceMappingURL=state-machine-decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine-decisions.js","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-decisions.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import type { StateMachineDefinition, StateMachinePollState, StateMachineSession, StateMachineState, StateMachineTimerState } from "../types/state-machine.js";
2
- import type { TurnQuestion } from "../types/protocol.js";
1
+ import type { StateMachineDefinition, StateMachineParkState, StateMachinePollState, StateMachineSession, StateMachineState, StateMachineTimerState } from "../types/state-machine.js";
3
2
  import type { StateMachineRunnerDecision } from "./tools.js";
4
3
  /**
5
4
  * Hard cap on retained `StateMachineSession.history` entries. Long-lived
@@ -16,22 +15,8 @@ export declare function findState(stateMachine: StateMachineSession, name: strin
16
15
  export type StateMachineScheduledState = StateMachinePollState | StateMachineTimerState;
17
16
  export declare function currentScheduledState(stateMachine: StateMachineSession | undefined): StateMachineScheduledState | undefined;
18
17
  export declare function isWaitingOnScheduledState(stateMachine: StateMachineSession | undefined): boolean;
19
- /**
20
- * True when an agent state called `ask_user_question` and the machine is still
21
- * suspended at that state — i.e. scanning history from the tail, the first
22
- * state-lifecycle event is `state_asked_user`, with no later state start,
23
- * completion, failure, interruption, or terminal.
24
- *
25
- * When this holds, the parent owes a `select_state_machine_state` to advance
26
- * the machine: the user's answer comes back as an ordinary parent prompt, and
27
- * if the parent replies in text without selecting a state the machine would
28
- * silently stall at the asking state. The turn runner uses this to enforce the
29
- * transition the same way it does after a state completes. Bookkeeping events
30
- * that don't move the machine (`runner_decided`, `state_definition_updated`,
31
- * `state_machine_started`) are skipped as noise; a real lifecycle move ends
32
- * the wait.
33
- */
34
- export declare function isAwaitingUserAnswer(stateMachine: StateMachineSession | undefined): boolean;
18
+ /** The active inert park, if the machine currently holds without execution or a wake. */
19
+ export declare function currentParkState(stateMachine: StateMachineSession | undefined): StateMachineParkState | undefined;
35
20
  export declare function recordRunnerDecision(stateMachine: StateMachineSession, decision: StateMachineRunnerDecision): StateMachineSession;
36
21
  /**
37
22
  * Replace one state in the active definition with a merged version,
@@ -64,7 +49,7 @@ export declare const MISCONFIGURED_POLL_GATE_THRESHOLD = 3;
64
49
  * streak. The only way to accumulate consecutive same-poll completions is an
65
50
  * always-exit-0 command (e.g. `echo waiting for review`) being re-selected as
66
51
  * the same gate, which is exactly the hot-loop we want to surface. The
67
- * current in-flight success is not yet recorded when the controller calls
52
+ * current in-flight success is not yet recorded when the turn loop calls
68
53
  * this, so the returned count reflects only prior completions.
69
54
  */
70
55
  export declare function consecutivePollGateSuccesses(stateMachine: StateMachineSession, pollName: string): number;
@@ -74,8 +59,9 @@ export declare function consecutivePollGateSuccesses(stateMachine: StateMachineS
74
59
  * between — before the runner injects a loop warning into the next decision
75
60
  * prompt. Set above a normal retry-with-correction streak (re-running a state
76
61
  * two or three times with a fixed `override.prompt` is legitimate) so the
77
- * warning targets idle "holding" loops where the parent re-selects a state to
78
- * "keep waiting" — which never suspends anything — rather than productive retries.
62
+ * warning targets idle "holding" loops where the parent re-selects executable
63
+ * work to "keep waiting" rather than productive retries. Park states are
64
+ * exempt because re-selecting the same park is a legal no-work hold.
79
65
  */
80
66
  export declare const REPEATED_SELECTION_LOOP_THRESHOLD = 5;
81
67
  /**
@@ -95,11 +81,10 @@ export declare const REPEATED_SELECTION_LOOP_WINDOW_MS: number;
95
81
  * "holding" state again and again to "keep waiting" — a no-op, since selecting a
96
82
  * state runs it immediately rather than suspending the machine. Unlike
97
83
  * `consecutivePollGateSuccesses` (which counts completions of an always-true
98
- * poll), this counts `state_started` events for any state kind, because the
99
- * idle loop is driven by the parent re-selecting, not by a poll's exit code. A
100
- * lifecycle event naming a *different* state means the machine actually moved
101
- * on, so the streak resets and a normal plan that revisits a state after doing
102
- * other work never accumulates.
84
+ * poll), this telemetry counts `state_started` events for every state kind;
85
+ * the trip policy separately exempts park. A lifecycle event naming a
86
+ * *different* state means the machine actually moved on, so the streak resets
87
+ * and a normal plan that revisits a state after doing other work never accumulates.
103
88
  */
104
89
  export declare function repeatedStateSelectionStreak(stateMachine: StateMachineSession, stateName: string): {
105
90
  count: number;
@@ -111,7 +96,8 @@ export declare function repeatedStateSelectionStreak(stateMachine: StateMachineS
111
96
  * read as an idle hot loop, or undefined otherwise. This is the single source of
112
97
  * truth for the trip condition — the turn runner uses the returned count to word
113
98
  * its loop-warning reminder, and tests assert against this same function rather
114
- * than re-deriving the threshold/window comparison.
99
+ * than re-deriving the threshold/window comparison. Park always returns
100
+ * undefined because repeated park selection deliberately performs no work.
115
101
  */
116
102
  export declare function repeatedSelectionLoopCount(stateMachine: StateMachineSession, stateName: string): number | undefined;
117
103
  export declare function elapsedSinceStateStarted(stateMachine: StateMachineSession | undefined, state: string): number;
@@ -122,7 +108,6 @@ export declare function recordStateInterrupted(stateMachine: StateMachineSession
122
108
  stdout: string;
123
109
  stderr: string;
124
110
  }): StateMachineSession;
125
- export declare function recordStateAskedUser(stateMachine: StateMachineSession, state: string, questions: TurnQuestion[]): StateMachineSession;
126
111
  export declare function recordStateMachineCompleted(stateMachine: StateMachineSession, terminal: {
127
112
  state: string;
128
113
  status: "completed" | "failed" | "cancelled";
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine-session.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-machine-session.d.ts","sourceRoot":"","sources":["../../../src/turn-runner/state-machine-session.ts"],"names":[],"mappings":"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"}