crewly 1.12.1 → 1.13.1

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 (625) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/chat/chat.controller.js +29 -7
  28. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +1 -1
  31. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  34. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  37. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  39. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  41. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  42. package/dist/backend/backend/src/index.d.ts.map +1 -1
  43. package/dist/backend/backend/src/index.js +20 -0
  44. package/dist/backend/backend/src/index.js.map +1 -1
  45. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  46. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  47. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  48. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  49. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/agent/agent-registration.service.js +33 -1
  51. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +78 -2
  53. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +248 -44
  55. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +51 -3
  57. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +31 -1
  59. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  60. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  61. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +7 -0
  63. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  65. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  67. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  68. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +26 -0
  70. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  71. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +19 -3
  73. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
  74. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  75. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  77. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  79. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  81. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  82. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  83. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  85. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  86. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  87. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  89. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  90. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  91. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  93. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  95. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  98. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  99. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +3 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +21 -10
  102. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  103. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  104. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  105. package/dist/backend/backend/src/types/v2/index.js +1 -1
  106. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  107. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  108. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  109. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  110. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  111. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  112. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  113. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  114. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  115. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  116. package/dist/backend/backend/src/websocket/chat.gateway.js +7 -1
  117. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  118. package/dist/backend/build-info.json +4 -0
  119. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  120. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  121. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  122. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  124. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  126. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  128. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  130. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  132. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  134. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  136. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  138. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  140. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  142. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  144. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  146. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  148. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  150. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  152. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  154. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  156. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  158. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  160. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  162. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  164. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  166. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  168. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  170. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  172. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  174. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  175. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  176. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  178. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  180. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  182. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  183. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  184. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  186. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  187. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  188. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  190. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  191. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  192. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  194. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  195. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  196. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  198. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  200. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  202. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  284. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  286. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  287. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  288. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  290. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  291. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  292. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  294. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  295. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  296. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  298. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  299. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  300. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  302. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  303. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  304. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  306. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  307. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  308. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  310. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  312. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  314. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  316. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  318. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  319. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  320. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  322. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  323. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  324. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  326. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  327. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  328. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  330. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  331. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  332. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  334. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  335. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  336. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  338. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  339. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  340. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  342. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  343. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  344. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/cloud/cloud-client.service.js +7 -0
  346. package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  347. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  348. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  350. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  351. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  352. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  354. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  355. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  356. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  358. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  359. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  360. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  362. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  364. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  366. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  367. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  368. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  370. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  371. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  372. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  374. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  375. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  376. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  378. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  380. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  382. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  383. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  384. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  386. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  388. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  390. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  392. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  394. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  395. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  396. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  398. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  399. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  400. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  402. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  403. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  404. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  406. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  408. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  410. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  411. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  412. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  414. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  416. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  418. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  420. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  422. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  424. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  426. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  427. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  428. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  430. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  431. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  432. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  434. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  436. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  438. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  439. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  440. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  442. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  443. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  444. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  446. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  447. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  448. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  450. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  451. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  452. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  454. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  456. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/index.js +50 -0
  458. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  460. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  462. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  464. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  466. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  468. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  470. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  472. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  474. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  475. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  476. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  478. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  479. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  480. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  482. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  484. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  486. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  487. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  488. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  490. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  491. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  492. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  494. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  495. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  496. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  498. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  500. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  501. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  502. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  503. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  504. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  506. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  508. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  510. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  512. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  514. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  516. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  518. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  519. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  520. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  522. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  524. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  526. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  528. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  529. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  530. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  531. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  532. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  533. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  534. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  535. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  536. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  537. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  538. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  539. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  540. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  541. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  542. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  543. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  544. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  545. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  546. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  547. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  548. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  549. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  550. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  551. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  552. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  553. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  554. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  555. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  556. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  557. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  558. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  559. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  560. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  562. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  564. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  565. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  566. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  567. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  568. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  570. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  571. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  572. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  573. package/dist/cli/backend/src/types/v2/index.js +22 -0
  574. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  575. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  576. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  577. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  578. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  579. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  580. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  581. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  582. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  583. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  584. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  585. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  586. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  587. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  588. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  589. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  590. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  591. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  592. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  593. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  594. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  595. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  596. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  597. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  598. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  599. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  600. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  601. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  602. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  603. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  604. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  605. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  606. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  607. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  608. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  609. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  610. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  611. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  612. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  613. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  614. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  615. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  616. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  617. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  618. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  619. package/package.json +2 -2
  620. package/packages/crewly-agent/src/cli.ts +16 -6
  621. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +311 -33
  622. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +221 -12
  623. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +19 -0
  624. package/packages/crewly-agent/src/runtime/tool-registry.ts +4 -1
  625. package/packages/crewly-agent/src/runtime/types.ts +65 -5
@@ -11,6 +11,7 @@
11
11
  import { PoolStorage } from './pool-storage.js';
12
12
  import { ClaimService, type HeartbeatResult, type ExtendLeaseResult, type ExpiredClaimsSummary } from './claim.service.js';
13
13
  import type { WorkItem, WorkItemStatus, WorkItemType, WorkItemOwner } from '../../types/v2/work-item.types.js';
14
+ import type { WorkItemDisposition } from '../../types/v2/work-item.types.js';
14
15
  import { type TaskClaim } from '../../types/v2/claim.types.js';
15
16
  import type { EventBusService } from '../event-bus/event-bus.service.js';
16
17
  /**
@@ -134,6 +135,21 @@ export interface ClaimResult {
134
135
  * }
135
136
  * ```
136
137
  */
138
+ /**
139
+ * Options for {@link TaskPoolService.releaseBack}.
140
+ */
141
+ export interface ReleaseBackOptions {
142
+ /**
143
+ * When true, clear the item's `target` as well, returning it to the
144
+ * unassigned pool.
145
+ *
146
+ * Defaults to false: a release ends an attempt, it does not revoke an
147
+ * assignment. This must be requested BY NAME so that un-assignment is
148
+ * always a deliberate act by a caller who means it, never a silent
149
+ * side effect of a lease expiring.
150
+ */
151
+ unassign?: boolean;
152
+ }
137
153
  export declare class TaskPoolService {
138
154
  private static instance;
139
155
  private readonly storage;
@@ -379,11 +395,55 @@ export declare class TaskPoolService {
379
395
  *
380
396
  * The item's status reverts to 'queued' and the claim is marked 'released'.
381
397
  *
398
+ * A release is an ADMINISTRATIVE event, not a failure. Two invariants
399
+ * follow, and both were violated before 2026-08-21:
400
+ *
401
+ * 1. **`target` is preserved.** A release says "this attempt ended", not
402
+ * "this work no longer belongs to that agent". Clearing it silently
403
+ * destroyed a deliberate assignment — and because the wake gate admits
404
+ * a worker only when a queued/blocked WI carries `target === their
405
+ * session`, it also made the assigned worker unwakeable for their own
406
+ * work (`wake_gate_no_pool_work`). The sibling failure path,
407
+ * {@link requeueAfterFailure}, already keeps `target` on the far
408
+ * stronger grounds of an actual failure; there is no coherent reading
409
+ * in which a lease lapse un-assigns work that a failure would not.
410
+ * Genuine un-assignment is still possible, but it must be asked for by
411
+ * name via `options.unassign` — never inferred from a lease expiring.
412
+ *
413
+ * One carve-out, and it is not an exception to the rule so much as a
414
+ * sharpening of it: `claimFromPool` stamps `target` on a *broadcast*
415
+ * item to record who picked it up. That stamp is not an assignment,
416
+ * and it is dropped on release (`targetSource === 'claim'`) so the
417
+ * item returns to the broadcast pool. Preserving it would let one
418
+ * claim permanently bind unassigned work to a single agent — and if
419
+ * that agent died, only a dead session could ever re-claim it.
420
+ *
421
+ * 2. **`retryCount` is untouched.** That counter means failures only (see
422
+ * {@link WorkItem.retryCount}); consumers branch on
423
+ * `retryCount < maxRetries` to decide retry-in-place vs terminal-and-
424
+ * escalate. Charging a retry for lease churn drove live work to 3/3
425
+ * with zero failures. Release churn is counted separately in
426
+ * {@link WorkItem.releaseCount}, which nothing branches on.
427
+ *
382
428
  * @param workItemId - ID of the work item to release
383
429
  * @param reason - Why the item is being released
384
- * @throws Error if work item not found or not currently claimed
430
+ * @param options - Release options
431
+ * @param options.unassign - When true, ALSO clear `target`, returning the
432
+ * item to the unassigned pool. Opt-in only, for the case where a caller
433
+ * genuinely means "someone else should take this". Defaults to false.
434
+ * @throws Error if work item not found, or its status is not
435
+ * 'running' or 'blocked'
436
+ *
437
+ * @example
438
+ * ```typescript
439
+ * // Lease lapsed / claim revoked — the owner keeps the work.
440
+ * await pool.releaseBack(id, 'claim revoked: grace exceeded');
441
+ *
442
+ * // Deliberate hand-back — anyone may pick this up.
443
+ * await pool.releaseBack(id, 'agent declined', { unassign: true });
444
+ * ```
385
445
  */
386
- releaseBack(workItemId: string, reason: string): Promise<void>;
446
+ releaseBack(workItemId: string, reason: string, options?: ReleaseBackOptions): Promise<void>;
387
447
  /**
388
448
  * Decide whether a WorkItem requires TL verification before reaching a
389
449
  * terminal-success status.
@@ -406,15 +466,32 @@ export declare class TaskPoolService {
406
466
  */
407
467
  private requiresVerification;
408
468
  /**
409
- * Internal: release the active claim on a WorkItem (if any). Shared by
410
- * `completeSimpleItem` and `submitForVerification` because both
469
+ * Release the active claim on a WorkItem, if it has one.
470
+ *
471
+ * Shared by `completeSimpleItem` and `submitForVerification` because both
411
472
  * represent the worker handing the item back to the system.
412
473
  *
474
+ * Also public for callers that must drive a terminal transition
475
+ * themselves rather than through {@link failItem}. The SLA orphan-close
476
+ * path is the live example: it targets `cancelled`, `failed` OR
477
+ * `rejected` depending on the origin status, so `failItem` — which always
478
+ * transitions to `failed` — cannot serve it. Such callers MUST call this,
479
+ * otherwise the claim stays `active` against a terminal WorkItem and
480
+ * quietly wedges the claiming agent. The mechanism is not an error, which
481
+ * is what makes it hard to spot: {@link claimFromPool} checks
482
+ * `findActiveClaimByAgent` BEFORE it scans the pool, and short-circuits by
483
+ * returning the held claim with `alreadyHeld: true` (issue #513). So the
484
+ * agent is handed the same terminal item on every poll and never sees the
485
+ * queued work waiting for them, until the lease/grace ladder revokes it.
486
+ *
487
+ * Idempotent: a no-op when no active claim exists.
488
+ *
413
489
  * @param workItemId - WorkItem whose claim should be released
414
- * @param endReason - Reason recorded on the claim (`completed` /
415
- * `submitted_for_verification`) for auditability
490
+ * @param endReason - Reason recorded on the claim (`completed`,
491
+ * `submitted_for_verification`, `sla escalation timeout ...`) for
492
+ * auditability
416
493
  */
417
- private releaseClaim;
494
+ releaseClaim(workItemId: string, endReason: string): Promise<void>;
418
495
  /**
419
496
  * Worker reports a delegated WorkItem as done and submits it for TL
420
497
  * verification.
@@ -559,6 +636,74 @@ export declare class TaskPoolService {
559
636
  * @throws if the WI doesn't exist or isn't in `failed` status
560
637
  */
561
638
  requeueAfterFailure(workItemId: string, reason: string): Promise<void>;
639
+ /**
640
+ * Decide and record how a stranded WorkItem is dealt with — the single
641
+ * funnel every `rejected`/`failed` writer must route through.
642
+ *
643
+ * `rejected` and `failed` are the only two statuses that are neither
644
+ * terminal nor able to reach a terminal state: their sole outbound edge is
645
+ * `→ queued`. An item parked in either is finished as far as every consumer
646
+ * is concerned (see `SLA_TERMINAL_WORK_ITEM_STATUSES`) and unfinished as far
647
+ * as the state machine is concerned, and until this funnel existed nothing
648
+ * owned closing that gap. Items written there by a path that did not itself
649
+ * arrange a successor simply stopped, permanently and — since PR #733
650
+ * correctly stopped the pruning rules emitting illegal corrections for them
651
+ * — silently.
652
+ *
653
+ * Exactly one of three things happens, and the choice is recorded rather
654
+ * than left to be re-derived later by scanning other WorkItems:
655
+ *
656
+ * 1. **retried in place** — `failed` with retry budget left. The item goes
657
+ * back on the queue via {@link requeueAfterFailure}, which bumps
658
+ * `retryCount`. Deliberately NOT stamped: the item has left the stranding
659
+ * statuses under its own power, and a stamp would be a claim about a
660
+ * failure that is no longer the current one.
661
+ * 2. **succeeded by another item** — the caller already created a successor
662
+ * (the `EventToWorkItemBridge` retry/escalation WorkItem). Stamped with
663
+ * its id.
664
+ * 3. **terminal** — budget spent, or a status with no retry path. Stamped,
665
+ * and escalated so a human or the orchestrator renders the verdict. This
666
+ * is the "deliberate terminal state with an audit record" case: the item
667
+ * stays in `rejected`/`failed` by design, because the alternative —
668
+ * adding `→ cancelled` edges — would re-open the illegal-correction
669
+ * surface #733 closed and turn a deliberate decision into a 24h default.
670
+ *
671
+ * Idempotent and re-entrant: an already-disposed item is returned unchanged,
672
+ * so concurrent reconciler passes converge and the safety-net rule cannot
673
+ * fire twice on the same strand. Terminating: the only branch that repeats
674
+ * is (1), and it bumps `retryCount`, so it can run at most `maxRetries`
675
+ * times before (3) becomes the only reachable outcome.
676
+ *
677
+ * @param workItemId - The stranded WorkItem.
678
+ * @param options - `reason` is carried into the audit record and the
679
+ * escalation. `actor` defaults to `'system'`.
680
+ * `successorWorkItemId` selects outcome (2) when the
681
+ * caller owns a real successor.
682
+ * @returns The recorded disposition, or `null` when there was nothing to do
683
+ * (item missing, or not in a stranding status).
684
+ *
685
+ * @example
686
+ * ```typescript
687
+ * await pool.disposeFailedWorkItem(wi.id, { reason: 'SLA escalation timeout' });
688
+ * ```
689
+ */
690
+ disposeFailedWorkItem(workItemId: string, options: {
691
+ reason: string;
692
+ actor?: WorkItemOwner;
693
+ successorWorkItemId?: string;
694
+ }): Promise<WorkItemDisposition | null>;
695
+ /**
696
+ * Persist a disposition record onto a WorkItem's metadata.
697
+ *
698
+ * Writes metadata only — no status transition — so it is safe to call on an
699
+ * item whose status has no legal outbound edge, which is precisely the
700
+ * situation a `terminal` disposition describes.
701
+ *
702
+ * @param workItemId - WorkItem to stamp.
703
+ * @param disposition - The record to write.
704
+ * @returns The disposition as written.
705
+ */
706
+ private stampDisposition;
562
707
  /**
563
708
  * Processes a heartbeat from an agent for their active claim.
564
709
  *
@@ -1 +1 @@
1
- {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG3H,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE;AAMD,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oCAAoC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAY7E;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,0CAA0C;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IAEvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,cAAc,CAAuC;IAE7D;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,OAAO,CAAC,aAAa,CAAwD;IAE7E;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAoC;gBAE1C,OAAO,CAAC,EAAE,WAAW;IAMjC;;;;;;;OAOG;IACH,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAIrD;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAI3D;;;;;;;;;OASG;IACH,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAI7E;;;OAGG;IACH,OAAO,CAAC,aAAa;IASrB;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;;OAUG;IACG,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDlD;;;;;;;;;;;;;OAaG;YACW,qBAAqB;IA0BnC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,qBAAqB;IA4C7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,uBAAuB;IA4C/B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,mBAAmB;IAgC3B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;;;;;;;;OASG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAyI9B;;;;;;;;OAQG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsEzF;;;;;;;;OAQG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CpE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;;;;OAQG;YACW,YAAY;IAU1B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA6B3B;;;;;;;;;;;;;;;;;;;OAmBG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA4D3B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,UAAU,GAAG,UAAU,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA6B3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;;;OAQG;IACG,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoClE;;;;;;OAMG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChE;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BrE;;;;;;;;;;;;;;;;;;OAkBG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD5E;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ3E;;;;;;OAMG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ/E;;;;;OAKG;IACG,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIpE;;;;;;;OAOG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAI3C;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtE;;;;OAIG;IACH,eAAe,IAAI,YAAY;IAQ/B;;;;OAIG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAgD5C;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAcnE;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIxC;;;;;;;;;;;;OAYG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAIhE;;;;;;;;;;OAUG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQ3B;;;;;;;;;;;;;;;OAeG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAyB3B;;;;;;;;;;;OAWG;IACG,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiB3B;;;;;OAKG;IACG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;;;;;;;;;;;OAYG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAgDhC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAI7C;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,cAAc,EACzB,SAAS,GAAE,aAAwB;IACnC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAiGhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,aAAa,EACxB,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI;IAChC;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA4H3B;;;;;;;;;OASG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;OAIG;IACH,UAAU,IAAI,WAAW;CAG1B"}
1
+ {"version":3,"file":"task-pool.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/task-pool.service.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ import { PoolStorage } from './pool-storage.js';
12
12
  import { ClaimService } from './claim.service.js';
13
13
  import { LoggerService } from '../core/logger.service.js';
14
14
  import { formatError } from '../../utils/format-error.js';
15
- import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted } from '../../types/v2/work-item.types.js';
15
+ import { isWorkItem, isValidWorkItemTransition, isTransitionPermitted, LAST_REQUEUED_AT_METADATA_KEY, DISPOSITION_METADATA_KEY, DISPOSITION_REQUIRED_STATUSES, getWorkItemDisposition, } from '../../types/v2/work-item.types.js';
16
16
  import { createTaskClaim, } from '../../types/v2/claim.types.js';
17
17
  /**
18
18
  * Structured error thrown by {@link TaskPoolService.removeFromPool}
@@ -33,30 +33,6 @@ export class WorkItemClaimedError extends Error {
33
33
  Object.setPrototypeOf(this, WorkItemClaimedError.prototype);
34
34
  }
35
35
  }
36
- // ---------------------------------------------------------------------------
37
- // Service
38
- // ---------------------------------------------------------------------------
39
- /**
40
- * TaskPoolService manages the lifecycle of execution-ready WorkItems.
41
- *
42
- * Core operations:
43
- * - {@link addToPool} — enqueue an execution-ready WorkItem
44
- * - {@link claimFromPool} — agent claims the next available item
45
- * - {@link releaseBack} — release a claimed item back to the pool
46
- * - {@link getPoolStatus} — snapshot of pool statistics
47
- *
48
- * @example
49
- * ```typescript
50
- * const pool = TaskPoolService.getInstance();
51
- * pool.addToPool(workItem);
52
- * const result = pool.claimFromPool('agent-leo', { types: ['delegate'] });
53
- * if (result) {
54
- * // agent works on result.workItem
55
- * // when done:
56
- * pool.completeItem(result.workItem.id);
57
- * }
58
- * ```
59
- */
60
36
  export class TaskPoolService {
61
37
  static instance = null;
62
38
  storage;
@@ -613,7 +589,12 @@ export class TaskPoolService {
613
589
  // refuse to overwrite a non-matching existing target.
614
590
  const claimedItem = await this.transitionStatus(selected.id, 'running', 'system', (wi) => {
615
591
  if (!wi.target) {
592
+ // Broadcast claim: record that this target is an incidental
593
+ // claim stamp, not a deliberate assignment, so releaseBack
594
+ // returns the item to the broadcast pool instead of binding
595
+ // it to this agent forever.
616
596
  wi.target = agentId;
597
+ wi.targetSource = 'claim';
617
598
  }
618
599
  // else: target already === agentId per the filter; leave as-is.
619
600
  });
@@ -696,7 +677,10 @@ export class TaskPoolService {
696
677
  // undefined; never overwrite an existing target.
697
678
  const claimedItem = await this.transitionStatus(workItemId, 'running', 'system', (wi) => {
698
679
  if (!wi.target) {
680
+ // Broadcast claim — see claimFromPool: this is a claim stamp,
681
+ // not an assignment.
699
682
  wi.target = agentId;
683
+ wi.targetSource = 'claim';
700
684
  }
701
685
  });
702
686
  if (!claimedItem)
@@ -714,11 +698,55 @@ export class TaskPoolService {
714
698
  *
715
699
  * The item's status reverts to 'queued' and the claim is marked 'released'.
716
700
  *
701
+ * A release is an ADMINISTRATIVE event, not a failure. Two invariants
702
+ * follow, and both were violated before 2026-08-21:
703
+ *
704
+ * 1. **`target` is preserved.** A release says "this attempt ended", not
705
+ * "this work no longer belongs to that agent". Clearing it silently
706
+ * destroyed a deliberate assignment — and because the wake gate admits
707
+ * a worker only when a queued/blocked WI carries `target === their
708
+ * session`, it also made the assigned worker unwakeable for their own
709
+ * work (`wake_gate_no_pool_work`). The sibling failure path,
710
+ * {@link requeueAfterFailure}, already keeps `target` on the far
711
+ * stronger grounds of an actual failure; there is no coherent reading
712
+ * in which a lease lapse un-assigns work that a failure would not.
713
+ * Genuine un-assignment is still possible, but it must be asked for by
714
+ * name via `options.unassign` — never inferred from a lease expiring.
715
+ *
716
+ * One carve-out, and it is not an exception to the rule so much as a
717
+ * sharpening of it: `claimFromPool` stamps `target` on a *broadcast*
718
+ * item to record who picked it up. That stamp is not an assignment,
719
+ * and it is dropped on release (`targetSource === 'claim'`) so the
720
+ * item returns to the broadcast pool. Preserving it would let one
721
+ * claim permanently bind unassigned work to a single agent — and if
722
+ * that agent died, only a dead session could ever re-claim it.
723
+ *
724
+ * 2. **`retryCount` is untouched.** That counter means failures only (see
725
+ * {@link WorkItem.retryCount}); consumers branch on
726
+ * `retryCount < maxRetries` to decide retry-in-place vs terminal-and-
727
+ * escalate. Charging a retry for lease churn drove live work to 3/3
728
+ * with zero failures. Release churn is counted separately in
729
+ * {@link WorkItem.releaseCount}, which nothing branches on.
730
+ *
717
731
  * @param workItemId - ID of the work item to release
718
732
  * @param reason - Why the item is being released
719
- * @throws Error if work item not found or not currently claimed
733
+ * @param options - Release options
734
+ * @param options.unassign - When true, ALSO clear `target`, returning the
735
+ * item to the unassigned pool. Opt-in only, for the case where a caller
736
+ * genuinely means "someone else should take this". Defaults to false.
737
+ * @throws Error if work item not found, or its status is not
738
+ * 'running' or 'blocked'
739
+ *
740
+ * @example
741
+ * ```typescript
742
+ * // Lease lapsed / claim revoked — the owner keeps the work.
743
+ * await pool.releaseBack(id, 'claim revoked: grace exceeded');
744
+ *
745
+ * // Deliberate hand-back — anyone may pick this up.
746
+ * await pool.releaseBack(id, 'agent declined', { unassign: true });
747
+ * ```
720
748
  */
721
- async releaseBack(workItemId, reason) {
749
+ async releaseBack(workItemId, reason, options = {}) {
722
750
  const workItem = await this.storage.findWorkItem(workItemId);
723
751
  if (!workItem) {
724
752
  throw new Error(`WorkItem not found: ${workItemId}`);
@@ -739,21 +767,31 @@ export class TaskPoolService {
739
767
  // guarded transitionStatus helper. The state-machine entry for
740
768
  // `running → queued` is a TRANS-2 addition, gated to system/TL/orc;
741
769
  // `blocked → queued` was already TL/orc/system-gated by TRANS-1.
742
- // Side-effect mutations (startedAt clear, target preservation when
743
- // unblocking, retryCount bump) move into the atomic mutator.
744
- const wasBlocked = workItem.status === 'blocked';
770
+ // Side-effect mutations (startedAt clear, opt-in target clear,
771
+ // releaseCount bump) move into the atomic mutator.
772
+ //
773
+ // `target` survives every release; only an explicit `unassign` clears
774
+ // it. `retryCount` is NOT touched here — a release is not a failure —
775
+ // and release churn is recorded in `releaseCount` instead.
776
+ const unassign = options.unassign === true;
745
777
  await this.transitionStatus(workItemId, 'queued', 'system', (wi) => {
746
778
  wi.startedAt = undefined;
747
- if (!wasBlocked) {
779
+ // Drop the target only when the caller explicitly asked, or when the
780
+ // target was never an assignment in the first place — a broadcast
781
+ // item stamped by whoever happened to claim it belongs back in the
782
+ // broadcast pool, not bound to that agent.
783
+ if (unassign || wi.targetSource === 'claim') {
748
784
  wi.target = undefined;
785
+ wi.targetSource = undefined;
749
786
  }
750
- wi.retryCount += 1;
787
+ wi.releaseCount = (wi.releaseCount ?? 0) + 1;
751
788
  });
752
789
  await this.storage.flush();
753
790
  this.logger.info('WorkItem released back to pool', {
754
791
  workItemId,
755
792
  reason,
756
793
  claimId: claim?.id,
794
+ unassigned: unassign,
757
795
  });
758
796
  }
759
797
  /**
@@ -785,13 +823,30 @@ export class TaskPoolService {
785
823
  return wi.type === 'delegate';
786
824
  }
787
825
  /**
788
- * Internal: release the active claim on a WorkItem (if any). Shared by
789
- * `completeSimpleItem` and `submitForVerification` because both
826
+ * Release the active claim on a WorkItem, if it has one.
827
+ *
828
+ * Shared by `completeSimpleItem` and `submitForVerification` because both
790
829
  * represent the worker handing the item back to the system.
791
830
  *
831
+ * Also public for callers that must drive a terminal transition
832
+ * themselves rather than through {@link failItem}. The SLA orphan-close
833
+ * path is the live example: it targets `cancelled`, `failed` OR
834
+ * `rejected` depending on the origin status, so `failItem` — which always
835
+ * transitions to `failed` — cannot serve it. Such callers MUST call this,
836
+ * otherwise the claim stays `active` against a terminal WorkItem and
837
+ * quietly wedges the claiming agent. The mechanism is not an error, which
838
+ * is what makes it hard to spot: {@link claimFromPool} checks
839
+ * `findActiveClaimByAgent` BEFORE it scans the pool, and short-circuits by
840
+ * returning the held claim with `alreadyHeld: true` (issue #513). So the
841
+ * agent is handed the same terminal item on every poll and never sees the
842
+ * queued work waiting for them, until the lease/grace ladder revokes it.
843
+ *
844
+ * Idempotent: a no-op when no active claim exists.
845
+ *
792
846
  * @param workItemId - WorkItem whose claim should be released
793
- * @param endReason - Reason recorded on the claim (`completed` /
794
- * `submitted_for_verification`) for auditability
847
+ * @param endReason - Reason recorded on the claim (`completed`,
848
+ * `submitted_for_verification`, `sla escalation timeout ...`) for
849
+ * auditability
795
850
  */
796
851
  async releaseClaim(workItemId, endReason) {
797
852
  const claim = await this.storage.findActiveClaimByWorkItem(workItemId);
@@ -1158,7 +1213,20 @@ export class TaskPoolService {
1158
1213
  lastFailureReason: reason,
1159
1214
  lastFailureAt: now,
1160
1215
  retryAttempt: wi.retryCount,
1216
+ // TTL anchor (see getTtlAnchorAt). The age-based expiry rules must
1217
+ // measure this retry's window from HERE, not from the original
1218
+ // `createdAt` — otherwise a WorkItem that failed after the 24h TTL is
1219
+ // TTL-cancelled on the next reconciler pass, silently destroying the
1220
+ // retry we just granted. `createdAt` is deliberately left untouched so
1221
+ // it keeps meaning "when this work was first asked for".
1222
+ [LAST_REQUEUED_AT_METADATA_KEY]: now,
1161
1223
  };
1224
+ // A disposition describes how a PAST failure was dealt with. This item
1225
+ // is back in play, so any existing stamp is history and must not be
1226
+ // allowed to outlive the failure it described — otherwise the
1227
+ // safety-net rule would read a stale stamp and skip the item the next
1228
+ // time it strands. See DISPOSITION_METADATA_KEY.
1229
+ delete wi.metadata[DISPOSITION_METADATA_KEY];
1162
1230
  // Clear the error field so a successful retry doesn't surface a
1163
1231
  // stale error message; the metadata above keeps the history.
1164
1232
  wi.error = undefined;
@@ -1171,6 +1239,167 @@ export class TaskPoolService {
1171
1239
  reason,
1172
1240
  });
1173
1241
  }
1242
+ /**
1243
+ * Decide and record how a stranded WorkItem is dealt with — the single
1244
+ * funnel every `rejected`/`failed` writer must route through.
1245
+ *
1246
+ * `rejected` and `failed` are the only two statuses that are neither
1247
+ * terminal nor able to reach a terminal state: their sole outbound edge is
1248
+ * `→ queued`. An item parked in either is finished as far as every consumer
1249
+ * is concerned (see `SLA_TERMINAL_WORK_ITEM_STATUSES`) and unfinished as far
1250
+ * as the state machine is concerned, and until this funnel existed nothing
1251
+ * owned closing that gap. Items written there by a path that did not itself
1252
+ * arrange a successor simply stopped, permanently and — since PR #733
1253
+ * correctly stopped the pruning rules emitting illegal corrections for them
1254
+ * — silently.
1255
+ *
1256
+ * Exactly one of three things happens, and the choice is recorded rather
1257
+ * than left to be re-derived later by scanning other WorkItems:
1258
+ *
1259
+ * 1. **retried in place** — `failed` with retry budget left. The item goes
1260
+ * back on the queue via {@link requeueAfterFailure}, which bumps
1261
+ * `retryCount`. Deliberately NOT stamped: the item has left the stranding
1262
+ * statuses under its own power, and a stamp would be a claim about a
1263
+ * failure that is no longer the current one.
1264
+ * 2. **succeeded by another item** — the caller already created a successor
1265
+ * (the `EventToWorkItemBridge` retry/escalation WorkItem). Stamped with
1266
+ * its id.
1267
+ * 3. **terminal** — budget spent, or a status with no retry path. Stamped,
1268
+ * and escalated so a human or the orchestrator renders the verdict. This
1269
+ * is the "deliberate terminal state with an audit record" case: the item
1270
+ * stays in `rejected`/`failed` by design, because the alternative —
1271
+ * adding `→ cancelled` edges — would re-open the illegal-correction
1272
+ * surface #733 closed and turn a deliberate decision into a 24h default.
1273
+ *
1274
+ * Idempotent and re-entrant: an already-disposed item is returned unchanged,
1275
+ * so concurrent reconciler passes converge and the safety-net rule cannot
1276
+ * fire twice on the same strand. Terminating: the only branch that repeats
1277
+ * is (1), and it bumps `retryCount`, so it can run at most `maxRetries`
1278
+ * times before (3) becomes the only reachable outcome.
1279
+ *
1280
+ * @param workItemId - The stranded WorkItem.
1281
+ * @param options - `reason` is carried into the audit record and the
1282
+ * escalation. `actor` defaults to `'system'`.
1283
+ * `successorWorkItemId` selects outcome (2) when the
1284
+ * caller owns a real successor.
1285
+ * @returns The recorded disposition, or `null` when there was nothing to do
1286
+ * (item missing, or not in a stranding status).
1287
+ *
1288
+ * @example
1289
+ * ```typescript
1290
+ * await pool.disposeFailedWorkItem(wi.id, { reason: 'SLA escalation timeout' });
1291
+ * ```
1292
+ */
1293
+ async disposeFailedWorkItem(workItemId, options) {
1294
+ const { reason, actor = 'system', successorWorkItemId } = options;
1295
+ const workItem = await this.storage.findWorkItem(workItemId);
1296
+ if (!workItem)
1297
+ return null;
1298
+ // Only the stranding statuses need a disposition. Anything else is either
1299
+ // still in play or already strictly terminal.
1300
+ if (!DISPOSITION_REQUIRED_STATUSES.has(workItem.status))
1301
+ return null;
1302
+ // Idempotency: the stamp IS the key. Two passes converge here.
1303
+ const existing = getWorkItemDisposition(workItem);
1304
+ if (existing)
1305
+ return existing;
1306
+ const now = new Date().toISOString();
1307
+ // (2) The caller owns a real successor — record it and stop.
1308
+ if (successorWorkItemId) {
1309
+ return this.stampDisposition(workItemId, {
1310
+ kind: 'succeeded_by',
1311
+ at: now,
1312
+ by: actor,
1313
+ reason,
1314
+ successorWorkItemId,
1315
+ });
1316
+ }
1317
+ // (1) Retry in place. Only `failed` has a retry path — `rejected` reaches
1318
+ // `queued` too, but re-running work a reviewer rejected without a fresh
1319
+ // verdict would re-execute exactly what was turned down.
1320
+ // `retryCount` is FAILURES ONLY — this branch is load-bearing on that
1321
+ // semantic, not incidentally coupled to it. Reading a churn-inflated count
1322
+ // here would send work that never failed straight to `terminal`.
1323
+ //
1324
+ // That is an invariant rather than an assumption as of #739: `releaseBack`
1325
+ // used to bump `retryCount` on every lease lapse, so a worker who simply
1326
+ // stopped heartbeating was charged a failure. Release churn now goes to
1327
+ // {@link WorkItem.releaseCount}, which nothing branches on. Keep it that
1328
+ // way — if a future change makes anything other than a failure move
1329
+ // `retryCount`, this branch silently starts terminating live work, and a
1330
+ // second counter here would hide that rather than surface it.
1331
+ if (workItem.status === 'failed' && workItem.retryCount < workItem.maxRetries) {
1332
+ await this.requeueAfterFailure(workItemId, reason);
1333
+ this.logger.info('Stranded WorkItem retried in place', {
1334
+ workItemId,
1335
+ retryCount: workItem.retryCount + 1,
1336
+ maxRetries: workItem.maxRetries,
1337
+ reason,
1338
+ });
1339
+ // Not stamped — see the doc comment. The item is queued again, and the
1340
+ // requeue itself is the audit record (metadata.failureHistory).
1341
+ return {
1342
+ kind: 'retried_in_place',
1343
+ at: now,
1344
+ by: actor,
1345
+ reason,
1346
+ };
1347
+ }
1348
+ // (3) Terminal. Escalate for the verdict, then stamp — in that order, so a
1349
+ // failed escalation cannot leave a stamp claiming an escalation happened.
1350
+ let escalationId;
1351
+ try {
1352
+ const { EscalationRouterService } = await import('../v3/escalation-router.service.js');
1353
+ escalationId =
1354
+ (await EscalationRouterService.getInstance().escalateFailedWorkItem(workItem, reason)) ?? undefined;
1355
+ }
1356
+ catch (err) {
1357
+ // Best-effort, matching every other escalation call site: a messaging
1358
+ // blip must not leave the item stranded a second time. The stamp is
1359
+ // still written, without an escalationId, so the gap is visible in the
1360
+ // audit record rather than hidden by a retry loop.
1361
+ this.logger.warn('escalateFailedWorkItem threw during disposition (non-fatal)', {
1362
+ workItemId,
1363
+ error: err instanceof Error ? err.message : String(err),
1364
+ });
1365
+ }
1366
+ return this.stampDisposition(workItemId, {
1367
+ kind: 'terminal',
1368
+ at: now,
1369
+ by: actor,
1370
+ reason,
1371
+ escalationId,
1372
+ });
1373
+ }
1374
+ /**
1375
+ * Persist a disposition record onto a WorkItem's metadata.
1376
+ *
1377
+ * Writes metadata only — no status transition — so it is safe to call on an
1378
+ * item whose status has no legal outbound edge, which is precisely the
1379
+ * situation a `terminal` disposition describes.
1380
+ *
1381
+ * @param workItemId - WorkItem to stamp.
1382
+ * @param disposition - The record to write.
1383
+ * @returns The disposition as written.
1384
+ */
1385
+ async stampDisposition(workItemId, disposition) {
1386
+ const workItem = await this.storage.findWorkItem(workItemId);
1387
+ if (workItem) {
1388
+ workItem.metadata = {
1389
+ ...(workItem.metadata ?? {}),
1390
+ [DISPOSITION_METADATA_KEY]: disposition,
1391
+ };
1392
+ await this.storage.flush();
1393
+ }
1394
+ this.logger.info('WorkItem disposition recorded', {
1395
+ workItemId,
1396
+ kind: disposition.kind,
1397
+ successorWorkItemId: disposition.successorWorkItemId,
1398
+ escalationId: disposition.escalationId,
1399
+ reason: disposition.reason,
1400
+ });
1401
+ return disposition;
1402
+ }
1174
1403
  // -----------------------------------------------------------------------
1175
1404
  // Claim Lifecycle (delegated to ClaimService)
1176
1405
  // -----------------------------------------------------------------------
@@ -1394,6 +1623,9 @@ export class TaskPoolService {
1394
1623
  const handoffNote = `[HANDOFF] ${fromAgent} → ${newTarget}: ${reason || '(no reason)'}`;
1395
1624
  await this.storage.updateWorkItem(workItemId, (item) => {
1396
1625
  item.target = newTarget;
1626
+ // An explicit handoff is a deliberate assignment: it must survive a
1627
+ // later release.
1628
+ item.targetSource = 'assigned';
1397
1629
  const existing = (item.metadata && typeof item.metadata === 'object' ? item.metadata : {});
1398
1630
  const notes = Array.isArray(existing.notes) ? existing.notes : [];
1399
1631
  notes.push(`${new Date().toISOString()} ${handoffNote}`);