crewly 1.20.153 → 1.20.155

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 (773) hide show
  1. package/README.md +21 -3
  2. package/config/constants.ts +78 -0
  3. package/config/hooks/agent-status/report.sh +78 -0
  4. package/config/hooks/control-plane-guard/pretooluse-bash.sh +241 -0
  5. package/config/orchestrator_tasks/prompts/assign-task-orchestrator-prompt-template.md +19 -49
  6. package/config/orchestrator_tasks/prompts/checkin-orchestrator-prompt-template.md +25 -125
  7. package/config/orchestrator_tasks/prompts/project-start-orchestrator-prompt-template.md +29 -100
  8. package/config/roles/orchestrator/prompt.md +18 -2
  9. package/config/roles/team-leader/prompt.md +13 -3
  10. package/config/roles/team-leader/role.json +1 -1
  11. package/config/roles/team-leader/tl-addon.md +12 -3
  12. package/config/skills/agent/core/complete-task/SKILL.md +1 -1
  13. package/config/skills/agent/core/project-tickets/SKILL.md +127 -0
  14. package/config/skills/agent/core/project-tickets/execute.sh +182 -0
  15. package/config/skills/agent/core/project-tickets/execute.test.sh +116 -0
  16. package/config/skills/agent/core/recall/SKILL.md +1 -1
  17. package/config/skills/agent/core/recall/execute.sh +7 -0
  18. package/config/skills/agent/core/report-status/SKILL.md +3 -2
  19. package/config/skills/agent/core/report-status/execute.sh +37 -15
  20. package/config/skills/agent/core/split-ticket/SKILL.md +62 -0
  21. package/config/skills/agent/core/split-ticket/execute.sh +87 -0
  22. package/config/skills/agent/core/split-ticket/execute.test.sh +77 -0
  23. package/config/skills/agent/core/standing-update/SKILL.md +96 -0
  24. package/config/skills/agent/core/standing-update/execute.sh +107 -0
  25. package/config/skills/agent/onboarding/materialize-team/SKILL.md +1 -1
  26. package/config/skills/agent/onboarding/recommend-team/SKILL.md +1 -1
  27. package/config/skills/orchestrator/delegate-task/SKILL.md +4 -3
  28. package/config/skills/orchestrator/render-verdict/SKILL.md +62 -0
  29. package/config/skills/orchestrator/render-verdict/execute.sh +47 -0
  30. package/config/skills/orchestrator/render-verdict/execute.test.sh +121 -0
  31. package/config/skills/orchestrator/wiki-migrate/SKILL.md +0 -1
  32. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  33. package/config/skills/team-leader/assign-ticket/SKILL.md +47 -0
  34. package/config/skills/team-leader/assign-ticket/execute.sh +59 -0
  35. package/config/skills/team-leader/assign-ticket/execute.test.sh +64 -0
  36. package/config/skills/team-leader/decompose-goal/SKILL.md +4 -4
  37. package/config/skills/team-leader/delegate-task/SKILL.md +1 -1
  38. package/config/skills/team-leader/delegate-task/execute.sh +17 -4
  39. package/config/skills/team-leader/verify-output/SKILL.md +2 -2
  40. package/config/sops/developer/git-workflow.md +1 -1
  41. package/dist/backend/backend/src/constants.d.ts +397 -1
  42. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  43. package/dist/backend/backend/src/constants.js +388 -2
  44. package/dist/backend/backend/src/constants.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +27 -0
  46. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -0
  47. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +55 -0
  48. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -0
  49. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts +13 -0
  50. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts.map +1 -0
  51. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js +19 -0
  52. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js.map +1 -0
  53. package/dist/backend/backend/src/controllers/api.controller.d.ts +0 -12
  54. package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -1
  55. package/dist/backend/backend/src/controllers/api.controller.js +0 -44
  56. package/dist/backend/backend/src/controllers/api.controller.js.map +1 -1
  57. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +27 -5
  58. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
  59. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +55 -15
  60. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
  61. package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -1
  62. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +2 -0
  63. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -1
  64. package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts +13 -0
  65. package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts.map +1 -1
  66. package/dist/backend/backend/src/controllers/expert/expert.controller.js +67 -9
  67. package/dist/backend/backend/src/controllers/expert/expert.controller.js.map +1 -1
  68. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +32 -0
  69. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  70. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +122 -8
  71. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  72. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts +41 -0
  73. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -0
  74. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +146 -0
  75. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -0
  76. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts +20 -0
  77. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts.map +1 -0
  78. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js +29 -0
  79. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js.map +1 -0
  80. package/dist/backend/backend/src/controllers/project/project.controller.d.ts +2 -2
  81. package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
  82. package/dist/backend/backend/src/controllers/project/project.controller.js +24 -7
  83. package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
  84. package/dist/backend/backend/src/controllers/project/project.routes.d.ts +2 -2
  85. package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/project/project.routes.js +3 -36
  87. package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +93 -0
  89. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -0
  90. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +252 -0
  91. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -0
  92. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +34 -0
  93. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -0
  94. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +51 -0
  95. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -0
  96. package/dist/backend/backend/src/controllers/request-types.d.ts +13 -0
  97. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  98. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts +49 -0
  99. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts.map +1 -0
  100. package/dist/backend/backend/src/controllers/standing/standing.controller.js +100 -0
  101. package/dist/backend/backend/src/controllers/standing/standing.controller.js.map +1 -0
  102. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +38 -0
  103. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  104. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +143 -8
  105. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  106. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  107. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +6 -1
  108. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  109. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +2 -0
  110. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/team/team.controller.js +26 -6
  112. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +18 -0
  114. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  115. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +56 -0
  116. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  117. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +1 -0
  118. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
  119. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +3 -1
  120. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
  121. package/dist/backend/backend/src/controllers/types.d.ts +1 -2
  122. package/dist/backend/backend/src/controllers/types.d.ts.map +1 -1
  123. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +2 -3
  124. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  125. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +2 -3
  126. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  127. package/dist/backend/backend/src/index.d.ts.map +1 -1
  128. package/dist/backend/backend/src/index.js +113 -7
  129. package/dist/backend/backend/src/index.js.map +1 -1
  130. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +29 -0
  131. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
  132. package/dist/backend/backend/src/middleware/api-token.middleware.js +38 -0
  133. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
  134. package/dist/backend/backend/src/models/index.d.ts +0 -1
  135. package/dist/backend/backend/src/models/index.d.ts.map +1 -1
  136. package/dist/backend/backend/src/models/index.js +0 -1
  137. package/dist/backend/backend/src/models/index.js.map +1 -1
  138. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  139. package/dist/backend/backend/src/routes/api.routes.js +24 -3
  140. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  141. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts +6 -2
  142. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -1
  143. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +6 -2
  144. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -1
  145. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +43 -1
  146. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/agent/agent-registration.service.js +129 -34
  148. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  149. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
  150. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
  151. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +231 -0
  152. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
  153. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +154 -2
  154. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +380 -22
  156. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
  158. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  159. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
  160. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  161. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +9 -1
  162. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
  163. package/dist/backend/backend/src/services/agent/tmux-command.service.js +12 -2
  164. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
  165. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  166. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +9 -8
  167. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  168. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
  169. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
  170. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
  171. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
  172. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +3 -0
  173. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  174. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +3 -0
  175. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  176. package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
  177. package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
  178. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  179. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
  180. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  181. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
  182. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  183. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  184. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  185. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
  186. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  187. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
  188. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
  189. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
  190. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
  191. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
  192. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
  193. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
  194. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
  195. package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/ai/prompt-template.service.js +9 -7
  197. package/dist/backend/backend/src/services/ai/prompt-template.service.js.map +1 -1
  198. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  199. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +7 -0
  200. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  201. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
  202. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
  203. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
  204. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
  205. package/dist/backend/backend/src/services/core/logger.service.d.ts +21 -0
  206. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
  207. package/dist/backend/backend/src/services/core/logger.service.js +42 -4
  208. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
  209. package/dist/backend/backend/src/services/core/storage.service.d.ts +1 -5
  210. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  211. package/dist/backend/backend/src/services/core/storage.service.js +5 -162
  212. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  213. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  214. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +6 -0
  215. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  216. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  217. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +15 -9
  218. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  219. package/dist/backend/backend/src/services/index.d.ts +0 -4
  220. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  221. package/dist/backend/backend/src/services/index.js +0 -4
  222. package/dist/backend/backend/src/services/index.js.map +1 -1
  223. package/dist/backend/backend/src/services/intent-task/intent-task.service.d.ts +1 -1
  224. package/dist/backend/backend/src/services/intent-task/intent-task.service.js +1 -1
  225. package/dist/backend/backend/src/services/mcp-server.d.ts +19 -6
  226. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  227. package/dist/backend/backend/src/services/mcp-server.js +46 -16
  228. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  229. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  230. package/dist/backend/backend/src/services/mcp-tool-definitions.js +3 -2
  231. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
  232. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts +247 -0
  233. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
  234. package/dist/backend/backend/src/services/memory/standing-answers.service.js +534 -0
  235. package/dist/backend/backend/src/services/memory/standing-answers.service.js.map +1 -0
  236. package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts +104 -0
  237. package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts.map +1 -0
  238. package/dist/backend/backend/src/services/memory/standing-refresh.service.js +218 -0
  239. package/dist/backend/backend/src/services/memory/standing-refresh.service.js.map +1 -0
  240. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
  241. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  242. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +99 -1
  243. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  244. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
  245. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
  246. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js +80 -0
  247. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
  248. package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts +114 -0
  249. package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
  250. package/dist/backend/backend/src/services/monitoring/agent-attention.js +165 -0
  251. package/dist/backend/backend/src/services/monitoring/agent-attention.js.map +1 -0
  252. package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts +76 -0
  253. package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts.map +1 -0
  254. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js +96 -0
  255. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js.map +1 -0
  256. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +1 -1
  257. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts +1 -1
  258. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts.map +1 -1
  259. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js +13 -3
  260. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js.map +1 -1
  261. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts.map +1 -1
  262. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js +0 -4
  263. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js.map +1 -1
  264. package/dist/backend/backend/src/services/project/project-search.service.d.ts +22 -16
  265. package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -1
  266. package/dist/backend/backend/src/services/project/project-search.service.js +30 -53
  267. package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -1
  268. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +381 -0
  269. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -0
  270. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +839 -0
  271. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -0
  272. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
  273. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
  274. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +466 -0
  275. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
  276. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
  277. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
  278. package/dist/backend/backend/src/services/project-tickets/ticket-file.js +468 -0
  279. package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -0
  280. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
  281. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
  282. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
  283. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
  284. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
  285. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
  286. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js +83 -0
  287. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
  288. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
  289. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
  290. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js +201 -0
  291. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
  292. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +86 -22
  293. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  294. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +173 -28
  295. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  296. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +19 -1
  297. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  298. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +33 -4
  299. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  300. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +24 -12
  301. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  302. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +87 -19
  303. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  304. package/dist/backend/backend/src/services/runtime-adapter.d.ts +1 -1
  305. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
  306. package/dist/backend/backend/src/services/runtime-adapter.js +5 -9
  307. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
  308. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
  309. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  310. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +33 -2
  311. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  312. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +5 -0
  313. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  314. package/dist/backend/backend/src/services/session/pty/pty-session.js +8 -1
  315. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  316. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
  317. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  318. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
  319. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  320. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +8 -0
  321. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  322. package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
  323. package/dist/backend/backend/src/services/session/session-command-helper.d.ts +12 -2
  324. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  325. package/dist/backend/backend/src/services/session/session-command-helper.js +14 -2
  326. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  327. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts +239 -0
  328. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts.map +1 -0
  329. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js +395 -0
  330. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js.map +1 -0
  331. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts +53 -0
  332. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts.map +1 -0
  333. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js +83 -0
  334. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js.map +1 -0
  335. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts +93 -0
  336. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts.map +1 -0
  337. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js +244 -0
  338. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js.map +1 -0
  339. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
  340. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  341. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +323 -53
  342. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  343. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  344. package/dist/backend/backend/src/services/template/template.service.js +11 -6
  345. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  346. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +21 -4
  347. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  348. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +53 -3
  349. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  350. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts +85 -6
  351. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  352. package/dist/backend/backend/src/services/v3/escalation-router.service.js +188 -9
  353. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  354. package/dist/backend/backend/src/services/v3/escalation.service.js +1 -1
  355. package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
  356. package/dist/backend/backend/src/services/v3/mission-executor.service.js +2 -2
  357. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  358. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +184 -0
  359. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -0
  360. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +420 -0
  361. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -0
  362. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +61 -0
  363. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -0
  364. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js +100 -0
  365. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js.map +1 -0
  366. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +36 -0
  367. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -0
  368. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +239 -0
  369. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -0
  370. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +152 -0
  371. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -0
  372. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +209 -0
  373. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -0
  374. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +194 -0
  375. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -0
  376. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js +85 -0
  377. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -0
  378. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
  379. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  380. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +15 -6
  381. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  382. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
  383. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +14 -5
  384. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  385. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  386. package/dist/backend/backend/src/services/v3/request.service.js +2 -0
  387. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  388. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
  389. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
  390. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js +172 -0
  391. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
  392. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  393. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +2 -0
  394. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  395. package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
  396. package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
  397. package/dist/backend/backend/src/services/v3/ticket-intake-log.js +116 -0
  398. package/dist/backend/backend/src/services/v3/ticket-intake-log.js.map +1 -0
  399. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
  400. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  401. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +263 -45
  402. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  403. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +3 -1
  404. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  405. package/dist/backend/backend/src/services/v3/ticket-review.service.js +6 -2
  406. package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
  407. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  408. package/dist/backend/backend/src/services/v3/v3-data.service.js +9 -3
  409. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  410. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +88 -1
  411. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  412. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +169 -5
  413. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  414. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +13 -5
  415. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  416. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +10 -9
  417. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  418. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts +241 -0
  419. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts.map +1 -0
  420. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js +511 -0
  421. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js.map +1 -0
  422. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts +70 -0
  423. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -0
  424. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +121 -0
  425. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -0
  426. package/dist/backend/backend/src/services/worktree/worktree-git.d.ts +260 -0
  427. package/dist/backend/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
  428. package/dist/backend/backend/src/services/worktree/worktree-git.js +569 -0
  429. package/dist/backend/backend/src/services/worktree/worktree-git.js.map +1 -0
  430. package/dist/backend/backend/src/types/event-bus.types.d.ts +6 -1
  431. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  432. package/dist/backend/backend/src/types/event-bus.types.js +8 -0
  433. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  434. package/dist/backend/backend/src/types/index.d.ts +23 -18
  435. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  436. package/dist/backend/backend/src/types/index.js.map +1 -1
  437. package/dist/backend/backend/src/types/intent-task.types.d.ts +1 -1
  438. package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
  439. package/dist/backend/backend/src/types/project-ticket.types.d.ts +132 -0
  440. package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -0
  441. package/dist/backend/backend/src/types/project-ticket.types.js +120 -0
  442. package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -0
  443. package/dist/backend/backend/src/types/review-reason.types.d.ts +3 -1
  444. package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -1
  445. package/dist/backend/backend/src/types/review-reason.types.js +1 -0
  446. package/dist/backend/backend/src/types/review-reason.types.js.map +1 -1
  447. package/dist/backend/backend/src/types/v2/index.d.ts +2 -2
  448. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  449. package/dist/backend/backend/src/types/v2/index.js +1 -1
  450. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  451. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts +7 -0
  452. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  453. package/dist/backend/backend/src/types/v2/reconcile.types.js.map +1 -1
  454. package/dist/backend/backend/src/types/v2/request.types.d.ts +18 -0
  455. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  456. package/dist/backend/backend/src/types/v2/request.types.js +1 -0
  457. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  458. package/dist/backend/backend/src/types/v2/ticket.types.d.ts +6 -2
  459. package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  460. package/dist/backend/backend/src/types/v2/ticket.types.js +1 -1
  461. package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -1
  462. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +169 -14
  463. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  464. package/dist/backend/backend/src/types/v2/work-item.types.js +263 -44
  465. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  466. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +33 -0
  467. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
  468. package/dist/backend/backend/src/utils/agent-caller.utils.js +37 -0
  469. package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
  470. package/dist/backend/backend/src/utils/secret-env.d.ts +61 -0
  471. package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -0
  472. package/dist/backend/backend/src/utils/secret-env.js +89 -0
  473. package/dist/backend/backend/src/utils/secret-env.js.map +1 -0
  474. package/dist/backend/build-info.json +2 -2
  475. package/dist/backend/config/constants.d.ts +71 -0
  476. package/dist/backend/config/constants.d.ts.map +1 -1
  477. package/dist/backend/config/constants.js +77 -0
  478. package/dist/backend/config/constants.js.map +1 -1
  479. package/dist/cli/backend/src/constants.d.ts +397 -1
  480. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  481. package/dist/cli/backend/src/constants.js +388 -2
  482. package/dist/cli/backend/src/constants.js.map +1 -1
  483. package/dist/cli/backend/src/models/index.d.ts +0 -1
  484. package/dist/cli/backend/src/models/index.d.ts.map +1 -1
  485. package/dist/cli/backend/src/models/index.js +0 -1
  486. package/dist/cli/backend/src/models/index.js.map +1 -1
  487. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +43 -1
  488. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  489. package/dist/cli/backend/src/services/agent/agent-registration.service.js +129 -34
  490. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  491. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
  492. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +231 -0
  494. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
  495. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +409 -0
  496. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +961 -0
  498. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
  500. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
  502. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  503. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  504. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +9 -8
  505. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  506. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
  507. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
  508. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
  509. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
  510. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
  511. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
  512. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  513. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
  514. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  515. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
  516. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  517. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  518. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  519. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
  520. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  521. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
  522. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
  523. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
  524. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
  525. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
  526. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
  527. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
  528. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
  529. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
  530. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
  531. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
  532. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
  533. package/dist/cli/backend/src/services/core/logger.service.d.ts +21 -0
  534. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
  535. package/dist/cli/backend/src/services/core/logger.service.js +42 -4
  536. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
  537. package/dist/cli/backend/src/services/core/storage.service.d.ts +1 -5
  538. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  539. package/dist/cli/backend/src/services/core/storage.service.js +5 -162
  540. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  541. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  542. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +6 -0
  543. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  544. package/dist/cli/backend/src/services/mcp-server.d.ts +19 -6
  545. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  546. package/dist/cli/backend/src/services/mcp-server.js +46 -16
  547. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  548. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  549. package/dist/cli/backend/src/services/mcp-tool-definitions.js +3 -2
  550. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
  551. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts +247 -0
  552. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
  553. package/dist/cli/backend/src/services/memory/standing-answers.service.js +534 -0
  554. package/dist/cli/backend/src/services/memory/standing-answers.service.js.map +1 -0
  555. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
  556. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  557. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +99 -1
  558. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  559. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
  560. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
  561. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js +80 -0
  562. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
  563. package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts +114 -0
  564. package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
  565. package/dist/cli/backend/src/services/monitoring/agent-attention.js +165 -0
  566. package/dist/cli/backend/src/services/monitoring/agent-attention.js.map +1 -0
  567. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
  568. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
  569. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +466 -0
  570. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
  571. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
  572. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
  573. package/dist/cli/backend/src/services/project-tickets/ticket-file.js +468 -0
  574. package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -0
  575. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
  576. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
  577. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
  578. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
  579. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
  580. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
  581. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js +83 -0
  582. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
  583. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
  584. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
  585. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js +201 -0
  586. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
  587. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
  588. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  589. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +33 -2
  590. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  591. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +5 -0
  592. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  593. package/dist/cli/backend/src/services/session/pty/pty-session.js +8 -1
  594. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  595. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
  596. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  597. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
  598. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  599. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +8 -0
  600. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  601. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -1
  602. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +12 -2
  603. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  604. package/dist/cli/backend/src/services/session/session-command-helper.js +14 -2
  605. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
  606. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
  607. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  608. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +323 -53
  609. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  610. package/dist/cli/backend/src/services/template/template.service.d.ts.map +1 -1
  611. package/dist/cli/backend/src/services/template/template.service.js +11 -6
  612. package/dist/cli/backend/src/services/template/template.service.js.map +1 -1
  613. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +85 -6
  614. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  615. package/dist/cli/backend/src/services/v3/escalation-router.service.js +188 -9
  616. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -1
  617. package/dist/cli/backend/src/services/v3/mission-executor.service.js +2 -2
  618. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
  619. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
  620. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  621. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +15 -6
  622. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  623. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  624. package/dist/cli/backend/src/services/v3/request.service.js +2 -0
  625. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  626. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
  627. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
  628. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js +172 -0
  629. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
  630. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  631. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +2 -0
  632. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  633. package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
  634. package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
  635. package/dist/cli/backend/src/services/v3/ticket-intake-log.js +116 -0
  636. package/dist/cli/backend/src/services/v3/ticket-intake-log.js.map +1 -0
  637. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
  638. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  639. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +263 -45
  640. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  641. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +3 -1
  642. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  643. package/dist/cli/backend/src/services/v3/ticket-review.service.js +6 -2
  644. package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
  645. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  646. package/dist/cli/backend/src/services/v3/v3-data.service.js +9 -3
  647. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  648. package/dist/cli/backend/src/services/worktree/worktree-git.d.ts +260 -0
  649. package/dist/cli/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
  650. package/dist/cli/backend/src/services/worktree/worktree-git.js +569 -0
  651. package/dist/cli/backend/src/services/worktree/worktree-git.js.map +1 -0
  652. package/dist/cli/backend/src/types/event-bus.types.d.ts +6 -1
  653. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  654. package/dist/cli/backend/src/types/event-bus.types.js +8 -0
  655. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  656. package/dist/cli/backend/src/types/index.d.ts +23 -18
  657. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  658. package/dist/cli/backend/src/types/index.js.map +1 -1
  659. package/dist/cli/backend/src/types/intent-task.types.d.ts +1 -1
  660. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -1
  661. package/dist/cli/backend/src/types/project-ticket.types.d.ts +132 -0
  662. package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -0
  663. package/dist/cli/backend/src/types/project-ticket.types.js +120 -0
  664. package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -0
  665. package/dist/cli/backend/src/types/v2/index.d.ts +2 -2
  666. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  667. package/dist/cli/backend/src/types/v2/index.js +1 -1
  668. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  669. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +7 -0
  670. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  671. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -1
  672. package/dist/cli/backend/src/types/v2/request.types.d.ts +18 -0
  673. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  674. package/dist/cli/backend/src/types/v2/request.types.js +1 -0
  675. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  676. package/dist/cli/backend/src/types/v2/ticket.types.d.ts +6 -2
  677. package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  678. package/dist/cli/backend/src/types/v2/ticket.types.js +1 -1
  679. package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -1
  680. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +169 -14
  681. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  682. package/dist/cli/backend/src/types/v2/work-item.types.js +263 -44
  683. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  684. package/dist/cli/backend/src/utils/secret-env.d.ts +61 -0
  685. package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -0
  686. package/dist/cli/backend/src/utils/secret-env.js +89 -0
  687. package/dist/cli/backend/src/utils/secret-env.js.map +1 -0
  688. package/dist/cli/cli/src/commands/onboard.d.ts +1 -1
  689. package/dist/cli/cli/src/commands/onboard.js +3 -3
  690. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  691. package/dist/cli/cli/src/commands/publish.d.ts.map +1 -1
  692. package/dist/cli/cli/src/commands/publish.js +4 -5
  693. package/dist/cli/cli/src/commands/publish.js.map +1 -1
  694. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  695. package/dist/cli/cli/src/commands/service.js +5 -2
  696. package/dist/cli/cli/src/commands/service.js.map +1 -1
  697. package/dist/cli/cli/src/commands/tickets.d.ts +60 -0
  698. package/dist/cli/cli/src/commands/tickets.d.ts.map +1 -0
  699. package/dist/cli/cli/src/commands/tickets.js +111 -0
  700. package/dist/cli/cli/src/commands/tickets.js.map +1 -0
  701. package/dist/cli/cli/src/index.js +12 -0
  702. package/dist/cli/cli/src/index.js.map +1 -1
  703. package/dist/cli/cli/src/utils/archive-creator.d.ts +7 -3
  704. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -1
  705. package/dist/cli/cli/src/utils/archive-creator.js +17 -5
  706. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -1
  707. package/dist/cli/cli/src/utils/cloud-submit.d.ts +1 -1
  708. package/dist/cli/cli/src/utils/cloud-submit.js +1 -1
  709. package/dist/cli/cli/src/utils/gh-submit.d.ts +10 -1
  710. package/dist/cli/cli/src/utils/gh-submit.d.ts.map +1 -1
  711. package/dist/cli/cli/src/utils/gh-submit.js +20 -4
  712. package/dist/cli/cli/src/utils/gh-submit.js.map +1 -1
  713. package/dist/cli/cli/src/utils/package-validator.d.ts +29 -6
  714. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -1
  715. package/dist/cli/cli/src/utils/package-validator.js +88 -36
  716. package/dist/cli/cli/src/utils/package-validator.js.map +1 -1
  717. package/dist/cli/config/constants.d.ts +71 -0
  718. package/dist/cli/config/constants.d.ts.map +1 -1
  719. package/dist/cli/config/constants.js +77 -0
  720. package/dist/cli/config/constants.js.map +1 -1
  721. package/dist/cli/config/skills/marketplace-registry.d.ts +143 -0
  722. package/dist/cli/config/skills/marketplace-registry.d.ts.map +1 -0
  723. package/dist/cli/config/skills/marketplace-registry.js +192 -0
  724. package/dist/cli/config/skills/marketplace-registry.js.map +1 -0
  725. package/frontend/dist/assets/index-8d4b3ad2.js +4951 -0
  726. package/frontend/dist/assets/index-b6aded4c.css +42 -0
  727. package/frontend/dist/index.html +2 -2
  728. package/package.json +1 -1
  729. package/config/task_starters/build_e2e_test_plan_prompt.json +0 -51
  730. package/config/task_starters/build_tasks_prompt.json +0 -55
  731. package/config/task_starters/prompts/build_tasks_step1_milestone_structure.md +0 -274
  732. package/config/task_starters/prompts/e2e_test_plan_step1_build_tests.md +0 -391
  733. package/config/task_starters/prompts/e2e_test_plan_step2_run_tests.md +0 -240
  734. package/config/templates/customer-loyalty-team.json +0 -44
  735. package/config/templates/dtc-viral-content-team.json +0 -58
  736. package/config/templates/expert-innovation-team.json +0 -60
  737. package/config/templates/pragmatic-mvp-dev-team.json +0 -58
  738. package/config/templates/pro-sops/norms/content-production-pipeline.md +0 -39
  739. package/config/templates/pro-sops/norms/customer-onboarding-sop.md +0 -40
  740. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts +0 -13
  741. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts.map +0 -1
  742. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js +0 -214
  743. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js.map +0 -1
  744. package/dist/backend/backend/src/models/Ticket.d.ts +0 -24
  745. package/dist/backend/backend/src/models/Ticket.d.ts.map +0 -1
  746. package/dist/backend/backend/src/models/Ticket.js +0 -102
  747. package/dist/backend/backend/src/models/Ticket.js.map +0 -1
  748. package/dist/backend/backend/src/services/agent/task-planning.service.d.ts +0 -134
  749. package/dist/backend/backend/src/services/agent/task-planning.service.d.ts.map +0 -1
  750. package/dist/backend/backend/src/services/agent/task-planning.service.js +0 -291
  751. package/dist/backend/backend/src/services/agent/task-planning.service.js.map +0 -1
  752. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts +0 -71
  753. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts.map +0 -1
  754. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js +0 -304
  755. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js.map +0 -1
  756. package/dist/backend/backend/src/services/project/task-folder.service.d.ts +0 -48
  757. package/dist/backend/backend/src/services/project/task-folder.service.d.ts.map +0 -1
  758. package/dist/backend/backend/src/services/project/task-folder.service.js +0 -193
  759. package/dist/backend/backend/src/services/project/task-folder.service.js.map +0 -1
  760. package/dist/backend/backend/src/services/project/task.service.d.ts +0 -47
  761. package/dist/backend/backend/src/services/project/task.service.d.ts.map +0 -1
  762. package/dist/backend/backend/src/services/project/task.service.js +0 -253
  763. package/dist/backend/backend/src/services/project/task.service.js.map +0 -1
  764. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts +0 -130
  765. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +0 -1
  766. package/dist/backend/backend/src/services/project/ticket-editor.service.js +0 -406
  767. package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +0 -1
  768. package/dist/cli/backend/src/models/Ticket.d.ts +0 -24
  769. package/dist/cli/backend/src/models/Ticket.d.ts.map +0 -1
  770. package/dist/cli/backend/src/models/Ticket.js +0 -102
  771. package/dist/cli/backend/src/models/Ticket.js.map +0 -1
  772. package/frontend/dist/assets/index-2bdb57b9.css +0 -42
  773. package/frontend/dist/assets/index-54f1061c.js +0 -4963
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Give-up recovery (#841).
3
+ *
4
+ * The worker-facing stop endpoints (complete, block, fail) go through here.
5
+ * Each stop is classified ({@link classifyStop}):
6
+ *
7
+ * - `retry` (a feasibility give-up, no human needed): a NEW WorkItem goes back
8
+ * to the same worker, carrying the attempt log and an instruction to pick a
9
+ * materially different approach. Bounded per ROOT WorkItem: a retry inherits
10
+ * the root, so it never starts its own count. After `giveUpMaxRetries`
11
+ * (team policy, default 2) the next stop, even another "impossible",
12
+ * produces ONE review WorkItem for the team lead with the full history.
13
+ * - `escalate` / `none`: today's behaviour is unchanged; the stop is only
14
+ * recorded on the WorkItem (`metadata.stop`) for the metrics.
15
+ *
16
+ * Nothing verified or terminal is reopened. The stopped item is closed with
17
+ * edges the transition table already permits: a failed item gets a
18
+ * `succeeded_by` disposition (so the reconciler does not also requeue it in
19
+ * place), and a blocked item is cancelled as superseded. A completion that is
20
+ * a give-up is recorded as `failed` instead of `done_by_worker`, so the lead
21
+ * gets no verify ping per attempt.
22
+ *
23
+ * @module services/task-pool/give-up/give-up-recovery.service
24
+ */
25
+ import { GIVE_UP_RECOVERY_CONSTANTS, ORCHESTRATOR_SESSION_NAME } from '../../../constants.js';
26
+ import { pickTeamLead } from '../../../utils/team.utils.js';
27
+ import { LoggerService } from '../../core/logger.service.js';
28
+ import { classifyStop } from './stop-classifier.js';
29
+ const C = GIVE_UP_RECOVERY_CONSTANTS;
30
+ /**
31
+ * The text a completion carries (its summary), for classification.
32
+ *
33
+ * @param result - Completion payload from the worker
34
+ * @returns The summary text, or '' when there is none
35
+ */
36
+ export function completionText(result) {
37
+ if (!result)
38
+ return '';
39
+ const s = result['summary'] ?? result['result'] ?? result['message'];
40
+ return typeof s === 'string' ? s : '';
41
+ }
42
+ /**
43
+ * Handles worker stops and turns feasibility give-ups into bounded retries.
44
+ */
45
+ export class GiveUpRecoveryService {
46
+ pool;
47
+ loadTeams;
48
+ now;
49
+ logger;
50
+ /**
51
+ * @param deps - Pool, team loader, clock and logger
52
+ */
53
+ constructor(deps) {
54
+ this.pool = deps.pool;
55
+ this.loadTeams = deps.loadTeams;
56
+ this.now = deps.now ?? (() => new Date());
57
+ this.logger = deps.logger ?? LoggerService.getInstance().createComponentLogger('GiveUpRecovery');
58
+ }
59
+ /**
60
+ * A worker completes an item. A completion whose outcome is a give-up (and
61
+ * that shows no delivery) is recorded as failed and retried; any other
62
+ * completion goes through exactly as before.
63
+ *
64
+ * @param workItemId - The running item
65
+ * @param result - The worker's completion payload
66
+ * @param actor - Who is completing it (#813: required by pool.completeItem;
67
+ * forwarded on the non-give-up path exactly as the caller resolved it)
68
+ * @returns What was done
69
+ */
70
+ async complete(workItemId, result, actor) {
71
+ const text = completionText(result);
72
+ const verdict = classifyStop(text, 'complete');
73
+ const before = await this.pool.findWorkItem(workItemId);
74
+ // Convert only when retries are on for this worker's team: with the
75
+ // feature off (giveUpMaxRetries 0) a completion stays exactly as today.
76
+ // Also off for the orchestrator (isExcludedFromGiveUp): it is a
77
+ // singleton control-plane process, not a bounded-retry worker, and has
78
+ // no team lead of its own to escalate a review to.
79
+ const enabled = verdict.decision === 'retry' && before !== null && !isExcludedFromGiveUp(before) &&
80
+ maxRetriesFor(teamOf(await this.loadTeams().catch(() => []), before.target)) > 0;
81
+ if (!enabled) {
82
+ await this.pool.completeItem(workItemId, result, actor);
83
+ if (verdict.decision !== 'none')
84
+ await this.record(workItemId, 'complete', verdict, text);
85
+ return { verdict, action: verdict.decision === 'none' ? 'none' : 'recorded' };
86
+ }
87
+ await this.pool.failItem(workItemId, text);
88
+ return this.afterStop(before, workItemId, 'complete', verdict, text);
89
+ }
90
+ /**
91
+ * A worker blocks an item.
92
+ *
93
+ * @param workItemId - The running item
94
+ * @param options - Who blocked it and why
95
+ * @returns What was done
96
+ */
97
+ async block(workItemId, options) {
98
+ const before = await this.pool.findWorkItem(workItemId);
99
+ await this.pool.blockItem(workItemId, options);
100
+ const text = options.reason ?? '';
101
+ return this.afterStop(before, workItemId, 'block', classifyStop(text, 'block'), text);
102
+ }
103
+ /**
104
+ * A worker fails an item.
105
+ *
106
+ * @param workItemId - The running item
107
+ * @param error - The failure text
108
+ * @returns What was done
109
+ */
110
+ async fail(workItemId, error) {
111
+ const before = await this.pool.findWorkItem(workItemId);
112
+ await this.pool.failItem(workItemId, error);
113
+ return this.afterStop(before, workItemId, 'fail', classifyStop(error, 'fail'), error);
114
+ }
115
+ /**
116
+ * Record the stop, then retry or escalate when the verdict says so.
117
+ *
118
+ * @param before - The item as it was before the stop (for its brief and log)
119
+ * @param workItemId - The stopped item
120
+ * @param source - Stop path
121
+ * @param verdict - Classification
122
+ * @param text - Stop text
123
+ * @returns What was done
124
+ */
125
+ async afterStop(before, workItemId, source, verdict, text) {
126
+ await this.record(workItemId, source, verdict, text);
127
+ if (verdict.decision !== 'retry' || !before)
128
+ return { verdict, action: 'recorded' };
129
+ // The escalation review this service itself creates (buildReview) carries
130
+ // the give-up meta and an id derived from `rootWorkItemId`. If the lead
131
+ // blocks or fails THAT review with give-up wording, re-running this same
132
+ // logic on it would rebuild a review with the identical id (addToPool
133
+ // then silently skips it as a duplicate) and closeStopped(id, id) would
134
+ // try to cancel the escalation as superseded by itself. A give-up review
135
+ // has done its job once it reaches a human; it is never itself retried
136
+ // or re-escalated. The orchestrator is excluded for the same reason
137
+ // `complete()` excludes it above (see isExcludedFromGiveUp).
138
+ if (isExcludedFromGiveUp(before)) {
139
+ this.logger.debug('Give-up handling skipped: item is excluded (a give-up escalation, or targets the orchestrator)', {
140
+ workItemId, type: before.type, target: before.target, reviewReason: before.metadata?.['reviewReason'],
141
+ });
142
+ return { verdict, action: 'recorded' };
143
+ }
144
+ try {
145
+ const teams = await this.loadTeams().catch(() => []);
146
+ const team = teamOf(teams, before.target);
147
+ const maxRetries = maxRetriesFor(team);
148
+ if (maxRetries <= 0)
149
+ return { verdict, action: 'recorded', maxRetries };
150
+ const prior = giveUpMetaOf(before);
151
+ const attempts = [
152
+ ...(prior?.attempts ?? []),
153
+ { workItemId, source, category: verdict.category, reason: clip(text), at: this.now().toISOString() },
154
+ ];
155
+ const meta = {
156
+ rootWorkItemId: prior?.rootWorkItemId ?? before.id,
157
+ rootParentWorkItemId: prior ? prior.rootParentWorkItemId : before.parentWorkItemId,
158
+ rootTitle: prior?.rootTitle ?? before.title,
159
+ rootDescription: prior ? prior.rootDescription : before.description,
160
+ maxRetries,
161
+ attempts,
162
+ };
163
+ if (attempts.length <= maxRetries) {
164
+ const retry = this.buildRetry(before, meta, attempts.length);
165
+ await this.pool.addToPool(retry);
166
+ await this.closeStopped(workItemId, retry.id, `give-up retry ${attempts.length}/${maxRetries}`);
167
+ this.logger.info('Give-up: retry with a different approach queued', {
168
+ workItemId, retryWorkItemId: retry.id, attempt: attempts.length, maxRetries, rootWorkItemId: meta.rootWorkItemId,
169
+ });
170
+ return { verdict, action: 'retry_queued', retryWorkItemId: retry.id, attempt: attempts.length, maxRetries };
171
+ }
172
+ const review = this.buildReview(before, meta, team);
173
+ await this.pool.addToPool(review);
174
+ await this.closeStopped(workItemId, review.id, `gave up after ${maxRetries} retries — escalated to the lead`);
175
+ this.logger.info('Give-up: retries exhausted, one escalation to the lead', {
176
+ workItemId, reviewWorkItemId: review.id, target: review.target, attempts: attempts.length,
177
+ });
178
+ return { verdict, action: 'escalated_to_lead', reviewWorkItemId: review.id, attempt: attempts.length, maxRetries };
179
+ }
180
+ catch (err) {
181
+ // The stop itself already happened; a recovery glitch must not undo it.
182
+ this.logger.error('Give-up recovery failed after the stop was recorded', {
183
+ workItemId, error: err instanceof Error ? err.message : String(err),
184
+ });
185
+ return { verdict, action: 'recorded' };
186
+ }
187
+ }
188
+ /**
189
+ * Write `metadata.stop` on the stopped item. Best-effort: never throws.
190
+ *
191
+ * @param workItemId - Item
192
+ * @param source - Stop path
193
+ * @param verdict - Classification
194
+ * @param text - Stop text
195
+ */
196
+ async record(workItemId, source, verdict, text) {
197
+ const stop = {
198
+ source, decision: verdict.decision, category: verdict.category, rules: verdict.rules,
199
+ reason: clip(text), at: this.now().toISOString(),
200
+ };
201
+ try {
202
+ await this.pool.mergeItemMetadata(workItemId, { [C.STOP_METADATA_KEY]: stop });
203
+ }
204
+ catch (err) {
205
+ // Best-effort: the stop already happened; failing to annotate it must
206
+ // not turn a successful block/fail/complete into an API error.
207
+ this.logger.warn('Could not record the stop classification (non-fatal)', {
208
+ workItemId, error: err instanceof Error ? err.message : String(err),
209
+ });
210
+ }
211
+ }
212
+ /**
213
+ * Hand the stopped item's work to its successor with edges the table permits.
214
+ *
215
+ * @param workItemId - Stopped item (now failed or blocked)
216
+ * @param successorId - Retry or review item
217
+ * @param reason - Audit text
218
+ */
219
+ async closeStopped(workItemId, successorId, reason) {
220
+ const current = await this.pool.findWorkItem(workItemId);
221
+ if (!current)
222
+ return;
223
+ if (current.status === 'failed') {
224
+ await this.pool.disposeFailedWorkItem(workItemId, { reason, actor: 'system', successorWorkItemId: successorId });
225
+ }
226
+ else if (current.status === 'blocked') {
227
+ await this.pool.transitionStatus(workItemId, 'cancelled', 'system', undefined, `superseded by ${successorId}: ${reason}`);
228
+ }
229
+ }
230
+ /**
231
+ * The retry WorkItem.
232
+ *
233
+ * DELIBERATE CHOICE (#843): its id's `:giveup:N` infix is NOT added to
234
+ * `FRESH_TASK_CONVERSATION_CONSTANTS.ROOT_SUFFIX_MARKERS`, so dispatching
235
+ * it starts a fresh conversation rather than continuing the one that just
236
+ * gave up. Reasoning: the whole point of a retry is a materially
237
+ * DIFFERENT approach (see the instruction below), and the full attempt
238
+ * log is already written into this WorkItem's own description — nothing
239
+ * is lost by a clean slate, and a warm conversation risks anchoring the
240
+ * agent on the reasoning that just failed.
241
+ *
242
+ * @param stopped - The item that gave up
243
+ * @param meta - Attempt log so far
244
+ * @param attempt - This retry's number
245
+ * @returns A queued WorkItem for the same worker
246
+ */
247
+ buildRetry(stopped, meta, attempt) {
248
+ const id = `${meta.rootWorkItemId}${C.RETRY_ID_INFIX}${attempt}`;
249
+ const instruction = [
250
+ `## Retry ${attempt}/${meta.maxRetries}: try a materially different approach`,
251
+ '',
252
+ 'A previous attempt stopped, saying the task could not be done. Before you start:',
253
+ '1. List every approach already tried (below, and any you know of) and why each failed.',
254
+ '2. Pick one that is materially different, not a variation of those.',
255
+ '3. If what blocks you needs a human (permissions or credentials, copyright or legal, money, an owner decision or scope change, safety, a destructive or external action, personal data, or a broken environment), block the task and say which. Do not work around it.',
256
+ '',
257
+ '### Attempts so far',
258
+ ...meta.attempts.map((a, i) => `${i + 1}. \`${a.workItemId}\` (${a.source}, ${a.at}): ${a.reason}`),
259
+ ].join('\n');
260
+ return {
261
+ id,
262
+ type: stopped.type,
263
+ owner: stopped.owner,
264
+ target: stopped.target,
265
+ title: `Retry ${attempt}/${meta.maxRetries} (different approach): ${meta.rootTitle}`,
266
+ description: `${meta.rootDescription ?? ''}\n\n${instruction}`.trim(),
267
+ status: 'queued',
268
+ createdAt: this.now().toISOString(),
269
+ retryCount: 0,
270
+ maxRetries: stopped.maxRetries,
271
+ requestId: stopped.requestId,
272
+ missionId: stopped.missionId,
273
+ parentWorkItemId: meta.rootParentWorkItemId,
274
+ inputTokens: 0,
275
+ outputTokens: 0,
276
+ cost: 0,
277
+ metadata: {
278
+ ...(stopped.metadata?.['teamId'] ? { teamId: stopped.metadata['teamId'] } : {}),
279
+ idempotencyKey: id,
280
+ [C.GIVE_UP_METADATA_KEY]: { ...meta, attempt },
281
+ },
282
+ };
283
+ }
284
+ /**
285
+ * The single escalation to the team lead.
286
+ *
287
+ * @param stopped - The last item that gave up
288
+ * @param meta - Full attempt log
289
+ * @param team - The worker's team, if known
290
+ * @returns A queued review WorkItem for the lead
291
+ */
292
+ buildReview(stopped, meta, team) {
293
+ const id = `${meta.rootWorkItemId}${C.REVIEW_ID_SUFFIX}`;
294
+ const lead = team ? pickTeamLead(team) : null;
295
+ const target = lead?.sessionName && lead.sessionName !== stopped.target ? lead.sessionName : ORCHESTRATOR_SESSION_NAME;
296
+ const history = meta.attempts.map((a, i) => `${i + 1}. \`${a.workItemId}\` (${a.source}, ${a.at}): ${a.reason}`).join('\n');
297
+ return {
298
+ id,
299
+ type: 'review',
300
+ owner: 'team_lead',
301
+ target,
302
+ title: `Gave up after ${meta.maxRetries} retries: ${meta.rootTitle}`,
303
+ description: [
304
+ `\`${stopped.target ?? 'the worker'}\` stopped on this task ${meta.attempts.length} times, each time saying it could not be done, including ${meta.maxRetries} retries with a different approach.`,
305
+ 'Decide: re-scope, reassign, give more context, or cancel.',
306
+ '',
307
+ '### Attempts',
308
+ history,
309
+ '',
310
+ '### Original brief',
311
+ meta.rootDescription ?? '(none)',
312
+ ].join('\n'),
313
+ status: 'queued',
314
+ createdAt: this.now().toISOString(),
315
+ retryCount: 0,
316
+ maxRetries: stopped.maxRetries,
317
+ requestId: stopped.requestId,
318
+ missionId: stopped.missionId,
319
+ parentWorkItemId: meta.rootParentWorkItemId,
320
+ inputTokens: 0,
321
+ outputTokens: 0,
322
+ cost: 0,
323
+ metadata: {
324
+ ...(stopped.metadata?.['teamId'] ? { teamId: stopped.metadata['teamId'] } : {}),
325
+ idempotencyKey: id,
326
+ reviewReason: 'gave_up',
327
+ sourceWorkItemId: meta.rootWorkItemId,
328
+ [C.GIVE_UP_METADATA_KEY]: meta,
329
+ },
330
+ };
331
+ }
332
+ }
333
+ /**
334
+ * The attempt log on a WorkItem, if it is a give-up retry.
335
+ *
336
+ * @param wi - WorkItem
337
+ * @returns Its `metadata.giveUp`, or null
338
+ */
339
+ export function giveUpMetaOf(wi) {
340
+ const m = wi.metadata?.[C.GIVE_UP_METADATA_KEY];
341
+ return m && typeof m.rootWorkItemId === 'string' && Array.isArray(m.attempts) ? m : null;
342
+ }
343
+ /**
344
+ * Whether a stopped WorkItem is excluded from give-up handling entirely: it
345
+ * is never retried, never escalated — only recorded, exactly like feature-off.
346
+ *
347
+ * Two cases:
348
+ * - It targets the orchestrator: a singleton control-plane process, not a
349
+ * bounded-retry worker. `teamOf()` finds no team for it (the orchestrator
350
+ * is not a team member), so `maxRetriesFor(null)` would otherwise fall
351
+ * through to the team-less default (2) and give it retries and a review
352
+ * escalation it has no team lead to receive.
353
+ * - It IS a give-up escalation review (buildReview's own output, `type:
354
+ * 'review'` with `metadata.reviewReason === 'gave_up'`): if the lead
355
+ * blocks or fails THAT review with give-up wording, this service must not
356
+ * process it again (see the comment at the call site in `afterStop`).
357
+ *
358
+ * @param wi - The stopped WorkItem
359
+ * @returns True when give-up handling must not apply
360
+ */
361
+ export function isExcludedFromGiveUp(wi) {
362
+ return wi.target === ORCHESTRATOR_SESSION_NAME || wi.type === 'review' || wi.metadata?.['reviewReason'] === 'gave_up';
363
+ }
364
+ /**
365
+ * The team a worker session belongs to.
366
+ *
367
+ * @param teams - All teams
368
+ * @param session - Worker session
369
+ * @returns The team, or null
370
+ */
371
+ export function teamOf(teams, session) {
372
+ if (!session)
373
+ return null;
374
+ return teams.find((t) => (t.members ?? []).some((m) => m.sessionName === session)) ?? null;
375
+ }
376
+ /**
377
+ * Give-up retries allowed for a team.
378
+ *
379
+ * @param team - The worker's team, or null
380
+ * @returns `recoveryPolicy.giveUpMaxRetries` when set to a non-negative integer, else the default
381
+ */
382
+ export function maxRetriesFor(team) {
383
+ const n = team?.recoveryPolicy?.giveUpMaxRetries;
384
+ return typeof n === 'number' && Number.isInteger(n) && n >= 0 ? n : C.DEFAULT_MAX_RETRIES;
385
+ }
386
+ /**
387
+ * Clip stop text for storage.
388
+ *
389
+ * @param text - Stop text
390
+ * @returns At most MAX_REASON_CHARS characters
391
+ */
392
+ function clip(text) {
393
+ return text.length > C.MAX_REASON_CHARS ? `${text.slice(0, C.MAX_REASON_CHARS)}…` : text;
394
+ }
395
+ //# sourceMappingURL=give-up-recovery.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"give-up-recovery.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/task-pool/give-up/give-up-recovery.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Give-up metrics per team (#841): how often workers give up, how many
3
+ * retries were queued, and how many of those retries succeeded.
4
+ *
5
+ * Computed on demand from the pool (`metadata.stop` on stopped items,
6
+ * `metadata.giveUp` on retries and escalations). Nothing extra is stored.
7
+ *
8
+ * @module services/task-pool/give-up/give-up-stats
9
+ */
10
+ import type { Team } from '../../../types/index.js';
11
+ import type { WorkItem } from '../../../types/v2/work-item.types.js';
12
+ /** Counts for one team (or `unassigned`). */
13
+ export interface TeamGiveUpStats {
14
+ teamId: string;
15
+ teamName: string;
16
+ /** Stops classified as a feasibility give-up (retry verdict). */
17
+ giveUps: number;
18
+ /** Retry WorkItems created. */
19
+ retries: number;
20
+ /** Retries that reached done or verified. */
21
+ retriesSucceeded: number;
22
+ /** Retries that ended any other terminal way (failed, rejected, cancelled). */
23
+ retriesFailed: number;
24
+ /** Retries not finished yet. */
25
+ retriesPending: number;
26
+ /** retriesSucceeded / (retriesSucceeded + retriesFailed); null when none finished. */
27
+ retrySuccessRate: number | null;
28
+ /** One-per-root escalations to the lead after the retries ran out. */
29
+ escalations: number;
30
+ /** Stops sent to a human (never retried), by category. */
31
+ escalatedByCategory: Record<string, number>;
32
+ }
33
+ /** Whole-pool result. */
34
+ export interface GiveUpStats {
35
+ /** WorkItems examined (so an empty result is distinguishable from an empty pool). */
36
+ examined: number;
37
+ teams: TeamGiveUpStats[];
38
+ }
39
+ /**
40
+ * Compute give-up metrics.
41
+ *
42
+ * @param items - Pool WorkItems
43
+ * @param teams - Teams (to map a worker session to its team)
44
+ * @param teamId - Only this team, when given
45
+ * @returns Counts per team and how many items were examined
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * computeGiveUpStats(await pool.getAllItems(), await storage.getTeams(), 'team-a');
50
+ * ```
51
+ */
52
+ export declare function computeGiveUpStats(items: WorkItem[], teams: Team[], teamId?: string): GiveUpStats;
53
+ //# sourceMappingURL=give-up-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"give-up-stats.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/task-pool/give-up/give-up-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAMrE,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,yBAAyB;AACzB,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAgDjG"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Give-up metrics per team (#841): how often workers give up, how many
3
+ * retries were queued, and how many of those retries succeeded.
4
+ *
5
+ * Computed on demand from the pool (`metadata.stop` on stopped items,
6
+ * `metadata.giveUp` on retries and escalations). Nothing extra is stored.
7
+ *
8
+ * @module services/task-pool/give-up/give-up-stats
9
+ */
10
+ import { GIVE_UP_RECOVERY_CONSTANTS } from '../../../constants.js';
11
+ import { giveUpMetaOf, teamOf } from './give-up-recovery.service.js';
12
+ const C = GIVE_UP_RECOVERY_CONSTANTS;
13
+ const SUCCESS = new Set(['done', 'verified']);
14
+ const FAILURE = new Set(['failed', 'rejected', 'cancelled']);
15
+ const UNASSIGNED = { id: 'unassigned', name: '(no team)' };
16
+ /**
17
+ * Compute give-up metrics.
18
+ *
19
+ * @param items - Pool WorkItems
20
+ * @param teams - Teams (to map a worker session to its team)
21
+ * @param teamId - Only this team, when given
22
+ * @returns Counts per team and how many items were examined
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * computeGiveUpStats(await pool.getAllItems(), await storage.getTeams(), 'team-a');
27
+ * ```
28
+ */
29
+ export function computeGiveUpStats(items, teams, teamId) {
30
+ const byTeam = new Map();
31
+ const bucket = (wi, sessionOverride) => {
32
+ const metaTeam = typeof wi.metadata?.['teamId'] === 'string' ? wi.metadata['teamId'] : undefined;
33
+ const team = (metaTeam ? teams.find((t) => t.id === metaTeam) : undefined) ?? teamOf(teams, sessionOverride ?? wi.target);
34
+ const key = team?.id ?? UNASSIGNED.id;
35
+ let s = byTeam.get(key);
36
+ if (!s) {
37
+ s = {
38
+ teamId: key, teamName: team?.name ?? UNASSIGNED.name,
39
+ giveUps: 0, retries: 0, retriesSucceeded: 0, retriesFailed: 0, retriesPending: 0,
40
+ retrySuccessRate: null, escalations: 0, escalatedByCategory: {},
41
+ };
42
+ byTeam.set(key, s);
43
+ }
44
+ return s;
45
+ };
46
+ for (const wi of items) {
47
+ const stop = wi.metadata?.[C.STOP_METADATA_KEY];
48
+ if (stop && typeof stop.decision === 'string') {
49
+ const s = bucket(wi);
50
+ if (stop.decision === 'retry')
51
+ s.giveUps += 1;
52
+ else if (stop.decision === 'escalate')
53
+ s.escalatedByCategory[stop.category] = (s.escalatedByCategory[stop.category] ?? 0) + 1;
54
+ }
55
+ const meta = giveUpMetaOf(wi);
56
+ if (!meta)
57
+ continue;
58
+ if (wi.id.includes(C.RETRY_ID_INFIX)) {
59
+ const s = bucket(wi);
60
+ s.retries += 1;
61
+ if (SUCCESS.has(wi.status))
62
+ s.retriesSucceeded += 1;
63
+ else if (FAILURE.has(wi.status))
64
+ s.retriesFailed += 1;
65
+ else
66
+ s.retriesPending += 1;
67
+ }
68
+ else if (wi.id.endsWith(C.REVIEW_ID_SUFFIX)) {
69
+ // The review targets the lead; count it on the worker's team.
70
+ const worker = items.find((x) => x.id === meta.rootWorkItemId)?.target;
71
+ bucket(wi, worker).escalations += 1;
72
+ }
73
+ }
74
+ const teamsOut = [...byTeam.values()]
75
+ .map((s) => {
76
+ const finished = s.retriesSucceeded + s.retriesFailed;
77
+ return { ...s, retrySuccessRate: finished > 0 ? s.retriesSucceeded / finished : null };
78
+ })
79
+ .filter((s) => !teamId || s.teamId === teamId)
80
+ .sort((a, b) => a.teamId.localeCompare(b.teamId));
81
+ return { examined: items.length, teams: teamsOut };
82
+ }
83
+ //# sourceMappingURL=give-up-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"give-up-stats.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/task-pool/give-up/give-up-stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Stop classifier (#841): decide whether a worker that stopped should be
3
+ * pushed to retry with a different approach, or handed to a human.
4
+ *
5
+ * Deterministic pattern rules, English and Chinese, no LLM. The dangerous
6
+ * mistake is a false RETRY: auto-retrying a copyright, spending or
7
+ * owner-decision stop pushes an agent past a human decision. So:
8
+ *
9
+ * 1. EXCLUSIONS are checked first and always win. Any hit escalates, even if
10
+ * the same message also says "can't" ("I can't, it needs your card").
11
+ * 2. A dependency wait escalates (it is not a give-up).
12
+ * 3. A feasibility give-up ("can't / impossible / 做不到") with no exclusion
13
+ * retries.
14
+ * 4. Anything else escalates ("unknown"): when unsure, never retry.
15
+ *
16
+ * Completions are stricter (a finished task must never be turned into a
17
+ * failure): a completion is a give-up only when the give-up is the OUTCOME,
18
+ * i.e. there is a feasibility cue AND no delivery evidence (a PR/issue URL, a
19
+ * commit SHA, a findings/specs path, or success words such as done / fixed /
20
+ * merged / 完成). Otherwise the completion is left alone (`none`).
21
+ *
22
+ * Pinned by real, scrubbed stop messages in `__fixtures__/stop-messages.json`.
23
+ *
24
+ * @module services/task-pool/give-up/stop-classifier
25
+ */
26
+ /** Where the stop text came from. */
27
+ export type StopSource = 'complete' | 'block' | 'fail';
28
+ /** What to do with the stop. */
29
+ export type StopDecision = 'retry' | 'escalate' | 'none';
30
+ /** Why. The first nine are the exclusion list (never retried). */
31
+ export type StopCategory = 'permission' | 'legal' | 'money' | 'owner_decision' | 'safety' | 'quota' | 'destructive' | 'external_action' | 'privacy' | 'environment' | 'dependency' | 'feasibility' | 'unknown' | 'delivered';
32
+ /** The classifier's verdict. */
33
+ export interface StopVerdict {
34
+ decision: StopDecision;
35
+ category: StopCategory;
36
+ /** Names of the rules that matched, for the audit trail. */
37
+ rules: string[];
38
+ }
39
+ /** One named pattern. */
40
+ interface Rule {
41
+ name: string;
42
+ re: RegExp;
43
+ }
44
+ /**
45
+ * Exclusion rules, in the order categories are reported (most specific
46
+ * concern first: legal/safety/privacy before credentials). Deliberately broad:
47
+ * an over-match here costs a human a look (false escalate), never a skipped
48
+ * human decision (false retry).
49
+ */
50
+ export declare const EXCLUSION_RULES: ReadonlyArray<{
51
+ category: Exclude<StopCategory, 'dependency' | 'feasibility' | 'unknown' | 'delivered'>;
52
+ rules: Rule[];
53
+ }>;
54
+ /** Waiting on other work: not a give-up, and not for this classifier to retry. */
55
+ export declare const DEPENDENCY_RULES: Rule[];
56
+ /**
57
+ * Feasibility give-up cues. Written to swallow the verb that follows
58
+ * ("can't be done", "无法完成") so the delivery check below never mistakes
59
+ * the give-up phrase itself for a success word.
60
+ */
61
+ export declare const FEASIBILITY_RULES: Rule[];
62
+ /** Evidence that a completion delivered something. */
63
+ export declare const DELIVERY_RULES: Rule[];
64
+ /** Cap on how much text is classified (and later stored). */
65
+ export declare const MAX_STOP_TEXT = 4000;
66
+ /**
67
+ * First exclusion category the text hits, with its rule names.
68
+ *
69
+ * @param text - Stop text
70
+ * @returns The category and rules, or null
71
+ */
72
+ export declare function findExclusion(text: string): {
73
+ category: StopCategory;
74
+ rules: string[];
75
+ } | null;
76
+ /**
77
+ * Classify why a worker stopped.
78
+ *
79
+ * @param text - The stop text: completion summary, block reason or failure error
80
+ * @param source - Which path the stop came through
81
+ * @returns retry | escalate | none, with the category and matched rules
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * classifyStop("The record can't be beaten with this model.", 'block');
86
+ * // { decision: 'retry', category: 'feasibility', rules: ['feasibility:cannot'] }
87
+ * classifyStop("I can't, it needs your card.", 'block');
88
+ * // { decision: 'escalate', category: 'money', ... }
89
+ * ```
90
+ */
91
+ export declare function classifyStop(text: string | null | undefined, source: StopSource): StopVerdict;
92
+ export {};
93
+ //# sourceMappingURL=stop-classifier.d.ts.map