crewly 1.12.1 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/chat/chat.controller.js +29 -7
  28. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +1 -1
  31. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  34. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  37. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  39. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  41. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  42. package/dist/backend/backend/src/index.d.ts.map +1 -1
  43. package/dist/backend/backend/src/index.js +20 -0
  44. package/dist/backend/backend/src/index.js.map +1 -1
  45. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  46. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  47. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  48. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  49. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/agent/agent-registration.service.js +33 -1
  51. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +78 -2
  53. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +248 -44
  55. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +51 -3
  57. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +31 -1
  59. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  60. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  61. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +7 -0
  63. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  65. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  67. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  68. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +26 -0
  70. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  71. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +19 -3
  73. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
  74. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  75. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  77. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  79. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  81. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  82. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  83. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  85. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  86. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  87. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  89. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  90. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  91. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  93. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  95. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  98. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  99. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +3 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +21 -10
  102. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  103. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  104. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  105. package/dist/backend/backend/src/types/v2/index.js +1 -1
  106. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  107. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  108. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  109. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  110. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  111. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  112. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  113. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  114. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  115. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  116. package/dist/backend/backend/src/websocket/chat.gateway.js +7 -1
  117. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  118. package/dist/backend/build-info.json +4 -0
  119. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  120. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  121. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  122. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  124. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  126. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  128. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  130. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  132. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  134. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  136. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  138. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  140. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  142. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  144. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  146. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  148. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  150. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  152. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  154. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  156. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  158. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  160. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  162. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  164. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  166. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  168. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  170. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  172. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  174. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  175. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  176. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  178. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  180. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  182. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  183. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  184. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  186. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  187. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  188. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  190. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  191. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  192. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  194. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  195. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  196. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  198. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  200. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  202. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  284. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  286. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  287. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  288. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  290. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  291. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  292. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  294. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  295. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  296. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  298. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  299. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  300. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  302. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  303. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  304. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  306. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  307. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  308. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  310. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  312. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  314. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  316. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  318. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  319. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  320. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  322. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  323. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  324. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  326. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  327. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  328. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  330. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  331. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  332. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  334. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  335. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  336. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  338. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  339. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  340. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  342. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  343. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  344. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/cloud/cloud-client.service.js +7 -0
  346. package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  347. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  348. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  350. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  351. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  352. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  354. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  355. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  356. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  358. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  359. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  360. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  362. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  364. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  366. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  367. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  368. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  370. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  371. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  372. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  374. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  375. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  376. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  378. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  380. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  382. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  383. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  384. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  386. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  388. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  390. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  392. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  394. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  395. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  396. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  398. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  399. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  400. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  402. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  403. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  404. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  406. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  408. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  410. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  411. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  412. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  414. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  416. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  418. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  420. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  422. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  424. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  426. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  427. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  428. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  430. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  431. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  432. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  434. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  436. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  438. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  439. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  440. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  442. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  443. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  444. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  446. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  447. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  448. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  450. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  451. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  452. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  454. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  456. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/index.js +50 -0
  458. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  460. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  462. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  464. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  466. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  468. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  470. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  472. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  474. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  475. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  476. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  478. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  479. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  480. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  482. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  484. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  486. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  487. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  488. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  490. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  491. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  492. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  494. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  495. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  496. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  498. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  500. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  501. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  502. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  503. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  504. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  506. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  508. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  510. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  512. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  514. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  516. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  518. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  519. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  520. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  522. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  524. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  526. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  528. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  529. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  530. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  531. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  532. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  533. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  534. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  535. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  536. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  537. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  538. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  539. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  540. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  541. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  542. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  543. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  544. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  545. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  546. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  547. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  548. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  549. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  550. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  551. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  552. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  553. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  554. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  555. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  556. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  557. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  558. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  559. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  560. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  562. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  564. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  565. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  566. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  567. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  568. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  570. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  571. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  572. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  573. package/dist/cli/backend/src/types/v2/index.js +22 -0
  574. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  575. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  576. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  577. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  578. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  579. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  580. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  581. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  582. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  583. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  584. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  585. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  586. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  587. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  588. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  589. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  590. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  591. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  592. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  593. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  594. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  595. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  596. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  597. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  598. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  599. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  600. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  601. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  602. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  603. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  604. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  605. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  606. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  607. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  608. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  609. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  610. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  611. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  612. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  613. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  614. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  615. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  616. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  617. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  618. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  619. package/package.json +2 -2
  620. package/packages/crewly-agent/src/cli.ts +16 -6
  621. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +311 -33
  622. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +221 -12
  623. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +19 -0
  624. package/packages/crewly-agent/src/runtime/tool-registry.ts +4 -1
  625. package/packages/crewly-agent/src/runtime/types.ts +65 -5
@@ -14,6 +14,76 @@ TRIGGER=$(printf '%s' "$INPUT" | jq -r '.trigger // empty')
14
14
  TEAM_ID=$(printf '%s' "$INPUT" | jq -r '.teamId // empty')
15
15
  SESSION_NAME=$(printf '%s' "$INPUT" | jq -r '.sessionName // empty')
16
16
 
17
+ # ---------------------------------------------------------------------------
18
+ # Trigger matching
19
+ # ---------------------------------------------------------------------------
20
+ #
21
+ # `trigger:` frontmatter is a COMMA-SEPARATED LIST, not a single value —
22
+ # 6 of the 7 norms in the live runtime store lists such as
23
+ # "escalation,delegation,blocker". Comparing the caller's trigger to that
24
+ # raw string with `=` only matched when the caller happened to pass the
25
+ # entire list verbatim, so trigger-filtered retrieval returned nothing for
26
+ # essentially every norm and agents concluded no norms existed.
27
+ #
28
+ # Matching is done on whole TOKENS, deliberately not on substrings:
29
+ # `lead` must not match `inbound_lead`, and `sale` must not match `sales`.
30
+ # Both pairs exist in the current norms, so a substring fix would silently
31
+ # return the wrong norms rather than none — a worse failure, because it
32
+ # looks like it works.
33
+ #
34
+ # Tokens may contain internal spaces (e.g. "mutation check"), so only
35
+ # leading/trailing whitespace is trimmed; internal spacing is preserved.
36
+ # Comparison is case-insensitive.
37
+
38
+ # Normalise a comma-separated trigger list into one trimmed, lowercase
39
+ # token per line, dropping empties.
40
+ #
41
+ # $1 - Raw comma-separated trigger string (may be empty)
42
+ normalize_trigger_tokens() {
43
+ printf '%s' "${1:-}" \
44
+ | tr ',' '\n' \
45
+ | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' \
46
+ | tr '[:upper:]' '[:lower:]' \
47
+ | sed '/^$/d'
48
+ }
49
+
50
+ # Decide whether a norm's stored trigger list satisfies the caller's query.
51
+ #
52
+ # An empty query matches everything (no filtering requested). Otherwise the
53
+ # two token sets must intersect: a norm matches when it declares ANY of the
54
+ # triggers the caller asked about.
55
+ #
56
+ # $1 - Stored `trigger:` frontmatter value
57
+ # $2 - Caller-supplied trigger query
58
+ # Returns 0 when the norm should be included, 1 when it should be skipped.
59
+ trigger_matches() {
60
+ local stored_raw="${1:-}"
61
+ local query_raw="${2:-}"
62
+ local stored_tokens query_tokens q_token s_token
63
+
64
+ [ -z "$query_raw" ] && return 0
65
+
66
+ query_tokens=$(normalize_trigger_tokens "$query_raw")
67
+ [ -z "$query_tokens" ] && return 0
68
+
69
+ stored_tokens=$(normalize_trigger_tokens "$stored_raw")
70
+ [ -z "$stored_tokens" ] && return 1
71
+
72
+ while IFS= read -r q_token; do
73
+ [ -z "$q_token" ] && continue
74
+ while IFS= read -r s_token; do
75
+ [ -z "$s_token" ] && continue
76
+ [ "$q_token" = "$s_token" ] && return 0
77
+ done <<EOF
78
+ $stored_tokens
79
+ EOF
80
+ done <<EOF
81
+ $query_tokens
82
+ EOF
83
+
84
+ return 1
85
+ }
86
+
17
87
  # Resolve teamId: explicit param > lookup by sessionName > CREWLY_SESSION_NAME env
18
88
  resolve_team_id() {
19
89
  local session="${1:-${CREWLY_SESSION_NAME:-}}"
@@ -81,8 +151,9 @@ for file in "$NORMS_DIR"/*.md; do
81
151
  FM_UPDATED_BY=$(echo "$FRONTMATTER" | sed -n 's/^updatedBy: *//p' | head -1)
82
152
  FM_UPDATED_AT=$(echo "$FRONTMATTER" | sed -n 's/^updatedAt: *//p' | head -1)
83
153
 
84
- # If trigger filter is set, skip non-matching norms
85
- if [ -n "$TRIGGER" ] && [ "$FM_TRIGGER" != "$TRIGGER" ]; then
154
+ # If a trigger filter is set, skip norms that declare none of its tokens.
155
+ # `trigger:` is a comma-separated list; see trigger_matches above.
156
+ if ! trigger_matches "$FM_TRIGGER" "$TRIGGER"; then
86
157
  continue
87
158
  fi
88
159
 
@@ -128,7 +128,7 @@ fi
128
128
  cat >> "$HANDOFF_MSG_FILE" << FOOTER_EOF
129
129
 
130
130
  ---
131
- When done, report back using: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{"sessionName":"${TO}","status":"done","summary":"<brief summary>","projectPath":"${PROJECT_PATH}"}'
131
+ When done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{"sessionName":"${TO}","workItemId":"<your WorkItem id>","status":"done","summary":"<brief summary>","projectPath":"${PROJECT_PATH}"}'
132
132
  FOOTER_EOF
133
133
 
134
134
  HANDOFF_MESSAGE=$(cat "$HANDOFF_MSG_FILE")
@@ -141,6 +141,13 @@ echo "Delivering handoff context to ${TO}..." >&2
141
141
  deliver_result=$(api_call POST "/terminal/${TO}/write" "$DELIVER_BODY" 2>/dev/null) || {
142
142
  # Retry with deliver endpoint (agent may need wake-up)
143
143
  DELIVER_BODY_V2=$(jq -n --arg message "$HANDOFF_MESSAGE" \
144
+ # waitTimeout 15000, matching delegate-task's initial attempt. Handoff
145
+ # targets a worker expected to be already running, so the same fail-fast
146
+ # budget applies.
147
+ #
148
+ # ORIGIN NOT ESTABLISHED (WI dae79289): no delivery constant carries this
149
+ # value, so there is nothing to mirror. Documented, deliberately not
150
+ # changed.
144
151
  '{message: $message, waitForReady: true, waitTimeout: 15000}')
145
152
  deliver_result=$(api_call POST "/terminal/${TO}/deliver" "$DELIVER_BODY_V2" 2>/dev/null) || {
146
153
  deliver_result='{"error":"delivery failed — target agent may be offline"}'
@@ -56,6 +56,32 @@ When `status` is `done` and a `taskPath` is provided, the task file is automatic
56
56
  | `--task-id` | `taskId` | No | Task ID (for structured StatusReport format) |
57
57
  | `--progress` | `progress` | No | Progress percentage 0-100 |
58
58
  | `--structured` | `structured` | No | Use structured StatusReport format |
59
+ | `--work-item-id` / `--wi-id` | `workItemId` | **Pass this when `status=done`** | Which WorkItem to complete. See below — without it the skill infers, and refuses when the choice is ambiguous |
60
+
61
+ ## This skill COMPLETES a WorkItem, not just reports
62
+
63
+ When `status=done`, this skill closes a WorkItem in the task pool as a side
64
+ effect. That is a surprising amount of authority for something named
65
+ `report-status`, and the name/behaviour mismatch is exactly why nobody
66
+ anticipated it silently closing the wrong item. It is not renamed here only
67
+ because too many callers reference it.
68
+
69
+ **Pass `workItemId` whenever you report done.** Resolution order:
70
+
71
+ 1. **`workItemId` given** — that item is completed. Always prefer this.
72
+ 2. **Omitted, exactly one WorkItem running for your session** — that one is
73
+ completed, and the resolved id is echoed so you can see what closed.
74
+ 3. **Omitted, more than one running** — the skill **refuses** and names the
75
+ candidates. It will not guess.
76
+
77
+ Case 3 exists because guessing destroyed real work: on 2026-08-21 the skill
78
+ completed an arbitrary first running item, silently closing a queued WorkItem
79
+ nobody had started while the agent was reporting a different one done. Nothing
80
+ failed, and the false completion spawned a verify WorkItem for a delivery that
81
+ had never happened.
82
+
83
+ If the completion itself fails, the skill says so explicitly — a reported
84
+ status never implies the WorkItem actually closed.
59
85
 
60
86
  ## Examples — CLI Flags (preferred)
61
87
 
@@ -235,17 +235,41 @@ api_call POST "/chat/agent-response" "$BODY"
235
235
  # `/task-management/complete{-by-session}` endpoints.
236
236
  #
237
237
  # Resolution order for which WorkItem to complete:
238
- # 1. `workItemId` in input (preferred — explicit reference)
239
- # 2. The agent's currently-running WI fetched from the pool
238
+ # 1. `workItemId` in input — explicit, always wins. PASS THIS.
239
+ # 2. Exactly one running WI for this session — inferred, and the resolved id
240
+ # is echoed so the caller can see what was closed.
241
+ # 3. More than one running WI — REFUSED. The candidates are named and the
242
+ # caller must pass `workItemId`.
243
+ #
244
+ # Why (3) refuses instead of guessing: this block used to complete
245
+ # `.data[0].id`, an arbitrary first running item. On 2026-08-21 that silently
246
+ # closed WorkItem 7db3b00c — a queued piece of work nobody had started — while
247
+ # the agent was reporting a DIFFERENT WI done. Nothing failed. The false
248
+ # completion then spawned a verify WorkItem asking the orchestrator to verify a
249
+ # delivery that had never happened, so one silent mis-close also consumed
250
+ # downstream verification attention on fiction.
251
+ #
252
+ # Inferring from a single running claim is safe and stays. Inferring from
253
+ # several is a coin flip on which real work gets destroyed.
240
254
  #
241
255
  # The legacy `taskPath` input is still accepted for backwards compatibility
242
256
  # but no longer drives the API call.
243
257
  if [ "$STATUS" = "done" ]; then
244
258
  TARGET_WI_ID="${WORK_ITEM_ID:-}"
259
+ WI_RESOLUTION="explicit"
260
+
245
261
  if [ -z "$TARGET_WI_ID" ]; then
246
- # Fall back: query pool for this session's running WIs and complete the first match.
247
262
  POOL_RESP=$(api_call GET "/task-pool/items?status=running&target=${SESSION_NAME}" 2>/dev/null || echo '{}')
248
- TARGET_WI_ID=$(echo "$POOL_RESP" | jq -r '.workItems[0].id // .data[0].id // empty' 2>/dev/null || true)
263
+ RUNNING_IDS=$(printf '%s' "$POOL_RESP" | jq -r '((.workItems // .data // []) | map(.id)) | .[]' 2>/dev/null || true)
264
+ RUNNING_COUNT=$(printf '%s' "$RUNNING_IDS" | grep -c . || true)
265
+
266
+ if [ "$RUNNING_COUNT" -gt 1 ]; then
267
+ CANDIDATES=$(printf '%s' "$RUNNING_IDS" | tr '\n' ' ')
268
+ error_exit "report-status refuses to guess which WorkItem to complete: ${RUNNING_COUNT} are running for ${SESSION_NAME} (${CANDIDATES}). Pass workItemId explicitly. Completing an arbitrary one silently closes work nobody did — and a false completion cascades into a verify WorkItem for a delivery that never happened."
269
+ fi
270
+
271
+ TARGET_WI_ID=$(printf '%s' "$RUNNING_IDS" | head -1)
272
+ WI_RESOLUTION="inferred"
249
273
  fi
250
274
 
251
275
  if [ -n "$TARGET_WI_ID" ]; then
@@ -258,7 +282,18 @@ if [ "$STATUS" = "done" ]; then
258
282
  --arg agentId "$SESSION_NAME" \
259
283
  --arg summary "$SUMMARY" \
260
284
  '{agentId: $agentId, result: {summary: $summary}}')
261
- api_call POST "/task-pool/complete/${TARGET_WI_ID}" "$COMPLETE_BODY" || true
285
+ # No `|| true`. A swallowed failure here is the inverse of the bug above:
286
+ # report-status would announce success while the WorkItem stayed open, and
287
+ # that is equally invisible. Report what actually happened either way.
288
+ if COMPLETE_RESULT=$(api_call POST "/task-pool/complete/${TARGET_WI_ID}" "$COMPLETE_BODY" 2>&1); then
289
+ # Echo the resolved id even on the happy path. Silent-but-correct is how
290
+ # this class hides — the caller must be able to see WHICH item closed.
291
+ jq -n --arg id "$TARGET_WI_ID" --arg how "$WI_RESOLUTION" \
292
+ '{completedWorkItem: $id, resolvedBy: $how}' >&2
293
+ else
294
+ jq -n --arg id "$TARGET_WI_ID" --arg err "$COMPLETE_RESULT" \
295
+ '{warning: "status reported, but completing the WorkItem FAILED — it is still open", workItemId: $id, error: $err}' >&2
296
+ fi
262
297
  fi
263
298
  fi
264
299
 
@@ -41,7 +41,7 @@ The script auto-resolves `config/skills/...` references to absolute paths so del
41
41
  | `--task` / `-T` | `task` | Yes | Task description (or pipe via stdin) |
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
- | `--context` / `-c` | `context` | No | Additional context for the task |
44
+ | `--context` / `-c` | `context` | No | Additional context for the task. Scanned for the Request Contract alongside `--task` |
45
45
  | `--project` / `-p` | `projectPath` | No | Project path; creates task file in `.crewly/tasks/` |
46
46
  | `--team` / `-g` | `teamId` | No | Team ID for cross-team validation |
47
47
  | `--task-type` | `taskType` | No | Task type: `general`, `technical` (default: `general`) |
@@ -95,26 +95,51 @@ require_param "task (--task)" "$TASK"
95
95
  # downstream are entitled to push back per the Brief Reception Protocol when
96
96
  # these are absent. Spec:
97
97
  # .crewly/specs/2026-05-03-agent-improvement-p0-execution.md §"Fix P0-3".
98
+ #
99
+ # Scans the WHOLE delegated brief, not just `--task`. The Request Contract can
100
+ # legitimately live in `--task`, in `--context`, or be split across the two,
101
+ # and delegators routinely put the long-form G/O/E in `--context` while
102
+ # `--task` carries the one-line ask. `--context` is delivered to the target
103
+ # (see the TASK_MESSAGE assembly below), so a contract written there does
104
+ # reach the recipient — it was simply not being looked at here. Scanning only
105
+ # `--task` therefore warned "Request Contract incomplete" at briefs whose
106
+ # contract was fully present, just in the other field.
107
+ #
108
+ # That false positive is corrosive rather than cosmetic: this warning is the
109
+ # signal TLs and workers use to decide whether to push back under the Brief
110
+ # Reception Protocol, so crying wolf trains them to ignore a real one.
111
+ #
112
+ # The check is NOT weakened — a marker genuinely absent from BOTH fields
113
+ # still warns, and the missing-field list is still per-marker.
114
+ #
115
+ # Mirrors the same fix in config/skills/team-leader/delegate-task/execute.sh.
116
+ #
117
+ # $1 = task, $2 = context (either may be empty).
98
118
  warn_missing_request_contract() {
99
- local task="$1"
119
+ # Join with a newline rather than concatenating: the patterns below anchor
120
+ # on `^`, which grep evaluates per line, and a seam newline also prevents a
121
+ # task ending in "go" plus a context starting "al:" from fabricating a
122
+ # spurious "goal:" match across the boundary.
123
+ local brief
124
+ brief="$(printf '%s\n%s' "${1:-}" "${2:-}")"
100
125
  local missing=()
101
- if ! echo "$task" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(goal|objective)(:|s?\b)'; then
126
+ if ! echo "$brief" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(goal|objective)(:|s?\b)'; then
102
127
  missing+=("Goal")
103
128
  fi
104
- if ! echo "$task" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(expected )?outcome(:|s?\b)'; then
129
+ if ! echo "$brief" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(expected )?outcome(:|s?\b)'; then
105
130
  missing+=("Outcome")
106
131
  fi
107
- if ! echo "$task" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(eval|evaluation criteria|acceptance criteria)(:|s?\b)'; then
132
+ if ! echo "$brief" | grep -qiE '(^|[^a-zA-Z])(\*\*)?(eval|evaluation criteria|acceptance criteria)(:|s?\b)'; then
108
133
  missing+=("Eval")
109
134
  fi
110
135
  if [ ${#missing[@]} -gt 0 ]; then
111
136
  local list
112
137
  list=$(IFS=, ; echo "${missing[*]}")
113
- echo "{\"warning\":\"Request Contract incomplete: brief is missing markers for: ${list}. Per P0-3 spec, every delegated subtask MUST include Goal + Expected Outcome + Eval Criteria. TLs and workers may push back via the Brief Reception Protocol. Source: .crewly/specs/2026-05-03-agent-improvement-p0-execution.md §Fix P0-3.\"}" >&2
138
+ echo "{\"warning\":\"Request Contract incomplete: brief is missing markers for: ${list}. Neither the task nor the context field carries them. Per P0-3 spec, every delegated subtask MUST include Goal + Expected Outcome + Eval Criteria. TLs and workers may push back via the Brief Reception Protocol. Source: .crewly/specs/2026-05-03-agent-improvement-p0-execution.md §Fix P0-3.\"}" >&2
114
139
  fi
115
140
  }
116
141
 
117
- warn_missing_request_contract "$TASK"
142
+ warn_missing_request_contract "$TASK" "$CONTEXT"
118
143
 
119
144
  # #180: Validate target agent belongs to the specified team
120
145
  if [ -n "$TEAM_ID" ] && [ "$FORCE_CROSS_TEAM" != "true" ]; then
@@ -141,8 +166,17 @@ if [ "$TASK_TYPE" = "technical" ] && [ -n "$TEAM_ID" ]; then
141
166
  fi
142
167
 
143
168
  # Structured message parameters (for hierarchical teams)
144
- # Default INPUT to empty JSON if not set (when using --flag mode)
145
- INPUT="${INPUT:-{}}"
169
+ # Default INPUT to empty JSON if not set (when using --flag mode).
170
+ #
171
+ # NOT `${INPUT:-{}}` — bash ends the expansion at the FIRST `}`, so that form
172
+ # means "default to `{`" followed by a literal `}`. It is correct only when
173
+ # INPUT is unset (yielding `{}`); when INPUT holds real JSON it appends a
174
+ # stray `}` and every subsequent `jq` call dies with
175
+ # "parse error: Unmatched '}'". That silently broke the entire JSON-input mode
176
+ # of this skill while --flag mode kept working.
177
+ if [ -z "${INPUT:-}" ]; then
178
+ INPUT='{}'
179
+ fi
146
180
  TITLE=$(printf '%s' "$INPUT" | jq -r '.title // empty')
147
181
  PARENT_TASK_ID=$(printf '%s' "$INPUT" | jq -r '.parentTaskId // empty')
148
182
  EXPECTED_ARTIFACTS=$(printf '%s' "$INPUT" | jq -c '.expectedArtifacts // empty')
@@ -197,13 +231,13 @@ if [ "$USE_STRUCTURED" = "true" ] && [ -n "$TITLE" ]; then
197
231
 
198
232
  [ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nAdditional context: ${CONTEXT}"
199
233
  [ -n "$DEADLINE_HINT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\n**Deadline hint**: ${DEADLINE_HINT}"
200
- TASK_MESSAGE="${TASK_MESSAGE}\n\n---\nWhen done, report back using: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
234
+ TASK_MESSAGE="${TASK_MESSAGE}\n\n---\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
201
235
  TASK_MESSAGE="${TASK_MESSAGE}\n\nBefore reporting done, persist key findings using: bash ${CREWLY_ROOT}/config/skills/agent/core/remember/execute.sh '{\"agentId\":\"${TO}\",\"content\":\"<key findings>\",\"category\":\"pattern\",\"scope\":\"project\",\"projectPath\":\"${PROJECT_PATH}\"}'"
202
236
  else
203
237
  # Legacy free-text format (backwards compatible)
204
238
  TASK_MESSAGE="New task from orchestrator (priority: ${PRIORITY}):\n\n${TASK}"
205
239
  [ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nContext: ${CONTEXT}"
206
- TASK_MESSAGE="${TASK_MESSAGE}\n\nWhen done, report back using: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
240
+ TASK_MESSAGE="${TASK_MESSAGE}\n\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
207
241
  TASK_MESSAGE="${TASK_MESSAGE}\n\nBefore reporting done, persist key findings using: bash ${CREWLY_ROOT}/config/skills/agent/core/remember/execute.sh '{\"agentId\":\"${TO}\",\"content\":\"<key findings>\",\"category\":\"pattern\",\"scope\":\"project\",\"projectPath\":\"${PROJECT_PATH}\"}'"
208
242
  fi
209
243
 
@@ -238,7 +272,7 @@ POOL_BODY=$(jq -n \
238
272
  --arg priority "$WI_PRIORITY" \
239
273
  --arg projectPath "${PROJECT_PATH:-}" \
240
274
  --arg requestId "${REQUEST_ID:-}" \
241
- '{type: $type, owner: $owner, target: $target, title: $title, description: $description, briefMarkdown: $briefMarkdown, priority: $priority} + (if $projectPath != "" then {projectPath: $projectPath} else {} end) + (if $requestId != "" then {requestId: $requestId} else {} end)')
275
+ '{type: $type, owner: $owner, target: $target, title: $title, description: $description, briefMarkdown: $briefMarkdown, metadata: ({priority: $priority} + (if $projectPath != "" then {projectPath: $projectPath} else {} end))} + (if $requestId != "" then {requestId: $requestId} else {} end)')
242
276
 
243
277
  # Pipeline-#4 fix (spec 2026-05-05-request-decompose-pipeline-gap.md, Patch B):
244
278
  # Route is /api/task-pool/add (not /api/pool/add — that endpoint does not exist
@@ -1,7 +1,17 @@
1
1
  #!/bin/bash
2
2
  # Tests for ORC delegate-task execute.sh
3
3
  #
4
- # Focused on the auto-claim transition added 2026-05-20 — the skill must
4
+ # Covers two things:
5
+ # 1. the auto-claim transition (Tests 1-6), and
6
+ # 2. the Request Contract checker (Test 7), which scans BOTH `--task` and
7
+ # `--context` — see the note above Test 7.
8
+ #
9
+ # Note the harness runs a COPY of the real execute.sh under a stubbed
10
+ # api_call, so production logic is exercised verbatim; no part of the skill
11
+ # is reimplemented here. Keep it that way — a hand-copied mirror of skill
12
+ # logic silently stops tracking the skill.
13
+ #
14
+ # Tests 1-6 are focused on the auto-claim transition added 2026-05-20 — the skill must
5
15
  # call POST /task-pool/claim immediately after POST /task-pool/add succeeds,
6
16
  # so the WI transitions queued → running at dispatch time and doesn't rot
7
17
  # in queued waiting for a pull that may never come (the 2026-05-20
@@ -196,6 +206,148 @@ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
196
206
 
197
207
  assert_output_contains "result reports custom fallbackMinutes=120" '"fallbackMinutes": 120' "$OUT"
198
208
 
209
+ # ---------------------------------------------------------------------------
210
+ # Test 7: Request Contract checker scans --task AND --context
211
+ #
212
+ # The checker used to read only `--task`. This skill has its own `--context`
213
+ # flag and delivers it to the target, so an orchestrator that put the
214
+ # long-form Goal / Expected Outcome / Eval Criteria in `--context` was told
215
+ # the contract was "incomplete" while every marker was in fact present. That
216
+ # false positive is what the Brief Reception Protocol keys off, so it has to
217
+ # be right in both directions: silent when the contract is present anywhere,
218
+ # and still loud when a marker is in neither field.
219
+ # ---------------------------------------------------------------------------
220
+ echo ""
221
+ echo "=== ORC delegate-task — Request Contract checker ==="
222
+
223
+ CTX_FULL="**Goal:** Ship the importer. **Expected Outcome:** CSVs land in prod. **Eval Criteria:** all tests green."
224
+
225
+ # 7a: contract entirely in --context — must NOT warn
226
+ > "$CALL_LOG"
227
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
228
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
229
+ --to crewly-test-bob \
230
+ --task "build the importer" \
231
+ --context "$CTX_FULL" \
232
+ 2>&1 || true)
233
+ if echo "$OUT" | grep -q "Request Contract incomplete"; then
234
+ echo " FAIL: contract present in --context was still reported incomplete: $OUT"
235
+ FAIL=$((FAIL + 1))
236
+ else
237
+ echo " PASS: contract in --context suppresses the warning"
238
+ PASS=$((PASS + 1))
239
+ fi
240
+
241
+ # 7b: contract split across --task and --context — must NOT warn
242
+ > "$CALL_LOG"
243
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
244
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
245
+ --to crewly-test-bob \
246
+ --task "**Goal:** ship the importer" \
247
+ --context "**Expected Outcome:** CSVs land in prod. **Eval Criteria:** all tests green." \
248
+ 2>&1 || true)
249
+ if echo "$OUT" | grep -q "Request Contract incomplete"; then
250
+ echo " FAIL: split contract was reported incomplete: $OUT"
251
+ FAIL=$((FAIL + 1))
252
+ else
253
+ echo " PASS: contract split across --task and --context suppresses the warning"
254
+ PASS=$((PASS + 1))
255
+ fi
256
+
257
+ # 7c: contract entirely in --task, no --context — must NOT warn (no regression)
258
+ > "$CALL_LOG"
259
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
260
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
261
+ --to crewly-test-bob \
262
+ --task "$CTX_FULL" \
263
+ 2>&1 || true)
264
+ if echo "$OUT" | grep -q "Request Contract incomplete"; then
265
+ echo " FAIL: contract in --task alone was reported incomplete: $OUT"
266
+ FAIL=$((FAIL + 1))
267
+ else
268
+ echo " PASS: contract in --task alone still suppresses the warning"
269
+ PASS=$((PASS + 1))
270
+ fi
271
+
272
+ # 7d: one marker absent from BOTH — check is not weakened
273
+ > "$CALL_LOG"
274
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
275
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
276
+ --to crewly-test-bob \
277
+ --task "**Goal:** ship it" \
278
+ --context "**Expected Outcome:** it ships." \
279
+ 2>&1 || true)
280
+ if echo "$OUT" | grep -q "Request Contract incomplete" && echo "$OUT" | grep -q "Eval"; then
281
+ echo " PASS: still warns for the one marker absent from both fields"
282
+ PASS=$((PASS + 1))
283
+ else
284
+ echo " FAIL: expected an Eval-missing warning, got: $OUT"
285
+ FAIL=$((FAIL + 1))
286
+ fi
287
+
288
+ # 7e: nothing anywhere — all three still named
289
+ > "$CALL_LOG"
290
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
291
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
292
+ --to crewly-test-bob \
293
+ --task "just do the thing" \
294
+ --context "here is some background prose" \
295
+ 2>&1 || true)
296
+ if echo "$OUT" | grep -q "Request Contract incomplete" && \
297
+ echo "$OUT" | grep -q "Goal" && \
298
+ echo "$OUT" | grep -q "Outcome" && \
299
+ echo "$OUT" | grep -q "Eval"; then
300
+ echo " PASS: all three markers reported missing"
301
+ PASS=$((PASS + 1))
302
+ else
303
+ echo " FAIL: expected all three named, got: $OUT"
304
+ FAIL=$((FAIL + 1))
305
+ fi
306
+
307
+ # 7f: warning stays non-fatal — dispatch still happens
308
+ > "$CALL_LOG"
309
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
310
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
311
+ --to crewly-test-bob \
312
+ --task "unstructured task" \
313
+ 2>&1 || true)
314
+ assert_log_contains "dispatch proceeds despite an incomplete contract" "POST /task-pool/add"
315
+
316
+ # 7g: markers are not fabricated across the task/context seam
317
+ > "$CALL_LOG"
318
+ OUT=$(CALL_LOG="$CALL_LOG" CREWLY_ROOT=/tmp/crewly-test \
319
+ bash "${SKILL_PARENT}/delegate-task/execute.sh" \
320
+ --to crewly-test-bob \
321
+ --task "please go" \
322
+ --context "al: nothing here. Expected Outcome: y. Eval Criteria: z." \
323
+ 2>&1 || true)
324
+ if echo "$OUT" | grep -q "Request Contract incomplete" && echo "$OUT" | grep -q "Goal"; then
325
+ echo " PASS: seam does not fabricate a Goal marker"
326
+ PASS=$((PASS + 1))
327
+ else
328
+ echo " FAIL: 'go'+'al:' across the seam was accepted as a Goal marker: $OUT"
329
+ FAIL=$((FAIL + 1))
330
+ fi
331
+
332
+ # 7h: source-level guard on the production call site. The scenarios above run
333
+ # a copy of execute.sh, but pin the call line explicitly so reverting it to
334
+ # the task-only form fails loudly even if a future refactor moves the checker.
335
+ SRC=$(cat "$SCRIPT_DIR/execute.sh")
336
+ if printf '%s' "$SRC" | grep -q -- 'warn_missing_request_contract "$TASK" "$CONTEXT"'; then
337
+ echo " PASS: call site passes \$TASK and \$CONTEXT"
338
+ PASS=$((PASS + 1))
339
+ else
340
+ echo " FAIL: execute.sh does not call warn_missing_request_contract with both fields"
341
+ FAIL=$((FAIL + 1))
342
+ fi
343
+ if printf '%s' "$SRC" | grep -qE '^warn_missing_request_contract "\$TASK"$'; then
344
+ echo " FAIL: execute.sh still has a task-only call to the contract checker"
345
+ FAIL=$((FAIL + 1))
346
+ else
347
+ echo " PASS: no task-only call to the contract checker remains"
348
+ PASS=$((PASS + 1))
349
+ fi
350
+
199
351
  # --- Summary ---
200
352
  echo ""
201
353
  echo "=== Results: $PASS passed, $FAIL failed ==="
@@ -105,7 +105,7 @@ The report is written to `reportFile` and follows the `[TL_REPORT]` tag conventi
105
105
 
106
106
  After generating the report, send it to the Orchestrator:
107
107
  ```bash
108
- bash {{SKILLS_PATH}}/agent/core/report-status/execute.sh '{"sessionName":"tl-session","status":"done","summary":"Objective complete: 4/5 tasks passed. Report at /tmp/tl-report-team-123.md"}'
108
+ bash {{SKILLS_PATH}}/agent/core/report-status/execute.sh '{"sessionName":"tl-session","workItemId":"<your WorkItem id>","status":"done","summary":"Objective complete: 4/5 tasks passed. Report at /tmp/tl-report-team-123.md"}'
109
109
  ```
110
110
 
111
111
  ## Related Skills
@@ -53,36 +53,31 @@ ${TASK_CRITERIA}"
53
53
  Parent objective: ${OBJECTIVE}
54
54
  Required role: ${TASK_ROLE}"
55
55
 
56
- case "$TASK_PRIORITY" in
57
- critical) PRIORITY_NUM=1 ;;
58
- high) PRIORITY_NUM=2 ;;
59
- normal|medium) PRIORITY_NUM=3 ;;
60
- low) PRIORITY_NUM=4 ;;
61
- *) PRIORITY_NUM=3 ;;
62
- esac
63
-
64
- WI_ID="task-$(date +%s%N | cut -c1-13)-${i}-$$"
65
56
 
57
+ # Minimal CreateWorkItemInput — no client-side `id`/`status`.
58
+ #
59
+ # A body carrying `id` and `status` but no `createdAt` fails the endpoint's
60
+ # `isLegacyFullShape` check, so it silently takes the MINIMAL path and the
61
+ # server generates its own uuid anyway. The old client id was never
62
+ # referenced after creation, so there is nothing to preserve: commit to the
63
+ # minimal shape rather than sending two-thirds of the legacy one.
66
64
  WORK_ITEM=$(jq -n \
67
- --arg id "$WI_ID" \
68
65
  --arg title "$TASK_TITLE" \
69
66
  --arg brief "$BRIEF" \
70
67
  --arg projectPath "$PROJECT_PATH" \
71
68
  --arg milestone "$MILESTONE" \
72
69
  --arg role "$TASK_ROLE" \
73
- --argjson priority "$PRIORITY_NUM" \
70
+ --arg priority "$TASK_PRIORITY" \
74
71
  '{
75
- id: $id,
76
72
  title: $title,
77
73
  type: "delegate",
78
74
  owner: "system",
79
- priority: $priority,
80
- status: "queued",
81
75
  briefMarkdown: $brief,
82
- metadata: { projectPath: $projectPath, milestone: $milestone, requiredRole: $role }
76
+ metadata: { projectPath: $projectPath, milestone: $milestone, requiredRole: $role, priority: $priority }
83
77
  }')
84
78
 
85
- CREATE_BODY=$(jq -n --argjson workItem "$WORK_ITEM" '{workItem: $workItem}')
79
+ # No envelope: addItem reads req.body directly as the CreateWorkItemInput.
80
+ CREATE_BODY="$WORK_ITEM"
86
81
  CREATE_RESULT=$(api_call POST "/task-pool/add" "$CREATE_BODY" 2>/dev/null || echo '{"error":"Failed to create WorkItem"}')
87
82
  CREATED_ID=$(echo "$CREATE_RESULT" | jq -r '.data.id // .workItem.id // empty' 2>/dev/null || true)
88
83
 
@@ -42,12 +42,25 @@ Assigns a task to a worker within the Team Leader's subordinate scope. Validates
42
42
  | `--task` / `-T` | `task` | Yes | Task description (or pipe via stdin) |
43
43
  | `--task-file` | — | No | Read task description from a file path |
44
44
  | `--priority` / `-P` | `priority` | No | Priority: `low`, `normal`, `high` (default: `normal`) |
45
- | `--context` / `-c` | `context` | No | Additional context for the worker |
45
+ | `--context` / `-c` | `context` | No | Additional context for the worker. Scanned for the Request Contract alongside `--task` |
46
46
  | `--project` / `-p` | `projectPath` | No | Project path; creates task file in `.crewly/tasks/` |
47
47
  | `--team` / `-g` | `teamId` | No | Team ID for hierarchy validation |
48
48
  | `--tl-member` | `tlMemberId` | No | TL's member ID for hierarchy validation |
49
49
  | `--from` | `fromSession` | No | Delegating TL's session name (for monitoring) |
50
50
 
51
+ ## Request Contract check
52
+
53
+ Before delegating, the skill scans the brief for Goal, Expected Outcome, and
54
+ Eval Criteria markers, and emits a non-fatal warning on stderr naming any that
55
+ are missing. Workers use that warning to decide whether to push back under the
56
+ Brief Reception Protocol.
57
+
58
+ `--task` and `--context` are scanned **together**, so the contract may live in
59
+ either field or be split across both. A marker absent from both still warns.
60
+
61
+ Recognised synonyms: `Objective` for Goal; `Acceptance Criteria` or
62
+ `Evaluation Criteria` for Eval Criteria.
63
+
51
64
  ## Usage — CLI Flags (preferred)
52
65
 
53
66
  ```bash