crewly 1.20.192 → 1.20.193

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 (458) 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/handoff-task/execute.sh +1 -1
  28. package/config/skills/agent/core/report-status/SKILL.md +27 -4
  29. package/config/skills/agent/core/report-status/execute.sh +104 -4
  30. package/config/skills/agent/core/todo-add/SKILL.md +16 -2
  31. package/config/skills/agent/core/todo-add/execute.sh +21 -5
  32. package/config/skills/agent/core/todo-add/execute.test.sh +14 -0
  33. package/config/skills/agent/core/todo-tasks/SKILL.md +4 -3
  34. package/config/skills/agent/core/todo-update/SKILL.md +13 -2
  35. package/config/skills/agent/core/todo-update/execute.sh +41 -3
  36. package/config/skills/agent/core/todo-update/execute.test.sh +7 -0
  37. package/config/skills/marketplace-registry.ts +4 -4
  38. package/config/skills/orchestrator/complete-task/SKILL.md +13 -6
  39. package/config/skills/orchestrator/complete-task/execute.sh +22 -3
  40. package/config/skills/orchestrator/delegate-task/execute.sh +2 -2
  41. package/config/skills/orchestrator/harness-login/SKILL.md +9 -1
  42. package/config/skills/orchestrator/harness-login/execute.sh +12 -4
  43. package/config/skills/orchestrator/harness-login/execute.test.sh +7 -0
  44. package/config/skills/team-leader/delegate-task/execute.sh +1 -1
  45. package/config/skills/team-leader/verify-output/SKILL.md +18 -1
  46. package/config/skills/team-leader/verify-output/execute.sh +28 -0
  47. package/config/skills/team-leader/verify-output/execute.test.sh +27 -0
  48. package/dist/backend/backend/src/constants.d.ts +135 -2
  49. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  50. package/dist/backend/backend/src/constants.js +136 -1
  51. package/dist/backend/backend/src/constants.js.map +1 -1
  52. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts +6 -0
  53. package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
  54. package/dist/backend/backend/src/controllers/canva/canva.controller.js +13 -2
  55. package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
  56. package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
  57. package/dist/backend/backend/src/controllers/canva/canva.routes.js +3 -1
  58. package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
  59. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  60. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +4 -1
  61. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  62. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -0
  63. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/connector/connector.controller.js +32 -3
  65. package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts +41 -0
  67. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -0
  68. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +75 -0
  69. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -0
  70. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +6 -0
  71. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  72. package/dist/backend/backend/src/controllers/google/google.controller.js +19 -0
  73. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  74. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  75. package/dist/backend/backend/src/controllers/google/google.routes.js +3 -1
  76. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  77. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -1
  78. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +22 -3
  79. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -1
  80. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +19 -2
  81. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
  82. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +37 -4
  83. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
  84. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
  85. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +3 -1
  86. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
  87. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +9 -0
  88. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  89. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +26 -0
  90. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  91. package/dist/backend/backend/src/controllers/people/people.routes.d.ts +25 -0
  92. package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -0
  93. package/dist/backend/backend/src/controllers/people/people.routes.js +90 -0
  94. package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -0
  95. package/dist/backend/backend/src/controllers/request-types.d.ts +2 -0
  96. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  97. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +22 -1
  98. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  99. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +143 -3
  100. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  101. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +25 -3
  102. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  103. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +125 -19
  104. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  105. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  106. package/dist/backend/backend/src/controllers/team/team.controller.js +14 -0
  107. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  108. package/dist/backend/backend/src/index.d.ts.map +1 -1
  109. package/dist/backend/backend/src/index.js +44 -1
  110. package/dist/backend/backend/src/index.js.map +1 -1
  111. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  112. package/dist/backend/backend/src/routes/api.routes.js +3 -0
  113. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  114. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  115. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/agent/agent-registration.service.js +28 -3
  117. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  119. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +14 -3
  121. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  123. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  125. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/idle-detection.service.js +1 -1
  127. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  128. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  129. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  131. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  133. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  135. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  136. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  137. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  138. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +49 -5
  139. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  140. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  142. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  143. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  144. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  145. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts +17 -4
  146. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/canva/canva-token.service.js +49 -17
  148. package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
  149. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +24 -0
  150. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  151. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +52 -0
  152. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  153. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +17 -2
  154. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +30 -6
  156. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +38 -2
  158. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
  159. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +63 -1
  160. package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
  161. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  162. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  163. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +204 -56
  164. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  165. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  166. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  168. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  169. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +3 -0
  170. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  171. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +25 -2
  172. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  173. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +48 -7
  174. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  175. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +207 -0
  176. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  177. package/dist/backend/backend/src/services/harness/claude-accounts.js +306 -0
  178. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -0
  179. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  180. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +48 -0
  182. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  183. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  184. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  185. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +156 -19
  186. package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  187. package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
  188. package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
  190. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +19 -4
  191. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/harness/login-broker.service.js +46 -7
  193. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  194. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +18 -2
  195. package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/harness/owner-login-request.js +31 -7
  197. package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -1
  198. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  199. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  201. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  202. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +11 -0
  203. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  204. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +29 -0
  205. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  206. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  207. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  208. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  209. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  210. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +87 -5
  211. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -1
  212. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +151 -12
  213. package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -1
  214. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +17 -4
  215. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
  216. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +45 -17
  217. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
  218. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts +53 -7
  219. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -1
  220. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js +77 -14
  221. package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -1
  222. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +53 -1
  223. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
  224. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +130 -29
  225. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
  226. package/dist/backend/backend/src/services/people/acting-for.service.d.ts +151 -0
  227. package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  228. package/dist/backend/backend/src/services/people/acting-for.service.js +224 -0
  229. package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -0
  230. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts +89 -0
  231. package/dist/backend/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  232. package/dist/backend/backend/src/services/people/dedicated-agent.js +113 -0
  233. package/dist/backend/backend/src/services/people/dedicated-agent.js.map +1 -0
  234. package/dist/backend/backend/src/services/people/grant-sharing.d.ts +79 -0
  235. package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -0
  236. package/dist/backend/backend/src/services/people/grant-sharing.js +135 -0
  237. package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -0
  238. package/dist/backend/backend/src/services/people/people-directory.service.d.ts +181 -0
  239. package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  240. package/dist/backend/backend/src/services/people/people-directory.service.js +317 -0
  241. package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -0
  242. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  243. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  244. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  245. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  246. package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  247. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -1
  248. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
  249. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +16 -2
  250. package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
  251. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +60 -1
  252. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  253. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +140 -8
  254. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  255. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +1 -1
  256. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
  257. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  258. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  259. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  260. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  261. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  262. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +12 -2
  263. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  264. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +7 -1
  265. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
  266. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +18 -3
  267. package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
  268. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  269. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  270. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  271. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  272. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  273. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +51 -0
  274. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  275. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  276. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  277. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +46 -0
  278. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  279. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +105 -0
  280. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -0
  281. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +238 -0
  282. package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -0
  283. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  284. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +4 -0
  285. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  286. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +39 -12
  287. package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -1
  288. package/dist/backend/backend/src/services/usage/usage-stats.service.js +61 -20
  289. package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -1
  290. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -0
  291. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +9 -0
  293. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  294. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +10 -0
  295. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  296. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +45 -2
  297. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  298. package/dist/backend/backend/src/types/index.d.ts +12 -1
  299. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  300. package/dist/backend/backend/src/types/index.js.map +1 -1
  301. package/dist/backend/backend/src/types/messaging.types.d.ts +5 -0
  302. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  303. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  304. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts +77 -0
  305. package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts.map +1 -0
  306. package/dist/backend/backend/src/types/v2/completion-evidence.types.js +119 -0
  307. package/dist/backend/backend/src/types/v2/completion-evidence.types.js.map +1 -0
  308. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +13 -0
  309. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  310. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  311. package/dist/backend/build-info.json +2 -2
  312. package/dist/backend/config/constants.d.ts +11 -0
  313. package/dist/backend/config/constants.d.ts.map +1 -1
  314. package/dist/backend/config/constants.js +11 -0
  315. package/dist/backend/config/constants.js.map +1 -1
  316. package/dist/cli/backend/src/constants.d.ts +135 -2
  317. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  318. package/dist/cli/backend/src/constants.js +136 -1
  319. package/dist/cli/backend/src/constants.js.map +1 -1
  320. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
  321. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  322. package/dist/cli/backend/src/services/agent/agent-registration.service.js +28 -3
  323. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  324. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
  325. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  326. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +14 -3
  327. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  328. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
  329. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  330. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
  331. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  332. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
  333. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  334. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
  335. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  336. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
  337. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  338. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
  339. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  340. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
  341. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  342. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +49 -5
  343. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  344. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
  346. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  347. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
  348. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
  349. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +24 -0
  350. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  351. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +52 -0
  352. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  353. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
  354. package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  355. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +204 -56
  356. package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  357. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
  358. package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  359. package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  360. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +207 -0
  361. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
  362. package/dist/cli/backend/src/services/harness/claude-accounts.js +306 -0
  363. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -0
  364. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
  365. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  366. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +48 -0
  367. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  368. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
  369. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
  370. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +156 -19
  371. package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
  372. package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
  373. package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
  374. package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
  375. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +19 -4
  376. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  377. package/dist/cli/backend/src/services/harness/login-broker.service.js +46 -7
  378. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  379. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +18 -2
  380. package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
  381. package/dist/cli/backend/src/services/harness/owner-login-request.js +31 -7
  382. package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -1
  383. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
  384. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  385. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
  386. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  387. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +11 -0
  388. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  389. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +29 -0
  390. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  391. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
  392. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  393. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
  394. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  395. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts +197 -0
  396. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js +455 -0
  398. package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -0
  399. package/dist/cli/backend/src/services/people/acting-for.service.d.ts +151 -0
  400. package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/people/acting-for.service.js +224 -0
  402. package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -0
  403. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts +89 -0
  404. package/dist/cli/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/people/dedicated-agent.js +113 -0
  406. package/dist/cli/backend/src/services/people/dedicated-agent.js.map +1 -0
  407. package/dist/cli/backend/src/services/people/people-directory.service.d.ts +181 -0
  408. package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/people/people-directory.service.js +317 -0
  410. package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -0
  411. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
  412. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
  413. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
  414. package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
  415. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
  416. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
  417. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
  418. package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
  419. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  420. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
  421. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  422. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  423. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  424. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +51 -0
  425. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  426. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +9 -0
  427. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  428. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +46 -0
  429. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  430. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  431. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +4 -0
  432. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  433. package/dist/cli/backend/src/types/index.d.ts +12 -1
  434. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  435. package/dist/cli/backend/src/types/index.js.map +1 -1
  436. package/dist/cli/backend/src/types/messaging.types.d.ts +5 -0
  437. package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
  438. package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
  439. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +13 -0
  440. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  441. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  442. package/dist/cli/cli/src/utils/marketplace.d.ts +21 -0
  443. package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
  444. package/dist/cli/cli/src/utils/marketplace.js +35 -1
  445. package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
  446. package/dist/cli/config/constants.d.ts +11 -0
  447. package/dist/cli/config/constants.d.ts.map +1 -1
  448. package/dist/cli/config/constants.js +11 -0
  449. package/dist/cli/config/constants.js.map +1 -1
  450. package/dist/cli/config/skills/marketplace-registry.d.ts +4 -4
  451. package/dist/cli/config/skills/marketplace-registry.js +4 -4
  452. package/frontend/dist/assets/{index-5b7af029.js → index-465d1f8f.js} +293 -293
  453. package/frontend/dist/assets/{index-fc715ec3.css → index-5e967795.css} +1 -1
  454. package/frontend/dist/index.html +2 -2
  455. package/package.json +1 -1
  456. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +45 -0
  457. package/packages/crewly-agent/src/runtime/tool-registry.ts +40 -5
  458. package/packages/crewly-agent/src/test/isolated-home.test.ts +24 -0
@@ -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 ]
@@ -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,
@@ -25,6 +25,15 @@ cat > "$FAKE_BIN/curl" <<'CURL_EOF'
25
25
  #!/bin/bash
26
26
  url="${@: -1}"
27
27
  case "$url" in
28
+ */api/task-pool/items/wi-ev)
29
+ printf '%s\n200' '{"success":true,"data":{"id":"wi-ev","status":"done_by_worker","output":{"summary":"Report written","evidence":[{"type":"artifact","path":"/proj/report.md"},{"type":"command","command":"npm test","exitCode":0}]}}}'
30
+ ;;
31
+ */api/task-pool/items/wi-noev)
32
+ printf '%s\n200' '{"success":true,"data":{"id":"wi-noev","status":"done_by_worker","output":{"summary":"Trust me"}}}'
33
+ ;;
34
+ */api/task-pool/items/wi-blocked)
35
+ printf '%s\n200' '{"success":true,"data":{"id":"wi-blocked","status":"blocked","output":{"summary":"Stuck","evidence":[{"type":"blocked","step":"deploy","reason":"no creds"}]}}}'
36
+ ;;
28
37
  */api/templates/tmpl-majority)
29
38
  printf '%s\n200' '{"success":true,"data":{"verificationPipeline":{"passPolicy":"majority","maxRetries":3,"steps":[{"id":"s1","name":"Review","method":"code_review","critical":false}]}}}'
30
39
  ;;
@@ -112,6 +121,24 @@ INPUT_INLINE=$(jq -n --arg pp "$PROJECT_DIR" \
112
121
  assert_json_field "inline checks with default policy: all must pass" \
113
122
  "$INPUT_INLINE" '.passed' 'false'
114
123
 
124
+ echo ""
125
+ echo "verify-output: evidence first (#873)"
126
+
127
+ assert_json_field "evidence is the first key of the verdict" \
128
+ '{"workItemId":"wi-ev"}' 'keys_unsorted[0]' 'evidence'
129
+ assert_json_field "evidence block is surfaced from output.evidence" \
130
+ '{"workItemId":"wi-ev"}' '[.evidence[].type] | join(",")' 'artifact,command'
131
+ assert_json_field "no evidence warning when evidence is present" \
132
+ '{"workItemId":"wi-ev"}' '.evidenceWarning' 'null'
133
+ assert_json_field "done without evidence is flagged" \
134
+ '{"workItemId":"wi-noev"}' '.evidenceWarning | startswith("No completion evidence")' 'true'
135
+ assert_json_field "the evidence flag leads the feedback" \
136
+ '{"workItemId":"wi-noev"}' '.feedback | startswith("No completion evidence")' 'true'
137
+ assert_json_field "blocked evidence is surfaced with its step" \
138
+ '{"workItemId":"wi-blocked"}' '.evidenceWarning | contains("deploy: no creds")' 'true'
139
+ assert_json_field "an unreadable WorkItem gets empty evidence and no flag" \
140
+ '{"workItemId":"wi-missing"}' '(.evidence | length | tostring) + "/" + (.evidenceWarning | tostring)' '0/null'
141
+
115
142
  echo ""
116
143
  echo "Results: $PASS passed, $FAIL failed"
117
144
  [ "$FAIL" -eq 0 ]
@@ -348,6 +348,8 @@ export declare const CLOUD_DISCONNECT_NOTICE_CONSTANTS: {
348
348
  readonly DISCONNECT_THRESHOLD_MS: number;
349
349
  readonly CHECK_INTERVAL_MS: number;
350
350
  readonly REPEAT_INTERVAL_MS: number;
351
+ readonly QUEUE_FAILURE_THRESHOLD_MS: number;
352
+ readonly RELAY_QUEUE_NOTICE_FILE: "cloud/relay-queue-notice.json";
351
353
  readonly STATE_FILE: "cloud/disconnect-notice.json";
352
354
  readonly CLI_LOGIN_ARGS: readonly ["cloud", "login", "--no-browser"];
353
355
  readonly CLI_ENTRY: "dist/cli/cli/src/index.js";
@@ -778,7 +780,7 @@ export declare const CONTROL_PLANE_GUARD_CONSTANTS: {
778
780
  /** Files under CREWLY_HOME that agents must not read with the built-in tools either. */
779
781
  readonly CREWLY_HOME_READ_DENIED_FILES: readonly ["api-token"];
780
782
  /** Write-protected directories under the install root (whole subtree). */
781
- readonly INSTALL_DIRS: readonly ["config/skills/orchestrator/stop-agent", "config/skills/orchestrator/start-agent", "config/skills/orchestrator/terminate-agent", "config/skills/orchestrator/stop-team", "config/skills/orchestrator/start-team", "config/skills/orchestrator/restart-crewly", "config/hooks/control-plane-guard", "config/hooks/agent-status", "dist"];
783
+ readonly INSTALL_DIRS: readonly ["config/skills/orchestrator/stop-agent", "config/skills/orchestrator/start-agent", "config/skills/orchestrator/terminate-agent", "config/skills/orchestrator/stop-team", "config/skills/orchestrator/start-team", "config/skills/orchestrator/restart-crewly", "config/hooks/control-plane-guard", "config/hooks/agent-status", "config/hooks/subagent-guard", "dist"];
782
784
  /** Write-protected files under the install root. */
783
785
  readonly INSTALL_FILES: readonly ["config/skills/_common/lib.sh"];
784
786
  /** Write-protected directories under the agent's project path (whole subtree). */
@@ -810,6 +812,23 @@ export declare const AGENT_STATUS_HOOK_CONSTANTS: {
810
812
  /** Accepted X-Agent-Session header value. */
811
813
  readonly SESSION_NAME_PATTERN: RegExp;
812
814
  };
815
+ /**
816
+ * Subagent guard (#852, specs/2026-10-03-subagent-guard.md): a Claude Code
817
+ * SubagentStart / SubagentStop hook. It injects Crewly's subagent rules when a
818
+ * subagent starts, and sends back, once, a subagent that stops without having
819
+ * made any tool call. Registered in the control-plane guard's per-session
820
+ * settings file, like the agent-status hook.
821
+ */
822
+ export declare const SUBAGENT_GUARD_CONSTANTS: {
823
+ /** Hook script, relative to the install root. */
824
+ readonly HOOK_SCRIPT: "config/hooks/subagent-guard/subagent.sh";
825
+ /** Hook events the script is registered for. */
826
+ readonly EVENTS: readonly ["SubagentStart", "SubagentStop"];
827
+ /** Environment variable that turns the subagent guard off when set to KILL_SWITCH_OFF_VALUE. */
828
+ readonly KILL_SWITCH_ENV: "CREWLY_SUBAGENT_GUARD";
829
+ /** Value of KILL_SWITCH_ENV that disables the subagent guard. */
830
+ readonly KILL_SWITCH_OFF_VALUE: "0";
831
+ };
813
832
  /**
814
833
  * Session recreation (Step 2 full recreation in AgentRegistrationService).
815
834
  *
@@ -1162,6 +1181,42 @@ export declare const GIVE_UP_RECOVERY_CONSTANTS: {
1162
1181
  /** Audit label for transitions this feature makes. */
1163
1182
  readonly ACTOR_VIA: "give-up-recovery";
1164
1183
  };
1184
+ /**
1185
+ * Completion evidence contract (#873, specs/2026-10-03-completion-evidence.md):
1186
+ * a WorkItem is marked done only with evidence — artifacts that exist,
1187
+ * commands with their exit codes — and a worker that could not finish reports
1188
+ * `blocked` evidence instead.
1189
+ */
1190
+ export declare const COMPLETION_EVIDENCE_CONSTANTS: {
1191
+ /** The two rollout modes for a completion that carries no evidence. */
1192
+ readonly MODES: readonly string[];
1193
+ /**
1194
+ * Default mode for a completion with no evidence. `warn` (this release):
1195
+ * accepted, logged, and the response carries a `warning`. `enforce` (next
1196
+ * release): 400. Malformed evidence, missing artifacts, failing commands and
1197
+ * `blocked` entries are handled the same in both modes.
1198
+ */
1199
+ readonly EVIDENCE_ENFORCEMENT_MODE: "warn" | "enforce";
1200
+ /** Env var that overrides {@link EVIDENCE_ENFORCEMENT_MODE} (`warn` | `enforce`). */
1201
+ readonly ENV_MODE: "CREWLY_EVIDENCE_MODE";
1202
+ /** Most evidence entries accepted on one completion. */
1203
+ readonly MAX_ENTRIES: 50;
1204
+ /** Longest string accepted in any evidence field. */
1205
+ readonly MAX_FIELD_CHARS: 8000;
1206
+ /** URL schemes accepted for an artifact without checking it exists. */
1207
+ readonly URL_SCHEMES: readonly string[];
1208
+ /** Response codes for each rejection. */
1209
+ readonly CODES: {
1210
+ readonly MALFORMED: "evidence_malformed";
1211
+ readonly MISPLACED: "evidence_misplaced";
1212
+ readonly MISSING: "evidence_required";
1213
+ readonly ARTIFACT_NOT_FOUND: "evidence_artifact_not_found";
1214
+ readonly ARTIFACT_UNRESOLVABLE: "evidence_artifact_relative_path";
1215
+ readonly COMMAND_FAILED: "evidence_command_failed";
1216
+ };
1217
+ /** The shape a worker must send, quoted in every rejection and warning. */
1218
+ readonly SHAPE_HINT: string;
1219
+ };
1165
1220
  /**
1166
1221
  * Constants for the waiting_on_human attention verdict (#815).
1167
1222
  * See specs/2026-09-26-agent-waiting-on-human.md.
@@ -2344,6 +2399,14 @@ export declare const RUNTIME_EXIT_CONSTANTS: {
2344
2399
  * spawned yet.
2345
2400
  */
2346
2401
  readonly PROCESS_POLL_GRACE_PERIOD_MS: 30000;
2402
+ /**
2403
+ * An exit with no recognised cause this soon after monitoring started is
2404
+ * recorded as `startup_exit`, not `idle_exit` (#791): no runtime idles
2405
+ * out in its first minute, so calling it idle hides the real cause.
2406
+ */
2407
+ readonly EARLY_EXIT_WINDOW_MS: 60000;
2408
+ /** Characters of cleaned terminal output logged with an unexplained exit (#791) */
2409
+ readonly EXIT_DIAGNOSTIC_TAIL_CHARS: 1500;
2347
2410
  };
2348
2411
  /**
2349
2412
  * Constants for context window monitoring and auto-recovery.
@@ -2668,6 +2731,13 @@ export declare const CLAUDE_TRANSCRIPT_SYNC_CONSTANTS: {
2668
2731
  * so a small window is enough and keeps the cursor file small.
2669
2732
  */
2670
2733
  readonly MAX_DEDUPE_IDS: 200;
2734
+ /**
2735
+ * How many earlier transcripts of a session keep their read offset.
2736
+ * A session that switches between the owner's Claude Code accounts, or
2737
+ * gets a new conversation, can come back to a transcript it already
2738
+ * read; the remembered offset keeps it from being counted twice.
2739
+ */
2740
+ readonly MAX_REMEMBERED_TRANSCRIPTS: 8;
2671
2741
  /**
2672
2742
  * Context size, in tokens, above which a claude-code agent is asked to
2673
2743
  * compact.
@@ -3542,8 +3612,10 @@ export declare const GOOGLE_WORKSPACE_CONSTANTS: {
3542
3612
  readonly STATUS: "/status";
3543
3613
  /** GET ?email=&product= → { accessToken, expiresAt, scopes, email, products } */
3544
3614
  readonly TOKEN: "/token";
3545
- /** GET ?token=&returnUrl=&products=&loginHint= → 302 to Google consent */
3615
+ /** GET ?token=&returnUrl=&products=&loginHint=&authorizedBy= → 302 to Google consent */
3546
3616
  readonly START: "/start";
3617
+ /** POST { email, authorizedBy?, sharing? } → { authorizedBy, sharing } — who owns a grant and who it is shared with (issue #968) */
3618
+ readonly SHARING: "/sharing";
3547
3619
  /**
3548
3620
  * POST { products, slackUserId, slackChannelId, slackThreadTs } →
3549
3621
  * `{ url, expiresAt }`.
@@ -3636,6 +3708,8 @@ export declare const CANVA_CONSTANTS: {
3636
3708
  readonly START: "/start";
3637
3709
  /** DELETE CLOUD_PATH itself → { removed } */
3638
3710
  readonly DISCONNECT: "";
3711
+ /** POST { authorizedBy?, sharing? } → { authorizedBy, sharing } — who owns the grant and who it is shared with (issue #968) */
3712
+ readonly SHARING: "/sharing";
3639
3713
  };
3640
3714
  /** Canva Connect REST base */
3641
3715
  readonly API_BASE: "https://api.canva.com/rest/v1";
@@ -3685,6 +3759,8 @@ export declare const MICROSOFT_TODO_CONSTANTS: {
3685
3759
  readonly START: "/start";
3686
3760
  /** DELETE CLOUD_PATH itself → { removed } */
3687
3761
  readonly DISCONNECT: "";
3762
+ /** POST { authorizedBy?, sharing? } → { authorizedBy, sharing } — who owns the grant and who it is shared with (issue #968) */
3763
+ readonly SHARING: "/sharing";
3688
3764
  };
3689
3765
  /** Microsoft Graph v1.0 base */
3690
3766
  readonly GRAPH_BASE: "https://graph.microsoft.com/v1.0";
@@ -3703,6 +3779,8 @@ export declare const MICROSOFT_TODO_CONSTANTS: {
3703
3779
  readonly NOTE_PREVIEW_LENGTH: 200;
3704
3780
  /** Accepted `importance` values */
3705
3781
  readonly IMPORTANCE_VALUES: readonly string[];
3782
+ /** Most steps (Graph `checklistItems`) one call may add to a task (#835) */
3783
+ readonly STEPS_MAX_PER_CALL: 50;
3706
3784
  /**
3707
3785
  * Time zone written with a due date. To Do stores due *dates*; midnight
3708
3786
  * in UTC is what Microsoft's own samples send and reads back unchanged.
@@ -3835,6 +3913,13 @@ export declare const CLOUD_SYNC_CONSTANTS: {
3835
3913
  * register. We re-register on this interval so recovery is bounded.
3836
3914
  */
3837
3915
  readonly REGISTER_INTERVAL_MS: 60000;
3916
+ /**
3917
+ * Retry gaps (ms) after a failed queue registration: 30 s, 1 min, 2 min,
3918
+ * 5 min, then the last value forever. Without a queue this machine
3919
+ * receives no Cloud or Slack messages, so it never gives up — but it
3920
+ * backs off so a relay that is refusing (quota, outage) is not hammered.
3921
+ */
3922
+ readonly REGISTER_RETRY_BACKOFF_MS: readonly number[];
3838
3923
  /** Device considered offline after this threshold (ms) */
3839
3924
  readonly OFFLINE_THRESHOLD_MS: 60000;
3840
3925
  /** HTTP request timeout for sync API calls (ms) */
@@ -4570,6 +4655,25 @@ export declare const HARNESS_CONSTANTS: {
4570
4655
  * when the login is gone. No session file is written.
4571
4656
  */
4572
4657
  readonly PROBE_ARGS: readonly string[];
4658
+ /**
4659
+ * More of the owner's own Claude Code accounts on this machine, each
4660
+ * with its own config dir (`CLAUDE_CONFIG_DIR`) and login, used as
4661
+ * runtime fallbacks (`claude-code@<name>`). Issue #942.
4662
+ */
4663
+ readonly ACCOUNTS: {
4664
+ /** Directory under CREWLY_HOME holding one config dir per account */
4665
+ readonly DIR: "claude-accounts";
4666
+ /** Separator of a fallback chain entry: `claude-code@work` */
4667
+ readonly TARGET_SEPARATOR: "@";
4668
+ /** Account names: lower-case letters, digits, `-`, `_` */
4669
+ readonly NAME_PATTERN: RegExp;
4670
+ /** Words that cannot be account names (they read as part of "claude code account …") */
4671
+ readonly RESERVED_NAMES: readonly string[];
4672
+ /** Claude's user settings file, copied from the default login when an account is created */
4673
+ readonly SETTINGS_FILE: "settings.json";
4674
+ /** `.claude.json` keys copied from the default login (the owner's own earlier answers) */
4675
+ readonly COPIED_CONFIG_KEYS: readonly string[];
4676
+ };
4573
4677
  };
4574
4678
  /** Codex CLI facts */
4575
4679
  readonly CODEX: {
@@ -5443,4 +5547,33 @@ export declare const RUNTIME_FALLBACK_CONSTANTS: {
5443
5547
  /** Short names for "(Claude limit)" */
5444
5548
  readonly SHORT_LABELS: Readonly<Record<string, string>>;
5445
5549
  };
5550
+ /**
5551
+ * Per-person access (issue #968, epic #967): the people directory, the person
5552
+ * each agent turn acts for, and grant sharing. specs/per-person-access.md
5553
+ */
5554
+ export declare const PEOPLE_CONSTANTS: {
5555
+ /** People directory under CREWLY_HOME */
5556
+ readonly STORE_FILE: "people.json";
5557
+ /** Who each agent session acts for, under CREWLY_HOME */
5558
+ readonly ACTING_FOR_FILE: "acting-for.json";
5559
+ /** Person id of the instance owner when their Slack user id is not known (dashboard, terminal) */
5560
+ readonly OWNER_ID: "owner";
5561
+ /** Roles a person can have */
5562
+ readonly ROLES: readonly string[];
5563
+ /** Role a newly seen Slack user gets */
5564
+ readonly DEFAULT_ROLE: "member";
5565
+ /** Headers the backend sends Cloud with each credential request (never taken from an agent) */
5566
+ readonly ACTING_FOR_HEADER: "X-Crewly-Acting-For";
5567
+ readonly ACTING_FOR_ROLE_HEADER: "X-Crewly-Acting-For-Role";
5568
+ /** Cloud's refusal code when the person may not use a grant */
5569
+ readonly NOT_PERMITTED_CODE: "not_permitted";
5570
+ /** What an agent is told to do with that refusal */
5571
+ readonly NOT_PERMITTED_HINT: "Tell the person you are working for exactly this, in one line. Do not retry, and do not use another account or connector to get around it.";
5572
+ /** Grant sharing modes: only the person who authorized it, named people, or every member (not guests) */
5573
+ readonly SHARING_MODES: readonly string[];
5574
+ /** Longest display name kept */
5575
+ readonly MAX_NAME_LENGTH: 80;
5576
+ /** Slack user ids (`U…` / `W…`) */
5577
+ readonly SLACK_USER_ID_PATTERN: RegExp;
5578
+ };
5446
5579
  //# sourceMappingURL=constants.d.ts.map