crewly 1.13.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  28. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  31. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  36. package/dist/backend/backend/src/index.d.ts.map +1 -1
  37. package/dist/backend/backend/src/index.js +20 -0
  38. package/dist/backend/backend/src/index.js.map +1 -1
  39. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  40. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  41. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  42. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  43. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  45. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
  48. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
  50. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  53. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  54. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  56. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  58. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  60. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  62. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  64. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  65. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  66. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  68. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  70. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  72. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  74. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  76. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  78. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  81. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  82. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  83. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  84. package/dist/backend/backend/src/types/v2/index.js +1 -1
  85. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  86. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  87. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  88. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  89. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  90. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  91. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  92. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  93. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  94. package/dist/backend/build-info.json +4 -0
  95. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  96. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  97. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  98. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  99. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  100. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  101. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  102. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  103. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  104. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  105. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  106. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  107. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  108. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  110. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  111. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  112. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  113. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  114. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  115. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  116. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  118. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  119. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  120. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  122. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  124. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  126. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  128. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  130. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  132. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  134. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  136. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  138. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  140. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  142. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  144. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  146. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  148. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  150. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  152. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  154. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  156. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  158. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  160. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  162. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  164. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  166. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  168. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  170. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  172. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  174. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  175. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  176. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  178. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  180. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  182. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  183. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  184. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  186. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  187. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  188. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  190. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  191. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  192. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  194. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  195. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  196. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  198. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  200. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  202. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  284. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  286. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  287. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  288. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  290. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  291. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  292. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  294. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  295. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  296. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  298. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  299. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  300. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  302. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  303. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  304. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  306. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  307. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  308. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  310. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  312. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  314. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  316. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  318. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  319. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  320. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  322. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  323. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  324. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  326. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  327. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  328. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  330. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  331. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  332. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  334. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  335. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  336. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  338. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  339. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  340. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  342. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  343. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  344. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  345. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  346. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  347. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  348. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  350. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  351. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  352. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  354. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  355. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  356. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  358. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  359. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  360. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  362. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  364. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  366. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  367. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  368. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  370. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  371. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  372. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  374. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  375. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  376. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  378. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  380. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  382. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  383. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  384. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  386. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  388. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  390. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  392. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  394. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  395. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  396. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  398. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  399. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  400. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  402. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  403. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  404. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  406. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  408. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  410. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  411. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  412. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  414. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  416. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  418. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  420. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  422. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  424. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  426. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  427. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  428. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/session/index.js +50 -0
  430. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  431. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  432. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  434. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  436. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  438. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  439. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  440. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  442. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  443. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  444. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  446. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  447. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  448. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  450. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  451. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  452. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  454. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  456. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  458. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  460. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  462. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  464. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  466. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  468. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  470. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  472. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  474. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  475. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  476. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  478. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  479. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  480. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  482. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  484. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  486. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  487. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  488. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  490. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  492. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  494. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  495. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  496. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  498. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  500. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  502. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  503. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  504. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  506. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  508. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  510. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  512. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  514. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  516. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  518. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  519. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  520. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  522. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  524. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  526. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  528. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  529. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  530. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  531. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  532. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  533. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  534. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  535. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  536. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  537. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  538. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  539. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  540. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  541. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  542. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  543. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  544. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  545. package/dist/cli/backend/src/types/v2/index.js +22 -0
  546. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  547. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  548. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  549. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  550. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  551. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  552. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  553. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  554. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  555. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  556. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  557. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  558. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  559. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  560. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  562. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  564. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  565. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  566. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  567. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  568. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  570. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  571. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  572. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  573. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  574. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  575. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  576. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  577. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  578. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  579. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  580. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  581. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  582. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  583. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  584. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  585. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  586. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  587. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  588. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  589. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  590. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  591. package/frontend/dist/assets/index-890d3f9d.js +4961 -0
  592. package/frontend/dist/index.html +1 -1
  593. package/package.json +2 -2
  594. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
  595. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
  596. package/packages/crewly-agent/src/runtime/types.ts +56 -5
  597. package/frontend/dist/assets/index-aa737fd3.js +0 -5254
@@ -0,0 +1,471 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # Wire-shape contract test for /api/task-pool/add and /api/task-pool/claim
4
+ #
5
+ # Sibling of `complete-body-shape.test.sh`, which covers /task-pool/complete.
6
+ # Same harness: a Python HTTP stub records every POST body, each skill is
7
+ # pointed at it via CREWLY_API_URL, and the CAPTURED body is asserted against
8
+ # the shape the controller actually destructures.
9
+ #
10
+ # WHY THIS EXISTS
11
+ # ---------------
12
+ # Five separate skills have now shipped a POST body the controller never
13
+ # reads. Nothing binds a skill's request body to the shape its controller
14
+ # destructures, so they drift silently and independently:
15
+ # #734 complete-task + both delegate-task skills (/task-pool/complete)
16
+ # #735-family agent/core/accept-task (/task-pool/claim)
17
+ # #735-family agent/core/create-task (/task-pool/add)
18
+ # Five instances is not five bugs — it is one missing contract. This test is
19
+ # that contract for the two endpoints in the create/claim family.
20
+ #
21
+ # The failures are invisible without an executing test: a skill that posts an
22
+ # unread field gets a 200 and reports success, while the field is dropped. A
23
+ # static grep of the jq literal would pass for the wrong reason. So this test
24
+ # EXECUTES each skill and inspects the bytes that actually went on the wire.
25
+ #
26
+ # Test runner:
27
+ # bash config/skills/_common/task-pool-body-shape.test.sh
28
+ # echo $? # 0 on pass, 1 on fail
29
+ # =============================================================================
30
+ set -eo pipefail
31
+
32
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33
+ REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
34
+ PASS=0
35
+ FAIL=0
36
+
37
+ # The exact key set `blockItem` destructures from req.body:
38
+ # const { agentId, reason } = req.body — and agentId is HARD-REQUIRED (400)
39
+ BLOCK_ALLOWED_KEYS='["agentId","reason"]'
40
+
41
+ # The exact key set `claimItem` destructures from req.body:
42
+ # const { agentId, workItemId, filters } = req.body
43
+ CLAIM_ALLOWED_KEYS='["agentId","filters","workItemId"]'
44
+
45
+ # The WorkItemOwner enum accepted by validateCreateWorkItemInput.
46
+ OWNER_ENUM='["orchestrator","team_lead","agent","system"]'
47
+
48
+ # Every field of `CreateWorkItemInput` (backend/src/types/v2/work-item.types.ts),
49
+ # plus the three legacy-full-shape fields addItem inspects to decide which path
50
+ # to take. Anything OUTSIDE this set is silently discarded by the endpoint:
51
+ # `createWorkItem(input)` copies named fields only, so an unknown key produces
52
+ # a 200 and vanishes. That is the whole bug family in one assertion.
53
+ ADD_ALLOWED_KEYS='["id","requestId","parentWorkItemId","type","owner","target","title","description","briefMarkdown","scheduledAt","maxRetries","triggerId","projectTaskId","missionId","metadata","dependsOn","status","createdAt","retryCount","inputTokens","outputTokens","cost"]'
54
+
55
+ assert_jq() {
56
+ local test_name="$1" jq_filter="$2" body="$3"
57
+ local result
58
+ result=$(printf '%s' "$body" | jq -er "$jq_filter" 2>/dev/null || true)
59
+ if [ -n "$result" ] && [ "$result" != "null" ] && [ "$result" != "false" ]; then
60
+ PASS=$((PASS + 1))
61
+ echo " ✓ ${test_name}"
62
+ else
63
+ FAIL=$((FAIL + 1))
64
+ echo " ✗ ${test_name}"
65
+ echo " filter: ${jq_filter}"
66
+ echo " body: ${body}"
67
+ fi
68
+ }
69
+
70
+ # Assert a captured /task-pool/add body is a shape `addItem` actually reads.
71
+ # Applied uniformly to every /add callsite — this is the contract itself.
72
+ assert_add_contract() {
73
+ local label="$1" body="$2"
74
+ # 1. No envelope. addItem reads `req.body` directly; `{workItem: {...}}`
75
+ # makes every real field invisible and 400s on `type`/`owner`/`title`.
76
+ assert_jq "${label}: no {workItem:...} envelope" '.workItem == null' "$body"
77
+ # 2. Minimal CreateWorkItemInput required fields, at top level.
78
+ assert_jq "${label}: type is a string" '.type | type == "string"' "$body"
79
+ assert_jq "${label}: title is a non-empty string" '.title | type == "string" and length > 0' "$body"
80
+ # 3. owner is the WorkItemOwner ROLE enum, not a session name.
81
+ local owner
82
+ owner=$(printf '%s' "$body" | jq -r '.owner // ""')
83
+ if printf '%s' "$OWNER_ENUM" | jq -e --arg o "$owner" 'index($o) != null' >/dev/null 2>&1; then
84
+ PASS=$((PASS + 1)); echo " ✓ ${label}: owner '${owner}' is a valid WorkItemOwner"
85
+ else
86
+ FAIL=$((FAIL + 1)); echo " ✗ ${label}: owner '${owner}' is NOT a WorkItemOwner (expected one of ${OWNER_ENUM})"
87
+ fi
88
+ # 4. No key outside CreateWorkItemInput. This is the general form of the
89
+ # bug: `priority` and `projectPath` are NOT WorkItem fields, so a caller
90
+ # passing --priority critical believes it took effect while the endpoint
91
+ # drops it. Such values belong in `metadata`.
92
+ local extra_add
93
+ extra_add=$(printf '%s' "$body" | jq -c --argjson allowed "$ADD_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
94
+ if [ "$extra_add" = "[]" ]; then
95
+ PASS=$((PASS + 1)); echo " ✓ ${label}: every top-level key is read by the endpoint"
96
+ else
97
+ FAIL=$((FAIL + 1))
98
+ echo " ✗ ${label}: keys silently discarded by addItem: ${extra_add}"
99
+ echo " These are not CreateWorkItemInput fields — move them into metadata."
100
+ fi
101
+ # 5. If an id is sent it must be accompanied by status AND createdAt,
102
+ # otherwise isLegacyFullShape is false and the caller's intent is
103
+ # ambiguous. Either commit to the legacy full shape or send neither.
104
+ local has_id has_status has_created
105
+ has_id=$(printf '%s' "$body" | jq -r 'has("id")')
106
+ has_status=$(printf '%s' "$body" | jq -r 'has("status")')
107
+ has_created=$(printf '%s' "$body" | jq -r 'has("createdAt")')
108
+ if [ "$has_id" = "false" ] || { [ "$has_status" = "true" ] && [ "$has_created" = "true" ]; }; then
109
+ PASS=$((PASS + 1)); echo " ✓ ${label}: id/status/createdAt are consistent (minimal or full, not half)"
110
+ else
111
+ FAIL=$((FAIL + 1))
112
+ echo " ✗ ${label}: half-legacy shape — id=${has_id} status=${has_status} createdAt=${has_created}"
113
+ echo " A body with id but no createdAt takes the MINIMAL path; send all three or none."
114
+ fi
115
+ }
116
+
117
+ # Assert a captured /task-pool/claim body only carries keys claimItem reads.
118
+ assert_claim_contract() {
119
+ local label="$1" body="$2"
120
+ assert_jq "${label}: agentId is a non-empty string" '.agentId | type == "string" and length > 0' "$body"
121
+ local extra
122
+ extra=$(printf '%s' "$body" | jq -c --argjson allowed "$CLAIM_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
123
+ if [ "$extra" = "[]" ]; then
124
+ PASS=$((PASS + 1)); echo " ✓ ${label}: no keys outside {agentId, workItemId, filters}"
125
+ else
126
+ FAIL=$((FAIL + 1)); echo " ✗ ${label}: body carries keys the controller never reads: ${extra}"
127
+ fi
128
+ }
129
+
130
+ # Assert a captured /task-pool/block body matches what blockItem reads.
131
+ assert_block_contract() {
132
+ local label="$1" body="$2"
133
+ assert_jq "${label}: agentId present (endpoint 400s without it)" '.agentId | type == "string" and length > 0' "$body"
134
+ assert_jq "${label}: reason is a non-empty string" '.reason | type == "string" and length > 0' "$body"
135
+ local extra
136
+ extra=$(printf '%s' "$body" | jq -c --argjson allowed "$BLOCK_ALLOWED_KEYS" '[keys[] | select(. as $k | $allowed | index($k) == null)]')
137
+ if [ "$extra" = "[]" ]; then
138
+ PASS=$((PASS + 1)); echo " ✓ ${label}: no keys outside {agentId, reason}"
139
+ else
140
+ FAIL=$((FAIL + 1)); echo " ✗ ${label}: keys silently discarded by blockItem: ${extra}"
141
+ fi
142
+ }
143
+
144
+ start_stub() {
145
+ local port="$1" log_file="$2"
146
+ PORT=$port LOG_FILE=$log_file \
147
+ python3 -c '
148
+ import http.server, json, os
149
+ LOG = os.environ["LOG_FILE"]
150
+ PORT = int(os.environ["PORT"])
151
+
152
+ class Handler(http.server.BaseHTTPRequestHandler):
153
+ def log_message(self, *a, **kw): pass
154
+ def _record(self, body_bytes):
155
+ with open(LOG, "a") as f:
156
+ f.write(json.dumps({
157
+ "method": self.command,
158
+ "path": self.path,
159
+ "body": body_bytes.decode("utf-8") if body_bytes else "",
160
+ }) + "\n")
161
+ def _json(self, payload):
162
+ self.send_response(200)
163
+ self.send_header("Content-Type", "application/json")
164
+ self.end_headers()
165
+ self.wfile.write(payload)
166
+ def do_POST(self):
167
+ ln = int(self.headers.get("Content-Length") or 0)
168
+ body = self.rfile.read(ln) if ln else b""
169
+ self._record(body)
170
+ if self.path.startswith("/api/task-pool/claim"):
171
+ self._json(b"{\"success\":true,\"data\":{\"workItem\":{\"id\":\"wi-stub-1\",\"title\":\"stub\"},\"claim\":{\"id\":\"claim-1\"}}}")
172
+ return
173
+ if self.path.startswith("/api/task-pool/add"):
174
+ self._json(b"{\"success\":true,\"data\":{\"id\":\"wi-stub-1\",\"workItemId\":\"wi-stub-1\",\"status\":\"queued\"}}")
175
+ return
176
+ self._json(b"{\"success\":true}")
177
+ def do_GET(self):
178
+ self._record(b"")
179
+ # block-task pre-checks item status before calling /block.
180
+ # NOTE: this block lives inside a bash single-quoted python3 -c
181
+ # argument, so it must contain NO apostrophe characters at all —
182
+ # a stray one silently terminates the bash string and the file
183
+ # then fails to parse many lines later.
184
+ # A marker file lets a scenario choose what status is reported; with
185
+ # no marker the status is absent and the pre-check is skipped, which
186
+ # keeps every pre-existing scenario behaving as before.
187
+ marker = LOG + ".status"
188
+ if self.path.startswith("/api/task-pool/items/") and os.path.exists(marker):
189
+ with open(marker) as f:
190
+ st = f.read().strip()
191
+ self._json(json.dumps({"success": True, "data": {"id": "wi-stub-1", "status": st}}).encode())
192
+ return
193
+ self._json(b"{\"success\":true,\"data\":[],\"workItems\":[]}")
194
+
195
+ httpd = http.server.HTTPServer(("127.0.0.1", PORT), Handler)
196
+ httpd.serve_forever()
197
+ ' >/dev/null 2>&1 &
198
+ echo $!
199
+ }
200
+
201
+ PORT=39185
202
+ TMPROOT=$(mktemp -d -t crewly-taskpool-shape-XXXXXX)
203
+ LOG="${TMPROOT}/requests.jsonl"
204
+ : > "$LOG"
205
+
206
+ STUB_PID=$(start_stub "$PORT" "$LOG")
207
+ trap "kill $STUB_PID 2>/dev/null || true; rm -rf $TMPROOT" EXIT
208
+
209
+ for _ in 1 2 3 4 5 6 7 8 9 10; do
210
+ if curl -s "http://127.0.0.1:${PORT}/healthz" >/dev/null 2>&1; then break; fi
211
+ sleep 0.1
212
+ done
213
+
214
+ export CREWLY_API_URL="http://127.0.0.1:${PORT}"
215
+
216
+ capture() { grep -F "\"path\": \"$1\"" "$LOG" | head -1 | jq -r '.body' 2>/dev/null || true; }
217
+
218
+ echo "=== /task-pool/add + /task-pool/claim body-shape contract ==="
219
+
220
+ # ---------------------------------------------------------------------------
221
+ # Scenario 1 — agent/core/create-task -> /task-pool/add
222
+ # ---------------------------------------------------------------------------
223
+ echo ""
224
+ echo "--- Scenario 1: agent/core/create-task -> /add ---"
225
+ : > "$LOG"
226
+ bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
227
+ --project-path /tmp/proj-foo --task "Contract test task" \
228
+ --priority high --session quinn-target >/dev/null 2>&1 || true
229
+ BODY=$(capture "/api/task-pool/add")
230
+ if [ -z "$BODY" ]; then
231
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured"
232
+ else
233
+ assert_add_contract "create-task" "$BODY"
234
+ assert_jq "create-task: target is the session name" '.target == "quinn-target"' "$BODY"
235
+ assert_jq "create-task: priority preserved in metadata.priority" '.metadata.priority == "high"' "$BODY"
236
+ fi
237
+
238
+ # ---------------------------------------------------------------------------
239
+ # Scenario 2 — agent/core/accept-task -> /task-pool/claim (targeted)
240
+ # ---------------------------------------------------------------------------
241
+ echo ""
242
+ echo "--- Scenario 2: agent/core/accept-task targeted -> /claim ---"
243
+ : > "$LOG"
244
+ bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
245
+ '{"sessionName":"quinn-claimer","workItemId":"wi-requested-42"}' >/dev/null 2>&1 || true
246
+ BODY=$(capture "/api/task-pool/claim")
247
+ if [ -z "$BODY" ]; then
248
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
249
+ else
250
+ assert_claim_contract "accept-task(targeted)" "$BODY"
251
+ assert_jq "accept-task(targeted): requested workItemId IS forwarded" '.workItemId == "wi-requested-42"' "$BODY"
252
+ fi
253
+
254
+ # ---------------------------------------------------------------------------
255
+ # Scenario 3 — accept-task taskId alias -> /claim
256
+ # ---------------------------------------------------------------------------
257
+ echo ""
258
+ echo "--- Scenario 3: agent/core/accept-task taskId alias -> /claim ---"
259
+ : > "$LOG"
260
+ bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
261
+ '{"sessionName":"quinn-claimer","taskId":"wi-alias-7"}' >/dev/null 2>&1 || true
262
+ BODY=$(capture "/api/task-pool/claim")
263
+ if [ -z "$BODY" ]; then
264
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
265
+ else
266
+ assert_claim_contract "accept-task(alias)" "$BODY"
267
+ assert_jq "accept-task(alias): taskId is forwarded as workItemId" '.workItemId == "wi-alias-7"' "$BODY"
268
+ fi
269
+
270
+ # ---------------------------------------------------------------------------
271
+ # Scenario 4 — accept-task next-available -> /claim (no workItemId)
272
+ # ---------------------------------------------------------------------------
273
+ echo ""
274
+ echo "--- Scenario 4: agent/core/accept-task FIFO -> /claim ---"
275
+ : > "$LOG"
276
+ bash "${REPO_ROOT}/config/skills/agent/core/accept-task/execute.sh" \
277
+ '{"sessionName":"quinn-claimer"}' >/dev/null 2>&1 || true
278
+ BODY=$(capture "/api/task-pool/claim")
279
+ if [ -z "$BODY" ]; then
280
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/claim POST captured"
281
+ else
282
+ assert_claim_contract "accept-task(fifo)" "$BODY"
283
+ assert_jq "accept-task(fifo): omits workItemId entirely" 'has("workItemId") == false' "$BODY"
284
+ fi
285
+
286
+ # ---------------------------------------------------------------------------
287
+ # Scenario 5 — team-leader/delegate-task -> /task-pool/add
288
+ # ---------------------------------------------------------------------------
289
+ echo ""
290
+ echo "--- Scenario 5: team-leader/delegate-task -> /add ---"
291
+ : > "$LOG"
292
+ bash "${REPO_ROOT}/config/skills/team-leader/delegate-task/execute.sh" \
293
+ '{"to":"quinn-target","task":"Contract test delegation","from":"quinn-tl"}' >/dev/null 2>&1 || true
294
+ BODY=$(capture "/api/task-pool/add")
295
+ if [ -z "$BODY" ]; then
296
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for team-leader/delegate-task"
297
+ else
298
+ assert_add_contract "tl-delegate-task" "$BODY"
299
+ fi
300
+
301
+ # ---------------------------------------------------------------------------
302
+ # Scenario 6 — orchestrator/delegate-task -> /task-pool/add
303
+ # ---------------------------------------------------------------------------
304
+ echo ""
305
+ echo "--- Scenario 6: orchestrator/delegate-task -> /add ---"
306
+ : > "$LOG"
307
+ # The orc delegate-task skill enforces the Request Contract (P0-3): the brief
308
+ # must carry Goal + Expected Outcome + Eval Criteria markers or it refuses.
309
+ bash "${REPO_ROOT}/config/skills/orchestrator/delegate-task/execute.sh" \
310
+ '{"to":"quinn-target","task":"Goal: contract test orc delegation. Expected Outcome: a /task-pool/add body is emitted. Eval Criteria: body shape matches CreateWorkItemInput."}' \
311
+ >/dev/null 2>&1 || true
312
+ BODY=$(capture "/api/task-pool/add")
313
+ if [ -z "$BODY" ]; then
314
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for orchestrator/delegate-task"
315
+ else
316
+ assert_add_contract "orc-delegate-task" "$BODY"
317
+ fi
318
+
319
+ # ---------------------------------------------------------------------------
320
+ # Scenario 7 — agent/core/break-down-request -> /task-pool/add
321
+ #
322
+ # This callsite deliberately uses the LEGACY FULL shape (id + status +
323
+ # createdAt) so its client-side ids can be referenced upfront. It is the
324
+ # control case: the contract must accept the legacy path, not just minimal.
325
+ # ---------------------------------------------------------------------------
326
+ echo ""
327
+ echo "--- Scenario 7: agent/core/break-down-request -> /add (legacy full shape) ---"
328
+ : > "$LOG"
329
+ bash "${REPO_ROOT}/config/skills/agent/core/break-down-request/execute.sh" \
330
+ '{"requestId":"req-contract-1","sessionName":"quinn-bdr","tasks":[{"title":"Contract subtask","description":"d","type":"delegate","target":"quinn-target"}]}' \
331
+ >/dev/null 2>&1 || true
332
+ BODY=$(capture "/api/task-pool/add")
333
+ if [ -z "$BODY" ]; then
334
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for break-down-request"
335
+ else
336
+ assert_add_contract "break-down-request" "$BODY"
337
+ fi
338
+
339
+ # ---------------------------------------------------------------------------
340
+ # Scenario 8 — team-leader/decompose-goal -> /task-pool/add
341
+ # ---------------------------------------------------------------------------
342
+ echo ""
343
+ echo "--- Scenario 8: team-leader/decompose-goal -> /add ---"
344
+ : > "$LOG"
345
+ bash "${REPO_ROOT}/config/skills/team-leader/decompose-goal/execute.sh" \
346
+ '{"objective":"Contract test objective","projectPath":"/tmp/proj-foo","tasks":[{"title":"Contract subtask","description":"d","requiredRole":"developer","priority":"high"}]}' \
347
+ >/dev/null 2>&1 || true
348
+ BODY=$(capture "/api/task-pool/add")
349
+ if [ -z "$BODY" ]; then
350
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for team-leader/decompose-goal"
351
+ else
352
+ assert_add_contract "decompose-goal" "$BODY"
353
+ assert_jq "decompose-goal: priority preserved in metadata.priority" '.metadata.priority != null' "$BODY"
354
+ fi
355
+
356
+ # ---------------------------------------------------------------------------
357
+ # Scenario 9 — agent/core/block-task -> /task-pool/block/:id
358
+ #
359
+ # This callsite sent {reason, questions?, urgency?} and NO agentId, so every
360
+ # call 400'd with "agentId is required" — the skill agents use to report being
361
+ # blocked could not report anything. `questions`/`urgency` had no field on the
362
+ # endpoint and were discarded; they are now folded into `reason`, which is read.
363
+ # ---------------------------------------------------------------------------
364
+ echo ""
365
+ echo "--- Scenario 9: agent/core/block-task -> /block ---"
366
+ : > "$LOG"
367
+ bash "${REPO_ROOT}/config/skills/agent/core/block-task/execute.sh" \
368
+ '{"workItemId":"wi-stub-1","sessionName":"quinn-blocker","reason":"missing creds","urgency":"high","questions":"who owns X?"}' \
369
+ >/dev/null 2>&1 || true
370
+ BODY=$(capture "/api/task-pool/block/wi-stub-1")
371
+ if [ -z "$BODY" ]; then
372
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/block POST captured for block-task"
373
+ else
374
+ assert_block_contract "block-task" "$BODY"
375
+ assert_jq "block-task: urgency folded into reason, not dropped" '.reason | test("urgency")' "$BODY"
376
+ assert_jq "block-task: questions folded into reason, not dropped" '.reason | test("who owns X")' "$BODY"
377
+ fi
378
+
379
+ # ---------------------------------------------------------------------------
380
+ # Scenario 10 — create-task carries a brief (instance 10)
381
+ #
382
+ # create-task previously sent only {title,type,owner,target,metadata}, so every
383
+ # WorkItem filed through the documented skill was TITLE-ONLY — an agent could
384
+ # not attach Goal + Expected Outcome + Eval Criteria at all. `description` and
385
+ # `briefMarkdown` are both CreateWorkItemInput fields the endpoint reads.
386
+ # ---------------------------------------------------------------------------
387
+ echo ""
388
+ echo "--- Scenario 10: create-task carries description + briefMarkdown ---"
389
+ : > "$LOG"
390
+ BRIEF_FILE=$(mktemp)
391
+ printf '## GOAL\nShip the thing.\n\n## EVAL CRITERIA\n1. It ships.\n' > "$BRIEF_FILE"
392
+ bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
393
+ --project-path /tmp/proj-foo --task "Briefed task" \
394
+ --description "A short summary" --brief "@${BRIEF_FILE}" >/dev/null 2>&1 || true
395
+ BODY=$(capture "/api/task-pool/add")
396
+ if [ -z "$BODY" ]; then
397
+ FAIL=$((FAIL + 1)); echo " ✗ no /task-pool/add POST captured for briefed create-task"
398
+ else
399
+ assert_add_contract "create-task(briefed)" "$BODY"
400
+ assert_jq "create-task: description forwarded" '.description == "A short summary"' "$BODY"
401
+ assert_jq "create-task: briefMarkdown forwarded from @file" '.briefMarkdown | test("EVAL CRITERIA")' "$BODY"
402
+ fi
403
+ rm -f "$BRIEF_FILE"
404
+
405
+ # Omitting both must still produce a clean minimal WorkItem — no empty strings.
406
+ : > "$LOG"
407
+ bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
408
+ --project-path /tmp/proj-foo --task "Unbriefed task" >/dev/null 2>&1 || true
409
+ BODY=$(capture "/api/task-pool/add")
410
+ if [ -n "$BODY" ]; then
411
+ assert_jq "create-task: omits description entirely when unset" 'has("description") == false' "$BODY"
412
+ assert_jq "create-task: omits briefMarkdown entirely when unset" 'has("briefMarkdown") == false' "$BODY"
413
+ fi
414
+
415
+ # Over-cap brief must fail IN THE SKILL, naming the limit — not reach the server.
416
+ : > "$LOG"
417
+ BIG_FILE=$(mktemp)
418
+ python3 -c "import sys; sys.stdout.write('x' * 17000)" > "$BIG_FILE"
419
+ BIG_OUT=$(bash "${REPO_ROOT}/config/skills/agent/core/create-task/execute.sh" \
420
+ --project-path /tmp/proj-foo --task "Oversized" --brief "@${BIG_FILE}" 2>&1 || true)
421
+ if printf '%s' "$BIG_OUT" | grep -q "16384"; then
422
+ PASS=$((PASS + 1)); echo " ✓ create-task: over-cap brief rejected naming the 16384-byte limit"
423
+ else
424
+ FAIL=$((FAIL + 1)); echo " ✗ create-task: expected a 16384-byte limit error, got: ${BIG_OUT}"
425
+ fi
426
+ if grep -qF '"path": "/api/task-pool/add"' "$LOG"; then
427
+ FAIL=$((FAIL + 1)); echo " ✗ create-task: over-cap brief still hit the server — must fail before the POST"
428
+ else
429
+ PASS=$((PASS + 1)); echo " ✓ create-task: over-cap brief never reached the server"
430
+ fi
431
+ rm -f "$BIG_FILE"
432
+
433
+ # ---------------------------------------------------------------------------
434
+ # Scenario 11 — block-task pre-checks status instead of letting the state
435
+ # machine answer with a bare conflict.
436
+ #
437
+ # WORK_ITEM_TRANSITIONS allows `blocked` only from `running`. Blocking a queued
438
+ # item previously surfaced as a raw HTTP 500 carrying a state-machine string —
439
+ # a CLIENT error dressed as a server fault, which makes retry logic treat a
440
+ # PERMANENT failure as transient.
441
+ # ---------------------------------------------------------------------------
442
+ echo ""
443
+ echo "--- Scenario 11: block-task status pre-check ---"
444
+ : > "$LOG"
445
+ echo "queued" > "${LOG}.status"
446
+ PRECHECK_OUT=$(bash "${REPO_ROOT}/config/skills/agent/core/block-task/execute.sh" \
447
+ '{"workItemId":"wi-stub-1","sessionName":"quinn-blocker","reason":"missing creds"}' 2>&1 || true)
448
+ rm -f "${LOG}.status"
449
+
450
+ if printf '%s' "$PRECHECK_OUT" | grep -q "not 'running'"; then
451
+ PASS=$((PASS + 1)); echo " ✓ refuses a queued item, naming its actual status"
452
+ else
453
+ FAIL=$((FAIL + 1)); echo " ✗ expected a status refusal, got: ${PRECHECK_OUT}"
454
+ fi
455
+
456
+ if printf '%s' "$PRECHECK_OUT" | grep -q "accept-task"; then
457
+ PASS=$((PASS + 1)); echo " ✓ names the remedy skill rather than the state machine"
458
+ else
459
+ FAIL=$((FAIL + 1)); echo " ✗ refusal does not tell the caller how to proceed"
460
+ fi
461
+
462
+ if grep -qF '"path": "/api/task-pool/block/' "$LOG"; then
463
+ FAIL=$((FAIL + 1)); echo " ✗ called /block anyway — the pre-check must short-circuit"
464
+ else
465
+ PASS=$((PASS + 1)); echo " ✓ no /block POST emitted"
466
+ fi
467
+
468
+ echo ""
469
+ echo "=== Results: ${PASS} passed, ${FAIL} failed ==="
470
+ [ "$FAIL" -eq 0 ] || exit 1
471
+ exit 0
@@ -1,30 +1,55 @@
1
1
  #!/bin/bash
2
- # Claim the next available WorkItem from the V3 task-pool.
2
+ # Claim a WorkItem from the V3 task-pool.
3
+ #
4
+ # Two modes, mirroring `POST /api/task-pool/claim`:
5
+ #
6
+ # 1. Next-available (FIFO) — omit `workItemId`. The pool picks the
7
+ # highest-scored queued item available to this agent.
8
+ # 2. Targeted — pass `workItemId` (or its alias `taskId`). Claims THAT
9
+ # specific item. The controller branches to `claimSpecificItem`, which
10
+ # still enforces the agent-liveness and target-respect gates.
3
11
  #
4
12
  # V3-only as of spec 2026-05-06-task-management-v1-deprecation.md. The
5
13
  # legacy `/task-management/take-next` endpoint (which read `.md` files
6
14
  # from `delegated/open/`) is no longer the source of truth.
7
15
  #
8
16
  # Input shape (backwards-compat from v1):
9
- # { "sessionName": "dev-1", "projectPath"?: "...", "taskGroup"?: "..." }
17
+ # { "sessionName": "dev-1", "workItemId"?: "wi-abc", "projectPath"?: "...", "taskGroup"?: "..." }
10
18
  #
11
19
  # `taskGroup` (legacy v1 milestone filter) maps to V3's `filters.types`.
12
20
  # `teamMemberId` is no longer needed — V3 keys claims by `agentId`
13
21
  # (= sessionName).
22
+ #
23
+ # A targeted claim that cannot be satisfied surfaces the endpoint's 404 and
24
+ # exits non-zero. It deliberately does NOT fall back to next-available:
25
+ # silently handing back a DIFFERENT WorkItem than the one requested misroutes
26
+ # delegated work, which is strictly worse than a visible failure. (Quinn
27
+ # 2026-08-21: this skill dropped `workItemId` entirely, so every targeted
28
+ # delegation silently claimed an unrelated FIFO item instead.)
14
29
 
15
30
  set -euo pipefail
16
31
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
32
  source "${SCRIPT_DIR}/../../_common/lib.sh"
18
33
 
19
34
  INPUT=$(read_json_input "${1:-}")
20
- [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\"}' or echo '{...}' | execute.sh"
35
+ [ -z "$INPUT" ] && error_exit "Usage: execute.sh '{\"sessionName\":\"dev-1\"}' or execute.sh '{\"sessionName\":\"dev-1\",\"workItemId\":\"wi-abc\"}' or echo '{...}' | execute.sh"
21
36
 
22
37
  SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
23
38
  require_param "sessionName" "$SESSION_NAME"
24
39
 
40
+ # Accept `workItemId` or the `taskId` alias — briefs and dispatch messages
41
+ # refer to the item by id under both names.
42
+ WORK_ITEM_ID=$(printf '%s' "$INPUT" | jq -r '.workItemId // .taskId // empty')
43
+
25
44
  # v1's `taskGroup` is informational metadata; V3 filters by WorkItem `type`
26
45
  # instead. We pass the session name as the agent identity and let the pool
27
- # pick the highest-scored available WI for this agent.
28
- BODY=$(jq -n --arg agentId "$SESSION_NAME" '{agentId: $agentId}')
46
+ # pick the highest-scored available WI for this agent — unless a specific
47
+ # item was requested, in which case the pool must honour that id or fail.
48
+ if [ -n "$WORK_ITEM_ID" ]; then
49
+ BODY=$(jq -n --arg agentId "$SESSION_NAME" --arg workItemId "$WORK_ITEM_ID" \
50
+ '{agentId: $agentId, workItemId: $workItemId}')
51
+ else
52
+ BODY=$(jq -n --arg agentId "$SESSION_NAME" '{agentId: $agentId}')
53
+ fi
29
54
 
30
55
  api_call POST "/task-pool/claim" "$BODY"
@@ -7,7 +7,12 @@
7
7
  # `/task-pool/block/:workItemId` is.
8
8
  #
9
9
  # Input shape:
10
- # { "workItemId": "abc-123", "reason": "missing creds", "questions"?: "...", "urgency"?: "..." }
10
+ # { "workItemId": "abc-123", "sessionName": "dev-1", "reason": "missing creds",
11
+ # "questions"?: "...", "urgency"?: "..." }
12
+ #
13
+ # `sessionName` is REQUIRED (sent as `agentId`) — the endpoint 400s without it.
14
+ # `questions`/`urgency` are folded into `reason`; the endpoint has no field for
15
+ # them.
11
16
  #
12
17
  # Backwards-compat: if `absoluteTaskPath` is provided instead of
13
18
  # `workItemId`, we emit a warning and skip the call rather than fall back
@@ -35,12 +40,60 @@ fi
35
40
  require_param "workItemId" "$WORK_ITEM_ID"
36
41
  require_param "reason" "$REASON"
37
42
 
43
+ SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // .agentId // empty')
44
+ [ -z "$SESSION_NAME" ] && SESSION_NAME="${CREWLY_SESSION_NAME:-}"
45
+ require_param "sessionName (or agentId, or CREWLY_SESSION_NAME)" "$SESSION_NAME"
46
+
47
+ # `blockItem` destructures ONLY `{agentId, reason}` and hard-requires agentId
48
+ # (400 "agentId is required"). This skill previously sent neither agentId nor a
49
+ # readable home for `questions`/`urgency`, so EVERY call 400'd — the skill
50
+ # agents use to report being blocked could not report anything.
51
+ #
52
+ # `questions` and `urgency` have no field on this endpoint. Rather than drop
53
+ # caller-supplied content on the floor (the same silent-discard bug in a new
54
+ # shape), they are folded into `reason`, which IS read and is forwarded to
55
+ # TaskProjection.markBlocked. The information survives; only the structure is
56
+ # lost, and the endpoint has nowhere to put the structure.
57
+ if [ -n "$URGENCY" ]; then
58
+ REASON="[urgency: ${URGENCY}] ${REASON}"
59
+ fi
60
+ if [ -n "$QUESTIONS" ]; then
61
+ REASON="${REASON}
62
+
63
+ Open questions: ${QUESTIONS}"
64
+ fi
65
+
66
+ # Pre-check the status and explain, rather than letting the state machine
67
+ # answer with a bare conflict.
68
+ #
69
+ # WORK_ITEM_TRANSITIONS (backend/src/types/v2/work-item.types.ts) allows
70
+ # `blocked` ONLY from `running` — you can block work you have claimed, not work
71
+ # you have merely been dispatched. That rule is deliberate and stays: `blocked`
72
+ # has a single outbound edge (-> queued), so every consumer treats it as a
73
+ # near-terminal parking state while the state machine does not. Widening the
74
+ # ways IN would widen the surface for stranding.
75
+ #
76
+ # So the fix is the message, not the rule: name the current status and the
77
+ # remedy skill, the same disposition as the skipGates rejection.
78
+ CURRENT_STATUS=$(api_call GET "/task-pool/items/${WORK_ITEM_ID}" 2>/dev/null \
79
+ | jq -r '(.data // .) | .status // empty' 2>/dev/null || true)
80
+
81
+ if [ -n "$CURRENT_STATUS" ] && [ "$CURRENT_STATUS" != "running" ]; then
82
+ case "$CURRENT_STATUS" in
83
+ queued|scheduled)
84
+ error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}', not 'running' — only a claimed WorkItem can be blocked. Claim it first with the accept-task skill, then block it. If you cannot start it at all, cancel it instead (POST /task-pool/items/${WORK_ITEM_ID}/cancel)." ;;
85
+ blocked)
86
+ error_exit "WorkItem ${WORK_ITEM_ID} is already blocked. To add detail, append a note with the report-progress skill rather than blocking again." ;;
87
+ done|done_by_worker|verified|cancelled|failed|rejected)
88
+ error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}' and cannot be blocked — it has already left the running state. If this is wrong, raise it with your team lead rather than forcing a transition." ;;
89
+ *)
90
+ error_exit "WorkItem ${WORK_ITEM_ID} is '${CURRENT_STATUS}', not 'running' — only a claimed (running) WorkItem can be blocked." ;;
91
+ esac
92
+ fi
93
+
38
94
  BODY=$(jq -n \
95
+ --arg agentId "$SESSION_NAME" \
39
96
  --arg reason "$REASON" \
40
- --arg questions "$QUESTIONS" \
41
- --arg urgency "$URGENCY" \
42
- '{reason: $reason} +
43
- (if $questions != "" then {questions: $questions} else {} end) +
44
- (if $urgency != "" then {urgency: $urgency} else {} end)')
97
+ '{agentId: $agentId, reason: $reason}')
45
98
 
46
99
  api_call POST "/task-pool/block/${WORK_ITEM_ID}" "$BODY"