crewly 1.20.153 → 1.20.154

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 (758) 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/verify-output/SKILL.md +2 -2
  39. package/config/sops/developer/git-workflow.md +1 -1
  40. package/dist/backend/backend/src/constants.d.ts +359 -1
  41. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  42. package/dist/backend/backend/src/constants.js +350 -2
  43. package/dist/backend/backend/src/constants.js.map +1 -1
  44. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +27 -0
  45. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -0
  46. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +55 -0
  47. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -0
  48. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts +13 -0
  49. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.d.ts.map +1 -0
  50. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js +19 -0
  51. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.routes.js.map +1 -0
  52. package/dist/backend/backend/src/controllers/api.controller.d.ts +0 -12
  53. package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -1
  54. package/dist/backend/backend/src/controllers/api.controller.js +0 -44
  55. package/dist/backend/backend/src/controllers/api.controller.js.map +1 -1
  56. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +27 -5
  57. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
  58. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +55 -15
  59. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/approvals/approvals.routes.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js +2 -0
  62. package/dist/backend/backend/src/controllers/approvals/approvals.routes.js.map +1 -1
  63. package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts +13 -0
  64. package/dist/backend/backend/src/controllers/expert/expert.controller.d.ts.map +1 -1
  65. package/dist/backend/backend/src/controllers/expert/expert.controller.js +67 -9
  66. package/dist/backend/backend/src/controllers/expert/expert.controller.js.map +1 -1
  67. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts +41 -0
  68. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -0
  69. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +146 -0
  70. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -0
  71. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts +20 -0
  72. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.d.ts.map +1 -0
  73. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js +29 -0
  74. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.routes.js.map +1 -0
  75. package/dist/backend/backend/src/controllers/project/project.controller.d.ts +2 -2
  76. package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
  77. package/dist/backend/backend/src/controllers/project/project.controller.js +24 -7
  78. package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
  79. package/dist/backend/backend/src/controllers/project/project.routes.d.ts +2 -2
  80. package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
  81. package/dist/backend/backend/src/controllers/project/project.routes.js +3 -36
  82. package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
  83. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +93 -0
  84. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -0
  85. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +252 -0
  86. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -0
  87. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +34 -0
  88. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -0
  89. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +51 -0
  90. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -0
  91. package/dist/backend/backend/src/controllers/request-types.d.ts +13 -0
  92. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  93. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts +49 -0
  94. package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts.map +1 -0
  95. package/dist/backend/backend/src/controllers/standing/standing.controller.js +100 -0
  96. package/dist/backend/backend/src/controllers/standing/standing.controller.js.map +1 -0
  97. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +38 -0
  98. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  99. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +143 -8
  100. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  101. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  102. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +6 -1
  103. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  104. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +2 -0
  105. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  106. package/dist/backend/backend/src/controllers/team/team.controller.js +26 -6
  107. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  108. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts +18 -0
  109. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  110. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +56 -0
  111. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  112. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts +1 -0
  113. package/dist/backend/backend/src/controllers/tickets/tickets.routes.d.ts.map +1 -1
  114. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js +3 -1
  115. package/dist/backend/backend/src/controllers/tickets/tickets.routes.js.map +1 -1
  116. package/dist/backend/backend/src/controllers/types.d.ts +1 -2
  117. package/dist/backend/backend/src/controllers/types.d.ts.map +1 -1
  118. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +2 -3
  119. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  120. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +2 -3
  121. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  122. package/dist/backend/backend/src/index.d.ts.map +1 -1
  123. package/dist/backend/backend/src/index.js +100 -7
  124. package/dist/backend/backend/src/index.js.map +1 -1
  125. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +29 -0
  126. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
  127. package/dist/backend/backend/src/middleware/api-token.middleware.js +38 -0
  128. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
  129. package/dist/backend/backend/src/models/index.d.ts +0 -1
  130. package/dist/backend/backend/src/models/index.d.ts.map +1 -1
  131. package/dist/backend/backend/src/models/index.js +0 -1
  132. package/dist/backend/backend/src/models/index.js.map +1 -1
  133. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  134. package/dist/backend/backend/src/routes/api.routes.js +24 -3
  135. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  136. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts +6 -2
  137. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.d.ts.map +1 -1
  138. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js +6 -2
  139. package/dist/backend/backend/src/scripts/leaked-stub-teams.lib.js.map +1 -1
  140. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +28 -1
  141. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  142. package/dist/backend/backend/src/services/agent/agent-registration.service.js +93 -34
  143. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  144. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
  145. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
  146. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +231 -0
  147. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
  148. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +1 -1
  149. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  150. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +9 -0
  151. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  152. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
  153. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  154. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
  155. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  156. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +9 -1
  157. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
  158. package/dist/backend/backend/src/services/agent/tmux-command.service.js +12 -2
  159. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
  160. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +9 -8
  162. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  163. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
  164. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
  165. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
  166. package/dist/backend/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
  167. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +3 -0
  168. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  169. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +3 -0
  170. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  171. package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
  172. package/dist/backend/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
  173. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  174. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
  175. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  176. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
  177. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  178. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  179. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  180. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
  181. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  182. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
  183. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
  184. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
  185. package/dist/backend/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
  186. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
  187. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
  188. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
  189. package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
  190. package/dist/backend/backend/src/services/ai/prompt-template.service.d.ts.map +1 -1
  191. package/dist/backend/backend/src/services/ai/prompt-template.service.js +9 -7
  192. package/dist/backend/backend/src/services/ai/prompt-template.service.js.map +1 -1
  193. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +7 -0
  195. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  196. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
  197. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
  199. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
  200. package/dist/backend/backend/src/services/core/logger.service.d.ts +21 -0
  201. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/core/logger.service.js +42 -4
  203. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
  204. package/dist/backend/backend/src/services/core/storage.service.d.ts +1 -5
  205. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  206. package/dist/backend/backend/src/services/core/storage.service.js +5 -162
  207. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  208. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +15 -9
  210. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  211. package/dist/backend/backend/src/services/index.d.ts +0 -4
  212. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/index.js +0 -4
  214. package/dist/backend/backend/src/services/index.js.map +1 -1
  215. package/dist/backend/backend/src/services/intent-task/intent-task.service.d.ts +1 -1
  216. package/dist/backend/backend/src/services/intent-task/intent-task.service.js +1 -1
  217. package/dist/backend/backend/src/services/mcp-server.d.ts +19 -6
  218. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  219. package/dist/backend/backend/src/services/mcp-server.js +46 -16
  220. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  221. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/mcp-tool-definitions.js +3 -2
  223. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
  224. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts +247 -0
  225. package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
  226. package/dist/backend/backend/src/services/memory/standing-answers.service.js +534 -0
  227. package/dist/backend/backend/src/services/memory/standing-answers.service.js.map +1 -0
  228. package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts +104 -0
  229. package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts.map +1 -0
  230. package/dist/backend/backend/src/services/memory/standing-refresh.service.js +218 -0
  231. package/dist/backend/backend/src/services/memory/standing-refresh.service.js.map +1 -0
  232. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
  233. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  234. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +99 -1
  235. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  236. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
  237. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
  238. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js +80 -0
  239. package/dist/backend/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
  240. package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts +114 -0
  241. package/dist/backend/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
  242. package/dist/backend/backend/src/services/monitoring/agent-attention.js +165 -0
  243. package/dist/backend/backend/src/services/monitoring/agent-attention.js.map +1 -0
  244. package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts +76 -0
  245. package/dist/backend/backend/src/services/monitoring/agent-hook-state.d.ts.map +1 -0
  246. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js +96 -0
  247. package/dist/backend/backend/src/services/monitoring/agent-hook-state.js.map +1 -0
  248. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +1 -1
  249. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts +1 -1
  250. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts.map +1 -1
  251. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js +13 -3
  252. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js.map +1 -1
  253. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts.map +1 -1
  254. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js +0 -4
  255. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js.map +1 -1
  256. package/dist/backend/backend/src/services/project/project-search.service.d.ts +22 -16
  257. package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -1
  258. package/dist/backend/backend/src/services/project/project-search.service.js +30 -53
  259. package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -1
  260. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +381 -0
  261. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -0
  262. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +839 -0
  263. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -0
  264. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
  265. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
  266. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +466 -0
  267. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
  268. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
  269. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
  270. package/dist/backend/backend/src/services/project-tickets/ticket-file.js +468 -0
  271. package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -0
  272. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
  273. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
  274. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
  275. package/dist/backend/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
  276. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
  277. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
  278. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js +83 -0
  279. package/dist/backend/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
  280. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
  281. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
  282. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js +201 -0
  283. package/dist/backend/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
  284. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +86 -22
  285. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  286. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +173 -28
  287. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  288. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +19 -1
  289. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  290. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +33 -4
  291. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  292. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +24 -12
  293. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  294. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +87 -19
  295. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  296. package/dist/backend/backend/src/services/runtime-adapter.d.ts +1 -1
  297. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -1
  298. package/dist/backend/backend/src/services/runtime-adapter.js +5 -9
  299. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -1
  300. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
  301. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  302. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +33 -2
  303. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  304. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +5 -0
  305. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  306. package/dist/backend/backend/src/services/session/pty/pty-session.js +8 -1
  307. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  308. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
  309. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  310. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
  311. package/dist/backend/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  312. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +8 -0
  313. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  314. package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
  315. package/dist/backend/backend/src/services/session/session-command-helper.d.ts +12 -2
  316. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  317. package/dist/backend/backend/src/services/session/session-command-helper.js +14 -2
  318. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  319. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts +239 -0
  320. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.d.ts.map +1 -0
  321. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js +395 -0
  322. package/dist/backend/backend/src/services/task-pool/give-up/give-up-recovery.service.js.map +1 -0
  323. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts +53 -0
  324. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.d.ts.map +1 -0
  325. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js +83 -0
  326. package/dist/backend/backend/src/services/task-pool/give-up/give-up-stats.js.map +1 -0
  327. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts +93 -0
  328. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.d.ts.map +1 -0
  329. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js +244 -0
  330. package/dist/backend/backend/src/services/task-pool/give-up/stop-classifier.js.map +1 -0
  331. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
  332. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  333. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +321 -53
  334. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  335. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  336. package/dist/backend/backend/src/services/template/template.service.js +11 -6
  337. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  338. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +21 -4
  339. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  340. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +53 -3
  341. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  342. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts +85 -6
  343. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  344. package/dist/backend/backend/src/services/v3/escalation-router.service.js +188 -9
  345. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  346. package/dist/backend/backend/src/services/v3/escalation.service.js +1 -1
  347. package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
  348. package/dist/backend/backend/src/services/v3/mission-executor.service.js +2 -2
  349. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  350. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts +184 -0
  351. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.d.ts.map +1 -0
  352. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js +420 -0
  353. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-data.js.map +1 -0
  354. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +61 -0
  355. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -0
  356. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js +100 -0
  357. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.js.map +1 -0
  358. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts +36 -0
  359. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.d.ts.map +1 -0
  360. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js +239 -0
  361. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.renderer.js.map +1 -0
  362. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +152 -0
  363. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -0
  364. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +209 -0
  365. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -0
  366. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +194 -0
  367. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -0
  368. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js +85 -0
  369. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -0
  370. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
  371. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  372. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +15 -6
  373. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  374. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
  375. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +14 -5
  376. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  377. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  378. package/dist/backend/backend/src/services/v3/request.service.js +2 -0
  379. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  380. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
  381. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
  382. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js +172 -0
  383. package/dist/backend/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
  384. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  385. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +2 -0
  386. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  387. package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
  388. package/dist/backend/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
  389. package/dist/backend/backend/src/services/v3/ticket-intake-log.js +116 -0
  390. package/dist/backend/backend/src/services/v3/ticket-intake-log.js.map +1 -0
  391. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
  392. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  393. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +263 -45
  394. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  395. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts +3 -1
  396. package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  397. package/dist/backend/backend/src/services/v3/ticket-review.service.js +6 -2
  398. package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
  399. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  400. package/dist/backend/backend/src/services/v3/v3-data.service.js +9 -3
  401. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  402. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +41 -1
  403. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  404. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +51 -2
  405. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  406. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +13 -5
  407. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  408. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +10 -9
  409. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  410. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts +241 -0
  411. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.d.ts.map +1 -0
  412. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js +511 -0
  413. package/dist/backend/backend/src/services/worktree/workitem-worktree.service.js.map +1 -0
  414. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts +70 -0
  415. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -0
  416. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +121 -0
  417. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -0
  418. package/dist/backend/backend/src/services/worktree/worktree-git.d.ts +260 -0
  419. package/dist/backend/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
  420. package/dist/backend/backend/src/services/worktree/worktree-git.js +569 -0
  421. package/dist/backend/backend/src/services/worktree/worktree-git.js.map +1 -0
  422. package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
  423. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  424. package/dist/backend/backend/src/types/event-bus.types.js +8 -0
  425. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  426. package/dist/backend/backend/src/types/index.d.ts +23 -18
  427. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  428. package/dist/backend/backend/src/types/index.js.map +1 -1
  429. package/dist/backend/backend/src/types/intent-task.types.d.ts +1 -1
  430. package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
  431. package/dist/backend/backend/src/types/project-ticket.types.d.ts +132 -0
  432. package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -0
  433. package/dist/backend/backend/src/types/project-ticket.types.js +120 -0
  434. package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -0
  435. package/dist/backend/backend/src/types/review-reason.types.d.ts +3 -1
  436. package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -1
  437. package/dist/backend/backend/src/types/review-reason.types.js +1 -0
  438. package/dist/backend/backend/src/types/review-reason.types.js.map +1 -1
  439. package/dist/backend/backend/src/types/v2/index.d.ts +2 -2
  440. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  441. package/dist/backend/backend/src/types/v2/index.js +1 -1
  442. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  443. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts +7 -0
  444. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  445. package/dist/backend/backend/src/types/v2/reconcile.types.js.map +1 -1
  446. package/dist/backend/backend/src/types/v2/request.types.d.ts +18 -0
  447. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  448. package/dist/backend/backend/src/types/v2/request.types.js +1 -0
  449. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  450. package/dist/backend/backend/src/types/v2/ticket.types.d.ts +6 -2
  451. package/dist/backend/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  452. package/dist/backend/backend/src/types/v2/ticket.types.js +1 -1
  453. package/dist/backend/backend/src/types/v2/ticket.types.js.map +1 -1
  454. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +169 -14
  455. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  456. package/dist/backend/backend/src/types/v2/work-item.types.js +263 -44
  457. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  458. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +33 -0
  459. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
  460. package/dist/backend/backend/src/utils/agent-caller.utils.js +37 -0
  461. package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
  462. package/dist/backend/backend/src/utils/secret-env.d.ts +61 -0
  463. package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -0
  464. package/dist/backend/backend/src/utils/secret-env.js +89 -0
  465. package/dist/backend/backend/src/utils/secret-env.js.map +1 -0
  466. package/dist/backend/build-info.json +2 -2
  467. package/dist/backend/config/constants.d.ts +71 -0
  468. package/dist/backend/config/constants.d.ts.map +1 -1
  469. package/dist/backend/config/constants.js +77 -0
  470. package/dist/backend/config/constants.js.map +1 -1
  471. package/dist/cli/backend/src/constants.d.ts +359 -1
  472. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  473. package/dist/cli/backend/src/constants.js +350 -2
  474. package/dist/cli/backend/src/constants.js.map +1 -1
  475. package/dist/cli/backend/src/models/index.d.ts +0 -1
  476. package/dist/cli/backend/src/models/index.d.ts.map +1 -1
  477. package/dist/cli/backend/src/models/index.js +0 -1
  478. package/dist/cli/backend/src/models/index.js.map +1 -1
  479. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +28 -1
  480. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  481. package/dist/cli/backend/src/services/agent/agent-registration.service.js +93 -34
  482. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  483. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +169 -0
  484. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +231 -0
  486. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -0
  487. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +16 -0
  488. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  489. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -0
  490. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  491. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  492. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +9 -8
  493. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  494. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts +75 -0
  495. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.d.ts.map +1 -0
  496. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js +89 -0
  497. package/dist/cli/backend/src/services/ai/prompt-modules/active-work.module.js.map +1 -0
  498. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +1 -1
  499. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -1
  500. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +12 -0
  502. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  503. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +14 -0
  504. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  505. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  506. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  507. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +11 -7
  508. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  509. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts +41 -0
  510. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.d.ts.map +1 -0
  511. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js +44 -0
  512. package/dist/cli/backend/src/services/ai/prompt-modules/session-briefing.module.js.map +1 -0
  513. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +67 -0
  514. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -0
  515. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js +146 -0
  516. package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -0
  517. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +7 -0
  518. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
  519. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +9 -1
  520. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
  521. package/dist/cli/backend/src/services/core/logger.service.d.ts +21 -0
  522. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
  523. package/dist/cli/backend/src/services/core/logger.service.js +42 -4
  524. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
  525. package/dist/cli/backend/src/services/core/storage.service.d.ts +1 -5
  526. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  527. package/dist/cli/backend/src/services/core/storage.service.js +5 -162
  528. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  529. package/dist/cli/backend/src/services/mcp-server.d.ts +19 -6
  530. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  531. package/dist/cli/backend/src/services/mcp-server.js +46 -16
  532. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  533. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  534. package/dist/cli/backend/src/services/mcp-tool-definitions.js +3 -2
  535. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
  536. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts +247 -0
  537. package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts.map +1 -0
  538. package/dist/cli/backend/src/services/memory/standing-answers.service.js +534 -0
  539. package/dist/cli/backend/src/services/memory/standing-answers.service.js.map +1 -0
  540. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +35 -0
  541. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  542. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +99 -1
  543. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  544. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts +75 -0
  545. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.d.ts.map +1 -0
  546. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js +80 -0
  547. package/dist/cli/backend/src/services/monitoring/agent-attention-registry.js.map +1 -0
  548. package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts +114 -0
  549. package/dist/cli/backend/src/services/monitoring/agent-attention.d.ts.map +1 -0
  550. package/dist/cli/backend/src/services/monitoring/agent-attention.js +165 -0
  551. package/dist/cli/backend/src/services/monitoring/agent-attention.js.map +1 -0
  552. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +214 -0
  553. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -0
  554. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +466 -0
  555. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -0
  556. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts +121 -0
  557. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -0
  558. package/dist/cli/backend/src/services/project-tickets/ticket-file.js +468 -0
  559. package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -0
  560. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts +69 -0
  561. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.d.ts.map +1 -0
  562. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js +194 -0
  563. package/dist/cli/backend/src/services/project-tickets/ticket-folder-lock.js.map +1 -0
  564. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts +47 -0
  565. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.d.ts.map +1 -0
  566. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js +83 -0
  567. package/dist/cli/backend/src/services/project-tickets/ticket-tracking.js.map +1 -0
  568. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts +97 -0
  569. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.d.ts.map +1 -0
  570. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js +201 -0
  571. package/dist/cli/backend/src/services/project-tickets/v1-task-migration.js.map +1 -0
  572. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +26 -1
  573. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  574. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +33 -2
  575. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  576. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +5 -0
  577. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  578. package/dist/cli/backend/src/services/session/pty/pty-session.js +8 -1
  579. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  580. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +18 -0
  581. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -1
  582. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +23 -0
  583. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -1
  584. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +8 -0
  585. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  586. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -1
  587. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +12 -2
  588. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  589. package/dist/cli/backend/src/services/session/session-command-helper.js +14 -2
  590. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
  591. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +145 -19
  592. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  593. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +321 -53
  594. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  595. package/dist/cli/backend/src/services/template/template.service.d.ts.map +1 -1
  596. package/dist/cli/backend/src/services/template/template.service.js +11 -6
  597. package/dist/cli/backend/src/services/template/template.service.js.map +1 -1
  598. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +85 -6
  599. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  600. package/dist/cli/backend/src/services/v3/escalation-router.service.js +188 -9
  601. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -1
  602. package/dist/cli/backend/src/services/v3/mission-executor.service.js +2 -2
  603. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
  604. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +6 -4
  605. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  606. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +15 -6
  607. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  608. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  609. package/dist/cli/backend/src/services/v3/request.service.js +2 -0
  610. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  611. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts +82 -0
  612. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.d.ts.map +1 -0
  613. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js +172 -0
  614. package/dist/cli/backend/src/services/v3/ticket-ask-classifier.js.map +1 -0
  615. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  616. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +2 -0
  617. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  618. package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts +87 -0
  619. package/dist/cli/backend/src/services/v3/ticket-intake-log.d.ts.map +1 -0
  620. package/dist/cli/backend/src/services/v3/ticket-intake-log.js +116 -0
  621. package/dist/cli/backend/src/services/v3/ticket-intake-log.js.map +1 -0
  622. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +133 -15
  623. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  624. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +263 -45
  625. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  626. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts +3 -1
  627. package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
  628. package/dist/cli/backend/src/services/v3/ticket-review.service.js +6 -2
  629. package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
  630. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  631. package/dist/cli/backend/src/services/v3/v3-data.service.js +9 -3
  632. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  633. package/dist/cli/backend/src/services/worktree/worktree-git.d.ts +260 -0
  634. package/dist/cli/backend/src/services/worktree/worktree-git.d.ts.map +1 -0
  635. package/dist/cli/backend/src/services/worktree/worktree-git.js +569 -0
  636. package/dist/cli/backend/src/services/worktree/worktree-git.js.map +1 -0
  637. package/dist/cli/backend/src/types/event-bus.types.d.ts +1 -1
  638. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  639. package/dist/cli/backend/src/types/event-bus.types.js +8 -0
  640. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  641. package/dist/cli/backend/src/types/index.d.ts +23 -18
  642. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  643. package/dist/cli/backend/src/types/index.js.map +1 -1
  644. package/dist/cli/backend/src/types/intent-task.types.d.ts +1 -1
  645. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -1
  646. package/dist/cli/backend/src/types/project-ticket.types.d.ts +132 -0
  647. package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -0
  648. package/dist/cli/backend/src/types/project-ticket.types.js +120 -0
  649. package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -0
  650. package/dist/cli/backend/src/types/v2/index.d.ts +2 -2
  651. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  652. package/dist/cli/backend/src/types/v2/index.js +1 -1
  653. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  654. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +7 -0
  655. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  656. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -1
  657. package/dist/cli/backend/src/types/v2/request.types.d.ts +18 -0
  658. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  659. package/dist/cli/backend/src/types/v2/request.types.js +1 -0
  660. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  661. package/dist/cli/backend/src/types/v2/ticket.types.d.ts +6 -2
  662. package/dist/cli/backend/src/types/v2/ticket.types.d.ts.map +1 -1
  663. package/dist/cli/backend/src/types/v2/ticket.types.js +1 -1
  664. package/dist/cli/backend/src/types/v2/ticket.types.js.map +1 -1
  665. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +169 -14
  666. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  667. package/dist/cli/backend/src/types/v2/work-item.types.js +263 -44
  668. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  669. package/dist/cli/backend/src/utils/secret-env.d.ts +61 -0
  670. package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -0
  671. package/dist/cli/backend/src/utils/secret-env.js +89 -0
  672. package/dist/cli/backend/src/utils/secret-env.js.map +1 -0
  673. package/dist/cli/cli/src/commands/onboard.d.ts +1 -1
  674. package/dist/cli/cli/src/commands/onboard.js +3 -3
  675. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  676. package/dist/cli/cli/src/commands/publish.d.ts.map +1 -1
  677. package/dist/cli/cli/src/commands/publish.js +4 -5
  678. package/dist/cli/cli/src/commands/publish.js.map +1 -1
  679. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  680. package/dist/cli/cli/src/commands/service.js +5 -2
  681. package/dist/cli/cli/src/commands/service.js.map +1 -1
  682. package/dist/cli/cli/src/commands/tickets.d.ts +60 -0
  683. package/dist/cli/cli/src/commands/tickets.d.ts.map +1 -0
  684. package/dist/cli/cli/src/commands/tickets.js +111 -0
  685. package/dist/cli/cli/src/commands/tickets.js.map +1 -0
  686. package/dist/cli/cli/src/index.js +12 -0
  687. package/dist/cli/cli/src/index.js.map +1 -1
  688. package/dist/cli/cli/src/utils/archive-creator.d.ts +7 -3
  689. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -1
  690. package/dist/cli/cli/src/utils/archive-creator.js +17 -5
  691. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -1
  692. package/dist/cli/cli/src/utils/cloud-submit.d.ts +1 -1
  693. package/dist/cli/cli/src/utils/cloud-submit.js +1 -1
  694. package/dist/cli/cli/src/utils/gh-submit.d.ts +10 -1
  695. package/dist/cli/cli/src/utils/gh-submit.d.ts.map +1 -1
  696. package/dist/cli/cli/src/utils/gh-submit.js +20 -4
  697. package/dist/cli/cli/src/utils/gh-submit.js.map +1 -1
  698. package/dist/cli/cli/src/utils/package-validator.d.ts +29 -6
  699. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -1
  700. package/dist/cli/cli/src/utils/package-validator.js +88 -36
  701. package/dist/cli/cli/src/utils/package-validator.js.map +1 -1
  702. package/dist/cli/config/constants.d.ts +71 -0
  703. package/dist/cli/config/constants.d.ts.map +1 -1
  704. package/dist/cli/config/constants.js +77 -0
  705. package/dist/cli/config/constants.js.map +1 -1
  706. package/dist/cli/config/skills/marketplace-registry.d.ts +143 -0
  707. package/dist/cli/config/skills/marketplace-registry.d.ts.map +1 -0
  708. package/dist/cli/config/skills/marketplace-registry.js +192 -0
  709. package/dist/cli/config/skills/marketplace-registry.js.map +1 -0
  710. package/frontend/dist/assets/index-8d4b3ad2.js +4951 -0
  711. package/frontend/dist/assets/index-b6aded4c.css +42 -0
  712. package/frontend/dist/index.html +2 -2
  713. package/package.json +1 -1
  714. package/config/task_starters/build_e2e_test_plan_prompt.json +0 -51
  715. package/config/task_starters/build_tasks_prompt.json +0 -55
  716. package/config/task_starters/prompts/build_tasks_step1_milestone_structure.md +0 -274
  717. package/config/task_starters/prompts/e2e_test_plan_step1_build_tests.md +0 -391
  718. package/config/task_starters/prompts/e2e_test_plan_step2_run_tests.md +0 -240
  719. package/config/templates/customer-loyalty-team.json +0 -44
  720. package/config/templates/dtc-viral-content-team.json +0 -58
  721. package/config/templates/expert-innovation-team.json +0 -60
  722. package/config/templates/pragmatic-mvp-dev-team.json +0 -58
  723. package/config/templates/pro-sops/norms/content-production-pipeline.md +0 -39
  724. package/config/templates/pro-sops/norms/customer-onboarding-sop.md +0 -40
  725. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts +0 -13
  726. package/dist/backend/backend/src/controllers/task-management/tickets.controller.d.ts.map +0 -1
  727. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js +0 -214
  728. package/dist/backend/backend/src/controllers/task-management/tickets.controller.js.map +0 -1
  729. package/dist/backend/backend/src/models/Ticket.d.ts +0 -24
  730. package/dist/backend/backend/src/models/Ticket.d.ts.map +0 -1
  731. package/dist/backend/backend/src/models/Ticket.js +0 -102
  732. package/dist/backend/backend/src/models/Ticket.js.map +0 -1
  733. package/dist/backend/backend/src/services/agent/task-planning.service.d.ts +0 -134
  734. package/dist/backend/backend/src/services/agent/task-planning.service.d.ts.map +0 -1
  735. package/dist/backend/backend/src/services/agent/task-planning.service.js +0 -291
  736. package/dist/backend/backend/src/services/agent/task-planning.service.js.map +0 -1
  737. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts +0 -71
  738. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.d.ts.map +0 -1
  739. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js +0 -304
  740. package/dist/backend/backend/src/services/monitoring/task-assignment-monitor.service.js.map +0 -1
  741. package/dist/backend/backend/src/services/project/task-folder.service.d.ts +0 -48
  742. package/dist/backend/backend/src/services/project/task-folder.service.d.ts.map +0 -1
  743. package/dist/backend/backend/src/services/project/task-folder.service.js +0 -193
  744. package/dist/backend/backend/src/services/project/task-folder.service.js.map +0 -1
  745. package/dist/backend/backend/src/services/project/task.service.d.ts +0 -47
  746. package/dist/backend/backend/src/services/project/task.service.d.ts.map +0 -1
  747. package/dist/backend/backend/src/services/project/task.service.js +0 -253
  748. package/dist/backend/backend/src/services/project/task.service.js.map +0 -1
  749. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts +0 -130
  750. package/dist/backend/backend/src/services/project/ticket-editor.service.d.ts.map +0 -1
  751. package/dist/backend/backend/src/services/project/ticket-editor.service.js +0 -406
  752. package/dist/backend/backend/src/services/project/ticket-editor.service.js.map +0 -1
  753. package/dist/cli/backend/src/models/Ticket.d.ts +0 -24
  754. package/dist/cli/backend/src/models/Ticket.d.ts.map +0 -1
  755. package/dist/cli/backend/src/models/Ticket.js +0 -102
  756. package/dist/cli/backend/src/models/Ticket.js.map +0 -1
  757. package/frontend/dist/assets/index-2bdb57b9.css +0 -42
  758. package/frontend/dist/assets/index-54f1061c.js +0 -4963
@@ -0,0 +1,77 @@
1
+ #!/bin/bash
2
+ # Tests for split-ticket — run with: bash execute.test.sh
3
+ # A python HTTP stub plays the backend; asserts the calls and the output.
4
+ set -u
5
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ EXEC="$HERE/execute.sh"
7
+ PASS=0; FAIL=0
8
+ check() {
9
+ local name="$1"; local got="$2"; local want="$3"
10
+ if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi
11
+ }
12
+
13
+ PORT=18832
14
+ STUB_LOG="$(mktemp)"; export STUB_LOG; export STUB_PORT="$PORT"
15
+ python3 -u <<'PY' >/dev/null 2>&1 &
16
+ from http.server import BaseHTTPRequestHandler, HTTPServer
17
+ import json, os
18
+ LOG = os.environ['STUB_LOG']; PORT = int(os.environ['STUB_PORT'])
19
+ TICKET = {'id': 'tid-39', 'title': '开issue', 'discussion': [
20
+ {'ref': 'slackch-C1-2.0', 'at': '2026-09-26T14:59:36Z', 'author': 'U1', 'text': '可以去研究一下opus做视频那个吗'},
21
+ {'ref': 'slackch-C1-3.0', 'at': '2026-09-26T15:03:01Z', 'author': 'U1', 'text': 'hindsight那个要写到一起吗?'}]}
22
+ class H(BaseHTTPRequestHandler):
23
+ def reply(self, code, obj):
24
+ self.send_response(code); self.send_header('Content-Type', 'application/json'); self.end_headers()
25
+ self.wfile.write(json.dumps(obj).encode())
26
+ def do_GET(self):
27
+ if self.path == '/api/tickets/TKT-039':
28
+ return self.reply(200, {'success': True, 'data': {'ticket': TICKET, 'board': {'tkt': 'TKT-039'}}})
29
+ return self.reply(404, {'success': False, 'error': 'Ticket not found'})
30
+ def do_POST(self):
31
+ n = int(self.headers.get('content-length', '0')); body = json.loads(self.rfile.read(n).decode() or '{}')
32
+ open(LOG, 'w').write(json.dumps({'path': self.path, 'body': body, 'agent': self.headers.get('X-Agent-Session')}))
33
+ if self.path != '/api/tickets/TKT-039/split':
34
+ return self.reply(404, {'success': False, 'error': 'Ticket not found', 'code': 'not_found'})
35
+ if body.get('discussionRef') == 'nope':
36
+ return self.reply(404, {'success': False, 'error': 'No discussion entry nope on that ticket', 'code': 'discussion_not_found'})
37
+ new = {'id': 'tid-41', 'ticketNumber': 41, 'title': body.get('title', 'opus 视频'), 'parentTicketId': 'tid-39',
38
+ 'origin': {'threadRef': 'slack:C1:1.0'}}
39
+ return self.reply(201, {'success': True, 'data': {'ticket': new, 'source': TICKET, 'moved': 'discussionRef' in body}})
40
+ def log_message(self, *a, **k): pass
41
+ HTTPServer(('127.0.0.1', PORT), H).serve_forever()
42
+ PY
43
+ STUB_PID=$!
44
+ disown "$STUB_PID" 2>/dev/null || true
45
+ trap 'kill "$STUB_PID" >/dev/null 2>&1; rm -f "$STUB_LOG"' EXIT
46
+ for i in $(seq 1 30); do curl -s -o /dev/null -m 0.2 "http://127.0.0.1:${PORT}/" 2>/dev/null && break; sleep 0.1; done
47
+
48
+ run() { CREWLY_SESSION_NAME=atlas CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>/dev/null; }
49
+ run_err() { CREWLY_SESSION_NAME=atlas CREWLY_API_URL="http://127.0.0.1:${PORT}" bash "$EXEC" "$@" 2>&1 >/dev/null; }
50
+
51
+ # --- list mode shows the follow-ups with their refs, and how many ---
52
+ OUT=$(run --ticket TKT-039 --list)
53
+ check "list: count" "$(printf '%s' "$OUT" | jq -r .count)" "2"
54
+ check "list: refs" "$(printf '%s' "$OUT" | jq -c '[.followUps[].ref]')" '["slackch-C1-2.0","slackch-C1-3.0"]'
55
+
56
+ # --- move a follow-up out (as the agent) ---
57
+ OUT=$(run --ticket TKT-039 --discussion-ref slackch-C1-2.0)
58
+ check "move: path" "$(jq -r .path "$STUB_LOG")" "/api/tickets/TKT-039/split"
59
+ check "move: body" "$(jq -c .body "$STUB_LOG")" '{"question":false,"discussionRef":"slackch-C1-2.0"}'
60
+ check "move: agent header" "$(jq -r .agent "$STUB_LOG")" "atlas"
61
+ check "move: new ticket keeps the thread and parent" "$(printf '%s' "$OUT" | jq -c '[.success, .moved, .newTicket.ticketNumber, .newTicket.parentTicketId, .newTicket.threadRef]')" '[true,true,41,"tid-39","slack:C1:1.0"]'
62
+
63
+ # --- split from text, with title / assignee / question ---
64
+ run --ticket TKT-039 --text "Turing 的另一个测试是什么" --title "other Turing test" --assignee think-tank-atlas --question >/dev/null
65
+ check "text: body" "$(jq -c .body "$STUB_LOG")" '{"question":true,"text":"Turing 的另一个测试是什么","title":"other Turing test","assignee":"think-tank-atlas"}'
66
+
67
+ # --- JSON input ---
68
+ run '{"ticket":"TKT-039","discussionRef":"slackch-C1-3.0"}' >/dev/null
69
+ check "json: body" "$(jq -c .body "$STUB_LOG")" '{"question":false,"discussionRef":"slackch-C1-3.0"}'
70
+
71
+ # --- errors ---
72
+ check "unknown ref fails loudly" "$(run_err --ticket TKT-039 --discussion-ref nope | grep -c 'No discussion entry')" "1"
73
+ check "nothing to split" "$(run_err --ticket TKT-039 | grep -c 'discussion-ref')" "1"
74
+ check "missing ticket" "$(run_err --text x | grep -ci 'ticket')" "1"
75
+
76
+ echo "split-ticket: ${PASS} passed, ${FAIL} failed ($((PASS+FAIL)) checks)"
77
+ [ "$FAIL" -eq 0 ] && [ $((PASS+FAIL)) -gt 0 ]
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: Standing Update
3
+ description: Write, replace or remove one section of a standing-answer page (decisions in force, open gotchas, owner preferences, or your own unfinished work), citing the memory entries it is built from.
4
+ natural_language_description: Update the standing answer for a recurring question from the memory entries listed in a refresh WorkItem.
5
+ version: 1.0.0
6
+ category: memory
7
+ skillType: claude-skill
8
+ assignableRoles:
9
+ - developer
10
+ - qa
11
+ - tpm
12
+ - designer
13
+ - frontend-developer
14
+ - backend-developer
15
+ - fullstack-dev
16
+ - qa-engineer
17
+ - product-manager
18
+ - architect
19
+ - generalist
20
+ - sales
21
+ - support
22
+ - team-lead
23
+ - orchestrator
24
+ triggers:
25
+ - standing answer
26
+ - refresh standing page
27
+ - update standing answers
28
+ tags:
29
+ - memory
30
+ - standing-answers
31
+ - knowledge
32
+ execution:
33
+ type: script
34
+ script:
35
+ file: execute.sh
36
+ interpreter: bash
37
+ timeoutMs: 15000
38
+ ---
39
+
40
+ # Standing Update
41
+
42
+ Standing-answer pages hold the settled answer to a recurring question, so
43
+ agents see it at boot (`## Standing Answers` in the prompt) without calling
44
+ `recall`. You normally run this skill while working a **Standing Answer
45
+ Refresh** WorkItem: its brief lists the question, the current sections, and
46
+ the memory entries to use, each with a citation token such as `dec:<id>`.
47
+
48
+ | Page id | Scope | Question | Cites |
49
+ |---|---|---|---|
50
+ | `decisions-in-force` | project | What decisions are in force? | `dec:` |
51
+ | `open-gotchas` | project | Which gotchas are still open? | `got:` |
52
+ | `owner-preferences` | project | What does the owner prefer? | `pref:` |
53
+ | `unfinished-work` | agent | What is my unfinished work, and what is blocking it? | `mem:` |
54
+
55
+ Rules the backend enforces:
56
+
57
+ - One section per call. Same heading (case-insensitive) replaces; a new one appends.
58
+ - **An empty body removes the section.** Use it when a decision was superseded or a gotcha resolved.
59
+ - Every non-empty section needs at least one citation, and every citation must name an entry in that page's sources.
60
+ - Body ≤ 1500 characters, with no `#`/`##` headings, no `---` lines and no `Sources:` line. `###` is fine.
61
+ - Anything that looks like a secret is masked before the page is written.
62
+
63
+ Write the answer as it stands now, not a log of what happened.
64
+
65
+ ## Parameters
66
+
67
+ | Flag | JSON Field | Required | Description |
68
+ |------|-----------|----------|-------------|
69
+ | `--page` / `-P` | `page` | Yes | Page id (table above) |
70
+ | `--project` / `-p` | `projectPath` | Project pages | Project path (default: `$CREWLY_PROJECT_PATH`) |
71
+ | `--session` / `-s` | `sessionName` | Agent page | Your session (default: `$CREWLY_SESSION_NAME`) |
72
+ | `--heading` / `-H` | `heading` | Yes | Section heading, one line, ≤ 80 chars |
73
+ | `--body` / `-b`, `--body-file` | `body` | Yes | Section body; `""` removes the section |
74
+ | `--cites` / `-c` | `cites` | Unless removing | Comma-separated citations (JSON: array or string) |
75
+
76
+ ## Examples
77
+
78
+ ```bash
79
+ bash config/skills/agent/core/standing-update/execute.sh --page decisions-in-force --project /path/to/project \
80
+ --heading "Prompt assembly" --body-file /tmp/section.md --cites "dec:0f3c...,dec:9a1b..."
81
+
82
+ bash config/skills/agent/core/standing-update/execute.sh --page unfinished-work --session dev-1 \
83
+ --heading "PR #818" --body "Waiting on Steve to merge; nothing blocking." --cites "mem:k1..."
84
+
85
+ # Remove a section that is no longer true
86
+ bash config/skills/agent/core/standing-update/execute.sh --page open-gotchas --project /path --heading "Shell globbing" --body ""
87
+ ```
88
+
89
+ ## Output
90
+
91
+ `{ success: true, data: { filePath, watermark, removed, masked } }`. A rejected
92
+ write returns HTTP 400 with `code`: `unknown_page`, `invalid_input`,
93
+ `missing_cite` or `unknown_cite`, plus a message saying what to fix.
94
+
95
+ To see the pages, whether each is stale, and how many newer memories exist:
96
+ `GET /api/standing?projectPath=<path>&sessionName=<session>`.
@@ -0,0 +1,107 @@
1
+ #!/bin/bash
2
+ # Write one section of a standing-answer page (#816).
3
+ # Supports CLI flags (preferred) and legacy JSON.
4
+ set -euo pipefail
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ source "${SCRIPT_DIR}/../../_common/lib.sh"
7
+
8
+ AGENT_PAGE_ID="unfinished-work"
9
+
10
+ print_usage() {
11
+ cat <<'EOF_USAGE'
12
+ Usage:
13
+ execute.sh --page decisions-in-force --project /path --heading "Prompt assembly" \
14
+ --body-file /tmp/section.md --cites "dec:<id>,dec:<id>"
15
+ execute.sh --page unfinished-work --session dev-1 --heading "PR #818" \
16
+ --body "Waiting on review." --cites "mem:<id>"
17
+ execute.sh --page open-gotchas --project /path --heading "Shell" --body "" # remove the section
18
+
19
+ Options:
20
+ --page | -P Page id: decisions-in-force, open-gotchas, owner-preferences, unfinished-work (required)
21
+ --project | -p Project path for project pages (default: $CREWLY_PROJECT_PATH)
22
+ --session | -s Session name for the unfinished-work page (default: $CREWLY_SESSION_NAME)
23
+ --heading | -H Section heading, one line (required)
24
+ --body | -b Section body; an empty body removes the section
25
+ --body-file Read the body from a file
26
+ --cites | -c Comma-separated citations from the refresh brief (required unless removing)
27
+ --json | -j Raw JSON payload
28
+ --help | -h Show this help
29
+ EOF_USAGE
30
+ }
31
+
32
+ INPUT_JSON=""
33
+ PAGE=""
34
+ PROJECT_PATH=""
35
+ SESSION=""
36
+ HEADING=""
37
+ BODY=""
38
+ BODY_SET="false"
39
+ CITES=""
40
+
41
+ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
42
+ INPUT_JSON="$1"
43
+ shift || true
44
+ fi
45
+
46
+ while [[ $# -gt 0 ]]; do
47
+ case "$1" in
48
+ --page|-P) PAGE="$2"; shift 2 ;;
49
+ --project|-p) PROJECT_PATH="$2"; shift 2 ;;
50
+ --session|-s) SESSION="$2"; shift 2 ;;
51
+ --heading|-H) HEADING="$2"; shift 2 ;;
52
+ --body|-b) BODY="$2"; BODY_SET="true"; shift 2 ;;
53
+ --body-file)
54
+ [ -f "$2" ] || error_exit "Body file not found: $2"
55
+ BODY="$(cat "$2")"; BODY_SET="true"; shift 2 ;;
56
+ --cites|-c) CITES="$2"; shift 2 ;;
57
+ --json|-j) INPUT_JSON="$2"; shift 2 ;;
58
+ --help|-h) print_usage; exit 0 ;;
59
+ --) shift; break ;;
60
+ *)
61
+ if [[ -z "$INPUT_JSON" && ${1:0:1} == '{' ]]; then
62
+ INPUT_JSON="$1"; shift
63
+ else
64
+ error_exit "Unknown argument: $1. Use --help for usage."
65
+ fi
66
+ ;;
67
+ esac
68
+ done
69
+
70
+ if [ -n "$INPUT_JSON" ]; then
71
+ INPUT=$(read_json_input "$INPUT_JSON")
72
+ [ -z "$PAGE" ] && PAGE=$(printf '%s' "$INPUT" | jq -r '.page // .pageId // empty')
73
+ [ -z "$PROJECT_PATH" ] && PROJECT_PATH=$(printf '%s' "$INPUT" | jq -r '.projectPath // empty')
74
+ [ -z "$SESSION" ] && SESSION=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
75
+ [ -z "$HEADING" ] && HEADING=$(printf '%s' "$INPUT" | jq -r '.heading // empty')
76
+ if [ "$BODY_SET" = "false" ] && printf '%s' "$INPUT" | jq -e 'has("body")' >/dev/null; then
77
+ BODY=$(printf '%s' "$INPUT" | jq -r '.body'); BODY_SET="true"
78
+ fi
79
+ [ -z "$CITES" ] && CITES=$(printf '%s' "$INPUT" | jq -r 'if (.cites | type) == "array" then (.cites | join(",")) else (.cites // empty) end')
80
+ fi
81
+
82
+ require_param "page (--page)" "$PAGE"
83
+ require_param "heading (--heading)" "$HEADING"
84
+ [ "$BODY_SET" = "true" ] || error_exit "body is required (--body, --body-file, or --body \"\" to remove the section)"
85
+ [[ "$PAGE" =~ ^[a-z][a-z-]*$ ]] || error_exit "Invalid page id: $PAGE"
86
+
87
+ # The agent page is keyed by session; every other page by project.
88
+ if [ "$PAGE" = "$AGENT_PAGE_ID" ]; then
89
+ [ -z "$SESSION" ] && SESSION="${CREWLY_SESSION_NAME:-}"
90
+ require_param "session (--session, or CREWLY_SESSION_NAME)" "$SESSION"
91
+ else
92
+ [ -z "$PROJECT_PATH" ] && PROJECT_PATH="${CREWLY_PROJECT_PATH:-}"
93
+ require_param "project (--project, or CREWLY_PROJECT_PATH)" "$PROJECT_PATH"
94
+ fi
95
+
96
+ BODY_JSON=$(jq -n \
97
+ --arg projectPath "$PROJECT_PATH" \
98
+ --arg sessionName "$SESSION" \
99
+ --arg heading "$HEADING" \
100
+ --arg body "$BODY" \
101
+ --arg cites "$CITES" \
102
+ '{heading: $heading, body: $body,
103
+ cites: ($cites | split(",") | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0)))}
104
+ + (if $projectPath != "" then {projectPath: $projectPath} else {} end)
105
+ + (if $sessionName != "" then {sessionName: $sessionName} else {} end)')
106
+
107
+ api_call PUT "/standing/${PAGE}/section" "$BODY_JSON"
@@ -51,7 +51,7 @@ This skill is callable **only when orc is in `'onboarding'` mode**.
51
51
  cat <<'EOF' | bash execute.sh
52
52
  {
53
53
  "recommendation": {
54
- "templateId": "dtc-viral-content-team",
54
+ "templateId": "growth-marketing-team",
55
55
  "agents": [
56
56
  { "role": "content-drafter", "responsibilities": "...", "skillIds": ["content-drafter"] },
57
57
  { "role": "support-triage", "responsibilities": "...", "skillIds": ["support-triage"] }
@@ -70,7 +70,7 @@ bash execute.sh '{
70
70
  {
71
71
  "success": true,
72
72
  "recommendation": {
73
- "templateId": "dtc-viral-content-team",
73
+ "templateId": "growth-marketing-team",
74
74
  "agents": [
75
75
  { "role": "content-drafter", "responsibilities": "...", "skillIds": [...] },
76
76
  { "role": "support-triage", "responsibilities": "...", "skillIds": [...] }
@@ -42,7 +42,7 @@ The script auto-resolves `config/skills/...` references to absolute paths so del
42
42
  | `--task-file` | — | No | Read task description from a file path |
43
43
  | `--priority` / `-P` | `priority` | No | Priority: `low`, `normal`, `high` (default: `normal`) |
44
44
  | `--context` / `-c` | `context` | No | Additional context for the task. Scanned for the Request Contract alongside `--task` |
45
- | `--project` / `-p` | `projectPath` | No | Project path; creates task file in `.crewly/tasks/` |
45
+ | `--project` / `-p` | `projectPath` | No | Project path; recorded on the WorkItem (`metadata.projectPath`) |
46
46
  | `--team` / `-g` | `teamId` | No | Team ID for cross-team validation |
47
47
  | `--task-type` | `taskType` | No | Task type: `general`, `technical` (default: `general`) |
48
48
  | `--force-cross-team` | `forceCrossTeam` | No | Allow cross-team delegation |
@@ -93,7 +93,7 @@ It does NOT set up a recurring check — the reconciler escalates stalled or unv
93
93
  ```bash
94
94
  bash config/skills/orchestrator/delegate-task/execute.sh '{"to":"agent-joe","task":"Implement user auth","priority":"high","projectPath":"/path/to/project"}'
95
95
  ```
96
- Also creates a task file in the project's `.crewly/tasks/` directory.
96
+ The WorkItem carries the project path. For work that belongs in the project's own backlog, create a project ticket instead (`project-tickets create`) and let the team pick it up or assign it.
97
97
 
98
98
  ### Example 3: Cross-team delegation with a longer fallback (2× an 8 h ETA)
99
99
  ```bash
@@ -135,7 +135,8 @@ Error messages are output to **stdout** (JSON format) so the orchestrator can re
135
135
 
136
136
  ## Related Skills
137
137
 
138
- - `assign-task` — for formal task tracking in the management system (file-based kanban)
138
+ - `assign-task` — hand an existing WorkItem to another agent
139
+ - `project-tickets` — the project's own backlog (`<project>/.crewly/tickets/`): create, assign, claim
139
140
  - `send-message` — for simple messages without task structure
140
141
  - `watch-for-event` — the `agent:idle_after_task` watch that completes the §3.0 loop (not created by this skill)
141
142
  - `cancel-followup` — cancel the fallback trigger once the deliverable is verified
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: Render Verdict
3
+ description: Record a review verdict (verified/rejected) on a done_by_worker WorkItem, with the caller's identity attached so the backend accepts it.
4
+ version: 1.0.0
5
+ category: management
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - orchestrator
9
+ triggers:
10
+ - render verdict
11
+ - verify workitem
12
+ - reject workitem
13
+ - verdict needed
14
+ tags:
15
+ - task-pool
16
+ - verification
17
+ - escalation
18
+ execution:
19
+ type: script
20
+ script:
21
+ file: execute.sh
22
+ interpreter: bash
23
+ timeoutMs: 15000
24
+ ---
25
+
26
+ # Render Verdict
27
+
28
+ Record an explicit review verdict on a `done_by_worker` WorkItem — the step
29
+ the escalation chain (#813/#819) asks the orchestrator to take once a
30
+ worker's completion has gone unverified by its Team Leader for too long.
31
+
32
+ ## Why not `curl` directly?
33
+
34
+ `POST /api/task-pool/items/:id/verdict` identifies its caller from the
35
+ `X-Agent-Session` request header (never from the request body — see
36
+ `resolveTransitionActor` in `backend/src/utils/agent-caller.utils.ts`). A raw
37
+ `curl` sends no such header, so the backend cannot tell who is calling and
38
+ refuses with `403 { code: "transition_not_reviewer" }`. This skill runs the
39
+ same POST through `api_call` (`config/skills/_common/lib.sh`), which always
40
+ attaches `X-Agent-Session: $CREWLY_SESSION_NAME` — run it with
41
+ `CREWLY_SESSION_NAME` set to your own session (`crewly-orc` for the
42
+ orchestrator) and the backend recognizes the caller correctly.
43
+
44
+ ## Usage
45
+
46
+ ```bash
47
+ CREWLY_SESSION_NAME=crewly-orc bash config/skills/orchestrator/render-verdict/execute.sh \
48
+ '{"workItemId":"abc-123","verdict":"verified","comment":"Meets the acceptance criteria"}'
49
+ ```
50
+
51
+ ## Parameters
52
+
53
+ - `workItemId` (required, alias `taskId`) — the `done_by_worker` WorkItem to verdict.
54
+ - `verdict` (required) — `"verified"` or `"rejected"`.
55
+ - `comment` (optional) — reviewer's note; required in practice for a rejection so the worker knows what to fix.
56
+
57
+ ## Output
58
+
59
+ The raw JSON response of `POST /api/task-pool/items/:workItemId/verdict`:
60
+ `{"success":true,"data":<WorkItem>}` on success, or a JSON error object on
61
+ stderr (400 invalid verdict, 403 not the reviewer, 404 not found, 409 not
62
+ `done_by_worker`).
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+ # Render a review verdict on a `done_by_worker` WorkItem via the V3 task-pool
3
+ # (#819 — replaces the raw-curl instruction in the escalation-router's 2h
4
+ # orchestrator message).
5
+ #
6
+ # Why this skill exists: the escalation message used to tell the orchestrator
7
+ # to `curl -X POST .../verdict` directly. A raw curl carries no
8
+ # `X-Agent-Session` header, so the backend cannot identify the caller and
9
+ # refuses the verdict with `403 not_reviewer` — the orchestrator was being
10
+ # told to do something that could never work. `api_call` (config/skills/
11
+ # _common/lib.sh) already attaches `X-Agent-Session: $CREWLY_SESSION_NAME` to
12
+ # every request, so routing the same POST through it is the fix: run this
13
+ # skill with CREWLY_SESSION_NAME set to the orchestrator's own session
14
+ # (normally `crewly-orc`) and the backend recognizes it as the orchestrator,
15
+ # which the transition gate always allows to render a verdict once an item is
16
+ # escalated to it (or when the item has no reviewer of record).
17
+ #
18
+ # Input shape:
19
+ # { "workItemId": "abc-123", "verdict": "verified"|"rejected", "comment"?: "..." }
20
+ #
21
+ # Backwards-compat: `taskId` is accepted as an alias for `workItemId`, same
22
+ # convention as complete-task/execute.sh.
23
+
24
+ set -euo pipefail
25
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
26
+ source "${SCRIPT_DIR}/../_common/lib.sh"
27
+
28
+ INPUT=$(read_json_input "${1:-}")
29
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"workItemId\":\"abc-123\",\"verdict\":\"verified\",\"comment\":\"...\"}'"
30
+
31
+ WORK_ITEM_ID=$(printf '%s' "$INPUT" | jq -r '.workItemId // .taskId // empty')
32
+ VERDICT=$(printf '%s' "$INPUT" | jq -r '.verdict // empty')
33
+ COMMENT=$(printf '%s' "$INPUT" | jq -r '.comment // empty')
34
+
35
+ require_param "workItemId" "$WORK_ITEM_ID"
36
+
37
+ if [ "$VERDICT" != "verified" ] && [ "$VERDICT" != "rejected" ]; then
38
+ error_exit "verdict must be \"verified\" or \"rejected\" (got: \"${VERDICT}\")"
39
+ fi
40
+
41
+ if [ -n "$COMMENT" ]; then
42
+ BODY=$(jq -n --arg verdict "$VERDICT" --arg comment "$COMMENT" '{verdict: $verdict, comment: $comment}')
43
+ else
44
+ BODY=$(jq -n --arg verdict "$VERDICT" '{verdict: $verdict}')
45
+ fi
46
+
47
+ api_call POST "/task-pool/items/${WORK_ITEM_ID}/verdict" "$BODY"
@@ -0,0 +1,121 @@
1
+ #!/bin/bash
2
+ # Tests for ORC render-verdict execute.sh (#819)
3
+ #
4
+ # The harness runs a COPY of the real execute.sh under a stubbed api_call
5
+ # (source real lib.sh + override api_call — the pattern used by
6
+ # delegate-task/execute.test.sh), so production logic is exercised verbatim.
7
+ #
8
+ # Coverage:
9
+ # 1. happy path — POSTs to the verdict endpoint with the right body
10
+ # 2. comment is included when given, omitted when not
11
+ # 3. an invalid verdict is rejected BEFORE any HTTP call (this is the
12
+ # whole point of the skill: never let a malformed request reach the
13
+ # backend and produce a confusing error)
14
+ # 4. workItemId is required
15
+ # 5. taskId is accepted as an alias for workItemId
16
+
17
+ set -euo pipefail
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ PASS=0
20
+ FAIL=0
21
+
22
+ CALL_LOG=$(mktemp)
23
+ SKILL_PARENT=$(mktemp -d)
24
+ trap 'rm -rf "$SKILL_PARENT" "$CALL_LOG"' EXIT
25
+
26
+ mkdir -p "$SKILL_PARENT/_common" "$SKILL_PARENT/render-verdict"
27
+
28
+ REAL_LIB="$(cd "$SCRIPT_DIR/../.." && pwd)/_common/lib.sh"
29
+ cat > "$SKILL_PARENT/_common/lib.sh" <<EOF
30
+ source "$REAL_LIB"
31
+ api_call() {
32
+ local method="\$1" path="\$2" body="\${3:-}"
33
+ echo "\${method} \${path} \${body}" >> "${CALL_LOG}"
34
+ echo '{"success":true,"data":{"id":"wi-stub-id","status":"verified"}}'
35
+ }
36
+ EOF
37
+
38
+ cp "$SCRIPT_DIR/execute.sh" "$SKILL_PARENT/render-verdict/execute.sh"
39
+ chmod +x "$SKILL_PARENT/render-verdict/execute.sh"
40
+
41
+ assert_log_contains() {
42
+ local desc="$1" pattern="$2"
43
+ if grep -q "$pattern" "$CALL_LOG"; then
44
+ echo " PASS: $desc"
45
+ PASS=$((PASS + 1))
46
+ else
47
+ echo " FAIL: $desc (expected log entry matching '$pattern')"
48
+ echo " Call log was:"
49
+ sed 's/^/ /' "$CALL_LOG"
50
+ FAIL=$((FAIL + 1))
51
+ fi
52
+ }
53
+
54
+ assert_log_empty() {
55
+ local desc="$1"
56
+ if [ -s "$CALL_LOG" ]; then
57
+ echo " FAIL: $desc (expected NO api_call, got:)"
58
+ sed 's/^/ /' "$CALL_LOG"
59
+ FAIL=$((FAIL + 1))
60
+ else
61
+ echo " PASS: $desc"
62
+ PASS=$((PASS + 1))
63
+ fi
64
+ }
65
+
66
+ echo "=== ORC render-verdict ==="
67
+
68
+ # --- Test 1: happy path, no comment ---
69
+ > "$CALL_LOG"
70
+ OUT=$(bash "${SKILL_PARENT}/render-verdict/execute.sh" '{"workItemId":"wi-1","verdict":"verified"}' 2>&1 || true)
71
+ assert_log_contains "POSTs to the verdict endpoint" "POST /task-pool/items/wi-1/verdict"
72
+ assert_log_contains "body carries verdict=verified" '"verdict": "verified"'
73
+ if echo "$OUT" | grep -q '"comment"'; then
74
+ echo " FAIL: body should omit comment when none was given"
75
+ FAIL=$((FAIL + 1))
76
+ else
77
+ echo " PASS: no comment field sent when none was given"
78
+ PASS=$((PASS + 1))
79
+ fi
80
+
81
+ # --- Test 2: comment is included when given (rejection path) ---
82
+ > "$CALL_LOG"
83
+ bash "${SKILL_PARENT}/render-verdict/execute.sh" \
84
+ '{"workItemId":"wi-2","verdict":"rejected","comment":"Missing tests"}' >/dev/null 2>&1 || true
85
+ assert_log_contains "POSTs to the verdict endpoint" "POST /task-pool/items/wi-2/verdict"
86
+ assert_log_contains "body carries verdict=rejected" '"verdict": "rejected"'
87
+ assert_log_contains "body carries the comment" '"comment": "Missing tests"'
88
+
89
+ # --- Test 3: an invalid verdict never reaches api_call ---
90
+ > "$CALL_LOG"
91
+ OUT=$(bash "${SKILL_PARENT}/render-verdict/execute.sh" '{"workItemId":"wi-3","verdict":"approved"}' 2>&1 || true)
92
+ assert_log_empty "invalid verdict makes no HTTP call"
93
+ if echo "$OUT" | grep -qi "verdict must be"; then
94
+ echo " PASS: error names the accepted values"
95
+ PASS=$((PASS + 1))
96
+ else
97
+ echo " FAIL: expected an error naming accepted verdict values, got: $OUT"
98
+ FAIL=$((FAIL + 1))
99
+ fi
100
+
101
+ # --- Test 4: workItemId is required ---
102
+ > "$CALL_LOG"
103
+ OUT=$(bash "${SKILL_PARENT}/render-verdict/execute.sh" '{"verdict":"verified"}' 2>&1 || true)
104
+ assert_log_empty "missing workItemId makes no HTTP call"
105
+ if echo "$OUT" | grep -qi "workItemId"; then
106
+ echo " PASS: error names the missing param"
107
+ PASS=$((PASS + 1))
108
+ else
109
+ echo " FAIL: expected an error naming workItemId, got: $OUT"
110
+ FAIL=$((FAIL + 1))
111
+ fi
112
+
113
+ # --- Test 5: taskId is accepted as an alias for workItemId ---
114
+ > "$CALL_LOG"
115
+ bash "${SKILL_PARENT}/render-verdict/execute.sh" '{"taskId":"wi-4","verdict":"verified"}' >/dev/null 2>&1 || true
116
+ assert_log_contains "taskId alias resolves to the same endpoint" "POST /task-pool/items/wi-4/verdict"
117
+
118
+ # --- Summary ---
119
+ echo ""
120
+ echo "=== Results: $PASS passed, $FAIL failed ==="
121
+ [ "$FAIL" -eq 0 ]
@@ -27,7 +27,6 @@ For users who installed Crewly BEFORE the v2.1 LLM-wiki landed (2026-05-22+). Th
27
27
  | `~/.crewly/agents/<id>/memory.json roleKnowledge[]` | `<project>/.crewly/wiki/llm-curated/{patterns,decisions}/<date>-<slug>.md` (copy; original retained) |
28
28
  | `<crewly-src>/config/sops/<role>/*.md` (OSS-distributed) | `~/.crewly/global-wiki/llm-curated/sops/<role>/<slug>.md` (via `migrate/oss-sops`) |
29
29
  | `<crewly-src>/config/domain-sops/*.sop.md` | `~/.crewly/global-wiki/llm-curated/sops/domain/<slug>.md` |
30
- | `<crewly-src>/config/templates/pro-sops/norms/*.md` | `~/.crewly/global-wiki/llm-curated/sops/pro-norms/<slug>.md` |
31
30
 
32
31
  Per spec §6 the agent's `memory.json` stays put — this skill **copies** its `roleKnowledge` entries to the wiki rather than moving them, so private agent memory keeps working unchanged.
33
32
 
@@ -38,7 +38,7 @@ Compiles results from all worker sub-tasks into a structured markdown report for
38
38
  ## Usage
39
39
 
40
40
  ```bash
41
- bash {{SKILLS_PATH}}/team-leader/aggregate-results/execute.sh '{"teamId":"team-123","objective":"Build auth module","reportType":"final","taskPaths":["/project/.crewly/tasks/m1/done/task1.md","/project/.crewly/tasks/m1/done/task2.md"],"projectPath":"/path/to/project"}'
41
+ bash {{SKILLS_PATH}}/team-leader/aggregate-results/execute.sh '{"teamId":"team-123","objective":"Build auth module","reportType":"final","taskPaths":["/path/to/report-1.md","/path/to/report-2.md"],"projectPath":"/path/to/project"}'
42
42
  ```
43
43
 
44
44
  ## Parameters
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: Assign Ticket (TL)
3
+ description: Assign a project ticket (<project>/.crewly/tickets/) to one of your workers; the worker gets a linked WorkItem and is dispatched.
4
+ version: 1.0.0
5
+ category: task-management
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - team-leader
9
+ triggers:
10
+ - assign ticket
11
+ - give this ticket to
12
+ - backlog assignment
13
+ tags:
14
+ - tickets
15
+ - backlog
16
+ - delegation
17
+ execution:
18
+ type: script
19
+ script:
20
+ file: execute.sh
21
+ interpreter: bash
22
+ timeoutMs: 15000
23
+ ---
24
+
25
+ # Assign Ticket (Team Leader)
26
+
27
+ Project tickets are the project's own backlog (see the `project-tickets`
28
+ skill). Workers take `ready` tickets themselves when they are idle; use this
29
+ when you want a specific worker on a specific ticket.
30
+
31
+ ```bash
32
+ # Start work now: the ticket goes in_progress and the worker gets a WorkItem
33
+ bash {{TL_SKILLS_PATH}}/assign-ticket/execute.sh --project /path/to/project --id APP-12 --to worker-session
34
+
35
+ # Only record who will do it (no WorkItem yet)
36
+ bash {{TL_SKILLS_PATH}}/assign-ticket/execute.sh --project /path/to/project --id APP-12 --to worker-session --no-start
37
+ ```
38
+
39
+ Rules the backend enforces:
40
+ - You must lead a team that works on the project.
41
+ - The worker must be on a team of that project (and on the ticket's `team`, if
42
+ it names one).
43
+ - A ticket that is already in progress must be released first
44
+ (`project-tickets release`), so two workers never hold one ticket.
45
+
46
+ When the worker completes the WorkItem, you review it through the normal
47
+ verification item; once you verify it the ticket moves to `done` by itself.