crewly 1.20.192 → 1.20.194

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 (525) hide show
  1. package/config/constants.ts +11 -0
  2. package/config/hooks/subagent-guard/subagent.sh +113 -0
  3. package/config/roles/architect/prompt.md +1 -1
  4. package/config/roles/auditor/prompt.md +1 -1
  5. package/config/roles/backend-developer/prompt.md +1 -1
  6. package/config/roles/content-strategist/prompt.md +2 -2
  7. package/config/roles/designer/prompt.md +1 -1
  8. package/config/roles/developer/prompt.md +2 -2
  9. package/config/roles/frontend-developer/prompt.md +1 -1
  10. package/config/roles/fullstack-dev/prompt.md +1 -1
  11. package/config/roles/generalist/prompt.md +1 -1
  12. package/config/roles/ops/prompt.md +1 -1
  13. package/config/roles/orchestrator/prompt.md +2 -2
  14. package/config/roles/product-manager/prompt.md +1 -1
  15. package/config/roles/qa/prompt.md +1 -1
  16. package/config/roles/qa-engineer/prompt.md +1 -1
  17. package/config/roles/researcher/prompt.md +1 -1
  18. package/config/roles/sales/prompt.md +1 -1
  19. package/config/roles/support/prompt.md +1 -1
  20. package/config/roles/team-leader/prompt.md +1 -1
  21. package/config/roles/tpm/prompt.md +1 -1
  22. package/config/roles/ux-designer/prompt.md +1 -1
  23. package/config/skills/_common/complete-body-shape.test.sh +17 -0
  24. package/config/skills/agent/core/complete-task/SKILL.md +27 -4
  25. package/config/skills/agent/core/complete-task/execute.sh +23 -3
  26. package/config/skills/agent/core/complete-task/execute.test.sh +34 -0
  27. package/config/skills/agent/core/experiment-card/SKILL.md +96 -0
  28. package/config/skills/agent/core/experiment-card/execute.sh +147 -0
  29. package/config/skills/agent/core/experiment-card/execute.test.sh +91 -0
  30. package/config/skills/agent/core/handoff-task/execute.sh +1 -1
  31. package/config/skills/agent/core/report-status/SKILL.md +27 -4
  32. package/config/skills/agent/core/report-status/execute.sh +104 -4
  33. package/config/skills/agent/core/todo-add/SKILL.md +16 -2
  34. package/config/skills/agent/core/todo-add/execute.sh +21 -5
  35. package/config/skills/agent/core/todo-add/execute.test.sh +14 -0
  36. package/config/skills/agent/core/todo-tasks/SKILL.md +4 -3
  37. package/config/skills/agent/core/todo-update/SKILL.md +13 -2
  38. package/config/skills/agent/core/todo-update/execute.sh +41 -3
  39. package/config/skills/agent/core/todo-update/execute.test.sh +7 -0
  40. package/config/skills/marketplace-registry.ts +4 -4
  41. package/config/skills/orchestrator/complete-task/SKILL.md +13 -6
  42. package/config/skills/orchestrator/complete-task/execute.sh +22 -3
  43. package/config/skills/orchestrator/delegate-task/execute.sh +2 -2
  44. package/config/skills/orchestrator/harness-login/SKILL.md +9 -1
  45. package/config/skills/orchestrator/harness-login/execute.sh +12 -4
  46. package/config/skills/orchestrator/harness-login/execute.test.sh +7 -0
  47. package/config/skills/registry.json +6 -5
  48. package/config/skills/team-leader/delegate-task/execute.sh +1 -1
  49. package/config/skills/team-leader/verify-output/SKILL.md +18 -1
  50. package/config/skills/team-leader/verify-output/execute.sh +28 -0
  51. package/config/skills/team-leader/verify-output/execute.test.sh +27 -0
  52. package/dist/backend/backend/src/constants.d.ts +192 -2
  53. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  54. package/dist/backend/backend/src/constants.js +196 -1
  55. package/dist/backend/backend/src/constants.js.map +1 -1
  56. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts +6 -0
  57. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
  58. package/dist/backend/backend/src/controllers/canva/canva.controller.js +13 -2
  59. package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/canva/canva.routes.js +3 -1
  62. package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
  63. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +4 -1
  65. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -0
  67. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
  68. package/dist/backend/backend/src/controllers/connector/connector.controller.js +32 -3
  69. package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
  70. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts +41 -0
  71. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -0
  72. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +75 -0
  73. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -0
  74. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +27 -0
  75. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
  76. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
  77. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
  78. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +6 -0
  79. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  80. package/dist/backend/backend/src/controllers/google/google.controller.js +19 -0
  81. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  82. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/google/google.routes.js +3 -1
  84. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +22 -3
  87. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +19 -2
  89. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
  90. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +37 -4
  91. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
  92. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
  93. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +3 -1
  94. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
  95. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +9 -0
  96. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  97. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +26 -0
  98. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  99. package/dist/backend/backend/src/controllers/people/people.routes.d.ts +25 -0
  100. package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -0
  101. package/dist/backend/backend/src/controllers/people/people.routes.js +90 -0
  102. package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -0
  103. package/dist/backend/backend/src/controllers/request-types.d.ts +2 -0
  104. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  105. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +22 -1
  106. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  107. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +143 -3
  108. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  109. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +25 -3
  110. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +125 -19
  112. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  114. package/dist/backend/backend/src/controllers/team/team.controller.js +14 -0
  115. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  116. package/dist/backend/backend/src/index.d.ts.map +1 -1
  117. package/dist/backend/backend/src/index.js +82 -3
  118. package/dist/backend/backend/src/index.js.map +1 -1
  119. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  120. package/dist/backend/backend/src/routes/api.routes.js +6 -0
  121. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  123. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/agent-registration.service.js +28 -3
  125. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  128. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  130. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +14 -3
  132. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  133. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  134. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  136. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/agent/idle-detection.service.js +1 -1
  138. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  140. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  142. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  143. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  144. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  145. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  146. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  147. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  148. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  149. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +49 -5
  150. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  151. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  152. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  153. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  154. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  155. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  156. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  157. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  158. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  159. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts +17 -4
  160. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/canva/canva-token.service.js +54 -17
  162. package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
  163. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
  164. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  165. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
  166. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  167. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +17 -2
  168. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
  169. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +30 -6
  170. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
  171. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +38 -2
  172. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
  173. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +63 -1
  174. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
  175. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  176. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  177. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +204 -56
  178. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  179. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  180. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  182. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  183. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +3 -0
  184. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  185. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +88 -0
  186. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
  187. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
  188. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
  189. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +301 -0
  190. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
  191. package/dist/backend/backend/src/services/experiments/experiment.service.js +754 -0
  192. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
  193. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +73 -0
  194. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
  195. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +142 -0
  196. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
  197. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +60 -0
  198. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
  199. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +113 -0
  200. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
  201. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +25 -2
  202. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  203. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +53 -7
  204. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  205. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +207 -0
  206. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  207. package/dist/backend/backend/src/services/harness/claude-accounts.js +306 -0
  208. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -0
  209. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  210. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  211. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +48 -0
  212. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  213. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  214. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  215. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +156 -19
  216. package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  217. package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
  218. package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
  219. package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
  220. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +19 -4
  221. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/harness/login-broker.service.js +46 -7
  223. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  224. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +18 -2
  225. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/harness/owner-login-request.js +31 -7
  227. package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -1
  228. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  229. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  230. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  231. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  232. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
  233. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  234. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +46 -0
  235. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  236. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  237. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  238. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  239. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  240. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +87 -5
  241. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -1
  242. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +151 -12
  243. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -1
  244. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +17 -4
  245. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
  246. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +50 -17
  247. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
  248. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts +53 -7
  249. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -1
  250. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js +77 -14
  251. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -1
  252. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +53 -1
  253. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
  254. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +130 -29
  255. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
  256. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  257. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +3 -2
  258. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  259. package/dist/backend/backend/src/services/people/acting-for.service.d.ts +188 -0
  260. package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  261. package/dist/backend/backend/src/services/people/acting-for.service.js +299 -0
  262. package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -0
  263. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts +89 -0
  264. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  265. package/dist/backend/backend/src/services/people/dedicated-agent.js +113 -0
  266. package/dist/backend/backend/src/services/people/dedicated-agent.js.map +1 -0
  267. package/dist/backend/backend/src/services/people/grant-sharing.d.ts +80 -0
  268. package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -0
  269. package/dist/backend/backend/src/services/people/grant-sharing.js +143 -0
  270. package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -0
  271. package/dist/backend/backend/src/services/people/people-directory.service.d.ts +239 -0
  272. package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  273. package/dist/backend/backend/src/services/people/people-directory.service.js +454 -0
  274. package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -0
  275. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  276. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  277. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  278. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  279. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  280. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -1
  281. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
  282. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +16 -2
  283. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
  284. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +60 -1
  285. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  286. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +140 -8
  287. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  288. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +1 -1
  289. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
  290. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  291. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  293. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  294. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  295. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +12 -2
  296. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  297. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +7 -1
  298. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
  299. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +18 -3
  300. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
  301. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  302. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  303. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  304. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts +33 -0
  305. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
  306. package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
  307. package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
  308. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
  309. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  310. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
  311. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  312. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  313. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  314. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +46 -0
  315. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  316. package/dist/backend/backend/src/services/slack/slack.service.d.ts +6 -0
  317. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  318. package/dist/backend/backend/src/services/slack/slack.service.js +8 -0
  319. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  320. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +105 -0
  321. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -0
  322. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +238 -0
  323. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -0
  324. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  325. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +4 -0
  326. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  327. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +39 -12
  328. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -1
  329. package/dist/backend/backend/src/services/usage/usage-stats.service.js +61 -20
  330. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -1
  331. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -0
  332. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  333. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +9 -0
  334. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  335. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +10 -0
  336. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  337. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +45 -2
  338. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  339. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  340. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  341. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  342. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
  344. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  345. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  346. package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
  347. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  348. package/dist/backend/backend/src/types/experiment.types.d.ts +153 -0
  349. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
  350. package/dist/backend/backend/src/types/experiment.types.js +32 -0
  351. package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
  352. package/dist/backend/backend/src/types/index.d.ts +12 -1
  353. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  354. package/dist/backend/backend/src/types/index.js.map +1 -1
  355. package/dist/backend/backend/src/types/messaging.types.d.ts +11 -0
  356. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  357. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  358. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts +77 -0
  359. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts.map +1 -0
  360. package/dist/backend/backend/src/types/v2/completion-evidence.types.js +119 -0
  361. package/dist/backend/backend/src/types/v2/completion-evidence.types.js.map +1 -0
  362. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +13 -0
  363. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  364. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  365. package/dist/backend/build-info.json +2 -2
  366. package/dist/backend/config/constants.d.ts +11 -0
  367. package/dist/backend/config/constants.d.ts.map +1 -1
  368. package/dist/backend/config/constants.js +11 -0
  369. package/dist/backend/config/constants.js.map +1 -1
  370. package/dist/cli/backend/src/constants.d.ts +192 -2
  371. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  372. package/dist/cli/backend/src/constants.js +196 -1
  373. package/dist/cli/backend/src/constants.js.map +1 -1
  374. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  375. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  376. package/dist/cli/backend/src/services/agent/agent-registration.service.js +28 -3
  377. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  378. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  379. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  380. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  381. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  382. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  383. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +14 -3
  384. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  385. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  386. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  387. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  388. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  389. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  390. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  391. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  392. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  393. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  394. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  395. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  396. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  397. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  398. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  399. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +49 -5
  400. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  401. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  402. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  403. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  404. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  405. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  406. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  407. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  408. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  409. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -0
  410. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  411. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +77 -1
  412. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  413. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  414. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +204 -56
  416. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  417. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  418. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  419. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  420. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +207 -0
  421. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  422. package/dist/cli/backend/src/services/harness/claude-accounts.js +306 -0
  423. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -0
  424. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  425. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  426. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +48 -0
  427. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  428. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  429. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  430. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +156 -19
  431. package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  432. package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
  433. package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
  434. package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
  435. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +19 -4
  436. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  437. package/dist/cli/backend/src/services/harness/login-broker.service.js +46 -7
  438. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  439. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +18 -2
  440. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  441. package/dist/cli/backend/src/services/harness/owner-login-request.js +31 -7
  442. package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -1
  443. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  444. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  445. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  446. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  447. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +19 -0
  448. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  449. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +46 -0
  450. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  451. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  452. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  453. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  454. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  455. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts +197 -0
  456. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js +455 -0
  458. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -0
  459. package/dist/cli/backend/src/services/people/acting-for.service.d.ts +188 -0
  460. package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/people/acting-for.service.js +299 -0
  462. package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts +89 -0
  464. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/people/dedicated-agent.js +113 -0
  466. package/dist/cli/backend/src/services/people/dedicated-agent.js.map +1 -0
  467. package/dist/cli/backend/src/services/people/people-directory.service.d.ts +239 -0
  468. package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/people/people-directory.service.js +454 -0
  470. package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  472. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  473. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  474. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  475. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  476. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  477. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  478. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  479. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  480. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  481. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  482. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -0
  483. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  484. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +70 -0
  485. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  486. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  487. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  488. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +46 -0
  489. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  490. package/dist/cli/backend/src/services/slack/slack.service.d.ts +6 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  492. package/dist/cli/backend/src/services/slack/slack.service.js +8 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  494. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  495. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +4 -0
  496. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  497. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  498. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  499. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  500. package/dist/cli/backend/src/types/index.d.ts +12 -1
  501. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  502. package/dist/cli/backend/src/types/index.js.map +1 -1
  503. package/dist/cli/backend/src/types/messaging.types.d.ts +11 -0
  504. package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
  505. package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
  506. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +13 -0
  507. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  508. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  509. package/dist/cli/cli/src/utils/marketplace.d.ts +21 -0
  510. package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
  511. package/dist/cli/cli/src/utils/marketplace.js +35 -1
  512. package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
  513. package/dist/cli/config/constants.d.ts +11 -0
  514. package/dist/cli/config/constants.d.ts.map +1 -1
  515. package/dist/cli/config/constants.js +11 -0
  516. package/dist/cli/config/constants.js.map +1 -1
  517. package/dist/cli/config/skills/marketplace-registry.d.ts +4 -4
  518. package/dist/cli/config/skills/marketplace-registry.js +4 -4
  519. package/frontend/dist/assets/{index-fc715ec3.css → index-5e967795.css} +1 -1
  520. package/frontend/dist/assets/{index-5b7af029.js → index-800118ca.js} +296 -296
  521. package/frontend/dist/index.html +2 -2
  522. package/package.json +1 -1
  523. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +45 -0
  524. package/packages/crewly-agent/src/runtime/tool-registry.ts +40 -5
  525. package/packages/crewly-agent/src/test/isolated-home.test.ts +24 -0
@@ -33,6 +33,8 @@ class H(BaseHTTPRequestHandler):
33
33
  out = {'list': LIST, 'count': 1, 'tasks': [{'id': 'T1', 'title': 'Milk', 'status': 'notStarted', 'due': '2026-10-01'}]}
34
34
  elif path == '/api/microsoft-todo/tasks':
35
35
  out = {'list': LIST, 'task': {'id': 'T2', 'title': (data or {}).get('title'), 'status': 'notStarted'}}
36
+ if (data or {}).get('title') == 'partial':
37
+ out['failedSteps'] = [{'step': 'Milk', 'error': 'Forbidden: no'}]
36
38
  elif method == 'PATCH':
37
39
  out = {'list': LIST, 'task': {'id': path.rsplit('/', 1)[1], 'title': 'Milk', 'status': 'completed'}}
38
40
  elif method == 'DELETE':
@@ -69,6 +71,18 @@ run '{"list":"Groceries","title":"Eggs"}' >/dev/null
69
71
  check "json input" "$(last '.body')" '{"title":"Eggs","list":"Groceries"}'
70
72
  check "title required" "$(run_err --list Work | jq -r .error)" "--title is required"
71
73
  check "bad due" "$(run_err --title x --due tomorrow | jq -r .error)" "--due must look like 2026-10-01"
74
+ run --title "Costco" --steps "Eggs, Milk,,Bread " >/dev/null
75
+ check "steps: comma list, trimmed, empties dropped" "$(last '.body')" '{"title":"Costco","steps":["Eggs","Milk","Bread"]}'
76
+ run --title "Costco" --step "Eggs, large" --step Milk >/dev/null
77
+ check "steps: repeated --step keeps commas" "$(last '.body.steps')" '["Eggs, large","Milk"]'
78
+ run '{"title":"Costco","steps":["Eggs","Milk"]}' >/dev/null
79
+ check "steps: json array" "$(last '.body.steps')" '["Eggs","Milk"]'
80
+ run '{"title":"Costco","steps":"Eggs,Milk"}' >/dev/null
81
+ check "steps: json string" "$(last '.body.steps')" '["Eggs","Milk"]'
82
+ run --title "Plain" --steps " , " >/dev/null
83
+ check "steps: none left means no steps field" "$(last '.body')" '{"title":"Plain"}'
84
+ OUT=$(run --title partial --steps "Eggs,Milk")
85
+ check "steps: failed steps are reported" "$(printf '%s' "$OUT" | jq -c '[.success,.failedSteps]')" '[true,[{"step":"Milk","error":"Forbidden: no"}]]'
72
86
  OUT=$(run --title no-grant || true)
73
87
  check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
74
88
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: To Do Tasks
3
- description: List the tasks in one of the owner's Microsoft To Do lists — open tasks by default, --all to include completed ones (via the Microsoft grant held by Crewly Cloud). Read-only.
4
- version: 1.0.0
3
+ description: List the tasks in one of the owner's Microsoft To Do lists — open tasks by default, --all to include completed ones, with each task's steps (via the Microsoft grant held by Crewly Cloud). Read-only.
4
+ version: 1.1.0
5
5
  category: productivity
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -46,7 +46,8 @@ bash execute.sh --list Work --limit 20 # default 50, max 100
46
46
  ```
47
47
 
48
48
  `importance` appears only when not normal; `note` is plain text, cut at
49
- 200 characters. `hasMore: true` means the list has more tasks than the
49
+ 200 characters. `steps` (checklist items, in To Do order, each with `id`,
50
+ `title` and `checked`) appears only on tasks that have steps. `hasMore: true` means the list has more tasks than the
50
51
  limit. Use the task `id` with todo-update.
51
52
 
52
53
  ## Failures
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: To Do Update
3
- description: Complete, reopen, retitle, re-date or delete a task in one of the owner's Microsoft To Do lists (via the Microsoft grant held by Crewly Cloud).
4
- version: 1.0.0
3
+ description: Complete, reopen, retitle, re-date or delete a task — and add, tick, untick or remove its steps — in one of the owner's Microsoft To Do lists (via the Microsoft grant held by Crewly Cloud).
4
+ version: 1.1.0
5
5
  category: productivity
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -38,8 +38,18 @@ bash execute.sh --list Work --task <id> --title "Send v4 deck" --due 2026-10-03
38
38
  bash execute.sh --list Work --task <id> --due none # clear the due date
39
39
  bash execute.sh --list Work --task <id> --reopen
40
40
  bash execute.sh --list Work --task <id> --delete # cannot be undone
41
+ bash execute.sh --list Groceries --task <id> --add-steps "Butter,Ham"
42
+ bash execute.sh --list Groceries --task <id> --check-steps "Eggs,Milk" # tick steps
43
+ bash execute.sh --list Groceries --task <id> --uncheck-steps Eggs # untick
44
+ bash execute.sh --list Groceries --task <id> --remove-steps Bread # delete a step
41
45
  ```
42
46
 
47
+ Steps are named by title (case-insensitive) or by step id from todo-tasks.
48
+ `--add-step` / `--check-step` / `--uncheck-step` / `--remove-step` take one
49
+ step each and can be repeated, for a step whose title contains a comma.
50
+ Adding steps changes the existing task; it never creates a new one. A step
51
+ name that matches nothing (or two steps) fails before anything is changed.
52
+
43
53
  `--task` is the id from todo-tasks. `--list` is the list the task is in
44
54
  (name or id; the default list when omitted). Changes can be combined in one
45
55
  call; `--delete` ignores the others.
@@ -48,6 +58,7 @@ call; `--delete` ignores the others.
48
58
 
49
59
  ```json
50
60
  {"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Milk","status":"completed","completedAt":"2026-09-23"}}
61
+ {"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Costco","status":"notStarted","steps":[{"id":"…","title":"Eggs","checked":true},{"id":"…","title":"Butter","checked":false}]}}
51
62
  {"success":true,"deleted":true,"list":"Work","taskId":"AAMk…"}
52
63
  ```
53
64
 
@@ -10,6 +10,7 @@
10
10
  # bash execute.sh --list Work --task <taskId> --due none # clear the due date
11
11
  # bash execute.sh --list Work --task <taskId> --reopen
12
12
  # bash execute.sh --list Work --task <taskId> --delete
13
+ # bash execute.sh --list Groceries --task <taskId> --add-steps "Butter,Ham" --check-steps "Eggs"
13
14
  # bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
14
15
  # =============================================================================
15
16
  set -euo pipefail
@@ -24,6 +25,7 @@ Usage:
24
25
  bash execute.sh --list Work --task <taskId> --due none # clear the due date
25
26
  bash execute.sh --list Work --task <taskId> --reopen
26
27
  bash execute.sh --list Work --task <taskId> --delete
28
+ bash execute.sh --list Groceries --task <taskId> --add-steps "Butter,Ham" --check-steps "Eggs"
27
29
  bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
28
30
 
29
31
  Options:
@@ -36,6 +38,12 @@ Options:
36
38
  --note Replace the note
37
39
  --importance low | normal | high
38
40
  --delete Delete the task (cannot be undone)
41
+ --add-steps Comma-separated steps to append to the task
42
+ --check-steps Comma-separated steps to tick, by title (case-insensitive) or step id
43
+ --uncheck-steps Comma-separated steps to untick, by title or id
44
+ --remove-steps Comma-separated steps to delete, by title or id
45
+ --add-step, --check-step, --uncheck-step, --remove-step
46
+ One step each; repeat for more (use when a step contains a comma)
39
47
  --help | -h Show this help
40
48
  EOF_USAGE
41
49
  }
@@ -48,6 +56,17 @@ fail_from() {
48
56
 
49
57
  uri() { jq -rn --arg v "$1" '$v|@uri'; }
50
58
 
59
+ # Append step titles / ids to a JSON array: $1 = array, $2 = text, $3 =
60
+ # "split" to split the text on commas. Trimmed; empty ones are dropped.
61
+ add_steps() {
62
+ jq -c --arg v "$2" --arg mode "${3:-}" '. + (if $mode == "split" then ($v | split(",")) else [$v] end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0)))' <<<"$1"
63
+ }
64
+
65
+ # Step list from the JSON input: $1 = key; an array or a comma string.
66
+ input_steps() {
67
+ printf '%s' "$INPUT" | jq -c --arg k "$1" '.[$k] // [] | if type == "string" then split(",") else map(tostring) end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0))'
68
+ }
69
+
51
70
  # api_call may print a one-line warning to stderr (no CREWLY_SESSION_NAME);
52
71
  # the backend answer is always the last line. On failure print the mapped
53
72
  # failure JSON (fail_from) and return 1.
@@ -63,6 +82,7 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
63
82
  shift || true
64
83
  fi
65
84
  TASK=""; LIST=""; COMPLETE=""; TITLE=""; DUE=""; NOTE=""; IMPORTANCE=""; DELETE=""
85
+ ADD_STEPS='[]'; CHECK_STEPS='[]'; UNCHECK_STEPS='[]'; REMOVE_STEPS='[]'
66
86
  while [[ $# -gt 0 ]]; do
67
87
  case "$1" in
68
88
  --task) [ $# -ge 2 ] || error_exit "--task requires a value"; TASK="$2"; shift 2 ;;
@@ -74,6 +94,14 @@ while [[ $# -gt 0 ]]; do
74
94
  --note) [ $# -ge 2 ] || error_exit "--note requires a value"; NOTE="$2"; shift 2 ;;
75
95
  --importance) [ $# -ge 2 ] || error_exit "--importance requires a value"; IMPORTANCE="$2"; shift 2 ;;
76
96
  --delete) DELETE="1"; shift ;;
97
+ --add-steps) [ $# -ge 2 ] || error_exit "--add-steps requires a value"; ADD_STEPS=$(add_steps "$ADD_STEPS" "$2" split); shift 2 ;;
98
+ --add-step) [ $# -ge 2 ] || error_exit "--add-step requires a value"; ADD_STEPS=$(add_steps "$ADD_STEPS" "$2"); shift 2 ;;
99
+ --check-steps) [ $# -ge 2 ] || error_exit "--check-steps requires a value"; CHECK_STEPS=$(add_steps "$CHECK_STEPS" "$2" split); shift 2 ;;
100
+ --check-step) [ $# -ge 2 ] || error_exit "--check-step requires a value"; CHECK_STEPS=$(add_steps "$CHECK_STEPS" "$2"); shift 2 ;;
101
+ --uncheck-steps) [ $# -ge 2 ] || error_exit "--uncheck-steps requires a value"; UNCHECK_STEPS=$(add_steps "$UNCHECK_STEPS" "$2" split); shift 2 ;;
102
+ --uncheck-step) [ $# -ge 2 ] || error_exit "--uncheck-step requires a value"; UNCHECK_STEPS=$(add_steps "$UNCHECK_STEPS" "$2"); shift 2 ;;
103
+ --remove-steps) [ $# -ge 2 ] || error_exit "--remove-steps requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2" split); shift 2 ;;
104
+ --remove-step) [ $# -ge 2 ] || error_exit "--remove-step requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2"); shift 2 ;;
77
105
  --help|-h) print_usage; exit 0 ;;
78
106
  *) error_exit "Unknown option: $1" ;;
79
107
  esac
@@ -88,6 +116,10 @@ if [ -n "$INPUT_JSON" ]; then
88
116
  [ -z "$NOTE" ] && NOTE=$(printf '%s' "$INPUT" | jq -r '.note // empty')
89
117
  [ -z "$IMPORTANCE" ] && IMPORTANCE=$(printf '%s' "$INPUT" | jq -r '.importance // empty')
90
118
  [ -z "$DELETE" ] && DELETE=$(printf '%s' "$INPUT" | jq -r 'if .delete == true then "1" else empty end')
119
+ [ "$ADD_STEPS" = '[]' ] && ADD_STEPS=$(input_steps addSteps)
120
+ [ "$CHECK_STEPS" = '[]' ] && CHECK_STEPS=$(input_steps checkSteps)
121
+ [ "$UNCHECK_STEPS" = '[]' ] && UNCHECK_STEPS=$(input_steps uncheckSteps)
122
+ [ "$REMOVE_STEPS" = '[]' ] && REMOVE_STEPS=$(input_steps removeSteps)
91
123
  fi
92
124
  [ -n "$TASK" ] || error_exit "--task is required (ids come from todo-tasks)"
93
125
  if [ -n "$DELETE" ]; then
@@ -100,16 +132,22 @@ fi
100
132
  if [ -n "$DUE" ] && [ "$DUE" != "none" ] && ! [[ "$DUE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
101
133
  error_exit "--due must look like 2026-10-01, or none to clear it"
102
134
  fi
103
- if [ -z "$COMPLETE" ] && [ -z "$TITLE" ] && [ -z "$DUE" ] && [ -z "$NOTE" ] && [ -z "$IMPORTANCE" ]; then
104
- error_exit "nothing to change: give --complete, --reopen, --title, --due, --note, --importance or --delete"
135
+ STEP_CHANGES="${ADD_STEPS}${CHECK_STEPS}${UNCHECK_STEPS}${REMOVE_STEPS}"
136
+ if [ -z "$COMPLETE" ] && [ -z "$TITLE" ] && [ -z "$DUE" ] && [ -z "$NOTE" ] && [ -z "$IMPORTANCE" ] && [ "$STEP_CHANGES" = '[][][][]' ]; then
137
+ error_exit "nothing to change: give --complete, --reopen, --title, --due, --note, --importance, a step change or --delete"
105
138
  fi
106
139
  BODY=$(jq -cn --arg list "$LIST" --arg complete "$COMPLETE" --arg title "$TITLE" --arg due "$DUE" --arg note "$NOTE" --arg imp "$IMPORTANCE" \
140
+ --argjson add "$ADD_STEPS" --argjson check "$CHECK_STEPS" --argjson uncheck "$UNCHECK_STEPS" --argjson remove "$REMOVE_STEPS" \
107
141
  '{}
108
142
  + (if $list != "" then {list: $list} else {} end)
109
143
  + (if $complete != "" then {complete: ($complete == "true")} else {} end)
110
144
  + (if $title != "" then {title: $title} else {} end)
111
145
  + (if $due == "none" then {due: null} elif $due != "" then {due: $due} else {} end)
112
146
  + (if $note != "" then {note: $note} else {} end)
113
- + (if $imp != "" then {importance: $imp} else {} end)')
147
+ + (if $imp != "" then {importance: $imp} else {} end)
148
+ + (if ($add | length) > 0 then {addSteps: $add} else {} end)
149
+ + (if ($check | length) > 0 then {checkSteps: $check} else {} end)
150
+ + (if ($uncheck | length) > 0 then {uncheckSteps: $uncheck} else {} end)
151
+ + (if ($remove | length) > 0 then {removeSteps: $remove} else {} end)')
114
152
  RESPONSE=$(call PATCH "/microsoft-todo/tasks/$(uri "$TASK")" "$BODY") || { printf '%s\n' "$RESPONSE"; exit 1; }
115
153
  printf '%s' "$RESPONSE" | jq -c '{success: true, list: .data.list.name, task: .data.task}'
@@ -75,6 +75,13 @@ check "json input" "$(last '[.path,.body]')" '["/api/microsoft-todo/tasks/T7",{"
75
75
  check "task required" "$(run_err --complete | jq -r .error)" "--task is required (ids come from todo-tasks)"
76
76
  check "nothing to change" "$(run_err --task T1 | jq -r .error | cut -c1-17)" "nothing to change"
77
77
  check "bad due" "$(run_err --task T1 --due 1/10 | jq -r .error)" "--due must look like 2026-10-01, or none to clear it"
78
+ run --list Groceries --task T1 --add-steps "Butter, Ham" --check-steps Eggs --uncheck-step "Milk, oat" --remove-steps Bread >/dev/null
79
+ check "steps: body" "$(last '[.method,.path,.body]')" '["PATCH","/api/microsoft-todo/tasks/T1",{"list":"Groceries","addSteps":["Butter","Ham"],"checkSteps":["Eggs"],"uncheckSteps":["Milk, oat"],"removeSteps":["Bread"]}]'
80
+ run --task T1 --add-step Butter >/dev/null
81
+ check "steps: a step change alone is a change" "$(last '.body')" '{"addSteps":["Butter"]}'
82
+ run '{"task":"T1","checkSteps":["Eggs"],"removeSteps":"Bread,Ham"}' >/dev/null
83
+ check "steps: json input" "$(last '.body')" '{"checkSteps":["Eggs"],"removeSteps":["Bread","Ham"]}'
84
+ check "steps: blank is still nothing to change" "$(run_err --task T1 --add-steps ' , ' | jq -r .error | cut -c1-17)" "nothing to change"
78
85
  OUT=$(run --list no-grant --task T1 --complete || true)
79
86
  check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
80
87
 
@@ -118,10 +118,10 @@ export const SKILL_FILE_EXCLUDES: ReadonlyArray<RegExp> = [/\.test\./, /^mock-/,
118
118
  * never installed.
119
119
  *
120
120
  * Deliberately FLAT: files in subdirectories (e.g. remotion-video/templates/)
121
- * are not listed. The shipped CLI writes each listed file without creating
122
- * parent directories, so a nested path would fail the whole install on every
123
- * CLI released so far. List them only after the CLI creates parent dirs AND
124
- * the older CLIs are no longer in use.
121
+ * are not listed. CLIs released before #800 write each listed file without
122
+ * creating parent directories, so a nested path fails the whole install on
123
+ * them. The installers create parent dirs since #800; list nested files only
124
+ * once the older CLIs are no longer in use.
125
125
  *
126
126
  * @param skillDir - Absolute skill directory
127
127
  * @returns File names relative to the skill directory
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: Complete Task
3
- description: Mark a task as complete in the task management system.
4
- version: 1.0.0
3
+ description: Mark a WorkItem complete in the V3 task pool, with evidence.
4
+ version: 1.1.0
5
5
  category: management
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -24,18 +24,25 @@ execution:
24
24
 
25
25
  # Complete Task
26
26
 
27
- Mark a task as complete in the task management system.
27
+ Mark a WorkItem complete via `POST /api/task-pool/complete/:id`.
28
28
 
29
29
  ## Usage
30
30
 
31
31
  ```bash
32
- bash config/skills/orchestrator/complete-task/execute.sh '{"taskId":"task-123","result":"success"}'
32
+ bash config/skills/orchestrator/complete-task/execute.sh '{"workItemId":"wi-123","summary":"Shipped the report","evidence":[{"type":"artifact","path":"/abs/path/report.md"},{"type":"command","command":"npm test","exitCode":0}]}'
33
33
  ```
34
34
 
35
35
  ## Parameters
36
36
 
37
- Pass the full JSON body as expected by `POST /api/task-management/complete`.
37
+ | Parameter | Required | Description |
38
+ |-----------|----------|-------------|
39
+ | `workItemId` (alias `taskId`) | Yes | The WorkItem to complete |
40
+ | `summary` (alias `result`) | Yes | What was produced |
41
+ | `evidence` | Yes* | Evidence array (#873): `{"type":"artifact","path":…}` (must exist, or an https URL), `{"type":"command","command":…,"exitCode":0,"outputTail":…}`, or `{"type":"blocked","step":…,"reason":…}` (records the item as blocked, not done). *Accepted without it this release with a `warning`; required from the next |
42
+ | `output` | No | Structured output stored on the WorkItem before completion |
43
+ | `agentId` / `sessionName` | No | Who completed it (defaults to `crewly-orc`) |
38
44
 
39
45
  ## Output
40
46
 
41
- JSON confirmation of task completion.
47
+ The server's JSON response. A `warning` from the server (completion without
48
+ evidence) is repeated on stderr.
@@ -6,7 +6,15 @@
6
6
  # on the WorkItem (replaces `<taskId>.output.json`) before completion.
7
7
  #
8
8
  # Input shape:
9
- # { "workItemId": "abc-123", "summary": "...", "output"?: { ... } }
9
+ # { "workItemId": "abc-123", "summary": "...", "output"?: { ... },
10
+ # "evidence"?: [ {"type":"artifact","path":"..."} |
11
+ # {"type":"command","command":"...","exitCode":0,"outputTail":"..."} |
12
+ # {"type":"blocked","step":"...","reason":"..."} ] }
13
+ #
14
+ # `evidence` (#873) is sent as result.evidence. The server checks it: missing
15
+ # artifacts and non-zero exit codes are refused, a `blocked` entry records the
16
+ # item as blocked instead of done, and no evidence at all is accepted this
17
+ # release with a `warning` (refused from the next).
10
18
  #
11
19
  # Backwards-compat: a `taskId` field is accepted as alias for `workItemId`.
12
20
 
@@ -26,6 +34,11 @@ OUTPUT=$(printf '%s' "$INPUT" | jq -c '.output // empty')
26
34
  # work — pass that session name instead).
27
35
  AGENT_ID=$(printf '%s' "$INPUT" | jq -r '.agentId // .sessionName // "crewly-orc"')
28
36
 
37
+ EVIDENCE=$(printf '%s' "$INPUT" | jq -c '.evidence // empty')
38
+ if [ -n "$EVIDENCE" ] && [ "$(printf '%s' "$EVIDENCE" | jq -r 'type')" != "array" ]; then
39
+ error_exit "evidence must be a JSON array, e.g. [{\"type\":\"artifact\",\"path\":\"/abs/file\"}]"
40
+ fi
41
+
29
42
  require_param "workItemId" "$WORK_ITEM_ID"
30
43
 
31
44
  # Persist structured output on the WorkItem before completing, so that
@@ -47,6 +60,12 @@ fi
47
60
  COMPLETE_BODY=$(jq -n \
48
61
  --arg agentId "$AGENT_ID" \
49
62
  --arg summary "$SUMMARY" \
50
- '{agentId: $agentId, result: {summary: $summary}}')
63
+ --argjson evidence "${EVIDENCE:-null}" \
64
+ '{agentId: $agentId, result: ({summary: $summary} + (if $evidence != null then {evidence: $evidence} else {} end))}')
51
65
 
52
- api_call POST "/task-pool/complete/${WORK_ITEM_ID}" "$COMPLETE_BODY"
66
+ COMPLETE_RESPONSE=$(api_call POST "/task-pool/complete/${WORK_ITEM_ID}" "$COMPLETE_BODY")
67
+ printf '%s\n' "$COMPLETE_RESPONSE"
68
+ EVIDENCE_WARNING=$(printf '%s' "$COMPLETE_RESPONSE" | jq -r '.warning // empty' 2>/dev/null || true)
69
+ if [ -n "$EVIDENCE_WARNING" ]; then
70
+ jq -n --arg w "$EVIDENCE_WARNING" '{warning: $w}' >&2
71
+ fi
@@ -255,13 +255,13 @@ if [ "$USE_STRUCTURED" = "true" ] && [ -n "$TITLE" ]; then
255
255
 
256
256
  [ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nAdditional context: ${CONTEXT}"
257
257
  [ -n "$DEADLINE_HINT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\n**Deadline hint**: ${DEADLINE_HINT}"
258
- 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}\"}'"
258
+ 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>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done."
259
259
  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}\"}'"
260
260
  else
261
261
  # Legacy free-text format (backwards compatible)
262
262
  TASK_MESSAGE="New task from orchestrator (priority: ${PRIORITY}):\n\n${TASK}"
263
263
  [ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nContext: ${CONTEXT}"
264
- 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}\"}'"
264
+ 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>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done."
265
265
  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}\"}'"
266
266
  fi
267
267
 
@@ -38,8 +38,15 @@ account ("帮我重新登陆 claude code", "换个账号", "send me the login li
38
38
  ```bash
39
39
  bash config/skills/orchestrator/harness-login/execute.sh --harness claude
40
40
  bash config/skills/orchestrator/harness-login/execute.sh --harness codex --switch-account
41
+ bash config/skills/orchestrator/harness-login/execute.sh --harness claude --account work
41
42
  ```
42
43
 
44
+ `--account <name>` signs in another of the owner's **own** Claude Code accounts
45
+ ("login claude work"): it gets its own config dir and login, and agents move to
46
+ it when an earlier runtime in their fallback order runs out (chain entry
47
+ `claude-code@work`). Nothing is restarted. Add only Claude Code accounts that
48
+ the owner owns; never use it for another person's account.
49
+
43
50
  ## What happens
44
51
 
45
52
  1. Crewly starts the harness's own login command in a terminal it keeps alive
@@ -75,7 +82,7 @@ in one line to finish it in Setup).
75
82
  - `antigravity` answers `no_link_login` (it uses a Gemini API key, entered in
76
83
  Setup); Gemini CLI is enterprise-only. Pass the message on in one line.
77
84
  - The owner can also just write 「重新登录 claude」 / 「换个账号登录 codex」 /
78
- `relogin claude` in your DM — Crewly handles that without you.
85
+ `relogin claude` / `login claude@work` in your DM — Crewly handles that without you.
79
86
 
80
87
  ## Errors
81
88
 
@@ -86,3 +93,4 @@ in one line to finish it in Setup).
86
93
  | `owner_request_unverifiable` | The owner's chat history could not be read |
87
94
  | `unknown_harness` | Use claude, codex or antigravity |
88
95
  | `no_link_login` | The harness has no link login (Antigravity, Gemini) |
96
+ | `invalid_account` | Account names are 1–32 lower-case letters, digits, `-` or `_` |
@@ -19,6 +19,7 @@
19
19
  # Usage:
20
20
  # bash execute.sh --harness claude
21
21
  # bash execute.sh --harness codex --switch-account
22
+ # bash execute.sh --harness claude --account work # another of the owner's Claude accounts
22
23
  # bash execute.sh '{"harness":"claude","switchAccount":true}'
23
24
  # =============================================================================
24
25
  set -euo pipefail
@@ -28,22 +29,25 @@ source "${SCRIPT_DIR}/../_common/lib.sh"
28
29
  print_usage() {
29
30
  cat <<'EOF_USAGE'
30
31
  Usage:
31
- bash execute.sh --harness <claude|codex|antigravity> [--switch-account]
32
- bash execute.sh '{"harness":"claude","switchAccount":false}'
32
+ bash execute.sh --harness <claude|codex|antigravity> [--switch-account] [--account <name>]
33
+ bash execute.sh '{"harness":"claude","switchAccount":false,"account":"work"}'
33
34
 
34
35
  Options:
35
36
  --harness claude (Claude Code), codex (Codex CLI) or antigravity (agy) — required
36
37
  --switch-account The owner wants a different account (changes the wording of the DM)
38
+ --account Sign in another of the owner's own Claude Code accounts (used as a
39
+ runtime fallback, chain entry claude-code@<name>) instead of the default login
37
40
  --help | -h Show this help
38
41
  EOF_USAGE
39
42
  }
40
43
 
41
- INPUT_JSON=""; HARNESS=""; SWITCH=false
44
+ INPUT_JSON=""; HARNESS=""; SWITCH=false; ACCOUNT=""
42
45
  if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift || true; fi
43
46
  while [[ $# -gt 0 ]]; do
44
47
  case "$1" in
45
48
  --harness) [ $# -ge 2 ] || error_exit "--harness requires a value"; HARNESS="$2"; shift 2 ;;
46
49
  --switch-account) SWITCH=true; shift ;;
50
+ --account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
47
51
  --help|-h) print_usage; exit 0 ;;
48
52
  *) error_exit "Unknown option: $1" ;;
49
53
  esac
@@ -52,6 +56,7 @@ if [ -n "$INPUT_JSON" ]; then
52
56
  INPUT=$(read_json_input "$INPUT_JSON")
53
57
  [ -z "$HARNESS" ] && HARNESS=$(printf '%s' "$INPUT" | jq -r '.harness // .harnessId // empty')
54
58
  [ "$(printf '%s' "$INPUT" | jq -r '.switchAccount // false')" = "true" ] && SWITCH=true
59
+ [ -z "$ACCOUNT" ] && ACCOUNT=$(printf '%s' "$INPUT" | jq -r '.account // empty')
55
60
  fi
56
61
  require_param "harness (--harness)" "$HARNESS"
57
62
 
@@ -59,7 +64,10 @@ require_param "harness (--harness)" "$HARNESS"
59
64
  HARNESS_ID=$(printf '%s' "$HARNESS" | tr '[:upper:]' '[:lower:]' | sed -E 's/[[:space:]_]+/-/g')
60
65
  [[ "$HARNESS_ID" =~ ^[a-z0-9-]+$ ]] || error_exit "Invalid harness: $HARNESS (use claude, codex or antigravity)"
61
66
 
62
- BODY=$(jq -cn --argjson sw "$SWITCH" '{switchAccount: $sw}')
67
+ ACCOUNT=$(printf '%s' "$ACCOUNT" | tr '[:upper:]' '[:lower:]')
68
+ [ -z "$ACCOUNT" ] || [[ "$ACCOUNT" =~ ^[a-z0-9][a-z0-9_-]{0,31}$ ]] || error_exit "Invalid account: $ACCOUNT (lower-case letters, digits, - or _)"
69
+
70
+ BODY=$(jq -cn --argjson sw "$SWITCH" --arg acct "$ACCOUNT" '{switchAccount: $sw} + (if $acct != "" then {account: $acct} else {} end)')
63
71
 
64
72
  ERR_FILE=$(mktemp); trap 'rm -f "$ERR_FILE"' EXIT
65
73
  RESPONSE=$(api_call POST "/harness/${HARNESS_ID}/owner-login" "$BODY" 2>"$ERR_FILE") || {
@@ -54,6 +54,12 @@ check "display name → id, switch flag" "$(jq -c '{path, body}' "$STUB_LOG")" '
54
54
  OUT=$(run '{"harness":"claude","switchAccount":true}')
55
55
  check "json input" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":true}'
56
56
 
57
+ OUT=$(run --harness claude --account Work)
58
+ check "account (lower-cased)" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":false,"account":"work"}'
59
+
60
+ OUT=$(run '{"harness":"claude","account":"b"}')
61
+ check "json account" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":false,"account":"b"}'
62
+
57
63
  OUT=$(run --harness codex); RC=$?
58
64
  check "no owner request: exit 1" "$RC" "1"
59
65
  check "no owner request: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "owner_request_not_found"
@@ -67,6 +73,7 @@ check "other agents refused" "$(printf '%s' "$OUT" | jq -r .reason)" "orchestrat
67
73
  check "missing harness" "$(run_err)" "Missing required parameter: harness (--harness)"
68
74
  check "path injection refused" "$(run_err --harness '../orc')" "Invalid harness: ../orc (use claude, codex or antigravity)"
69
75
  check "unknown option" "$(run_err --yes)" "Unknown option: --yes"
76
+ check "invalid account" "$(run_err --harness claude --account '../x')" "Invalid account: ../x (lower-case letters, digits, - or _)"
70
77
 
71
78
  echo "=== Results: $PASS passed, $FAIL failed ==="
72
79
  [ "$FAIL" -eq 0 ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "lastUpdated": "2026-09-29T01:47:07.718Z",
3
+ "lastUpdated": "2026-10-02T23:58:51.779Z",
4
4
  "cdnBaseUrl": "https://raw.githubusercontent.com/stevehuang0115/crewly/main",
5
5
  "source": "github",
6
6
  "items": [
@@ -1412,7 +1412,7 @@
1412
1412
  "name": "SEO Ops",
1413
1413
  "description": "Search Console-driven SEO operations for any site: query patterns (low-CTR top-3, near-miss 4-20, rising queries, keyword cannibalization), per-URL report cards, pre-publish SEO/AEO checks, a gated programmatic-page queue, and a live-diff gate that stops agents from removing things from live pages. Use when auditing organic search, deciding what to rewrite, or before changing a live page. For writing posts use seo-blog-writer instead.",
1414
1414
  "author": "Crewly",
1415
- "version": "1.0.0",
1415
+ "version": "1.1.0",
1416
1416
  "category": "development",
1417
1417
  "tags": [
1418
1418
  "seo",
@@ -1425,12 +1425,12 @@
1425
1425
  "downloads": 0,
1426
1426
  "rating": 0,
1427
1427
  "createdAt": "2026-09-29T01:43:29.904Z",
1428
- "updatedAt": "2026-09-29T01:47:07.718Z",
1428
+ "updatedAt": "2026-10-02T23:58:51.779Z",
1429
1429
  "source": "config/skills/agent/marketplace/seo-ops",
1430
1430
  "assets": {
1431
1431
  "archive": "config/skills/agent/marketplace/seo-ops",
1432
1432
  "checksum": "",
1433
- "sizeBytes": 95495
1433
+ "sizeBytes": 122232
1434
1434
  },
1435
1435
  "metadata": {
1436
1436
  "skillType": "claude-skill",
@@ -1447,7 +1447,8 @@
1447
1447
  "keyword cannibalization",
1448
1448
  "pre-publish seo check",
1449
1449
  "programmatic seo pages",
1450
- "live page diff"
1450
+ "live page diff",
1451
+ "experiment metric"
1451
1452
  ],
1452
1453
  "files": [
1453
1454
  "execute.sh",
@@ -170,7 +170,7 @@ if [ -n "$CONTEXT" ]; then
170
170
  fi
171
171
 
172
172
  # Build a structured task message from Team Leader
173
- TASK_MESSAGE="New task from Team Leader (priority: ${PRIORITY}):\n\n**[REQUIRED] When done, you MUST:** (1) Output a text summary of your work, findings, and any issues. (2) Call report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed:\nbash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'\n\n---\n\n${TASK}"
173
+ TASK_MESSAGE="New task from Team Leader (priority: ${PRIORITY}):\n\n**[REQUIRED] When done, you MUST:** (1) Output a text summary of your work, findings, and any issues. (2) Call report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed:\nbash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done.\n\n---\n\n${TASK}"
174
174
  [ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nContext: ${CONTEXT}"
175
175
 
176
176
  # V3-only producer (spec 2026-05-06-task-management-v1-deprecation.md):
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: Verify Output
3
3
  description: "Execute the team's verification pipeline against a completed task. Reads verificationPipeline configuration from the team template and runs each verification step sequentially."
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  category: quality
6
6
  skillType: claude-skill
7
7
  assignableRoles:
@@ -33,6 +33,18 @@ Supports two modes:
33
33
  1. **Explicit checks**: Pass `checks[]` array directly with specific verification steps
34
34
  2. **Template pipeline**: Pass `templateId` to automatically load verification steps from the team template's `verificationPipeline`
35
35
 
36
+ ## Evidence first (#873)
37
+
38
+ The skill reads the worker's **evidence block** (`output.evidence` on the
39
+ WorkItem: artifacts that exist, commands with exit codes, blocked steps) before
40
+ running any check, and returns it as the first field of the verdict.
41
+
42
+ - `evidenceWarning` is set when the item was marked done **without evidence**
43
+ (accepted only while the server is in evidence warn mode) — do not verify it
44
+ on its summary alone: check the work directly or send it back asking for
45
+ evidence. It is also set when the worker reported `blocked` steps.
46
+ - The warning, when present, leads `feedback`.
47
+
36
48
  ## When to Use
37
49
 
38
50
  - When a worker reports a task as `done`
@@ -118,6 +130,11 @@ The template's `passPolicy` controls the overall pass/fail determination:
118
130
 
119
131
  ```json
120
132
  {
133
+ "evidence": [
134
+ { "type": "artifact", "path": "src/auth.ts" },
135
+ { "type": "command", "command": "npm test", "exitCode": 0, "outputTail": "42 passed" }
136
+ ],
137
+ "evidenceWarning": null,
121
138
  "passed": false,
122
139
  "score": 67,
123
140
  "feedback": "Verification failed: 1/3 checks failed (policy: critical_only).",
@@ -36,6 +36,25 @@ WI_DATA=$(api_call GET "/task-pool/items/${WORK_ITEM_ID}" 2>/dev/null || echo '{
36
36
  WI_BRIEF=$(echo "$WI_DATA" | jq -r '.data.briefMarkdown // empty' 2>/dev/null || true)
37
37
  WI_OUTPUT_RAW=$(echo "$WI_DATA" | jq -c '.data.output // empty' 2>/dev/null || true)
38
38
 
39
+ # Evidence first (#873). The worker's completion carries an evidence block
40
+ # (artifacts that exist, commands with exit codes, or blocked steps), stored
41
+ # at output.evidence. Read it before anything else, and flag an item that was
42
+ # marked done WITHOUT evidence — accepted only because the server is in warn
43
+ # mode this release — so it is not verified on its summary alone.
44
+ WI_FOUND=$(echo "$WI_DATA" | jq -r 'if (.data // null) != null then "yes" else "no" end' 2>/dev/null || echo "no")
45
+ WI_EVIDENCE=$(echo "$WI_DATA" | jq -c 'if (.data.output.evidence | type) == "array" then .data.output.evidence else [] end' 2>/dev/null || echo '[]')
46
+ EVIDENCE_WARNING=""
47
+ if [ "$WI_FOUND" = "yes" ]; then
48
+ if [ "$(printf '%s' "$WI_EVIDENCE" | jq 'length')" = "0" ]; then
49
+ EVIDENCE_WARNING="No completion evidence: this WorkItem was marked done without artifacts or commands (accepted only in evidence warn mode). Do not verify on the summary alone — check the work directly, or send it back asking for evidence."
50
+ else
51
+ BLOCKED_STEPS=$(printf '%s' "$WI_EVIDENCE" | jq -r '[.[] | select(.type == "blocked") | "\(.step): \(.reason)"] | join("; ")')
52
+ if [ -n "$BLOCKED_STEPS" ]; then
53
+ EVIDENCE_WARNING="The worker reported blocked steps (the item is blocked, not done): ${BLOCKED_STEPS}"
54
+ fi
55
+ fi
56
+ fi
57
+
39
58
  # Compose `TASK_OUTPUT` for content-scan checks. Prefer worker-supplied
40
59
  # structured output, falling back to the brief if no output was set.
41
60
  if [ -n "$WI_OUTPUT_RAW" ] && [ "$WI_OUTPUT_RAW" != "null" ] && [ "$WI_OUTPUT_RAW" != "" ]; then
@@ -316,6 +335,11 @@ else
316
335
  FEEDBACK="Verification failed: ${TOTAL_FAILED}/${TOTAL_CHECKS} checks failed (policy: ${PASS_POLICY})."
317
336
  fi
318
337
 
338
+ # The evidence finding leads the feedback.
339
+ if [ -n "$EVIDENCE_WARNING" ]; then
340
+ FEEDBACK="${EVIDENCE_WARNING} ${FEEDBACK}"
341
+ fi
342
+
319
343
  # Check if any results require manual TL review
320
344
  REQUIRES_REVIEW=$(echo "$RESULTS" | jq '[.[] | select(.requiresReview == true)] | length')
321
345
  if [ "$REQUIRES_REVIEW" -gt 0 ]; then
@@ -323,6 +347,8 @@ if [ "$REQUIRES_REVIEW" -gt 0 ]; then
323
347
  fi
324
348
 
325
349
  jq -n \
350
+ --argjson evidence "$WI_EVIDENCE" \
351
+ --arg evidenceWarning "$EVIDENCE_WARNING" \
326
352
  --arg passed "$PASSED" \
327
353
  --arg score "$SCORE" \
328
354
  --arg feedback "$FEEDBACK" \
@@ -333,6 +359,8 @@ jq -n \
333
359
  --arg workerId "$WORKER_ID" \
334
360
  --arg templateId "$TEMPLATE_ID" \
335
361
  '{
362
+ evidence: $evidence,
363
+ evidenceWarning: (if $evidenceWarning != "" then $evidenceWarning else null end),
336
364
  passed: ($passed == "true"),
337
365
  score: ($score | tonumber),
338
366
  feedback: $feedback,