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
@@ -171,6 +171,54 @@ export class HarnessCredentialsStore {
171
171
  delete next.claude;
172
172
  this.write(next);
173
173
  }
174
+ /**
175
+ * Store the `setup-token` token of one of the owner's other Claude Code accounts.
176
+ *
177
+ * @param account - Account name (validated by the caller)
178
+ * @param token - Token printed by `claude setup-token`
179
+ * @throws Error when the token is empty
180
+ */
181
+ setClaudeAccountToken(account, token) {
182
+ if (!isNonEmptyString(token))
183
+ throw new Error('Claude OAuth token is empty');
184
+ const current = this.read();
185
+ this.write({
186
+ ...current,
187
+ claudeAccounts: { ...(current.claudeAccounts ?? {}), [account]: { oauthToken: token.trim(), updatedAt: new Date().toISOString() } },
188
+ });
189
+ }
190
+ /**
191
+ * The stored token of one of the owner's other Claude Code accounts.
192
+ *
193
+ * @param account - Account name
194
+ * @returns The token, or null when none is stored
195
+ */
196
+ getClaudeAccountToken(account) {
197
+ const token = this.read().claudeAccounts?.[account]?.oauthToken;
198
+ return isNonEmptyString(token) ? token : null;
199
+ }
200
+ /**
201
+ * Account names with a stored token.
202
+ *
203
+ * @returns Names
204
+ */
205
+ listClaudeAccountsWithToken() {
206
+ const accounts = this.read().claudeAccounts ?? {};
207
+ return Object.keys(accounts).filter((name) => isNonEmptyString(accounts[name]?.oauthToken));
208
+ }
209
+ /**
210
+ * Forget the token of one of the owner's other Claude Code accounts.
211
+ *
212
+ * @param account - Account name
213
+ */
214
+ clearClaudeAccount(account) {
215
+ const current = this.read();
216
+ if (!current.claudeAccounts?.[account])
217
+ return;
218
+ const accounts = { ...current.claudeAccounts };
219
+ delete accounts[account];
220
+ this.write({ ...current, claudeAccounts: accounts });
221
+ }
174
222
  /**
175
223
  * Which Claude credential Crewly holds (never the value).
176
224
  *
@@ -1 +1 @@
1
- {"version":3,"file":"harness-credentials.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-credentials.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,12 @@
43
43
  * 「重新登录 claude」 / "relogin codex" / the orchestrator's `harness-login`
44
44
  * skill) start the broker at once, even while logged in (account switch).
45
45
  *
46
+ * `login claude <name>` signs in one of the owner's OTHER Claude Code
47
+ * accounts (issue #942, claude-accounts.ts): the same link-and-code flow,
48
+ * run with that account's config dir; the token is kept for that account
49
+ * only, no agent is restarted, and the runtime fallback is told the account
50
+ * is usable ({@link HarnessReloginService.setAccountLoginHandler}).
51
+ *
46
52
  * Secrets: Claude's code is passed to the broker and never stored, logged
47
53
  * or echoed; DMs are built from {@link LoginSession} snapshots, which never
48
54
  * contain a token, and the screen text is redacted again.
@@ -110,13 +116,17 @@ export interface OwnerLoginOptions {
110
116
  /** Conversation to answer in (null = this machine's DM with the owner) */
111
117
  replyTarget?: ReloginReplyTarget | null;
112
118
  /** Who relayed the request, for logs */
113
- requestedBy: 'owner_dm' | 'orchestrator';
119
+ requestedBy: 'owner_dm' | 'orchestrator' | 'dashboard';
120
+ /** One of the owner's other Claude Code accounts to sign in (issue #942); absent = the default login */
121
+ account?: string;
114
122
  }
115
123
  /** An owner-requested login that was started. */
116
124
  export interface OwnerLoginStarted {
117
125
  /** `restarted`: a flow for the harness was running and was started over */
118
126
  status: 'started' | 'restarted';
119
127
  harnessId: HarnessId;
128
+ /** The other Claude Code account being signed in, when it is one */
129
+ account?: string;
120
130
  /** Whether the owner can be DM'd right now (false = Slack is down) */
121
131
  dmAvailable: boolean;
122
132
  }
@@ -183,6 +193,10 @@ export interface HarnessReloginDeps {
183
193
  * waited for them (owner-message watchdog). Returns how many messages.
184
194
  */
185
195
  onLoginRestored?: (harnessId: HarnessId, resumed: readonly string[]) => Promise<number> | number;
196
+ /** After one of the owner's other Claude Code accounts was signed in (the runtime fallback) */
197
+ onAccountLogin?: (account: string) => Promise<void> | void;
198
+ /** The owner's existing other Claude Code accounts (default: claude-accounts.ts) */
199
+ listClaudeAccounts?: () => string[];
186
200
  /** This machine's name, for the owner ("iriss-air.lan") */
187
201
  machineName?: () => string;
188
202
  /** Persisted notice / backoff state */
@@ -262,6 +276,8 @@ export interface LoginDmWording {
262
276
  switchAccount?: boolean;
263
277
  /** This machine's name */
264
278
  machine?: string;
279
+ /** One of the owner's other Claude Code accounts this login is for */
280
+ account?: string | null;
265
281
  }
266
282
  /**
267
283
  * The first "signed out" DM, a re-reminder, or the note after a link expired unused.
@@ -329,6 +345,22 @@ export declare function formatOwnerSuccessDm(harnessId: HarnessId, result: {
329
345
  resumed: string[];
330
346
  failed: string[];
331
347
  }, redelivered?: number): string;
348
+ /**
349
+ * DM after one of the owner's other Claude Code accounts was signed in.
350
+ *
351
+ * @param account - Account name
352
+ * @param machine - This machine's name
353
+ * @returns Slack mrkdwn text
354
+ */
355
+ export declare function formatAccountSuccessDm(account: string, machine: string): string;
356
+ /**
357
+ * DM after the link for one of the owner's other Claude Code accounts expired unused.
358
+ *
359
+ * @param account - Account name
360
+ * @param machine - This machine's name
361
+ * @returns Slack mrkdwn text
362
+ */
363
+ export declare function formatAccountLinkExpiredDm(account: string, machine: string): string;
332
364
  /**
333
365
  * Reply to a login request that named no harness Crewly can log in.
334
366
  *
@@ -371,12 +403,15 @@ export declare class HarnessReloginService {
371
403
  private listAgents;
372
404
  private sessionNeedsLogin;
373
405
  private onLoginRestored;
406
+ private onAccountLogin;
407
+ private readonly listClaudeAccounts;
374
408
  private readonly machineName;
375
409
  private readonly state;
376
410
  private notifier;
377
411
  private resumer;
378
412
  private readonly now;
379
413
  private readonly logger;
414
+ /** Flows by {@link flowKey} (harness, or harness@account) */
380
415
  private readonly flows;
381
416
  /** Harnesses whose expiry is being confirmed → sessions reported meanwhile */
382
417
  private readonly confirming;
@@ -419,6 +454,12 @@ export declare class HarnessReloginService {
419
454
  * @param handler - Handler, or null
420
455
  */
421
456
  setLoginRestoredHandler(handler: HarnessReloginDeps['onLoginRestored'] | null): void;
457
+ /**
458
+ * Set what learns that one of the owner's other Claude Code accounts was signed in.
459
+ *
460
+ * @param handler - Handler (the runtime fallback), or null
461
+ */
462
+ setAccountLoginHandler(handler: HarnessReloginDeps['onAccountLogin'] | null): void;
422
463
  /**
423
464
  * Set how the configured agents (running or not) are listed.
424
465
  *
@@ -459,6 +500,12 @@ export declare class HarnessReloginService {
459
500
  * @returns True when consumed; the caller must then NOT pass it on as a chat message
460
501
  */
461
502
  handleOwnerReply(text: string, target?: ReloginReplyTarget | null, scope?: OwnerReplyScope): boolean;
503
+ /**
504
+ * The owner's existing other Claude Code accounts (for "login claude work").
505
+ *
506
+ * @returns Names; empty when they cannot be read
507
+ */
508
+ private knownClaudeAccounts;
462
509
  /**
463
510
  * Start a login the owner asked for, through the broker: forced (runs
464
511
  * even when the harness is still logged in — the owner may be switching
@@ -654,6 +701,28 @@ export declare class HarnessReloginService {
654
701
  * @param notify - DM the owner (false for the silent API-key path)
655
702
  */
656
703
  private succeed;
704
+ /**
705
+ * One of the owner's other Claude Code accounts is signed in: no agent is
706
+ * restarted (none runs on it until the fallback moves one there); the
707
+ * runtime fallback is told, and the owner gets one line.
708
+ *
709
+ * @param flow - The account's flow
710
+ * @param account - Account name
711
+ */
712
+ private succeedAccount;
713
+ /**
714
+ * Tell the runtime fallback that an account was signed in.
715
+ *
716
+ * @param account - Account name
717
+ */
718
+ private tellAccountLogin;
719
+ /**
720
+ * A flow's key in the map.
721
+ *
722
+ * @param flow - The flow
723
+ * @returns {@link flowKey} of its harness and account
724
+ */
725
+ private keyOf;
657
726
  /**
658
727
  * Sessions to restart after a login: the ones whose output matched plus
659
728
  * every live session of the harness (they all hold the dead login).
@@ -1 +1 @@
1
- {"version":3,"file":"harness-relogin.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-relogin.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-relogin.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-relogin.service.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,12 @@
43
43
  * 「重新登录 claude」 / "relogin codex" / the orchestrator's `harness-login`
44
44
  * skill) start the broker at once, even while logged in (account switch).
45
45
  *
46
+ * `login claude <name>` signs in one of the owner's OTHER Claude Code
47
+ * accounts (issue #942, claude-accounts.ts): the same link-and-code flow,
48
+ * run with that account's config dir; the token is kept for that account
49
+ * only, no agent is restarted, and the runtime fallback is told the account
50
+ * is usable ({@link HarnessReloginService.setAccountLoginHandler}).
51
+ *
46
52
  * Secrets: Claude's code is passed to the broker and never stored, logged
47
53
  * or echoed; DMs are built from {@link LoginSession} snapshots, which never
48
54
  * contain a token, and the screen text is redacted again.
@@ -51,6 +57,7 @@
51
57
  */
52
58
  import * as os from 'os';
53
59
  import { HARNESS_CONSTANTS } from '../../constants.js';
60
+ import { listClaudeAccounts } from './claude-accounts.js';
54
61
  import { LoggerService } from '../core/logger.service.js';
55
62
  import { getHarnessCredentialsStore } from './harness-credentials.store.js';
56
63
  import { createHarnessLoginProbe } from './harness-login-probe.js';
@@ -61,6 +68,17 @@ import { LOGIN_BROKER_EVENTS } from './login-broker.service.js';
61
68
  import { redactSecrets } from './login-rules.js';
62
69
  import { parseOwnerLoginRequest } from './owner-login-request.js';
63
70
  import { MemoryReloginStateStore, createDefaultReloginStateStore } from './relogin-state.store.js';
71
+ /**
72
+ * Key of a flow in the coordinator's map: the harness id, or
73
+ * `harness@account` for one of the owner's other Claude Code accounts.
74
+ *
75
+ * @param harnessId - Harness
76
+ * @param account - Account, or null/undefined for the default login
77
+ * @returns Key
78
+ */
79
+ function flowKey(harnessId, account) {
80
+ return account ? `${harnessId}${HARNESS_CONSTANTS.CLAUDE.ACCOUNTS.TARGET_SEPARATOR}${account}` : harnessId;
81
+ }
64
82
  /** A detected expiry: not forced, standard wording, this machine's DM. */
65
83
  const EXPIRY_FLOW = { trigger: 'expiry', switchAccount: false, replyTarget: null };
66
84
  /** Harnesses the coordinator can log in (they have a broker method). */
@@ -218,7 +236,7 @@ export function stripScreenReplyPrefix(reply) {
218
236
  * @returns Slack mrkdwn line
219
237
  */
220
238
  function loginDmHeader(harnessId, wording) {
221
- const name = displayName(harnessId);
239
+ const name = wording.account ? `${displayName(harnessId)} account \`${wording.account}\`` : displayName(harnessId);
222
240
  const where = wording.machine ? ` on ${wording.machine}` : '';
223
241
  return wording.switchAccount ? `*Switch the ${name} account${where}*` : `*Sign in to ${name}${where}*`;
224
242
  }
@@ -348,6 +366,27 @@ export function formatOwnerSuccessDm(harnessId, result, redelivered = 0) {
348
366
  text += ` Could not restart: ${result.failed.join(', ')}.`;
349
367
  return text;
350
368
  }
369
+ /**
370
+ * DM after one of the owner's other Claude Code accounts was signed in.
371
+ *
372
+ * @param account - Account name
373
+ * @param machine - This machine's name
374
+ * @returns Slack mrkdwn text
375
+ */
376
+ export function formatAccountSuccessDm(account, machine) {
377
+ return (`Done: Claude Code account \`${account}\` is signed in on ${machine}. ` +
378
+ `Agents use it when an earlier runtime in their fallback order runs out (add \`claude-code@${account}\` in Settings → Runtimes if it is not there yet).`);
379
+ }
380
+ /**
381
+ * DM after the link for one of the owner's other Claude Code accounts expired unused.
382
+ *
383
+ * @param account - Account name
384
+ * @param machine - This machine's name
385
+ * @returns Slack mrkdwn text
386
+ */
387
+ export function formatAccountLinkExpiredDm(account, machine) {
388
+ return `The sign-in link for Claude Code account \`${account}\` on ${machine} expired before it was used. Reply \`login claude ${account}\` for a fresh one.`;
389
+ }
351
390
  /** Harness names the owner can type, for the "which one?" reply. */
352
391
  const WHICH_HARNESS_HINT = 'Reply `relogin claude` or `relogin codex` (to switch accounts: `switch claude account`).';
353
392
  /**
@@ -409,12 +448,15 @@ export class HarnessReloginService {
409
448
  listAgents;
410
449
  sessionNeedsLogin;
411
450
  onLoginRestored;
451
+ onAccountLogin;
452
+ listClaudeAccounts;
412
453
  machineName;
413
454
  state;
414
455
  notifier;
415
456
  resumer;
416
457
  now;
417
458
  logger;
459
+ /** Flows by {@link flowKey} (harness, or harness@account) */
418
460
  flows = new Map();
419
461
  /** Harnesses whose expiry is being confirmed → sessions reported meanwhile */
420
462
  confirming = new Map();
@@ -448,6 +490,8 @@ export class HarnessReloginService {
448
490
  this.listAgents = deps.listAgents ?? null;
449
491
  this.sessionNeedsLogin = deps.sessionNeedsLogin ?? null;
450
492
  this.onLoginRestored = deps.onLoginRestored ?? null;
493
+ this.onAccountLogin = deps.onAccountLogin ?? null;
494
+ this.listClaudeAccounts = deps.listClaudeAccounts ?? (() => listClaudeAccounts());
451
495
  this.machineName = deps.machineName ?? (() => os.hostname());
452
496
  this.state = deps.state ?? new MemoryReloginStateStore();
453
497
  this.notifier = deps.notifier ?? null;
@@ -481,6 +525,14 @@ export class HarnessReloginService {
481
525
  setLoginRestoredHandler(handler) {
482
526
  this.onLoginRestored = handler ?? null;
483
527
  }
528
+ /**
529
+ * Set what learns that one of the owner's other Claude Code accounts was signed in.
530
+ *
531
+ * @param handler - Handler (the runtime fallback), or null
532
+ */
533
+ setAccountLoginHandler(handler) {
534
+ this.onAccountLogin = handler ?? null;
535
+ }
484
536
  /**
485
537
  * Set how the configured agents (running or not) are listed.
486
538
  *
@@ -577,7 +629,7 @@ export class HarnessReloginService {
577
629
  return true;
578
630
  }
579
631
  }
580
- const request = parseOwnerLoginRequest(text);
632
+ const request = parseOwnerLoginRequest(text, { knownClaudeAccounts: this.knownClaudeAccounts() });
581
633
  if (!request)
582
634
  return false;
583
635
  if (scope === 'agent' && request.kind !== 'harness')
@@ -585,6 +637,19 @@ export class HarnessReloginService {
585
637
  void this.handleOwnerLoginRequest(request, target);
586
638
  return true;
587
639
  }
640
+ /**
641
+ * The owner's existing other Claude Code accounts (for "login claude work").
642
+ *
643
+ * @returns Names; empty when they cannot be read
644
+ */
645
+ knownClaudeAccounts() {
646
+ try {
647
+ return this.listClaudeAccounts();
648
+ }
649
+ catch {
650
+ return [];
651
+ }
652
+ }
588
653
  /**
589
654
  * Start a login the owner asked for, through the broker: forced (runs
590
655
  * even when the harness is still logged in — the owner may be switching
@@ -599,10 +664,15 @@ export class HarnessReloginService {
599
664
  if (!hasBrokerLogin(harnessId)) {
600
665
  return { status: 'no_broker_login', harnessId, message: formatNoBrokerLoginDm(harnessId) };
601
666
  }
602
- const existing = this.flows.get(harnessId);
667
+ const account = options.account ?? null;
668
+ if (account && harnessId !== HARNESS_CONSTANTS.IDS.CLAUDE_CODE) {
669
+ return { status: 'no_broker_login', harnessId, message: `Only Claude Code can have more than one account in Crewly. ${WHICH_HARNESS_HINT}` };
670
+ }
671
+ const existing = this.flows.get(flowKey(harnessId, account));
603
672
  const restarted = Boolean(existing && existing.phase === 'running');
604
673
  this.logger.info('Owner-requested login started', {
605
674
  harnessId,
675
+ ...(account ? { account } : {}),
606
676
  requestedBy: options.requestedBy,
607
677
  switchAccount: options.switchAccount === true,
608
678
  restarted,
@@ -612,9 +682,10 @@ export class HarnessReloginService {
612
682
  trigger: 'owner',
613
683
  switchAccount: options.switchAccount === true,
614
684
  replyTarget: options.replyTarget ?? existing?.replyTarget ?? null,
685
+ account,
615
686
  });
616
687
  const dmAvailable = this.notifier ? (this.notifier.isAvailable?.() ?? true) : false;
617
- return { status: restarted ? 'restarted' : 'started', harnessId, dmAvailable };
688
+ return { status: restarted ? 'restarted' : 'started', harnessId, ...(account ? { account } : {}), dmAvailable };
618
689
  }
619
690
  /**
620
691
  * Harnesses confirmed signed out on this machine (persisted).
@@ -647,7 +718,12 @@ export class HarnessReloginService {
647
718
  await this.notify(formatWhichHarnessDm(request.name), target);
648
719
  return;
649
720
  }
650
- const result = this.startOwnerLogin(request.harnessId, { switchAccount: request.switchAccount, replyTarget: target, requestedBy: 'owner_dm' });
721
+ const result = this.startOwnerLogin(request.harnessId, {
722
+ switchAccount: request.switchAccount,
723
+ replyTarget: target,
724
+ requestedBy: 'owner_dm',
725
+ ...(request.account ? { account: request.account } : {}),
726
+ });
651
727
  if (result.status === 'no_broker_login')
652
728
  await this.notify(result.message, target);
653
729
  }
@@ -667,6 +743,7 @@ export class HarnessReloginService {
667
743
  trigger: flow.trigger,
668
744
  switchAccount: flow.switchAccount,
669
745
  replyTarget: target ?? flow.replyTarget,
746
+ account: flow.account,
670
747
  });
671
748
  }
672
749
  this.logger.info('Sign-in started on the owner\'s reply', { harnessIds: flows.map((flow) => flow.harnessId) });
@@ -995,17 +1072,19 @@ export class HarnessReloginService {
995
1072
  * @param options - Trigger, wording and reply target
996
1073
  */
997
1074
  replaceAndStart(harnessId, previous, options) {
1075
+ const key = flowKey(harnessId, options.account);
998
1076
  if (previous) {
999
1077
  this.clearScreenTimer(previous);
1000
1078
  this.cancelOwnSession(previous);
1001
- if (this.flows.get(harnessId) === previous)
1002
- this.flows.delete(harnessId);
1079
+ if (this.flows.get(this.keyOf(previous)) === previous)
1080
+ this.flows.delete(this.keyOf(previous));
1003
1081
  }
1004
1082
  // The owner asked: a quiet period after the last login must not swallow it.
1005
- this.quietUntil.delete(harnessId);
1083
+ if (!options.account)
1084
+ this.quietUntil.delete(harnessId);
1006
1085
  const flow = this.newFlow(harnessId, new Set(previous?.stuck ?? []), options, 'running');
1007
1086
  flow.remind = previous?.remind ?? false;
1008
- this.flows.set(harnessId, flow);
1087
+ this.flows.set(key, flow);
1009
1088
  this.startBrokerSession(flow);
1010
1089
  }
1011
1090
  /**
@@ -1020,6 +1099,7 @@ export class HarnessReloginService {
1020
1099
  newFlow(harnessId, stuck, options, phase) {
1021
1100
  return {
1022
1101
  harnessId,
1102
+ account: options.account ?? null,
1023
1103
  phase,
1024
1104
  sessionId: null,
1025
1105
  startedAt: this.now(),
@@ -1050,7 +1130,7 @@ export class HarnessReloginService {
1050
1130
  return;
1051
1131
  let session;
1052
1132
  try {
1053
- session = this.broker.start(flow.harnessId, method.id);
1133
+ session = flow.account ? this.broker.start(flow.harnessId, method.id, { account: flow.account }) : this.broker.start(flow.harnessId, method.id);
1054
1134
  }
1055
1135
  catch (error) {
1056
1136
  const reason = error instanceof Error ? error.message : String(error);
@@ -1117,7 +1197,7 @@ export class HarnessReloginService {
1117
1197
  * @param session - Session snapshot
1118
1198
  */
1119
1199
  handleUpdate(session) {
1120
- const flow = this.flows.get(session.harnessId);
1200
+ const flow = this.flows.get(flowKey(session.harnessId, session.account));
1121
1201
  if (!flow || flow.phase !== 'running' || flow.sessionId !== session.id || isTerminalLoginState(session.state))
1122
1202
  return;
1123
1203
  const linkReady = session.method === 'device' ? Boolean(session.url && session.userCode) : Boolean(session.url);
@@ -1144,7 +1224,13 @@ export class HarnessReloginService {
1144
1224
  * @param session - Final snapshot
1145
1225
  */
1146
1226
  handleFinished(session) {
1147
- const flow = this.flows.get(session.harnessId);
1227
+ const flow = this.flows.get(flowKey(session.harnessId, session.account));
1228
+ if (!flow && session.account) {
1229
+ // One of the owner's other Claude Code accounts signed in from the dashboard.
1230
+ if (session.state === 'succeeded')
1231
+ void this.tellAccountLogin(session.account);
1232
+ return;
1233
+ }
1148
1234
  if (!flow) {
1149
1235
  // Signed in from the dashboard / Setup with no flow here: the agents
1150
1236
  // parked on a sign-in screen still hold the dead login.
@@ -1172,7 +1258,8 @@ export class HarnessReloginService {
1172
1258
  flow.phase = 'signed_out';
1173
1259
  flow.sessionId = null;
1174
1260
  flow.dm = 'none';
1175
- flow.remind = flow.remind || this.isSignedOut(flow.harnessId);
1261
+ // Re-reminders are about the default login; another account's link is asked for again by name.
1262
+ flow.remind = !flow.account && (flow.remind || this.isSignedOut(flow.harnessId));
1176
1263
  if (session.state === 'cancelled') {
1177
1264
  // Cancelled on the web or by a shutdown: the owner knows; stay quiet.
1178
1265
  this.logger.info('Re-login cancelled', { harnessId: flow.harnessId, sessionId: session.id });
@@ -1180,7 +1267,9 @@ export class HarnessReloginService {
1180
1267
  }
1181
1268
  this.logger.warn('Re-login did not finish', { harnessId: flow.harnessId, sessionId: session.id, state: session.state });
1182
1269
  const text = session.state === 'timed_out'
1183
- ? formatSignedOutDm(flow.harnessId, this.machineName(), this.agentNamesOn(flow), 'link_expired')
1270
+ ? flow.account
1271
+ ? formatAccountLinkExpiredDm(flow.account, this.machineName())
1272
+ : formatSignedOutDm(flow.harnessId, this.machineName(), this.agentNamesOn(flow), 'link_expired')
1184
1273
  : formatFailureDm(flow.harnessId, session.message);
1185
1274
  void this.dm(flow, text);
1186
1275
  }
@@ -1218,8 +1307,13 @@ export class HarnessReloginService {
1218
1307
  * @param flow - The flow
1219
1308
  */
1220
1309
  async confirmAndSucceed(flow) {
1310
+ if (flow.account) {
1311
+ // The token was just captured for that account; the runtime fallback probes it.
1312
+ await this.succeedAccount(flow, flow.account);
1313
+ return;
1314
+ }
1221
1315
  const state = await this.probe(flow.harnessId, true);
1222
- if (this.flows.get(flow.harnessId) !== flow)
1316
+ if (this.flows.get(this.keyOf(flow)) !== flow)
1223
1317
  return;
1224
1318
  if (state === 'logged_out') {
1225
1319
  this.logger.warn('Re-login: the sign-in finished but the harness still cannot reach its API', { harnessId: flow.harnessId });
@@ -1242,8 +1336,12 @@ export class HarnessReloginService {
1242
1336
  */
1243
1337
  async succeed(flow, notify) {
1244
1338
  const { harnessId } = flow;
1245
- if (this.flows.get(harnessId) === flow)
1246
- this.flows.delete(harnessId);
1339
+ if (flow.account) {
1340
+ await this.succeedAccount(flow, flow.account);
1341
+ return;
1342
+ }
1343
+ if (this.flows.get(this.keyOf(flow)) === flow)
1344
+ this.flows.delete(this.keyOf(flow));
1247
1345
  this.quietUntil.set(harnessId, this.now() + HARNESS_CONSTANTS.RELOGIN.POST_SUCCESS_QUIET_MS);
1248
1346
  this.probeCache.set(harnessId, { at: this.now(), state: 'logged_in' });
1249
1347
  this.state.update(harnessId, { signedOutSince: undefined, lastNoticeAt: undefined, noticeCount: undefined, seenLoggedInAt: this.now() });
@@ -1277,6 +1375,45 @@ export class HarnessReloginService {
1277
1375
  await this.dm(flow, text);
1278
1376
  }
1279
1377
  }
1378
+ /**
1379
+ * One of the owner's other Claude Code accounts is signed in: no agent is
1380
+ * restarted (none runs on it until the fallback moves one there); the
1381
+ * runtime fallback is told, and the owner gets one line.
1382
+ *
1383
+ * @param flow - The account's flow
1384
+ * @param account - Account name
1385
+ */
1386
+ async succeedAccount(flow, account) {
1387
+ if (this.flows.get(this.keyOf(flow)) === flow)
1388
+ this.flows.delete(this.keyOf(flow));
1389
+ this.logger.info('Claude Code account signed in', { account });
1390
+ await this.tellAccountLogin(account);
1391
+ await this.dm(flow, formatAccountSuccessDm(account, this.machineName()));
1392
+ }
1393
+ /**
1394
+ * Tell the runtime fallback that an account was signed in.
1395
+ *
1396
+ * @param account - Account name
1397
+ */
1398
+ async tellAccountLogin(account) {
1399
+ if (!this.onAccountLogin)
1400
+ return;
1401
+ try {
1402
+ await this.onAccountLogin(account);
1403
+ }
1404
+ catch (error) {
1405
+ this.logger.warn('Account sign-in handler failed', { account, error: error instanceof Error ? error.message : String(error) });
1406
+ }
1407
+ }
1408
+ /**
1409
+ * A flow's key in the map.
1410
+ *
1411
+ * @param flow - The flow
1412
+ * @returns {@link flowKey} of its harness and account
1413
+ */
1414
+ keyOf(flow) {
1415
+ return flowKey(flow.harnessId, flow.account);
1416
+ }
1280
1417
  /**
1281
1418
  * Sessions to restart after a login: the ones whose output matched plus
1282
1419
  * every live session of the harness (they all hold the dead login).
@@ -1370,7 +1507,7 @@ export class HarnessReloginService {
1370
1507
  * @returns Account-switch flag and machine name
1371
1508
  */
1372
1509
  wordingOf(flow) {
1373
- return { ownerRequested: flow.trigger === 'owner', switchAccount: flow.switchAccount, machine: this.machineName() };
1510
+ return { ownerRequested: flow.trigger === 'owner', switchAccount: flow.switchAccount, machine: this.machineName(), account: flow.account };
1374
1511
  }
1375
1512
  /**
1376
1513
  * Cancel the flow's live broker session, marking it as cancelled by the
@@ -1396,7 +1533,7 @@ export class HarnessReloginService {
1396
1533
  */
1397
1534
  async sendScreenIfUnrecognised(flow) {
1398
1535
  flow.screenTimer = null;
1399
- if (this.flows.get(flow.harnessId) !== flow || flow.phase !== 'running' || flow.dm !== 'none' || !flow.sessionId)
1536
+ if (this.flows.get(this.keyOf(flow)) !== flow || flow.phase !== 'running' || flow.dm !== 'none' || !flow.sessionId)
1400
1537
  return;
1401
1538
  const session = this.readSession(flow.sessionId);
1402
1539
  if (!session || isTerminalLoginState(session.state))