@caupulican/pi-adaptative 0.94.1 → 0.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +32 -13
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +7 -4
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +173 -293
  6. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
  7. package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +247 -392
  8. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts +52 -0
  9. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts.map +1 -0
  10. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js +118 -0
  11. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js.map +1 -0
  12. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.ts +169 -0
  13. package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +1 -1
  14. package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +1 -1
  15. package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +13 -7
  16. package/dist/bundled-resources/skills/worker-profile-writer/SKILL.md +11 -11
  17. package/dist/core/agent-session.d.ts +11 -41
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +93 -160
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/autonomy/envelope-enforcement.d.ts +6 -1
  22. package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
  23. package/dist/core/autonomy/envelope-enforcement.js +26 -25
  24. package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
  25. package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
  26. package/dist/core/autonomy/lane-private-paths.js +2 -1
  27. package/dist/core/autonomy/lane-private-paths.js.map +1 -1
  28. package/dist/core/autonomy/lane-tool-surface.d.ts +8 -8
  29. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  30. package/dist/core/autonomy/lane-tool-surface.js +45 -30
  31. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  32. package/dist/core/autonomy/worker-session-private-scope.d.ts +12 -0
  33. package/dist/core/autonomy/worker-session-private-scope.d.ts.map +1 -0
  34. package/dist/core/autonomy/worker-session-private-scope.js +42 -0
  35. package/dist/core/autonomy/worker-session-private-scope.js.map +1 -0
  36. package/dist/core/autonomy/worker-tool-adapter-registry.d.ts +65 -0
  37. package/dist/core/autonomy/worker-tool-adapter-registry.d.ts.map +1 -0
  38. package/dist/core/autonomy/worker-tool-adapter-registry.js +145 -0
  39. package/dist/core/autonomy/worker-tool-adapter-registry.js.map +1 -0
  40. package/dist/core/background-lane-controller.d.ts +1 -1
  41. package/dist/core/background-lane-controller.d.ts.map +1 -1
  42. package/dist/core/background-lane-controller.js +1 -1
  43. package/dist/core/background-lane-controller.js.map +1 -1
  44. package/dist/core/background-tool-task-controller.d.ts +8 -2
  45. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  46. package/dist/core/background-tool-task-controller.js +10 -2
  47. package/dist/core/background-tool-task-controller.js.map +1 -1
  48. package/dist/core/cost-guard-controller.d.ts +37 -0
  49. package/dist/core/cost-guard-controller.d.ts.map +1 -0
  50. package/dist/core/cost-guard-controller.js +71 -0
  51. package/dist/core/cost-guard-controller.js.map +1 -0
  52. package/dist/core/cost-guard.d.ts +9 -4
  53. package/dist/core/cost-guard.d.ts.map +1 -1
  54. package/dist/core/cost-guard.js +7 -3
  55. package/dist/core/cost-guard.js.map +1 -1
  56. package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
  57. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
  58. package/dist/core/delegation/worker-attempt-executor.js +0 -1
  59. package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
  60. package/dist/core/delegation/worker-authority-resolver.d.ts +16 -3
  61. package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
  62. package/dist/core/delegation/worker-authority-resolver.js +114 -55
  63. package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
  64. package/dist/core/delegation/worker-claim.d.ts +1 -2
  65. package/dist/core/delegation/worker-claim.d.ts.map +1 -1
  66. package/dist/core/delegation/worker-claim.js.map +1 -1
  67. package/dist/core/delegation/worker-delegation-controller.d.ts +19 -6
  68. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  69. package/dist/core/delegation/worker-delegation-controller.js +125 -40
  70. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  71. package/dist/core/delegation/worker-delegation-request.d.ts +3 -3
  72. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
  73. package/dist/core/delegation/worker-delegation-request.js +13 -19
  74. package/dist/core/delegation/worker-delegation-request.js.map +1 -1
  75. package/dist/core/delegation/worker-execution-policy.d.ts +3 -2
  76. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
  77. package/dist/core/delegation/worker-execution-policy.js +54 -39
  78. package/dist/core/delegation/worker-execution-policy.js.map +1 -1
  79. package/dist/core/delegation/worker-fleet-limits.d.ts +3 -3
  80. package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
  81. package/dist/core/delegation/worker-fleet-limits.js +7 -7
  82. package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
  83. package/dist/core/delegation/worker-machine-scope.d.ts +12 -0
  84. package/dist/core/delegation/worker-machine-scope.d.ts.map +1 -0
  85. package/dist/core/delegation/worker-machine-scope.js +38 -0
  86. package/dist/core/delegation/worker-machine-scope.js.map +1 -0
  87. package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
  88. package/dist/core/delegation/worker-recovery-coordinator.js +6 -1
  89. package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
  90. package/dist/core/delegation/worker-runner.d.ts +5 -7
  91. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  92. package/dist/core/delegation/worker-runner.js +1 -4
  93. package/dist/core/delegation/worker-runner.js.map +1 -1
  94. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +3 -2
  95. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
  96. package/dist/core/delegation/worker-write-reservation-coordinator.js +50 -25
  97. package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
  98. package/dist/core/durable-custom-message-turn-controller.d.ts +6 -0
  99. package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
  100. package/dist/core/durable-custom-message-turn-controller.js +38 -15
  101. package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
  102. package/dist/core/extension-binding-controller.d.ts +5 -1
  103. package/dist/core/extension-binding-controller.d.ts.map +1 -1
  104. package/dist/core/extension-binding-controller.js +15 -0
  105. package/dist/core/extension-binding-controller.js.map +1 -1
  106. package/dist/core/extensions/factory-runtime.d.ts.map +1 -1
  107. package/dist/core/extensions/factory-runtime.js +5 -0
  108. package/dist/core/extensions/factory-runtime.js.map +1 -1
  109. package/dist/core/extensions/runner.d.ts.map +1 -1
  110. package/dist/core/extensions/runner.js +1 -0
  111. package/dist/core/extensions/runner.js.map +1 -1
  112. package/dist/core/extensions/types.d.ts +8 -4
  113. package/dist/core/extensions/types.d.ts.map +1 -1
  114. package/dist/core/extensions/types.js.map +1 -1
  115. package/dist/core/foreground-terminal-handoff-controller.d.ts +14 -0
  116. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
  117. package/dist/core/foreground-terminal-handoff-controller.js +188 -72
  118. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
  119. package/dist/core/goals/goal-session-controller.d.ts +2 -0
  120. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  121. package/dist/core/goals/goal-session-controller.js +8 -0
  122. package/dist/core/goals/goal-session-controller.js.map +1 -1
  123. package/dist/core/goals/goal-tool-core.d.ts +5 -4
  124. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  125. package/dist/core/goals/goal-tool-core.js +23 -19
  126. package/dist/core/goals/goal-tool-core.js.map +1 -1
  127. package/dist/core/learning/auto-learn-settings.d.ts +84 -0
  128. package/dist/core/learning/auto-learn-settings.d.ts.map +1 -0
  129. package/dist/core/learning/auto-learn-settings.js +66 -0
  130. package/dist/core/learning/auto-learn-settings.js.map +1 -0
  131. package/dist/core/learning/reflection-engine.d.ts +4 -0
  132. package/dist/core/learning/reflection-engine.d.ts.map +1 -1
  133. package/dist/core/learning/reflection-engine.js +48 -10
  134. package/dist/core/learning/reflection-engine.js.map +1 -1
  135. package/dist/core/local-prefix-warm-controller.d.ts +24 -0
  136. package/dist/core/local-prefix-warm-controller.d.ts.map +1 -0
  137. package/dist/core/local-prefix-warm-controller.js +79 -0
  138. package/dist/core/local-prefix-warm-controller.js.map +1 -0
  139. package/dist/core/memory/providers/file-store.d.ts +2 -0
  140. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  141. package/dist/core/memory/providers/file-store.js +71 -15
  142. package/dist/core/memory/providers/file-store.js.map +1 -1
  143. package/dist/core/memory/worker-memory-tools.d.ts +5 -0
  144. package/dist/core/memory/worker-memory-tools.d.ts.map +1 -0
  145. package/dist/core/memory/worker-memory-tools.js +5 -0
  146. package/dist/core/memory/worker-memory-tools.js.map +1 -0
  147. package/dist/core/model-capability.d.ts +7 -0
  148. package/dist/core/model-capability.d.ts.map +1 -1
  149. package/dist/core/model-capability.js +12 -0
  150. package/dist/core/model-capability.js.map +1 -1
  151. package/dist/core/model-registry.d.ts.map +1 -1
  152. package/dist/core/model-registry.js +2 -10
  153. package/dist/core/model-registry.js.map +1 -1
  154. package/dist/core/model-router-controller.d.ts +3 -2
  155. package/dist/core/model-router-controller.d.ts.map +1 -1
  156. package/dist/core/model-router-controller.js +3 -2
  157. package/dist/core/model-router-controller.js.map +1 -1
  158. package/dist/core/orchestration/contracts.d.ts +16 -12
  159. package/dist/core/orchestration/contracts.d.ts.map +1 -1
  160. package/dist/core/orchestration/contracts.js +2 -2
  161. package/dist/core/orchestration/contracts.js.map +1 -1
  162. package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
  163. package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
  164. package/dist/core/orchestration/lane-tool-manifests.js +6 -1
  165. package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
  166. package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
  167. package/dist/core/orchestration/profile-registry.js +14 -0
  168. package/dist/core/orchestration/profile-registry.js.map +1 -1
  169. package/dist/core/orchestration/task-profile-writer.d.ts +7 -4
  170. package/dist/core/orchestration/task-profile-writer.d.ts.map +1 -1
  171. package/dist/core/orchestration/task-profile-writer.js +71 -59
  172. package/dist/core/orchestration/task-profile-writer.js.map +1 -1
  173. package/dist/core/orchestration/thinking-level-schema.d.ts +7 -0
  174. package/dist/core/orchestration/thinking-level-schema.d.ts.map +1 -0
  175. package/dist/core/orchestration/thinking-level-schema.js +19 -0
  176. package/dist/core/orchestration/thinking-level-schema.js.map +1 -0
  177. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
  178. package/dist/core/orchestration/worker-execution-contract.js +12 -5
  179. package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
  180. package/dist/core/provider-prompt-contracts.d.ts +1 -4
  181. package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
  182. package/dist/core/provider-prompt-contracts.js +4 -10
  183. package/dist/core/provider-prompt-contracts.js.map +1 -1
  184. package/dist/core/provider-request-context-controller.d.ts +2 -0
  185. package/dist/core/provider-request-context-controller.d.ts.map +1 -1
  186. package/dist/core/provider-request-context-controller.js +10 -3
  187. package/dist/core/provider-request-context-controller.js.map +1 -1
  188. package/dist/core/reflection-controller.d.ts +56 -27
  189. package/dist/core/reflection-controller.d.ts.map +1 -1
  190. package/dist/core/reflection-controller.js +206 -117
  191. package/dist/core/reflection-controller.js.map +1 -1
  192. package/dist/core/runtime-builder.d.ts +1 -0
  193. package/dist/core/runtime-builder.d.ts.map +1 -1
  194. package/dist/core/runtime-builder.js +25 -14
  195. package/dist/core/runtime-builder.js.map +1 -1
  196. package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
  197. package/dist/core/secrets/credential-exposure-guard.js +55 -10
  198. package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
  199. package/dist/core/session-role.d.ts +6 -8
  200. package/dist/core/session-role.d.ts.map +1 -1
  201. package/dist/core/session-role.js +8 -18
  202. package/dist/core/session-role.js.map +1 -1
  203. package/dist/core/settings-manager.d.ts +13 -16
  204. package/dist/core/settings-manager.d.ts.map +1 -1
  205. package/dist/core/settings-manager.js +53 -50
  206. package/dist/core/settings-manager.js.map +1 -1
  207. package/dist/core/skill-vault.d.ts +15 -0
  208. package/dist/core/skill-vault.d.ts.map +1 -1
  209. package/dist/core/skill-vault.js +79 -45
  210. package/dist/core/skill-vault.js.map +1 -1
  211. package/dist/core/skills.d.ts +3 -0
  212. package/dist/core/skills.d.ts.map +1 -1
  213. package/dist/core/skills.js +6 -6
  214. package/dist/core/skills.js.map +1 -1
  215. package/dist/core/system-prompt-builder.d.ts +2 -0
  216. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  217. package/dist/core/system-prompt-builder.js +52 -12
  218. package/dist/core/system-prompt-builder.js.map +1 -1
  219. package/dist/core/system-prompt.js +1 -1
  220. package/dist/core/system-prompt.js.map +1 -1
  221. package/dist/core/tool-capability-policy.d.ts +3 -0
  222. package/dist/core/tool-capability-policy.d.ts.map +1 -1
  223. package/dist/core/tool-capability-policy.js +13 -2
  224. package/dist/core/tool-capability-policy.js.map +1 -1
  225. package/dist/core/toolkit/script-runner.d.ts +2 -1
  226. package/dist/core/toolkit/script-runner.d.ts.map +1 -1
  227. package/dist/core/toolkit/script-runner.js +10 -2
  228. package/dist/core/toolkit/script-runner.js.map +1 -1
  229. package/dist/core/tools/delegate-status.d.ts +1 -1
  230. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  231. package/dist/core/tools/delegate-status.js +1 -1
  232. package/dist/core/tools/delegate-status.js.map +1 -1
  233. package/dist/core/tools/delegate.d.ts +4 -15
  234. package/dist/core/tools/delegate.d.ts.map +1 -1
  235. package/dist/core/tools/delegate.js +111 -73
  236. package/dist/core/tools/delegate.js.map +1 -1
  237. package/dist/core/tools/goal.d.ts +3 -4
  238. package/dist/core/tools/goal.d.ts.map +1 -1
  239. package/dist/core/tools/goal.js +24 -7
  240. package/dist/core/tools/goal.js.map +1 -1
  241. package/dist/core/tools/profile-writer.d.ts +2 -8
  242. package/dist/core/tools/profile-writer.d.ts.map +1 -1
  243. package/dist/core/tools/profile-writer.js +6 -18
  244. package/dist/core/tools/profile-writer.js.map +1 -1
  245. package/dist/core/tools/run-toolkit-script.d.ts +1 -1
  246. package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
  247. package/dist/core/tools/run-toolkit-script.js +2 -2
  248. package/dist/core/tools/run-toolkit-script.js.map +1 -1
  249. package/dist/core/tools/skill-audit.d.ts +28 -1
  250. package/dist/core/tools/skill-audit.d.ts.map +1 -1
  251. package/dist/core/tools/skill-audit.js +56 -12
  252. package/dist/core/tools/skill-audit.js.map +1 -1
  253. package/dist/core/tools/skill.d.ts +12 -1
  254. package/dist/core/tools/skill.d.ts.map +1 -1
  255. package/dist/core/tools/skill.js +52 -0
  256. package/dist/core/tools/skill.js.map +1 -1
  257. package/dist/core/tools/skillify.d.ts.map +1 -1
  258. package/dist/core/tools/skillify.js +16 -7
  259. package/dist/core/tools/skillify.js.map +1 -1
  260. package/dist/core/tools/task-steps.js +1 -1
  261. package/dist/core/tools/task-steps.js.map +1 -1
  262. package/dist/core/tools/tmux-dispatch.d.ts +4 -16
  263. package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
  264. package/dist/core/tools/tmux-dispatch.js +5 -20
  265. package/dist/core/tools/tmux-dispatch.js.map +1 -1
  266. package/dist/core/worktree-sync/codes.d.ts +1 -2
  267. package/dist/core/worktree-sync/codes.d.ts.map +1 -1
  268. package/dist/core/worktree-sync/codes.js +1 -2
  269. package/dist/core/worktree-sync/codes.js.map +1 -1
  270. package/dist/core/worktree-sync/lane-gate.d.ts +4 -8
  271. package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
  272. package/dist/core/worktree-sync/lane-gate.js +5 -51
  273. package/dist/core/worktree-sync/lane-gate.js.map +1 -1
  274. package/dist/index.d.ts +5 -0
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +7 -0
  277. package/dist/index.js.map +1 -1
  278. package/dist/modes/interactive/auto-learn-controller.d.ts +6 -7
  279. package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
  280. package/dist/modes/interactive/auto-learn-controller.js +30 -207
  281. package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
  282. package/dist/modes/interactive/autonomy-commands.js +2 -2
  283. package/dist/modes/interactive/autonomy-commands.js.map +1 -1
  284. package/dist/modes/interactive/components/custom-message.js +17 -0
  285. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  286. package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
  287. package/dist/modes/interactive/components/fitness-role-selector.js +2 -2
  288. package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
  289. package/dist/modes/interactive/components/footer.js +1 -1
  290. package/dist/modes/interactive/components/footer.js.map +1 -1
  291. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  292. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  293. package/dist/modes/interactive/components/settings-selector.js +150 -73
  294. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  295. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  296. package/dist/modes/interactive/report-commands.js +8 -4
  297. package/dist/modes/interactive/report-commands.js.map +1 -1
  298. package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
  299. package/dist/modes/interactive/settings-selector-flow.js +10 -0
  300. package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
  301. package/docs/extensions.md +8 -0
  302. package/docs/harness-architecture.md +28 -32
  303. package/docs/index.md +1 -1
  304. package/docs/process-matrix.md +8 -6
  305. package/docs/resources.md +1 -1
  306. package/docs/settings.md +61 -51
  307. package/docs/tmux-agent-manager.md +47 -40
  308. package/docs/usage.md +1 -1
  309. package/docs/worker-profiles.md +8 -6
  310. package/docs/worktree-sync.md +26 -20
  311. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  312. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  313. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  314. package/examples/extensions/sandbox/package-lock.json +2 -2
  315. package/examples/extensions/sandbox/package.json +1 -1
  316. package/examples/extensions/with-deps/package-lock.json +2 -2
  317. package/examples/extensions/with-deps/package.json +1 -1
  318. package/npm-shrinkwrap.json +12 -12
  319. package/package.json +4 -4
  320. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +0 -133
  321. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +0 -1
  322. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +0 -199
  323. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +0 -1
  324. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +0 -312
@@ -1 +1 @@
1
- {"version":3,"file":"worker-fleet-limits.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-fleet-limits.ts"],"names":[],"mappings":"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","sourcesContent":["import { latestAgentAttemptByDurableOrder } from \"../orchestration/attempt-ordering.ts\";\nimport {\n\ttype AgentBindingContract,\n\tMAX_ORCHESTRATION_AGENT_BINDINGS,\n\tMAX_ORCHESTRATION_AGENT_DEPTH,\n\tMAX_ORCHESTRATION_DIRECT_CHILDREN,\n\ttype OrchestrationDelegationLimits,\n} from \"../orchestration/contracts.ts\";\nimport type { AttemptRuntimeState, TaskRuntimeProjection } from \"../orchestration/task-runtime.ts\";\n\n/**\n * Process-independent safety ceilings for one durable session fleet. These limits bound persisted\n * identity growth and scheduler fan-out; model/provider budgets remain separately authoritative.\n */\nexport interface WorkerFleetLimits {\n\tmaxDepth: number;\n\tmaxAgentsPerSession: number;\n\tmaxChildrenPerAgent: number;\n\tmaxNestedAgentsPerSession: number;\n\tmaxQueuedDispatches: number;\n}\n\nexport const DEFAULT_WORKER_FLEET_LIMITS: Readonly<WorkerFleetLimits> = Object.freeze({\n\tmaxDepth: MAX_ORCHESTRATION_AGENT_DEPTH,\n\tmaxAgentsPerSession: MAX_ORCHESTRATION_AGENT_BINDINGS,\n\tmaxChildrenPerAgent: MAX_ORCHESTRATION_DIRECT_CHILDREN,\n\tmaxNestedAgentsPerSession: MAX_ORCHESTRATION_AGENT_BINDINGS,\n\tmaxQueuedDispatches: 256,\n});\n\n/** Profile-free workers get one useful nested identity without an open-ended recursive fleet. */\nexport const LEAN_WORKER_DELEGATION_LIMITS: Readonly<OrchestrationDelegationLimits> = Object.freeze({\n\tmaxDepth: 1,\n\tmaxChildrenPerAgent: 1,\n\tmaxNestedAgentsPerSession: 1,\n});\n\n/** Materialize an optional profile limit inside the process-independent host safety ceiling. */\nexport function resolveWorkerFleetLimits(\n\tdelegationLimits?: Readonly<OrchestrationDelegationLimits>,\n): Readonly<WorkerFleetLimits> {\n\treturn {\n\t\t...DEFAULT_WORKER_FLEET_LIMITS,\n\t\tmaxDepth: Math.min(\n\t\t\tdelegationLimits?.maxDepth ?? DEFAULT_WORKER_FLEET_LIMITS.maxDepth,\n\t\t\tMAX_ORCHESTRATION_AGENT_DEPTH,\n\t\t),\n\t\tmaxChildrenPerAgent: Math.min(\n\t\t\tdelegationLimits?.maxChildrenPerAgent ?? DEFAULT_WORKER_FLEET_LIMITS.maxChildrenPerAgent,\n\t\t\tMAX_ORCHESTRATION_DIRECT_CHILDREN,\n\t\t),\n\t\tmaxNestedAgentsPerSession: Math.min(\n\t\t\tdelegationLimits?.maxNestedAgentsPerSession ?? DEFAULT_WORKER_FLEET_LIMITS.maxNestedAgentsPerSession,\n\t\t\tMAX_ORCHESTRATION_AGENT_BINDINGS,\n\t\t),\n\t};\n}\n\n/** Descendant routing may preserve or narrow an ancestor's recursive authority, never widen it. */\nexport function intersectWorkerDelegationLimits(\n\trequested?: Readonly<OrchestrationDelegationLimits>,\n\tboundary?: Readonly<OrchestrationDelegationLimits>,\n): OrchestrationDelegationLimits | undefined {\n\tif (!requested && !boundary) return undefined;\n\tconst requestedLimits = resolveWorkerFleetLimits(requested);\n\tconst boundaryLimits = resolveWorkerFleetLimits(boundary);\n\treturn {\n\t\tmaxDepth: Math.min(requestedLimits.maxDepth, boundaryLimits.maxDepth),\n\t\tmaxChildrenPerAgent: Math.min(requestedLimits.maxChildrenPerAgent, boundaryLimits.maxChildrenPerAgent),\n\t\tmaxNestedAgentsPerSession: Math.min(\n\t\t\trequestedLimits.maxNestedAgentsPerSession,\n\t\t\tboundaryLimits.maxNestedAgentsPerSession,\n\t\t),\n\t};\n}\n\nexport type NewWorkerAdmission =\n\t| { ok: true; depth: number }\n\t| {\n\t\t\tok: false;\n\t\t\treasonCode:\n\t\t\t\t| \"worker_agent_parent_unknown\"\n\t\t\t\t| \"worker_agent_parent_retired\"\n\t\t\t\t| \"worker_agent_depth_limit_reached\"\n\t\t\t\t| \"worker_agent_child_limit_reached\"\n\t\t\t\t| \"worker_agent_nested_session_limit_reached\"\n\t\t\t\t| \"worker_agent_session_limit_reached\";\n\t };\n\nexport type WorkerIdentityHeadroomAdmission =\n\t| { ok: true }\n\t| { ok: false; reasonCode: \"worker_agent_session_limit_reached\" };\n\n/** Subjects whose admitted verifier identity has not yet been materialized. */\nexport function pendingVerifierSubjectTaskIds(\n\tsnapshot: Pick<TaskRuntimeProjection, \"agents\" | \"tasks\" | \"attempts\">,\n): Set<string> {\n\tconst agents = snapshot.agents ?? {};\n\tconst tasks = snapshot.tasks ?? {};\n\tconst attempts = snapshot.attempts ?? {};\n\tconst pending = new Set<string>();\n\tfor (const taskId in tasks) {\n\t\tif (!Object.hasOwn(tasks, taskId)) continue;\n\t\tconst subject = tasks[taskId];\n\t\tif (!subject || subject.verification) continue;\n\t\tlet attempt: AttemptRuntimeState | undefined;\n\t\tfor (let index = subject.attemptIds.length - 1; index >= 0; index -= 1) {\n\t\t\tattempt = attempts[subject.attemptIds[index]!];\n\t\t\tif (attempt) break;\n\t\t}\n\t\tif (!attempt?.dispatch.executionContract?.verifier) continue;\n\t\tif (\n\t\t\tattempt.status === \"queued\" ||\n\t\t\tattempt.status === \"leased\" ||\n\t\t\tattempt.status === \"running\" ||\n\t\t\tattempt.status === \"suspended\" ||\n\t\t\tattempt.result?.nextAction === \"independent_verification_required\"\n\t\t) {\n\t\t\tpending.add(subject.task.taskId);\n\t\t}\n\t}\n\tif (pending.size === 0) return pending;\n\tfor (const taskId in tasks) {\n\t\tif (!Object.hasOwn(tasks, taskId)) continue;\n\t\tconst verifierTask = tasks[taskId];\n\t\tconst verificationOfTaskId = verifierTask?.task.verificationOfTaskId;\n\t\tif (!verifierTask || !verificationOfTaskId || !pending.has(verificationOfTaskId)) continue;\n\t\tlet verifierAttempt: AttemptRuntimeState | undefined;\n\t\tfor (let index = verifierTask.attemptIds.length - 1; index >= 0; index -= 1) {\n\t\t\tverifierAttempt = attempts[verifierTask.attemptIds[index]!];\n\t\t\tif (verifierAttempt) break;\n\t\t}\n\t\tconst verifierAgentId =\n\t\t\tverifierAttempt?.agentId ?? verifierAttempt?.dispatch.logicalLaneId ?? verifierTask.task.taskId;\n\t\tif (agents[verifierAgentId]) pending.delete(verificationOfTaskId);\n\t\tif (pending.size === 0) break;\n\t}\n\treturn pending;\n}\n\n/** Reserve durable identity slots without applying parent depth or direct-child limits. */\nfunction evaluateWorkerIdentityHeadroom(\n\tagents: Readonly<Record<string, AgentBindingContract>>,\n\trequiredAgentSlots: number,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): WorkerIdentityHeadroomAdmission {\n\tif (!Number.isSafeInteger(requiredAgentSlots) || requiredAgentSlots < 0) {\n\t\tthrow new TypeError(\"requiredAgentSlots must be a non-negative safe integer.\");\n\t}\n\treturn requiredAgentSlots > limits.maxAgentsPerSession - Object.keys(agents).length\n\t\t? { ok: false, reasonCode: \"worker_agent_session_limit_reached\" }\n\t\t: { ok: true };\n}\n\n/**\n * A persistent-agent turn consumes no implementation identity, but its retained immutable contract\n * can still require a fresh verifier. Protect both that verifier and every earlier reservation.\n */\nexport function evaluateReusableWorkerTaskAdmission(\n\tsnapshot: Pick<TaskRuntimeProjection, \"agents\" | \"tasks\" | \"attempts\">,\n\tagentId: string,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): WorkerIdentityHeadroomAdmission {\n\tconst latestAttempt = latestAgentAttemptByDurableOrder(snapshot, agentId);\n\tconst requiredAgentSlots =\n\t\tpendingVerifierSubjectTaskIds(snapshot).size + (latestAttempt?.dispatch.executionContract?.verifier ? 1 : 0);\n\treturn evaluateWorkerIdentityHeadroom(snapshot.agents, requiredAgentSlots, limits);\n}\n\n/** Evaluate a new durable identity before a task, conversation, or scheduler entry is created. */\nexport function evaluateNewWorkerAdmission(\n\tagents: Readonly<Record<string, AgentBindingContract>>,\n\tparentAgentId?: string,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n\trequiredAgentSlots = 1,\n): NewWorkerAdmission {\n\tif (!Number.isSafeInteger(requiredAgentSlots) || requiredAgentSlots < 1) {\n\t\tthrow new TypeError(\"requiredAgentSlots must be a positive safe integer.\");\n\t}\n\tconst headroom = evaluateWorkerIdentityHeadroom(agents, requiredAgentSlots, limits);\n\tif (!headroom.ok) return headroom;\n\tif (!parentAgentId) return { ok: true, depth: 0 };\n\tconst parent = agents[parentAgentId];\n\tif (!parent) return { ok: false, reasonCode: \"worker_agent_parent_unknown\" };\n\tif (parent.status === \"retired\") return { ok: false, reasonCode: \"worker_agent_parent_retired\" };\n\tconst depth = parent.depth + 1;\n\tif (depth > limits.maxDepth) return { ok: false, reasonCode: \"worker_agent_depth_limit_reached\" };\n\tlet directChildren = 0;\n\tfor (const agent of Object.values(agents)) {\n\t\tif (agent.parentAgentId === parent.agentId) directChildren += 1;\n\t}\n\tif (directChildren >= limits.maxChildrenPerAgent) {\n\t\treturn { ok: false, reasonCode: \"worker_agent_child_limit_reached\" };\n\t}\n\tlet nestedAgents = 0;\n\tfor (const agent of Object.values(agents)) {\n\t\t// A retired agent's durable identity slot is still reserved (evaluateWorkerIdentityHeadroom\n\t\t// above already bounds total agent count), but it no longer occupies a live nested-fleet\n\t\t// slot. Counting it here permanently blocks all future nested delegation once any nested\n\t\t// child has ever finished — with LEAN_WORKER_DELEGATION_LIMITS (=1), a single retired child.\n\t\tif (agent.parentAgentId && agent.status !== \"retired\") nestedAgents += 1;\n\t}\n\tif (nestedAgents >= limits.maxNestedAgentsPerSession) {\n\t\treturn { ok: false, reasonCode: \"worker_agent_nested_session_limit_reached\" };\n\t}\n\treturn { ok: true, depth };\n}\n\n/** Keep one queue slot reserved for an already-admitted mandatory verifier. */\nexport function workerQueueHasCapacity(\n\tqueuedCount: number,\n\tpriority: boolean,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): boolean {\n\tif (!Number.isSafeInteger(queuedCount) || queuedCount < 0) return false;\n\tconst ceiling = priority ? limits.maxQueuedDispatches : limits.maxQueuedDispatches - 1;\n\treturn queuedCount < ceiling;\n}\n"]}
1
+ {"version":3,"file":"worker-fleet-limits.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-fleet-limits.ts"],"names":[],"mappings":"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","sourcesContent":["import { latestAgentAttemptByDurableOrder } from \"../orchestration/attempt-ordering.ts\";\nimport {\n\ttype AgentBindingContract,\n\tMAX_ORCHESTRATION_AGENT_BINDINGS,\n\tMAX_ORCHESTRATION_AGENT_DEPTH,\n\tMAX_ORCHESTRATION_DIRECT_CHILDREN,\n\ttype OrchestrationDelegationLimits,\n} from \"../orchestration/contracts.ts\";\nimport type { AttemptRuntimeState, TaskRuntimeProjection } from \"../orchestration/task-runtime.ts\";\n\n/**\n * Process-independent safety ceilings for one durable session fleet. These limits bound persisted\n * identity growth and scheduler fan-out; model/provider budgets remain separately authoritative.\n */\nexport interface WorkerFleetLimits {\n\tmaxDepth: number;\n\tmaxAgentsPerSession: number;\n\tmaxChildrenPerAgent: number;\n\tmaxNestedAgentsPerSession: number;\n\tmaxQueuedDispatches: number;\n}\n\nexport const DEFAULT_WORKER_FLEET_LIMITS: Readonly<WorkerFleetLimits> = Object.freeze({\n\tmaxDepth: MAX_ORCHESTRATION_AGENT_DEPTH,\n\tmaxAgentsPerSession: MAX_ORCHESTRATION_AGENT_BINDINGS,\n\tmaxChildrenPerAgent: MAX_ORCHESTRATION_DIRECT_CHILDREN,\n\tmaxNestedAgentsPerSession: MAX_ORCHESTRATION_AGENT_BINDINGS,\n\tmaxQueuedDispatches: 256,\n});\n\n/** Every newly compiled native worker is a leaf; legacy wider limits are narrowed to this contract. */\nexport const LEAF_WORKER_DELEGATION_LIMITS: Readonly<OrchestrationDelegationLimits> = Object.freeze({\n\tmaxDepth: 0,\n\tmaxChildrenPerAgent: 0,\n\tmaxNestedAgentsPerSession: 0,\n});\n\n/** Materialize an optional profile limit inside the process-independent host safety ceiling. */\nexport function resolveWorkerFleetLimits(\n\tdelegationLimits?: Readonly<OrchestrationDelegationLimits>,\n): Readonly<WorkerFleetLimits> {\n\treturn {\n\t\t...DEFAULT_WORKER_FLEET_LIMITS,\n\t\tmaxDepth: Math.min(\n\t\t\tdelegationLimits?.maxDepth ?? DEFAULT_WORKER_FLEET_LIMITS.maxDepth,\n\t\t\tMAX_ORCHESTRATION_AGENT_DEPTH,\n\t\t),\n\t\tmaxChildrenPerAgent: Math.min(\n\t\t\tdelegationLimits?.maxChildrenPerAgent ?? DEFAULT_WORKER_FLEET_LIMITS.maxChildrenPerAgent,\n\t\t\tMAX_ORCHESTRATION_DIRECT_CHILDREN,\n\t\t),\n\t\tmaxNestedAgentsPerSession: Math.min(\n\t\t\tdelegationLimits?.maxNestedAgentsPerSession ?? DEFAULT_WORKER_FLEET_LIMITS.maxNestedAgentsPerSession,\n\t\t\tMAX_ORCHESTRATION_AGENT_BINDINGS,\n\t\t),\n\t};\n}\n\n/** Legacy recovery may preserve or narrow a persisted lineage boundary, never widen it. */\nexport function intersectWorkerDelegationLimits(\n\trequested?: Readonly<OrchestrationDelegationLimits>,\n\tboundary?: Readonly<OrchestrationDelegationLimits>,\n): OrchestrationDelegationLimits | undefined {\n\tif (!requested && !boundary) return undefined;\n\tconst requestedLimits = resolveWorkerFleetLimits(requested);\n\tconst boundaryLimits = resolveWorkerFleetLimits(boundary);\n\treturn {\n\t\tmaxDepth: Math.min(requestedLimits.maxDepth, boundaryLimits.maxDepth),\n\t\tmaxChildrenPerAgent: Math.min(requestedLimits.maxChildrenPerAgent, boundaryLimits.maxChildrenPerAgent),\n\t\tmaxNestedAgentsPerSession: Math.min(\n\t\t\trequestedLimits.maxNestedAgentsPerSession,\n\t\t\tboundaryLimits.maxNestedAgentsPerSession,\n\t\t),\n\t};\n}\n\nexport type NewWorkerAdmission =\n\t| { ok: true; depth: number }\n\t| {\n\t\t\tok: false;\n\t\t\treasonCode:\n\t\t\t\t| \"worker_agent_parent_unknown\"\n\t\t\t\t| \"worker_agent_parent_retired\"\n\t\t\t\t| \"worker_agent_depth_limit_reached\"\n\t\t\t\t| \"worker_agent_child_limit_reached\"\n\t\t\t\t| \"worker_agent_nested_session_limit_reached\"\n\t\t\t\t| \"worker_agent_session_limit_reached\";\n\t };\n\nexport type WorkerIdentityHeadroomAdmission =\n\t| { ok: true }\n\t| { ok: false; reasonCode: \"worker_agent_session_limit_reached\" };\n\n/** Subjects whose admitted verifier identity has not yet been materialized. */\nexport function pendingVerifierSubjectTaskIds(\n\tsnapshot: Pick<TaskRuntimeProjection, \"agents\" | \"tasks\" | \"attempts\">,\n): Set<string> {\n\tconst agents = snapshot.agents ?? {};\n\tconst tasks = snapshot.tasks ?? {};\n\tconst attempts = snapshot.attempts ?? {};\n\tconst pending = new Set<string>();\n\tfor (const taskId in tasks) {\n\t\tif (!Object.hasOwn(tasks, taskId)) continue;\n\t\tconst subject = tasks[taskId];\n\t\tif (!subject || subject.verification) continue;\n\t\tlet attempt: AttemptRuntimeState | undefined;\n\t\tfor (let index = subject.attemptIds.length - 1; index >= 0; index -= 1) {\n\t\t\tattempt = attempts[subject.attemptIds[index]!];\n\t\t\tif (attempt) break;\n\t\t}\n\t\tif (!attempt?.dispatch.executionContract?.verifier) continue;\n\t\tif (\n\t\t\tattempt.status === \"queued\" ||\n\t\t\tattempt.status === \"leased\" ||\n\t\t\tattempt.status === \"running\" ||\n\t\t\tattempt.status === \"suspended\" ||\n\t\t\tattempt.result?.nextAction === \"independent_verification_required\"\n\t\t) {\n\t\t\tpending.add(subject.task.taskId);\n\t\t}\n\t}\n\tif (pending.size === 0) return pending;\n\tfor (const taskId in tasks) {\n\t\tif (!Object.hasOwn(tasks, taskId)) continue;\n\t\tconst verifierTask = tasks[taskId];\n\t\tconst verificationOfTaskId = verifierTask?.task.verificationOfTaskId;\n\t\tif (!verifierTask || !verificationOfTaskId || !pending.has(verificationOfTaskId)) continue;\n\t\tlet verifierAttempt: AttemptRuntimeState | undefined;\n\t\tfor (let index = verifierTask.attemptIds.length - 1; index >= 0; index -= 1) {\n\t\t\tverifierAttempt = attempts[verifierTask.attemptIds[index]!];\n\t\t\tif (verifierAttempt) break;\n\t\t}\n\t\tconst verifierAgentId =\n\t\t\tverifierAttempt?.agentId ?? verifierAttempt?.dispatch.logicalLaneId ?? verifierTask.task.taskId;\n\t\tif (agents[verifierAgentId]) pending.delete(verificationOfTaskId);\n\t\tif (pending.size === 0) break;\n\t}\n\treturn pending;\n}\n\n/** Reserve durable identity slots without applying parent depth or direct-child limits. */\nfunction evaluateWorkerIdentityHeadroom(\n\tagents: Readonly<Record<string, AgentBindingContract>>,\n\trequiredAgentSlots: number,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): WorkerIdentityHeadroomAdmission {\n\tif (!Number.isSafeInteger(requiredAgentSlots) || requiredAgentSlots < 0) {\n\t\tthrow new TypeError(\"requiredAgentSlots must be a non-negative safe integer.\");\n\t}\n\treturn requiredAgentSlots > limits.maxAgentsPerSession - Object.keys(agents).length\n\t\t? { ok: false, reasonCode: \"worker_agent_session_limit_reached\" }\n\t\t: { ok: true };\n}\n\n/**\n * A persistent-agent turn consumes no implementation identity, but its retained immutable contract\n * can still require a fresh verifier. Protect both that verifier and every earlier reservation.\n */\nexport function evaluateReusableWorkerTaskAdmission(\n\tsnapshot: Pick<TaskRuntimeProjection, \"agents\" | \"tasks\" | \"attempts\">,\n\tagentId: string,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): WorkerIdentityHeadroomAdmission {\n\tconst latestAttempt = latestAgentAttemptByDurableOrder(snapshot, agentId);\n\tconst requiredAgentSlots =\n\t\tpendingVerifierSubjectTaskIds(snapshot).size + (latestAttempt?.dispatch.executionContract?.verifier ? 1 : 0);\n\treturn evaluateWorkerIdentityHeadroom(snapshot.agents, requiredAgentSlots, limits);\n}\n\n/** Evaluate a new durable identity before a task, conversation, or scheduler entry is created. */\nexport function evaluateNewWorkerAdmission(\n\tagents: Readonly<Record<string, AgentBindingContract>>,\n\tparentAgentId?: string,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n\trequiredAgentSlots = 1,\n): NewWorkerAdmission {\n\tif (!Number.isSafeInteger(requiredAgentSlots) || requiredAgentSlots < 1) {\n\t\tthrow new TypeError(\"requiredAgentSlots must be a positive safe integer.\");\n\t}\n\tconst headroom = evaluateWorkerIdentityHeadroom(agents, requiredAgentSlots, limits);\n\tif (!headroom.ok) return headroom;\n\tif (!parentAgentId) return { ok: true, depth: 0 };\n\tconst parent = agents[parentAgentId];\n\tif (!parent) return { ok: false, reasonCode: \"worker_agent_parent_unknown\" };\n\tif (parent.status === \"retired\") return { ok: false, reasonCode: \"worker_agent_parent_retired\" };\n\tconst depth = parent.depth + 1;\n\tif (depth > limits.maxDepth) return { ok: false, reasonCode: \"worker_agent_depth_limit_reached\" };\n\tlet directChildren = 0;\n\tfor (const agent of Object.values(agents)) {\n\t\tif (agent.parentAgentId === parent.agentId) directChildren += 1;\n\t}\n\tif (directChildren >= limits.maxChildrenPerAgent) {\n\t\treturn { ok: false, reasonCode: \"worker_agent_child_limit_reached\" };\n\t}\n\tlet nestedAgents = 0;\n\tfor (const agent of Object.values(agents)) {\n\t\t// A retired agent's durable identity slot is still reserved (evaluateWorkerIdentityHeadroom\n\t\t// above already bounds total agent count), but it no longer occupies a live nested-fleet\n\t\t// slot. Counting it here permanently blocks all future nested delegation once any nested\n\t\t// child has ever finished when a recovered legacy contract retains a nested-session limit of one.\n\t\tif (agent.parentAgentId && agent.status !== \"retired\") nestedAgents += 1;\n\t}\n\tif (nestedAgents >= limits.maxNestedAgentsPerSession) {\n\t\treturn { ok: false, reasonCode: \"worker_agent_nested_session_limit_reached\" };\n\t}\n\treturn { ok: true, depth };\n}\n\n/** Keep one queue slot reserved for an already-admitted mandatory verifier. */\nexport function workerQueueHasCapacity(\n\tqueuedCount: number,\n\tpriority: boolean,\n\tlimits: Readonly<WorkerFleetLimits> = DEFAULT_WORKER_FLEET_LIMITS,\n): boolean {\n\tif (!Number.isSafeInteger(queuedCount) || queuedCount < 0) return false;\n\tconst ceiling = priority ? limits.maxQueuedDispatches : limits.maxQueuedDispatches - 1;\n\treturn queuedCount < ceiling;\n}\n"]}
@@ -0,0 +1,12 @@
1
+ type PathExists = (candidate: string) => boolean;
2
+ /** Preserve native Windows absolute paths when the host process is running under another path dialect. */
3
+ export declare function resolveWorkerWorkspacePath(cwd: string, candidate: string): string;
4
+ /**
5
+ * Resolve every local filesystem root the host can address without hard-coding POSIX `/` or
6
+ * collapsing Windows authority to the foreground drive. WSL exposes mounted drives below its
7
+ * POSIX root, while native Windows requires one root per mounted drive. A UNC working directory
8
+ * contributes its share root even though drive enumeration cannot discover remote shares.
9
+ */
10
+ export declare function workerMachinePathRoots(cwd: string, platform?: NodeJS.Platform, pathExists?: PathExists): string[];
11
+ export {};
12
+ //# sourceMappingURL=worker-machine-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-machine-scope.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-machine-scope.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;AAEjD,0GAA0G;AAC1G,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,UAAU,GAAE,UAAuB,GACjC,MAAM,EAAE,CAkBV"}
@@ -0,0 +1,38 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ /** Preserve native Windows absolute paths when the host process is running under another path dialect. */
4
+ export function resolveWorkerWorkspacePath(cwd, candidate) {
5
+ if (path.isAbsolute(candidate))
6
+ return path.resolve(candidate);
7
+ if (path.win32.isAbsolute(candidate))
8
+ return path.win32.normalize(candidate);
9
+ return path.resolve(cwd, candidate);
10
+ }
11
+ /**
12
+ * Resolve every local filesystem root the host can address without hard-coding POSIX `/` or
13
+ * collapsing Windows authority to the foreground drive. WSL exposes mounted drives below its
14
+ * POSIX root, while native Windows requires one root per mounted drive. A UNC working directory
15
+ * contributes its share root even though drive enumeration cannot discover remote shares.
16
+ */
17
+ export function workerMachinePathRoots(cwd, platform = process.platform, pathExists = existsSync) {
18
+ if (platform !== "win32")
19
+ return [path.posix.parse(path.posix.resolve(cwd)).root];
20
+ const roots = new Map();
21
+ const addRoot = (candidate) => {
22
+ const normalized = path.win32.normalize(candidate);
23
+ const canonical = /^[a-z]:\\$/i.test(normalized)
24
+ ? `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)}`
25
+ : normalized;
26
+ roots.set(canonical.toLowerCase(), canonical);
27
+ };
28
+ const currentRoot = path.win32.parse(path.win32.resolve(cwd)).root;
29
+ if (currentRoot)
30
+ addRoot(currentRoot);
31
+ for (let code = "A".charCodeAt(0); code <= "Z".charCodeAt(0); code += 1) {
32
+ const root = `${String.fromCharCode(code)}:\\`;
33
+ if (pathExists(root))
34
+ addRoot(root);
35
+ }
36
+ return [...roots.values()].sort((left, right) => left.localeCompare(right));
37
+ }
38
+ //# sourceMappingURL=worker-machine-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-machine-scope.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-machine-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,0GAA0G;AAC1G,MAAM,UAAU,0BAA0B,CAAC,GAAW,EAAE,SAAiB;IACxE,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACrC,GAAW,EACX,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EAC5C,UAAU,GAAe,UAAU;IAEnC,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAQ,EAAE;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/C,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YAC/D,CAAC,CAAC,UAAU,CAAC;QACd,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,IAAI,WAAW;QAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/C,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\n\ntype PathExists = (candidate: string) => boolean;\n\n/** Preserve native Windows absolute paths when the host process is running under another path dialect. */\nexport function resolveWorkerWorkspacePath(cwd: string, candidate: string): string {\n\tif (path.isAbsolute(candidate)) return path.resolve(candidate);\n\tif (path.win32.isAbsolute(candidate)) return path.win32.normalize(candidate);\n\treturn path.resolve(cwd, candidate);\n}\n\n/**\n * Resolve every local filesystem root the host can address without hard-coding POSIX `/` or\n * collapsing Windows authority to the foreground drive. WSL exposes mounted drives below its\n * POSIX root, while native Windows requires one root per mounted drive. A UNC working directory\n * contributes its share root even though drive enumeration cannot discover remote shares.\n */\nexport function workerMachinePathRoots(\n\tcwd: string,\n\tplatform: NodeJS.Platform = process.platform,\n\tpathExists: PathExists = existsSync,\n): string[] {\n\tif (platform !== \"win32\") return [path.posix.parse(path.posix.resolve(cwd)).root];\n\n\tconst roots = new Map<string, string>();\n\tconst addRoot = (candidate: string): void => {\n\t\tconst normalized = path.win32.normalize(candidate);\n\t\tconst canonical = /^[a-z]:\\\\$/i.test(normalized)\n\t\t\t? `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)}`\n\t\t\t: normalized;\n\t\troots.set(canonical.toLowerCase(), canonical);\n\t};\n\tconst currentRoot = path.win32.parse(path.win32.resolve(cwd)).root;\n\tif (currentRoot) addRoot(currentRoot);\n\tfor (let code = \"A\".charCodeAt(0); code <= \"Z\".charCodeAt(0); code += 1) {\n\t\tconst root = `${String.fromCharCode(code)}:\\\\`;\n\t\tif (pathExists(root)) addRoot(root);\n\t}\n\treturn [...roots.values()].sort((left, right) => left.localeCompare(right));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"worker-recovery-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-recovery-coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-recovery-coordinator.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-recovery-coordinator.ts"],"names":[],"mappings":"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"}
@@ -111,7 +111,12 @@ export class WorkerRecoveryCoordinator {
111
111
  this.verificationRecoveryFailures.set(recovery.subjectTaskId, started.skipReason);
112
112
  this.options.warn(`Recovered verification for ${recovery.subjectTaskId} did not start: ${started.skipReason}`);
113
113
  }
114
- const terminalRecords = lifecycle.getPendingTerminalNotifications().map((notification) => notification.record);
114
+ const terminalRecords = lifecycle
115
+ .getPendingTerminalNotifications()
116
+ .map((notification) => notification.record)
117
+ // ManagedLaneController owns tmux projection and durable delivery; replaying it here
118
+ // creates a second publisher every time unrelated foreground state triggers recovery.
119
+ .filter((record) => record.type !== "tmux-worker");
115
120
  if (terminalRecords.length > 0) {
116
121
  if (this.options.publishTerminalRecords)
117
122
  this.options.publishTerminalRecords(terminalRecords);
@@ -1 +1 @@
1
- {"version":3,"file":"worker-recovery-coordinator.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-recovery-coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Message, Usage } from \"@caupulican/pi-ai\";\nimport type { LaneRecord } from \"../autonomy/lane-tracker.ts\";\nimport { isPathWithinScope } from \"../autonomy/path-scope.ts\";\nimport { reconcileAttemptUsage } from \"../orchestration/attempt-usage.ts\";\nimport type { AttemptUsageSnapshot, ExecutionGrant, ResourcePointer, RiskBudget } from \"../orchestration/contracts.ts\";\nimport type { AttemptRuntimeState } from \"../orchestration/task-runtime.ts\";\nimport type { WorkerConversation } from \"./worker-conversation-store.ts\";\nimport type { WorkerDelegationRequest } from \"./worker-delegation-request.ts\";\nimport type { WorkerDispatchScheduler } from \"./worker-dispatch-scheduler.ts\";\nimport type { WorkerExecutionPlan } from \"./worker-execution-policy.ts\";\nimport type { PendingVerificationRecovery, WorkerLifecycle } from \"./worker-lifecycle.ts\";\nimport { evaluateWorkerRetry } from \"./worker-retry-policy.ts\";\n\nexport type WorkerRecoveryDispatchResult = { started: true } | { started: false; skipReason: string };\n\nexport type WorkerRetryScheduleResult =\n\t| { scheduled: true; record: LaneRecord; retriesUsed: number; notBefore: string }\n\t| { scheduled: false; reason: string };\n\ninterface PendingRetryDispatch {\n\tlaneId: string;\n\tnotBefore: string;\n\trequest: WorkerDelegationRequest;\n\tpriority: boolean;\n\ttimer?: ReturnType<typeof setTimeout>;\n}\n\nexport interface WorkerRecoveryCoordinatorOptions {\n\tlifecycle: WorkerLifecycle;\n\tscheduler: Pick<WorkerDispatchScheduler, \"enqueue\"> &\n\t\tPartial<Pick<WorkerDispatchScheduler, \"onQueueCapacityAvailable\">>;\n\trecoverWriteReservations(): void;\n\tpublishTerminalRecord(record: LaneRecord): void;\n\tpublishTerminalRecords?(records: readonly LaneRecord[]): void;\n\tdispatchVerification(\n\t\trecovery: Extract<PendingVerificationRecovery, { action: \"dispatch\" }>,\n\t): WorkerRecoveryDispatchResult;\n\trecoverTaskBearingMailboxTurns(): void;\n\trecoverSessionRootReplies(): void;\n\t/** Wake the scheduler and UI after a retained retry deadline becomes eligible. */\n\tretryReady?(): void;\n\tnow?(): number;\n\twarn(message: string): void;\n}\n\nfunction restartResumableSuspension(\n\tattempt: AttemptRuntimeState,\n\tnewlySuspendedAttemptIds: ReadonlySet<string>,\n): boolean {\n\treturn (\n\t\tnewlySuspendedAttemptIds.has(attempt.attemptId) ||\n\t\tattempt.reasonCode === \"agent_process_recovered_after_owner_exit\" ||\n\t\tattempt.reasonCode === \"agent_process_interrupted\" ||\n\t\tattempt.reasonCode?.startsWith(\"retry_scheduled:\") === true\n\t);\n}\n\n/**\n * Owns restart-only worker state repair. It has no provider or tool execution authority: it\n * reconstructs bounded durable requests, requeues them through the owner scheduler, and supplies\n * the execution layer with narrow transcript/usage/grant recovery decisions.\n */\nexport class WorkerRecoveryCoordinator {\n\tprivate readonly options: WorkerRecoveryCoordinatorOptions;\n\tprivate queueRecovered = false;\n\tprivate recoveringDurableState = false;\n\tprivate readonly verificationRecoveryFailures = new Map<string, string>();\n\tprivate readonly retryTimers = new Map<string, PendingRetryDispatch>();\n\tprivate readonly unsubscribeQueueCapacity: (() => void) | undefined;\n\n\tconstructor(options: WorkerRecoveryCoordinatorOptions) {\n\t\tthis.options = options;\n\t\tthis.unsubscribeQueueCapacity = options.scheduler.onQueueCapacityAvailable?.(() => {\n\t\t\tthis.flushDueRetries();\n\t\t\t// Mandatory verifier dispatches remain derivable from durable subject state even after the\n\t\t\t// ordinary queue was fully recovered. Every released slot must replay that retained demand.\n\t\t\tthis.recover();\n\t\t});\n\t}\n\n\t/** Idempotently rebuild in-process queues, terminal outboxes, and task-bearing mailboxes. */\n\trecover(): void {\n\t\tif (this.recoveringDurableState) return;\n\t\tthis.recoveringDurableState = true;\n\t\tconst { lifecycle } = this.options;\n\t\ttry {\n\t\t\tif (!this.queueRecovered) {\n\t\t\t\tconst newlySuspendedAttemptIds = new Set(lifecycle.suspendBoundInProcessAttemptsForRestart());\n\t\t\t\ttry {\n\t\t\t\t\tthis.options.recoverWriteReservations();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t`Worker write reservation recovery failed closed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst queued = lifecycle.recoverQueued();\n\t\t\t\tconst snapshot = lifecycle.getTaskRuntimeSnapshot();\n\t\t\t\tfor (const attempt of Object.values(snapshot.attempts)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tattempt.status !== \"suspended\" ||\n\t\t\t\t\t\t!attempt.agentId ||\n\t\t\t\t\t\tattempt.dispatch.executionKind === \"managed-process\" ||\n\t\t\t\t\t\t!restartResumableSuspension(attempt, newlySuspendedAttemptIds)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst record = lifecycle.getRecord(attempt.taskId);\n\t\t\t\t\tconst task = snapshot.tasks[attempt.taskId]?.task;\n\t\t\t\t\tif (!record || !task) continue;\n\t\t\t\t\tqueued.push({\n\t\t\t\t\t\trecord,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t...(task.verificationOfTaskId ? { verificationOfTaskId: task.verificationOfTaskId } : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet recoveredAll = true;\n\t\t\t\tfor (const { attempt, record, verificationOfTaskId } of queued) {\n\t\t\t\t\tlet retained: boolean;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tretained = this.enqueueOrDeferRetry(\n\t\t\t\t\t\t\trecord,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tthis.recoveredRequest(attempt, verificationOfTaskId),\n\t\t\t\t\t\t\tverificationOfTaskId !== undefined,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\trecoveredAll = false;\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Failed to recover queued worker ${record.laneId}; retaining durable dispatch: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (retained) continue;\n\t\t\t\t\trecoveredAll = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.queueRecovered = recoveredAll;\n\t\t\t}\n\n\t\t\tfor (const recovery of lifecycle.getPendingVerificationRecoveries()) {\n\t\t\t\tif (recovery.action === \"reconcile\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.options.publishTerminalRecord(lifecycle.reconcileVerification(recovery));\n\t\t\t\t\t\tthis.verificationRecoveryFailures.delete(recovery.subjectTaskId);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Failed to reconcile recovered verification for ${recovery.subjectTaskId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet started: WorkerRecoveryDispatchResult;\n\t\t\t\ttry {\n\t\t\t\t\tstarted = this.options.dispatchVerification(recovery);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tconst failureKey = `dispatch_threw:${reason}`;\n\t\t\t\t\tif (this.verificationRecoveryFailures.get(recovery.subjectTaskId) !== failureKey) {\n\t\t\t\t\t\tthis.verificationRecoveryFailures.set(recovery.subjectTaskId, failureKey);\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Recovered verification for ${recovery.subjectTaskId} threw during dispatch: ${reason}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (started.started) {\n\t\t\t\t\tthis.verificationRecoveryFailures.delete(recovery.subjectTaskId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (this.verificationRecoveryFailures.get(recovery.subjectTaskId) === started.skipReason) continue;\n\t\t\t\tthis.verificationRecoveryFailures.set(recovery.subjectTaskId, started.skipReason);\n\t\t\t\tthis.options.warn(\n\t\t\t\t\t`Recovered verification for ${recovery.subjectTaskId} did not start: ${started.skipReason}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst terminalRecords = lifecycle.getPendingTerminalNotifications().map((notification) => notification.record);\n\t\t\tif (terminalRecords.length > 0) {\n\t\t\t\tif (this.options.publishTerminalRecords) this.options.publishTerminalRecords(terminalRecords);\n\t\t\t\telse for (const record of terminalRecords) this.options.publishTerminalRecord(record);\n\t\t\t}\n\t\t\tthis.options.recoverSessionRootReplies();\n\t\t\tthis.options.recoverTaskBearingMailboxTurns();\n\t\t} finally {\n\t\t\tthis.recoveringDurableState = false;\n\t\t}\n\t}\n\n\t/** Evaluate, persist, and arm one retry through the same durable path used by restart recovery. */\n\tscheduleAttemptRetry(args: {\n\t\tlaneId: string;\n\t\tagentId: string;\n\t\townerId: string;\n\t\trequest: WorkerDelegationRequest;\n\t\toutcome: { laneStatus: string; reasonCode: string; reasonDetail?: string };\n\t\tprovider: string;\n\t\tmaxAttempts?: number;\n\t}): WorkerRetryScheduleResult {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(args.laneId);\n\t\tconst record = this.options.lifecycle.getRecord(args.laneId);\n\t\tif (!attempt || !record) return { scheduled: false, reason: \"attempt_missing\" };\n\t\tconst retriesUsed = attempt.retry?.retriesUsed ?? 0;\n\t\tconst decision = evaluateWorkerRetry({\n\t\t\tlaneStatus: args.outcome.laneStatus,\n\t\t\treasonCode: args.outcome.reasonCode,\n\t\t\t...(args.outcome.reasonDetail ? { reasonDetail: args.outcome.reasonDetail } : {}),\n\t\t\tprovider: args.provider,\n\t\t\tretriesUsed,\n\t\t\t...(args.maxAttempts !== undefined ? { maxAttempts: args.maxAttempts } : {}),\n\t\t});\n\t\tif (!decision.retry) return { scheduled: false, reason: decision.reason };\n\t\tconst nextRetriesUsed = retriesUsed + 1;\n\t\tconst notBefore = new Date(this.now() + decision.delayMs).toISOString();\n\t\tlet suspended: AttemptRuntimeState;\n\t\ttry {\n\t\t\tsuspended = this.options.lifecycle.scheduleAgentRetry({\n\t\t\t\tlaneId: args.laneId,\n\t\t\t\tagentId: args.agentId,\n\t\t\t\townerId: args.ownerId,\n\t\t\t\treasonCode: `retry_scheduled:${decision.reason}`,\n\t\t\t\tretry: { retriesUsed: nextRetriesUsed, notBefore },\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.options.warn(\n\t\t\t\t`Worker ${args.laneId} retry suspension failed; terminalizing instead: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn { scheduled: false, reason: \"retry_suspension_failed\" };\n\t\t}\n\t\tthis.options.warn(\n\t\t\t`Worker ${args.laneId} failed (${decision.reason}); retrying from the persisted transcript in ${Math.ceil(decision.delayMs / 1000)}s (attempt ${nextRetriesUsed + 1}).`,\n\t\t);\n\t\tthis.enqueueOrDeferRetry(record, suspended, args.request, args.request.verificationOfTaskId !== undefined);\n\t\treturn { scheduled: true, record, retriesUsed: nextRetriesUsed, notBefore };\n\t}\n\n\t/** Cancel only process-local alarms; the retained deadline remains authoritative on disk. */\n\tdispose(): void {\n\t\tthis.unsubscribeQueueCapacity?.();\n\t\tfor (const entry of this.retryTimers.values()) {\n\t\t\tif (entry.timer) clearTimeout(entry.timer);\n\t\t}\n\t\tthis.retryTimers.clear();\n\t}\n\n\tclearScheduledRetry(laneId: string): void {\n\t\tfor (const [attemptId, entry] of this.retryTimers) {\n\t\t\tif (entry.laneId !== laneId) continue;\n\t\t\tif (entry.timer) clearTimeout(entry.timer);\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t}\n\t}\n\n\t/** Keep an externally requested wake queued while the durable retry deadline is still retained. */\n\tdeferRetryIfNeeded(record: LaneRecord, request: WorkerDelegationRequest): boolean {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(record.laneId);\n\t\tif (\n\t\t\t!attempt ||\n\t\t\tattempt.status !== \"suspended\" ||\n\t\t\t!attempt.retry ||\n\t\t\tDate.parse(attempt.retry.notBefore) <= this.now()\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.enqueueOrDeferRetry(record, attempt, request, request.verificationOfTaskId !== undefined);\n\t\treturn true;\n\t}\n\n\tprivate enqueueOrDeferRetry(\n\t\trecord: LaneRecord,\n\t\tattempt: AttemptRuntimeState,\n\t\trequest: WorkerDelegationRequest,\n\t\tpriority: boolean,\n\t): boolean {\n\t\tconst retry = attempt.retry;\n\t\tif (!retry) {\n\t\t\ttry {\n\t\t\t\tthis.options.scheduler.enqueue(record, request, true, priority);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.message === \"worker_dispatch_queue_full\") return false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst existing = this.retryTimers.get(attempt.attemptId);\n\t\tif (existing?.notBefore === retry.notBefore) return true;\n\t\tif (existing?.timer) clearTimeout(existing.timer);\n\t\tconst entry: PendingRetryDispatch = {\n\t\t\tlaneId: record.laneId,\n\t\t\tnotBefore: retry.notBefore,\n\t\t\trequest,\n\t\t\tpriority,\n\t\t};\n\t\tthis.retryTimers.set(attempt.attemptId, entry);\n\t\tconst remainingMs = Date.parse(retry.notBefore) - this.now();\n\t\tif (remainingMs <= 0) {\n\t\t\tthis.tryEnqueueDueRetry(attempt.attemptId, entry);\n\t\t\treturn true;\n\t\t}\n\t\tconst timer = setTimeout(() => this.onRetryTimer(attempt.attemptId), Math.min(remainingMs, 2_147_000_000));\n\t\tif (typeof timer === \"object\" && \"unref\" in timer) timer.unref();\n\t\tentry.timer = timer;\n\t\treturn true;\n\t}\n\n\tprivate onRetryTimer(attemptId: string): void {\n\t\tconst entry = this.retryTimers.get(attemptId);\n\t\tif (!entry) return;\n\t\tdelete entry.timer;\n\t\tthis.tryEnqueueDueRetry(attemptId, entry);\n\t}\n\n\tprivate tryEnqueueDueRetry(attemptId: string, entry: PendingRetryDispatch): \"enqueued\" | \"full\" | \"stale\" {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(entry.laneId);\n\t\tif (\n\t\t\t!attempt ||\n\t\t\tattempt.attemptId !== attemptId ||\n\t\t\tattempt.status !== \"suspended\" ||\n\t\t\tattempt.retry?.notBefore !== entry.notBefore\n\t\t) {\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t\treturn \"stale\";\n\t\t}\n\t\tconst record = this.options.lifecycle.getRecord(entry.laneId);\n\t\tif (!record) {\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t\treturn \"stale\";\n\t\t}\n\t\tconst remainingMs = Date.parse(entry.notBefore) - this.now();\n\t\tif (remainingMs > 0) {\n\t\t\tconst timer = setTimeout(() => this.onRetryTimer(attemptId), Math.min(remainingMs, 2_147_000_000));\n\t\t\tif (typeof timer === \"object\" && \"unref\" in timer) timer.unref();\n\t\t\tentry.timer = timer;\n\t\t\treturn \"stale\";\n\t\t}\n\t\ttry {\n\t\t\tthis.options.scheduler.enqueue(record, entry.request, true, entry.priority);\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.message === \"worker_dispatch_queue_full\") return \"full\";\n\t\t\tthis.options.warn(\n\t\t\t\t`Worker ${entry.laneId} retry enqueue failed; retaining the durable retry: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn \"full\";\n\t\t}\n\t\tthis.retryTimers.delete(attemptId);\n\t\tthis.options.retryReady?.();\n\t\treturn \"enqueued\";\n\t}\n\n\tprivate flushDueRetries(): void {\n\t\tfor (const [attemptId, entry] of this.retryTimers) {\n\t\t\tif (entry.timer || Date.parse(entry.notBefore) > this.now()) continue;\n\t\t\tif (this.tryEnqueueDueRetry(attemptId, entry) === \"full\") break;\n\t\t}\n\t}\n\n\tprivate now(): number {\n\t\treturn this.options.now?.() ?? Date.now();\n\t}\n\n\t/** Rebuild task metadata from its durable dispatch; no current profile/model selection is consulted. */\n\trecoveredRequest(attempt: AttemptRuntimeState, verificationOfTaskId?: string): WorkerDelegationRequest {\n\t\tconst task = this.options.lifecycle.getTask(attempt.taskId)?.task;\n\t\tconst durableVerificationOfTaskId = verificationOfTaskId ?? task?.verificationOfTaskId;\n\t\treturn {\n\t\t\tinstructions: attempt.dispatch.instructions,\n\t\t\tprofileId: attempt.dispatch.profileId,\n\t\t\t...(attempt.dispatch.parentAgentId ? { parentAgentId: attempt.dispatch.parentAgentId } : {}),\n\t\t\t...(durableVerificationOfTaskId ? { verificationOfTaskId: durableVerificationOfTaskId } : {}),\n\t\t\t...(task\n\t\t\t\t? {\n\t\t\t\t\t\ttaskContext: {\n\t\t\t\t\t\t\trequirementIds: attempt.dispatch.requirementIds ?? [],\n\t\t\t\t\t\t\tdependsOnTaskIds: task.dependsOn,\n\t\t\t\t\t\t\tacceptanceCriterionIds: task.acceptanceCriterionIds,\n\t\t\t\t\t\t\tresourcePointerIds: attempt.dispatch.resourcePointerIds,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\t/** Append deterministic unknown outcomes only for tool calls not durably followed by a result. */\n\trepairInterruptedToolResults(conversation: WorkerConversation): void {\n\t\tconst messages = conversation.getProviderMessages();\n\t\tconst completedToolCallIds = new Set<string>();\n\t\tlet index = messages.length - 1;\n\t\twhile (index >= 0 && messages[index]?.role === \"toolResult\") {\n\t\t\tcompletedToolCallIds.add((messages[index] as Extract<Message, { role: \"toolResult\" }>).toolCallId);\n\t\t\tindex -= 1;\n\t\t}\n\t\tconst assistant = messages[index];\n\t\tif (!assistant || assistant.role !== \"assistant\") return;\n\t\tfor (const content of assistant.content) {\n\t\t\tif (content.type !== \"toolCall\" || completedToolCallIds.has(content.id)) continue;\n\t\t\tconversation.appendMessage({\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: content.id,\n\t\t\t\ttoolName: content.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: \"Execution outcome is unknown because this worker was interrupted before a durable tool result was recorded. Inspect the workspace and prior evidence before deciding whether to retry this operation.\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Return an already-persisted final assistant response so recovery cannot duplicate provider work. */\n\trecoveredTerminalCompletion(\n\t\tconversation: WorkerConversation,\n\t\tattemptId: string,\n\t): { text: string; usage: Usage; stopReason: string } | undefined {\n\t\tconst last = conversation.getLastAttemptMessage(attemptId);\n\t\tif (!last || last.role !== \"assistant\" || last.stopReason === \"error\" || last.stopReason === \"aborted\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (last.content.some((content) => content.type === \"toolCall\")) return undefined;\n\t\tconst text = last.content\n\t\t\t.filter(\n\t\t\t\t(content): content is Extract<(typeof last.content)[number], { type: \"text\" }> => content.type === \"text\",\n\t\t\t)\n\t\t\t.map((content) => content.text)\n\t\t\t.join(\"\");\n\t\treturn { text, usage: last.usage, stopReason: last.stopReason };\n\t}\n\n\t/** Legacy raw transcripts predate durable usage checkpoints; reconstruct their bounded cumulative baseline. */\n\tinitialUsage(\n\t\tconversation: WorkerConversation,\n\t\tcheckpointUsage: AttemptUsageSnapshot | undefined,\n\t\tattemptId: string,\n\t): AttemptUsageSnapshot {\n\t\tconst transcriptUsage = conversation.getRawTranscriptUsage(attemptId);\n\t\treturn checkpointUsage ? reconcileAttemptUsage(checkpointUsage, transcriptUsage) : transcriptUsage;\n\t}\n\n\t/** Fail closed when the current owner profile no longer permits a persisted grant. */\n\tdurableGrantIsStillPermitted(\n\t\tgrant: ExecutionGrant,\n\t\tplan: WorkerExecutionPlan,\n\t\tselectedResources: readonly ResourcePointer[],\n\t): boolean {\n\t\tconst allowedTools = new Set(plan.toolManifests.map((manifest) => manifest.toolName));\n\t\tconst allowedCapabilities = new Set(plan.requiredCapabilities);\n\t\tconst scopesRemainPermitted = (granted: readonly string[], permitted: readonly string[]) =>\n\t\t\tgranted.every((scope) => permitted.some((candidate) => isPathWithinScope(scope, candidate)));\n\t\tconst liveDenialsRemainEnforced = plan.deniedPaths.every((denied) =>\n\t\t\tgrant.deniedPaths.some((granted) => isPathWithinScope(denied, granted)),\n\t\t);\n\t\tconst budgetRemainsPermitted = (Object.keys(plan.budget) as Array<keyof RiskBudget>).every((field) => {\n\t\t\tconst current = plan.budget[field];\n\t\t\tconst persisted = grant.budget[field];\n\t\t\treturn current === undefined || (persisted !== undefined && persisted <= current);\n\t\t});\n\t\tconst resourcesRemainPermitted =\n\t\t\tgrant.resources.length === selectedResources.length &&\n\t\t\tgrant.resources.every((granted, index) => {\n\t\t\t\tconst selected = selectedResources[index];\n\t\t\t\treturn (\n\t\t\t\t\tselected !== undefined &&\n\t\t\t\t\tgranted.id === selected.id &&\n\t\t\t\t\tgranted.kind === selected.kind &&\n\t\t\t\t\tgranted.uri === selected.uri &&\n\t\t\t\t\tgranted.readOnly === selected.readOnly &&\n\t\t\t\t\ttypeof granted.digest === \"string\" &&\n\t\t\t\t\t(selected.digest === undefined || selected.digest === granted.digest) &&\n\t\t\t\t\tgranted.metadata?.name === selected.metadata?.name\n\t\t\t\t);\n\t\t\t});\n\t\treturn (\n\t\t\tgrant.allowedTools.every((toolName) => allowedTools.has(toolName)) &&\n\t\t\tgrant.capabilities.every((capability) => allowedCapabilities.has(capability)) &&\n\t\t\tresourcesRemainPermitted &&\n\t\t\tscopesRemainPermitted(grant.readPaths, plan.readPaths) &&\n\t\t\tscopesRemainPermitted(grant.writePaths, plan.writePaths) &&\n\t\t\tliveDenialsRemainEnforced &&\n\t\t\tbudgetRemainsPermitted\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"worker-recovery-coordinator.js","sourceRoot":"","sources":["../../../src/core/delegation/worker-recovery-coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Message, Usage } from \"@caupulican/pi-ai\";\nimport type { LaneRecord } from \"../autonomy/lane-tracker.ts\";\nimport { isPathWithinScope } from \"../autonomy/path-scope.ts\";\nimport { reconcileAttemptUsage } from \"../orchestration/attempt-usage.ts\";\nimport type { AttemptUsageSnapshot, ExecutionGrant, ResourcePointer, RiskBudget } from \"../orchestration/contracts.ts\";\nimport type { AttemptRuntimeState } from \"../orchestration/task-runtime.ts\";\nimport type { WorkerConversation } from \"./worker-conversation-store.ts\";\nimport type { WorkerDelegationRequest } from \"./worker-delegation-request.ts\";\nimport type { WorkerDispatchScheduler } from \"./worker-dispatch-scheduler.ts\";\nimport type { WorkerExecutionPlan } from \"./worker-execution-policy.ts\";\nimport type { PendingVerificationRecovery, WorkerLifecycle } from \"./worker-lifecycle.ts\";\nimport { evaluateWorkerRetry } from \"./worker-retry-policy.ts\";\n\nexport type WorkerRecoveryDispatchResult = { started: true } | { started: false; skipReason: string };\n\nexport type WorkerRetryScheduleResult =\n\t| { scheduled: true; record: LaneRecord; retriesUsed: number; notBefore: string }\n\t| { scheduled: false; reason: string };\n\ninterface PendingRetryDispatch {\n\tlaneId: string;\n\tnotBefore: string;\n\trequest: WorkerDelegationRequest;\n\tpriority: boolean;\n\ttimer?: ReturnType<typeof setTimeout>;\n}\n\nexport interface WorkerRecoveryCoordinatorOptions {\n\tlifecycle: WorkerLifecycle;\n\tscheduler: Pick<WorkerDispatchScheduler, \"enqueue\"> &\n\t\tPartial<Pick<WorkerDispatchScheduler, \"onQueueCapacityAvailable\">>;\n\trecoverWriteReservations(): void;\n\tpublishTerminalRecord(record: LaneRecord): void;\n\tpublishTerminalRecords?(records: readonly LaneRecord[]): void;\n\tdispatchVerification(\n\t\trecovery: Extract<PendingVerificationRecovery, { action: \"dispatch\" }>,\n\t): WorkerRecoveryDispatchResult;\n\trecoverTaskBearingMailboxTurns(): void;\n\trecoverSessionRootReplies(): void;\n\t/** Wake the scheduler and UI after a retained retry deadline becomes eligible. */\n\tretryReady?(): void;\n\tnow?(): number;\n\twarn(message: string): void;\n}\n\nfunction restartResumableSuspension(\n\tattempt: AttemptRuntimeState,\n\tnewlySuspendedAttemptIds: ReadonlySet<string>,\n): boolean {\n\treturn (\n\t\tnewlySuspendedAttemptIds.has(attempt.attemptId) ||\n\t\tattempt.reasonCode === \"agent_process_recovered_after_owner_exit\" ||\n\t\tattempt.reasonCode === \"agent_process_interrupted\" ||\n\t\tattempt.reasonCode?.startsWith(\"retry_scheduled:\") === true\n\t);\n}\n\n/**\n * Owns restart-only worker state repair. It has no provider or tool execution authority: it\n * reconstructs bounded durable requests, requeues them through the owner scheduler, and supplies\n * the execution layer with narrow transcript/usage/grant recovery decisions.\n */\nexport class WorkerRecoveryCoordinator {\n\tprivate readonly options: WorkerRecoveryCoordinatorOptions;\n\tprivate queueRecovered = false;\n\tprivate recoveringDurableState = false;\n\tprivate readonly verificationRecoveryFailures = new Map<string, string>();\n\tprivate readonly retryTimers = new Map<string, PendingRetryDispatch>();\n\tprivate readonly unsubscribeQueueCapacity: (() => void) | undefined;\n\n\tconstructor(options: WorkerRecoveryCoordinatorOptions) {\n\t\tthis.options = options;\n\t\tthis.unsubscribeQueueCapacity = options.scheduler.onQueueCapacityAvailable?.(() => {\n\t\t\tthis.flushDueRetries();\n\t\t\t// Mandatory verifier dispatches remain derivable from durable subject state even after the\n\t\t\t// ordinary queue was fully recovered. Every released slot must replay that retained demand.\n\t\t\tthis.recover();\n\t\t});\n\t}\n\n\t/** Idempotently rebuild in-process queues, terminal outboxes, and task-bearing mailboxes. */\n\trecover(): void {\n\t\tif (this.recoveringDurableState) return;\n\t\tthis.recoveringDurableState = true;\n\t\tconst { lifecycle } = this.options;\n\t\ttry {\n\t\t\tif (!this.queueRecovered) {\n\t\t\t\tconst newlySuspendedAttemptIds = new Set(lifecycle.suspendBoundInProcessAttemptsForRestart());\n\t\t\t\ttry {\n\t\t\t\t\tthis.options.recoverWriteReservations();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t`Worker write reservation recovery failed closed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst queued = lifecycle.recoverQueued();\n\t\t\t\tconst snapshot = lifecycle.getTaskRuntimeSnapshot();\n\t\t\t\tfor (const attempt of Object.values(snapshot.attempts)) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tattempt.status !== \"suspended\" ||\n\t\t\t\t\t\t!attempt.agentId ||\n\t\t\t\t\t\tattempt.dispatch.executionKind === \"managed-process\" ||\n\t\t\t\t\t\t!restartResumableSuspension(attempt, newlySuspendedAttemptIds)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst record = lifecycle.getRecord(attempt.taskId);\n\t\t\t\t\tconst task = snapshot.tasks[attempt.taskId]?.task;\n\t\t\t\t\tif (!record || !task) continue;\n\t\t\t\t\tqueued.push({\n\t\t\t\t\t\trecord,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t...(task.verificationOfTaskId ? { verificationOfTaskId: task.verificationOfTaskId } : {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet recoveredAll = true;\n\t\t\t\tfor (const { attempt, record, verificationOfTaskId } of queued) {\n\t\t\t\t\tlet retained: boolean;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tretained = this.enqueueOrDeferRetry(\n\t\t\t\t\t\t\trecord,\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tthis.recoveredRequest(attempt, verificationOfTaskId),\n\t\t\t\t\t\t\tverificationOfTaskId !== undefined,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\trecoveredAll = false;\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Failed to recover queued worker ${record.laneId}; retaining durable dispatch: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (retained) continue;\n\t\t\t\t\trecoveredAll = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.queueRecovered = recoveredAll;\n\t\t\t}\n\n\t\t\tfor (const recovery of lifecycle.getPendingVerificationRecoveries()) {\n\t\t\t\tif (recovery.action === \"reconcile\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.options.publishTerminalRecord(lifecycle.reconcileVerification(recovery));\n\t\t\t\t\t\tthis.verificationRecoveryFailures.delete(recovery.subjectTaskId);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Failed to reconcile recovered verification for ${recovery.subjectTaskId}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet started: WorkerRecoveryDispatchResult;\n\t\t\t\ttry {\n\t\t\t\t\tstarted = this.options.dispatchVerification(recovery);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tconst failureKey = `dispatch_threw:${reason}`;\n\t\t\t\t\tif (this.verificationRecoveryFailures.get(recovery.subjectTaskId) !== failureKey) {\n\t\t\t\t\t\tthis.verificationRecoveryFailures.set(recovery.subjectTaskId, failureKey);\n\t\t\t\t\t\tthis.options.warn(\n\t\t\t\t\t\t\t`Recovered verification for ${recovery.subjectTaskId} threw during dispatch: ${reason}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (started.started) {\n\t\t\t\t\tthis.verificationRecoveryFailures.delete(recovery.subjectTaskId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (this.verificationRecoveryFailures.get(recovery.subjectTaskId) === started.skipReason) continue;\n\t\t\t\tthis.verificationRecoveryFailures.set(recovery.subjectTaskId, started.skipReason);\n\t\t\t\tthis.options.warn(\n\t\t\t\t\t`Recovered verification for ${recovery.subjectTaskId} did not start: ${started.skipReason}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst terminalRecords = lifecycle\n\t\t\t\t.getPendingTerminalNotifications()\n\t\t\t\t.map((notification) => notification.record)\n\t\t\t\t// ManagedLaneController owns tmux projection and durable delivery; replaying it here\n\t\t\t\t// creates a second publisher every time unrelated foreground state triggers recovery.\n\t\t\t\t.filter((record) => record.type !== \"tmux-worker\");\n\t\t\tif (terminalRecords.length > 0) {\n\t\t\t\tif (this.options.publishTerminalRecords) this.options.publishTerminalRecords(terminalRecords);\n\t\t\t\telse for (const record of terminalRecords) this.options.publishTerminalRecord(record);\n\t\t\t}\n\t\t\tthis.options.recoverSessionRootReplies();\n\t\t\tthis.options.recoverTaskBearingMailboxTurns();\n\t\t} finally {\n\t\t\tthis.recoveringDurableState = false;\n\t\t}\n\t}\n\n\t/** Evaluate, persist, and arm one retry through the same durable path used by restart recovery. */\n\tscheduleAttemptRetry(args: {\n\t\tlaneId: string;\n\t\tagentId: string;\n\t\townerId: string;\n\t\trequest: WorkerDelegationRequest;\n\t\toutcome: { laneStatus: string; reasonCode: string; reasonDetail?: string };\n\t\tprovider: string;\n\t\tmaxAttempts?: number;\n\t}): WorkerRetryScheduleResult {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(args.laneId);\n\t\tconst record = this.options.lifecycle.getRecord(args.laneId);\n\t\tif (!attempt || !record) return { scheduled: false, reason: \"attempt_missing\" };\n\t\tconst retriesUsed = attempt.retry?.retriesUsed ?? 0;\n\t\tconst decision = evaluateWorkerRetry({\n\t\t\tlaneStatus: args.outcome.laneStatus,\n\t\t\treasonCode: args.outcome.reasonCode,\n\t\t\t...(args.outcome.reasonDetail ? { reasonDetail: args.outcome.reasonDetail } : {}),\n\t\t\tprovider: args.provider,\n\t\t\tretriesUsed,\n\t\t\t...(args.maxAttempts !== undefined ? { maxAttempts: args.maxAttempts } : {}),\n\t\t});\n\t\tif (!decision.retry) return { scheduled: false, reason: decision.reason };\n\t\tconst nextRetriesUsed = retriesUsed + 1;\n\t\tconst notBefore = new Date(this.now() + decision.delayMs).toISOString();\n\t\tlet suspended: AttemptRuntimeState;\n\t\ttry {\n\t\t\tsuspended = this.options.lifecycle.scheduleAgentRetry({\n\t\t\t\tlaneId: args.laneId,\n\t\t\t\tagentId: args.agentId,\n\t\t\t\townerId: args.ownerId,\n\t\t\t\treasonCode: `retry_scheduled:${decision.reason}`,\n\t\t\t\tretry: { retriesUsed: nextRetriesUsed, notBefore },\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.options.warn(\n\t\t\t\t`Worker ${args.laneId} retry suspension failed; terminalizing instead: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn { scheduled: false, reason: \"retry_suspension_failed\" };\n\t\t}\n\t\tthis.options.warn(\n\t\t\t`Worker ${args.laneId} failed (${decision.reason}); retrying from the persisted transcript in ${Math.ceil(decision.delayMs / 1000)}s (attempt ${nextRetriesUsed + 1}).`,\n\t\t);\n\t\tthis.enqueueOrDeferRetry(record, suspended, args.request, args.request.verificationOfTaskId !== undefined);\n\t\treturn { scheduled: true, record, retriesUsed: nextRetriesUsed, notBefore };\n\t}\n\n\t/** Cancel only process-local alarms; the retained deadline remains authoritative on disk. */\n\tdispose(): void {\n\t\tthis.unsubscribeQueueCapacity?.();\n\t\tfor (const entry of this.retryTimers.values()) {\n\t\t\tif (entry.timer) clearTimeout(entry.timer);\n\t\t}\n\t\tthis.retryTimers.clear();\n\t}\n\n\tclearScheduledRetry(laneId: string): void {\n\t\tfor (const [attemptId, entry] of this.retryTimers) {\n\t\t\tif (entry.laneId !== laneId) continue;\n\t\t\tif (entry.timer) clearTimeout(entry.timer);\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t}\n\t}\n\n\t/** Keep an externally requested wake queued while the durable retry deadline is still retained. */\n\tdeferRetryIfNeeded(record: LaneRecord, request: WorkerDelegationRequest): boolean {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(record.laneId);\n\t\tif (\n\t\t\t!attempt ||\n\t\t\tattempt.status !== \"suspended\" ||\n\t\t\t!attempt.retry ||\n\t\t\tDate.parse(attempt.retry.notBefore) <= this.now()\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.enqueueOrDeferRetry(record, attempt, request, request.verificationOfTaskId !== undefined);\n\t\treturn true;\n\t}\n\n\tprivate enqueueOrDeferRetry(\n\t\trecord: LaneRecord,\n\t\tattempt: AttemptRuntimeState,\n\t\trequest: WorkerDelegationRequest,\n\t\tpriority: boolean,\n\t): boolean {\n\t\tconst retry = attempt.retry;\n\t\tif (!retry) {\n\t\t\ttry {\n\t\t\t\tthis.options.scheduler.enqueue(record, request, true, priority);\n\t\t\t\treturn true;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.message === \"worker_dispatch_queue_full\") return false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst existing = this.retryTimers.get(attempt.attemptId);\n\t\tif (existing?.notBefore === retry.notBefore) return true;\n\t\tif (existing?.timer) clearTimeout(existing.timer);\n\t\tconst entry: PendingRetryDispatch = {\n\t\t\tlaneId: record.laneId,\n\t\t\tnotBefore: retry.notBefore,\n\t\t\trequest,\n\t\t\tpriority,\n\t\t};\n\t\tthis.retryTimers.set(attempt.attemptId, entry);\n\t\tconst remainingMs = Date.parse(retry.notBefore) - this.now();\n\t\tif (remainingMs <= 0) {\n\t\t\tthis.tryEnqueueDueRetry(attempt.attemptId, entry);\n\t\t\treturn true;\n\t\t}\n\t\tconst timer = setTimeout(() => this.onRetryTimer(attempt.attemptId), Math.min(remainingMs, 2_147_000_000));\n\t\tif (typeof timer === \"object\" && \"unref\" in timer) timer.unref();\n\t\tentry.timer = timer;\n\t\treturn true;\n\t}\n\n\tprivate onRetryTimer(attemptId: string): void {\n\t\tconst entry = this.retryTimers.get(attemptId);\n\t\tif (!entry) return;\n\t\tdelete entry.timer;\n\t\tthis.tryEnqueueDueRetry(attemptId, entry);\n\t}\n\n\tprivate tryEnqueueDueRetry(attemptId: string, entry: PendingRetryDispatch): \"enqueued\" | \"full\" | \"stale\" {\n\t\tconst attempt = this.options.lifecycle.getActiveAttempt(entry.laneId);\n\t\tif (\n\t\t\t!attempt ||\n\t\t\tattempt.attemptId !== attemptId ||\n\t\t\tattempt.status !== \"suspended\" ||\n\t\t\tattempt.retry?.notBefore !== entry.notBefore\n\t\t) {\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t\treturn \"stale\";\n\t\t}\n\t\tconst record = this.options.lifecycle.getRecord(entry.laneId);\n\t\tif (!record) {\n\t\t\tthis.retryTimers.delete(attemptId);\n\t\t\treturn \"stale\";\n\t\t}\n\t\tconst remainingMs = Date.parse(entry.notBefore) - this.now();\n\t\tif (remainingMs > 0) {\n\t\t\tconst timer = setTimeout(() => this.onRetryTimer(attemptId), Math.min(remainingMs, 2_147_000_000));\n\t\t\tif (typeof timer === \"object\" && \"unref\" in timer) timer.unref();\n\t\t\tentry.timer = timer;\n\t\t\treturn \"stale\";\n\t\t}\n\t\ttry {\n\t\t\tthis.options.scheduler.enqueue(record, entry.request, true, entry.priority);\n\t\t} catch (error) {\n\t\t\tif (error instanceof Error && error.message === \"worker_dispatch_queue_full\") return \"full\";\n\t\t\tthis.options.warn(\n\t\t\t\t`Worker ${entry.laneId} retry enqueue failed; retaining the durable retry: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t\treturn \"full\";\n\t\t}\n\t\tthis.retryTimers.delete(attemptId);\n\t\tthis.options.retryReady?.();\n\t\treturn \"enqueued\";\n\t}\n\n\tprivate flushDueRetries(): void {\n\t\tfor (const [attemptId, entry] of this.retryTimers) {\n\t\t\tif (entry.timer || Date.parse(entry.notBefore) > this.now()) continue;\n\t\t\tif (this.tryEnqueueDueRetry(attemptId, entry) === \"full\") break;\n\t\t}\n\t}\n\n\tprivate now(): number {\n\t\treturn this.options.now?.() ?? Date.now();\n\t}\n\n\t/** Rebuild task metadata from its durable dispatch; no current profile/model selection is consulted. */\n\trecoveredRequest(attempt: AttemptRuntimeState, verificationOfTaskId?: string): WorkerDelegationRequest {\n\t\tconst task = this.options.lifecycle.getTask(attempt.taskId)?.task;\n\t\tconst durableVerificationOfTaskId = verificationOfTaskId ?? task?.verificationOfTaskId;\n\t\treturn {\n\t\t\tinstructions: attempt.dispatch.instructions,\n\t\t\tprofileId: attempt.dispatch.profileId,\n\t\t\t...(attempt.dispatch.parentAgentId ? { parentAgentId: attempt.dispatch.parentAgentId } : {}),\n\t\t\t...(durableVerificationOfTaskId ? { verificationOfTaskId: durableVerificationOfTaskId } : {}),\n\t\t\t...(task\n\t\t\t\t? {\n\t\t\t\t\t\ttaskContext: {\n\t\t\t\t\t\t\trequirementIds: attempt.dispatch.requirementIds ?? [],\n\t\t\t\t\t\t\tdependsOnTaskIds: task.dependsOn,\n\t\t\t\t\t\t\tacceptanceCriterionIds: task.acceptanceCriterionIds,\n\t\t\t\t\t\t\tresourcePointerIds: attempt.dispatch.resourcePointerIds,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t};\n\t}\n\n\t/** Append deterministic unknown outcomes only for tool calls not durably followed by a result. */\n\trepairInterruptedToolResults(conversation: WorkerConversation): void {\n\t\tconst messages = conversation.getProviderMessages();\n\t\tconst completedToolCallIds = new Set<string>();\n\t\tlet index = messages.length - 1;\n\t\twhile (index >= 0 && messages[index]?.role === \"toolResult\") {\n\t\t\tcompletedToolCallIds.add((messages[index] as Extract<Message, { role: \"toolResult\" }>).toolCallId);\n\t\t\tindex -= 1;\n\t\t}\n\t\tconst assistant = messages[index];\n\t\tif (!assistant || assistant.role !== \"assistant\") return;\n\t\tfor (const content of assistant.content) {\n\t\t\tif (content.type !== \"toolCall\" || completedToolCallIds.has(content.id)) continue;\n\t\t\tconversation.appendMessage({\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: content.id,\n\t\t\t\ttoolName: content.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: \"Execution outcome is unknown because this worker was interrupted before a durable tool result was recorded. Inspect the workspace and prior evidence before deciding whether to retry this operation.\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Return an already-persisted final assistant response so recovery cannot duplicate provider work. */\n\trecoveredTerminalCompletion(\n\t\tconversation: WorkerConversation,\n\t\tattemptId: string,\n\t): { text: string; usage: Usage; stopReason: string } | undefined {\n\t\tconst last = conversation.getLastAttemptMessage(attemptId);\n\t\tif (!last || last.role !== \"assistant\" || last.stopReason === \"error\" || last.stopReason === \"aborted\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (last.content.some((content) => content.type === \"toolCall\")) return undefined;\n\t\tconst text = last.content\n\t\t\t.filter(\n\t\t\t\t(content): content is Extract<(typeof last.content)[number], { type: \"text\" }> => content.type === \"text\",\n\t\t\t)\n\t\t\t.map((content) => content.text)\n\t\t\t.join(\"\");\n\t\treturn { text, usage: last.usage, stopReason: last.stopReason };\n\t}\n\n\t/** Legacy raw transcripts predate durable usage checkpoints; reconstruct their bounded cumulative baseline. */\n\tinitialUsage(\n\t\tconversation: WorkerConversation,\n\t\tcheckpointUsage: AttemptUsageSnapshot | undefined,\n\t\tattemptId: string,\n\t): AttemptUsageSnapshot {\n\t\tconst transcriptUsage = conversation.getRawTranscriptUsage(attemptId);\n\t\treturn checkpointUsage ? reconcileAttemptUsage(checkpointUsage, transcriptUsage) : transcriptUsage;\n\t}\n\n\t/** Fail closed when the current owner profile no longer permits a persisted grant. */\n\tdurableGrantIsStillPermitted(\n\t\tgrant: ExecutionGrant,\n\t\tplan: WorkerExecutionPlan,\n\t\tselectedResources: readonly ResourcePointer[],\n\t): boolean {\n\t\tconst allowedTools = new Set(plan.toolManifests.map((manifest) => manifest.toolName));\n\t\tconst allowedCapabilities = new Set(plan.requiredCapabilities);\n\t\tconst scopesRemainPermitted = (granted: readonly string[], permitted: readonly string[]) =>\n\t\t\tgranted.every((scope) => permitted.some((candidate) => isPathWithinScope(scope, candidate)));\n\t\tconst liveDenialsRemainEnforced = plan.deniedPaths.every((denied) =>\n\t\t\tgrant.deniedPaths.some((granted) => isPathWithinScope(denied, granted)),\n\t\t);\n\t\tconst budgetRemainsPermitted = (Object.keys(plan.budget) as Array<keyof RiskBudget>).every((field) => {\n\t\t\tconst current = plan.budget[field];\n\t\t\tconst persisted = grant.budget[field];\n\t\t\treturn current === undefined || (persisted !== undefined && persisted <= current);\n\t\t});\n\t\tconst resourcesRemainPermitted =\n\t\t\tgrant.resources.length === selectedResources.length &&\n\t\t\tgrant.resources.every((granted, index) => {\n\t\t\t\tconst selected = selectedResources[index];\n\t\t\t\treturn (\n\t\t\t\t\tselected !== undefined &&\n\t\t\t\t\tgranted.id === selected.id &&\n\t\t\t\t\tgranted.kind === selected.kind &&\n\t\t\t\t\tgranted.uri === selected.uri &&\n\t\t\t\t\tgranted.readOnly === selected.readOnly &&\n\t\t\t\t\ttypeof granted.digest === \"string\" &&\n\t\t\t\t\t(selected.digest === undefined || selected.digest === granted.digest) &&\n\t\t\t\t\tgranted.metadata?.name === selected.metadata?.name\n\t\t\t\t);\n\t\t\t});\n\t\treturn (\n\t\t\tgrant.allowedTools.every((toolName) => allowedTools.has(toolName)) &&\n\t\t\tgrant.capabilities.every((capability) => allowedCapabilities.has(capability)) &&\n\t\t\tresourcesRemainPermitted &&\n\t\t\tscopesRemainPermitted(grant.readPaths, plan.readPaths) &&\n\t\t\tscopesRemainPermitted(grant.writePaths, plan.writePaths) &&\n\t\t\tliveDenialsRemainEnforced &&\n\t\t\tbudgetRemainsPermitted\n\t\t);\n\t}\n}\n"]}
@@ -9,7 +9,7 @@ export { buildVerifierSystemPrompt, buildWorkerSystemPrompt, WORKER_LANE_SYSTEM_
9
9
  * Pure execution for one bounded specialist delegation: bounded isolated completion ->
10
10
  * parse -> untrusted `WorkerClaim` -> parent validation via {@link validateWorkerClaim}.
11
11
  *
12
- * The injected completion may be a bounded child tool loop. Its tool surface is built and gated by
12
+ * The injected completion may be a bounded worker tool loop. Its tool surface is built and gated by
13
13
  * the host; this module keeps the structured-output contract and treats every claim as untrusted
14
14
  * until parent validation succeeds.
15
15
  */
@@ -17,9 +17,9 @@ export interface WorkerCompletion {
17
17
  text: string;
18
18
  costUsd: number;
19
19
  stopReason: string;
20
- /** Files successfully changed by the child tool loop before it produced the final JSON. */
20
+ /** Files successfully changed by the worker tool loop before it produced the final JSON. */
21
21
  changedFiles?: readonly string[];
22
- /** Capability refusals or execution failures observed inside the child tool loop. */
22
+ /** Capability refusals or execution failures observed inside the worker tool loop. */
23
23
  blockers?: readonly string[];
24
24
  }
25
25
  export interface WorkerRunnerOptions {
@@ -38,7 +38,7 @@ export interface WorkerRunnerOptions {
38
38
  userPrompt: string;
39
39
  signal: AbortSignal;
40
40
  }) => Promise<WorkerCompletion>;
41
- /** Live successful child-tool mutations, including writes completed before timeout/cancellation. */
41
+ /** Live successful worker-tool mutations, including writes completed before timeout/cancellation. */
42
42
  getChangedFiles?: () => readonly string[];
43
43
  signal?: AbortSignal;
44
44
  now?: () => string;
@@ -48,12 +48,10 @@ export interface WorkerRunnerOptions {
48
48
  applyActions?: (actions: readonly WorkerAction[]) => AppliedActionsReport;
49
49
  /** Enables the constrained direct-argv operator role prompt. */
50
50
  processCapable?: boolean;
51
- /** Enables recursive delegation and orchestration-tree coordination guidance. */
52
- delegationCapable?: boolean;
53
51
  /** Session cwd — the baseline for relative changed-file and envelope paths in parent
54
52
  * validation. Defaults to process.cwd(). */
55
53
  cwd?: string;
56
- /** Turns the child into a read-only semantic verifier for this exact durable task. */
54
+ /** Turns the worker into a read-only semantic verifier for this exact durable task. */
57
55
  verificationSubjectTaskId?: string;
58
56
  }
59
57
  export interface WorkerRunOutcome {
@@ -1 +1 @@
1
- {"version":3,"file":"worker-runner.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-runner.d.ts","sourceRoot":"","sources":["../../../src/core/delegation/worker-runner.ts"],"names":[],"mappings":"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"}
@@ -205,13 +205,10 @@ export async function runWorker(options) {
205
205
  signal: options.signal,
206
206
  execute: (signal) => options.complete({
207
207
  systemPrompt: options.verificationSubjectTaskId
208
- ? buildVerifierSystemPrompt(options.verificationSubjectTaskId, {
209
- delegate: options.delegationCapable === true,
210
- })
208
+ ? buildVerifierSystemPrompt(options.verificationSubjectTaskId)
211
209
  : buildWorkerSystemPrompt({
212
210
  write: writeCapable,
213
211
  process: options.processCapable === true,
214
- delegate: options.delegationCapable === true,
215
212
  }),
216
213
  userPrompt: buildWorkerUserPrompt(options.request),
217
214
  signal,