crewly 1.20.362 → 1.20.364

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 (320) hide show
  1. package/config/hooks/destructive-git-guard/guard.mjs +96 -0
  2. package/config/roles/orchestrator/prompt.md +3 -3
  3. package/config/roles/team-leader/prompt.md +2 -0
  4. package/config/skills/agent/core/ask-owner/SKILL.md +31 -0
  5. package/config/skills/agent/core/ask-owner/execute.sh +14 -3
  6. package/config/skills/agent/core/ask-owner/execute.test.sh +8 -0
  7. package/config/skills/agent/core/gmail-read/SKILL.md +8 -0
  8. package/config/skills/agent/core/gmail-send/SKILL.md +10 -3
  9. package/config/skills/agent/core/gmail-send/execute.sh +2 -1
  10. package/config/skills/agent/core/gmail-watch-thread/SKILL.md +69 -0
  11. package/config/skills/agent/core/gmail-watch-thread/execute.sh +51 -0
  12. package/config/skills/agent/core/project-tickets/SKILL.md +12 -0
  13. package/config/skills/agent/core/project-tickets/execute.sh +13 -3
  14. package/config/skills/agent/core/project-tickets/execute.test.sh +4 -0
  15. package/config/skills/agent/core/watch-for-event/SKILL.md +22 -0
  16. package/config/skills/orchestrator/delegate-task/SKILL.md +14 -0
  17. package/config/skills/orchestrator/delegate-task/execute.sh +19 -2
  18. package/config/skills/orchestrator/delegate-task/execute.test.sh +30 -0
  19. package/config/skills/orchestrator/harness-login/SKILL.md +1 -1
  20. package/config/skills/team-leader/delegate-task/execute.sh +6 -0
  21. package/dist/backend/backend/src/constants.d.ts +74 -2
  22. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  23. package/dist/backend/backend/src/constants.js +75 -3
  24. package/dist/backend/backend/src/constants.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/chat/chat.controller.js +14 -1
  27. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +44 -0
  29. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/google/google.controller.js +121 -3
  31. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/google/google.routes.js +5 -1
  34. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts +1 -1
  36. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +1 -1
  37. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
  38. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +2 -1
  40. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  41. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  42. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +7 -0
  43. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  44. package/dist/backend/backend/src/index.d.ts.map +1 -1
  45. package/dist/backend/backend/src/index.js +61 -0
  46. package/dist/backend/backend/src/index.js.map +1 -1
  47. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  49. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  50. package/dist/backend/backend/src/services/decisions/decision-card.d.ts +46 -13
  51. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/decisions/decision-card.js +100 -50
  53. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  54. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts +23 -1
  55. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/decisions/decision-contract.js +76 -4
  57. package/dist/backend/backend/src/services/decisions/decision-contract.js.map +1 -1
  58. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts +167 -0
  59. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/decisions/decision-wording.js +406 -0
  61. package/dist/backend/backend/src/services/decisions/decision-wording.js.map +1 -0
  62. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +30 -1
  63. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/decisions/decision.service.js +44 -8
  65. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  66. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/decisions/decision.wiring.js +17 -0
  68. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  69. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +6 -1
  71. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  72. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts +142 -0
  73. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js +304 -0
  75. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js.map +1 -0
  76. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts +130 -0
  77. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js +216 -0
  79. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js.map +1 -0
  80. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts +28 -13
  81. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/google/gmail-send-gate.js +82 -29
  83. package/dist/backend/backend/src/services/google/gmail-send-gate.js.map +1 -1
  84. package/dist/backend/backend/src/services/google/gmail.service.d.ts +90 -0
  85. package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/google/gmail.service.js +122 -0
  87. package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -1
  88. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +24 -14
  89. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/harness/claude-accounts.js +35 -21
  91. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -1
  92. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts +106 -0
  93. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  94. package/dist/backend/backend/src/services/harness/claude-native-login.js +174 -0
  95. package/dist/backend/backend/src/services/harness/claude-native-login.js.map +1 -0
  96. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  97. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  98. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js +283 -0
  99. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  100. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  101. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +96 -39
  103. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  104. package/dist/backend/backend/src/services/harness/harness-registry.js +1 -1
  105. package/dist/backend/backend/src/services/harness/harness-registry.js.map +1 -1
  106. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  107. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +2 -2
  108. package/dist/backend/backend/src/services/harness/harness.service.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/harness/harness.service.js +10 -1
  110. package/dist/backend/backend/src/services/harness/harness.service.js.map +1 -1
  111. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +24 -21
  112. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/harness/login-broker.service.js +50 -64
  114. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/harness/login-rules.d.ts +17 -11
  116. package/dist/backend/backend/src/services/harness/login-rules.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/harness/login-rules.js +22 -25
  118. package/dist/backend/backend/src/services/harness/login-rules.js.map +1 -1
  119. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
  120. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/open-items/open-item-extractor.js +70 -0
  122. package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  123. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +25 -0
  124. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  125. package/dist/backend/backend/src/services/open-items/open-items.service.js +65 -5
  126. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  127. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +5 -2
  129. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +50 -2
  131. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +103 -11
  133. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  134. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts +27 -0
  135. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js +25 -0
  137. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js.map +1 -1
  138. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts.map +1 -1
  139. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js +4 -2
  140. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js.map +1 -1
  141. package/dist/backend/backend/src/services/orc/team-lead-report.d.ts +120 -0
  142. package/dist/backend/backend/src/services/orc/team-lead-report.d.ts.map +1 -0
  143. package/dist/backend/backend/src/services/orc/team-lead-report.js +198 -0
  144. package/dist/backend/backend/src/services/orc/team-lead-report.js.map +1 -0
  145. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.d.ts +53 -0
  146. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.d.ts.map +1 -0
  147. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.js +85 -0
  148. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.js.map +1 -0
  149. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +35 -0
  150. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  151. package/dist/backend/backend/src/services/orc/work-item-destination.js +38 -1
  152. package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
  153. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  154. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  156. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  158. package/dist/backend/backend/src/services/project-tickets/ticket-file.js +6 -1
  159. package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  160. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts +64 -0
  161. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts.map +1 -0
  162. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js +93 -0
  163. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js.map +1 -0
  164. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  165. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  166. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js +301 -0
  167. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  168. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +33 -3
  169. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  170. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +50 -4
  171. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  172. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +8 -1
  173. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  174. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +26 -0
  175. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  176. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -1
  177. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  178. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +3 -2
  179. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  180. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +4 -1
  182. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  183. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts +34 -0
  184. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts.map +1 -1
  185. package/dist/backend/backend/src/services/stall/stall-watcher.service.js +70 -2
  186. package/dist/backend/backend/src/services/stall/stall-watcher.service.js.map +1 -1
  187. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +36 -0
  188. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +72 -1
  190. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  192. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +5 -2
  194. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts +7 -2
  196. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts.map +1 -1
  197. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js +11 -2
  198. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js.map +1 -1
  199. package/dist/backend/backend/src/types/decision.types.d.ts +53 -1
  200. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  201. package/dist/backend/backend/src/types/event-bus.types.d.ts +10 -2
  202. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  203. package/dist/backend/backend/src/types/event-bus.types.js +8 -0
  204. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  205. package/dist/backend/backend/src/types/project-ticket.types.d.ts +7 -0
  206. package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -1
  207. package/dist/backend/backend/src/types/project-ticket.types.js +1 -0
  208. package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -1
  209. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +8 -1
  210. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  211. package/dist/backend/build-info.json +2 -2
  212. package/dist/cli/backend/src/constants.d.ts +74 -2
  213. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  214. package/dist/cli/backend/src/constants.js +75 -3
  215. package/dist/cli/backend/src/constants.js.map +1 -1
  216. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  217. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  218. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  219. package/dist/cli/backend/src/services/decisions/decision-card.d.ts +46 -13
  220. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  221. package/dist/cli/backend/src/services/decisions/decision-card.js +100 -50
  222. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
  223. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +23 -1
  224. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  225. package/dist/cli/backend/src/services/decisions/decision-contract.js +76 -4
  226. package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -1
  227. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts +167 -0
  228. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/decisions/decision-wording.js +406 -0
  230. package/dist/cli/backend/src/services/decisions/decision-wording.js.map +1 -0
  231. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +30 -1
  232. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  233. package/dist/cli/backend/src/services/decisions/decision.service.js +44 -8
  234. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  235. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  236. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +6 -1
  237. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  238. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +24 -14
  239. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  240. package/dist/cli/backend/src/services/harness/claude-accounts.js +35 -21
  241. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -1
  242. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts +106 -0
  243. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  244. package/dist/cli/backend/src/services/harness/claude-native-login.js +174 -0
  245. package/dist/cli/backend/src/services/harness/claude-native-login.js.map +1 -0
  246. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  247. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  248. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js +283 -0
  249. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  250. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  251. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  252. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +96 -39
  253. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  254. package/dist/cli/backend/src/services/harness/harness-registry.js +1 -1
  255. package/dist/cli/backend/src/services/harness/harness-registry.js.map +1 -1
  256. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  257. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +2 -2
  258. package/dist/cli/backend/src/services/harness/harness.service.d.ts.map +1 -1
  259. package/dist/cli/backend/src/services/harness/harness.service.js +10 -1
  260. package/dist/cli/backend/src/services/harness/harness.service.js.map +1 -1
  261. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +24 -21
  262. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  263. package/dist/cli/backend/src/services/harness/login-broker.service.js +50 -64
  264. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  265. package/dist/cli/backend/src/services/harness/login-rules.d.ts +17 -11
  266. package/dist/cli/backend/src/services/harness/login-rules.d.ts.map +1 -1
  267. package/dist/cli/backend/src/services/harness/login-rules.js +22 -25
  268. package/dist/cli/backend/src/services/harness/login-rules.js.map +1 -1
  269. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
  270. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  271. package/dist/cli/backend/src/services/open-items/open-item-extractor.js +70 -0
  272. package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  273. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +25 -0
  274. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  275. package/dist/cli/backend/src/services/open-items/open-items.service.js +65 -5
  276. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  277. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +113 -0
  278. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
  279. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +195 -0
  280. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
  281. package/dist/cli/backend/src/services/orc/team-lead-report.d.ts +120 -0
  282. package/dist/cli/backend/src/services/orc/team-lead-report.d.ts.map +1 -0
  283. package/dist/cli/backend/src/services/orc/team-lead-report.js +198 -0
  284. package/dist/cli/backend/src/services/orc/team-lead-report.js.map +1 -0
  285. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.d.ts +53 -0
  286. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.d.ts.map +1 -0
  287. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.js +85 -0
  288. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.js.map +1 -0
  289. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +35 -0
  290. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  291. package/dist/cli/backend/src/services/orc/work-item-destination.js +38 -1
  292. package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
  293. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  294. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  295. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  296. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  297. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  298. package/dist/cli/backend/src/services/project-tickets/ticket-file.js +6 -1
  299. package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  300. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  301. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  302. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js +301 -0
  303. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  304. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +36 -0
  305. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  306. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +72 -1
  307. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  308. package/dist/cli/backend/src/types/decision.types.d.ts +53 -1
  309. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  310. package/dist/cli/backend/src/types/event-bus.types.d.ts +10 -2
  311. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  312. package/dist/cli/backend/src/types/event-bus.types.js +8 -0
  313. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  314. package/dist/cli/backend/src/types/project-ticket.types.d.ts +7 -0
  315. package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -1
  316. package/dist/cli/backend/src/types/project-ticket.types.js +1 -0
  317. package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -1
  318. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +8 -1
  319. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  320. package/package.json +1 -1
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Claude token migration — retire the Claude sign-in tokens older Crewly
3
+ * versions saved, without locking anyone out.
4
+ *
5
+ * Anthropic's Claude Code legal page: developers may not collect, store or
6
+ * intermediate Claude.ai credentials or session tokens; sign-in must finish
7
+ * through Anthropic's own flow. Older Crewly ran `claude setup-token`, read
8
+ * the token off the screen and saved it in `harness-credentials.json`
9
+ * (`claude.oauthToken` for the default login, `claudeAccounts.<name>.oauthToken`
10
+ * for named accounts). Crewly now signs in with Claude Code's own
11
+ * `claude auth login` and stores nothing (login-broker.service.ts).
12
+ *
13
+ * Rules of the transition:
14
+ *
15
+ * - A saved token keeps being handed to its account's Claude Code processes
16
+ * until that account is signed in natively (store.legacyClaudeTokenEnv).
17
+ * Nothing stops working on upgrade.
18
+ * - A token is deleted only after the account's native login is verified by
19
+ * a real Claude turn run WITHOUT any token or key in the env
20
+ * (claude-native-login.ts). A login that only looks signed in is not enough.
21
+ * - A named account's own config dir can only have been signed in by Crewly's
22
+ * flow or by the owner, so a verified native login there retires its token
23
+ * at once (the periodic run notices a login done by hand too). The default
24
+ * login is different: the machine's own Claude login may be another
25
+ * account than the one the saved token belongs to, so its token is retired
26
+ * only by a sign-in done through Crewly (`login claude`), never guessed.
27
+ * - The owner is told once per machine which accounts need one re-sign-in
28
+ * (state file `claude-token-migration.json`, no secrets in it).
29
+ * - When no saved token remains, the leftover Claude keys are removed from
30
+ * `harness-credentials.json`; other keys are untouched, the file is
31
+ * rewritten atomically with mode 0600, and no backup is kept.
32
+ *
33
+ * @module services/harness/claude-token-migration.service
34
+ */
35
+ import * as fs from 'fs';
36
+ import * as path from 'path';
37
+ import { HARNESS_CONSTANTS } from '../../constants.js';
38
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
39
+ import { claudeAccountConfigDir } from './claude-accounts.js';
40
+ import { probeClaudeNativeLogin, readClaudeAuthStatus, setCachedClaudeNativeLogin } from './claude-native-login.js';
41
+ import { getHarnessCredentialsStore } from './harness-credentials.store.js';
42
+ import { SILENT_HARNESS_LOGGER } from './harness.types.js';
43
+ const MIGRATION = HARNESS_CONSTANTS.CLAUDE.TOKEN_MIGRATION;
44
+ /**
45
+ * Display name of a login for the owner.
46
+ *
47
+ * @param account - Named account; null = the default login
48
+ * @returns e.g. `login claude work` / `login claude`
49
+ */
50
+ function loginCommandFor(account) {
51
+ return account ? `login claude ${account}` : 'login claude';
52
+ }
53
+ /** Retires saved Claude tokens once the account is signed in natively. */
54
+ export class ClaudeTokenMigrationService {
55
+ credentials;
56
+ probe;
57
+ readStatus;
58
+ accountConfigDir;
59
+ notifier;
60
+ crewlyHome;
61
+ logger;
62
+ now;
63
+ running = null;
64
+ timer = null;
65
+ /**
66
+ * @param deps - Injectable dependencies (all optional)
67
+ */
68
+ constructor(deps = {}) {
69
+ this.credentials = deps.credentials ?? getHarnessCredentialsStore();
70
+ this.probe = deps.probe ?? ((configDir) => probeClaudeNativeLogin(configDir));
71
+ this.readStatus = deps.readStatus ?? ((configDir) => readClaudeAuthStatus(configDir));
72
+ this.accountConfigDir = deps.accountConfigDir ?? ((account) => claudeAccountConfigDir(account));
73
+ this.notifier = deps.notifier ?? (() => null);
74
+ this.crewlyHome = deps.crewlyHome;
75
+ this.logger = deps.logger ?? SILENT_HARNESS_LOGGER;
76
+ this.now = deps.now ?? Date.now;
77
+ }
78
+ /**
79
+ * Where the owner notice is sent.
80
+ *
81
+ * @param notifier - Lazy owner DM sender
82
+ */
83
+ setNotifier(notifier) {
84
+ this.notifier = notifier;
85
+ }
86
+ /**
87
+ * Logins that still depend on a saved token.
88
+ *
89
+ * @returns Entries (default login first)
90
+ */
91
+ listLegacy() {
92
+ const entries = [];
93
+ if (this.credentials.getLegacyClaudeOauthToken() !== null)
94
+ entries.push({ account: null });
95
+ for (const account of this.credentials.listClaudeAccountsWithToken())
96
+ entries.push({ account });
97
+ return entries;
98
+ }
99
+ /**
100
+ * Check every login that still has a saved token; retire what can be
101
+ * retired and tell the owner about the rest, once. Safe to call at any
102
+ * time and as often as you like (idempotent); concurrent calls share one run.
103
+ *
104
+ * @returns What happened; never rejects
105
+ */
106
+ run() {
107
+ if (!this.running) {
108
+ this.running = this.runOnce()
109
+ .catch((error) => {
110
+ this.logger.warn('Claude token migration failed', { error: error instanceof Error ? error.message : String(error) });
111
+ return { retired: [], pending: [], notified: false };
112
+ })
113
+ .finally(() => {
114
+ this.running = null;
115
+ });
116
+ }
117
+ return this.running;
118
+ }
119
+ /**
120
+ * A sign-in done through Crewly just completed and was verified: retire
121
+ * the saved token of that login (default or named).
122
+ *
123
+ * @param account - Named account; null = the default login
124
+ * @returns Resolves when done; never rejects
125
+ */
126
+ async afterLogin(account) {
127
+ try {
128
+ if (!this.hasLegacy(account)) {
129
+ this.finishCleanup();
130
+ return;
131
+ }
132
+ await this.retireIfVerified(account);
133
+ this.finishCleanup();
134
+ }
135
+ catch (error) {
136
+ this.logger.warn('Claude token migration after a login failed', { error: error instanceof Error ? error.message : String(error) });
137
+ }
138
+ }
139
+ /**
140
+ * Run now (after a short delay) and then on an interval.
141
+ *
142
+ * @param startDelayMs - Delay before the first run
143
+ */
144
+ start(startDelayMs = MIGRATION.START_DELAY_MS) {
145
+ if (this.timer)
146
+ return;
147
+ const first = setTimeout(() => {
148
+ void this.run();
149
+ this.timer = setInterval(() => void this.run(), MIGRATION.RUN_INTERVAL_MS);
150
+ this.timer.unref?.();
151
+ }, startDelayMs);
152
+ first.unref?.();
153
+ this.timer = first;
154
+ }
155
+ /** Stop the timers. */
156
+ stop() {
157
+ if (this.timer) {
158
+ clearTimeout(this.timer);
159
+ clearInterval(this.timer);
160
+ }
161
+ this.timer = null;
162
+ }
163
+ // ----------------------------------------------------------------- internals
164
+ hasLegacy(account) {
165
+ return account === null ? this.credentials.getLegacyClaudeOauthToken() !== null : this.credentials.listClaudeAccountsWithToken().includes(account);
166
+ }
167
+ configDirOf(account) {
168
+ return account ? this.accountConfigDir(account) : null;
169
+ }
170
+ /**
171
+ * Delete the saved token of a login when its native login passes a real
172
+ * Claude turn with no token in the env.
173
+ *
174
+ * @param account - Named account; null = the default login
175
+ * @returns True when the token was deleted
176
+ */
177
+ async retireIfVerified(account) {
178
+ const configDir = this.configDirOf(account);
179
+ if ((await this.probe(configDir)) !== 'logged_in')
180
+ return false;
181
+ if (account)
182
+ this.credentials.clearClaudeAccount(account);
183
+ else
184
+ this.credentials.clearLegacyClaudeOauthToken();
185
+ setCachedClaudeNativeLogin(account, true, this.now());
186
+ this.logger.info('Retired a saved Claude token: the account is signed in through Claude Code itself', { account: account ?? 'default' });
187
+ return true;
188
+ }
189
+ /** Remove leftover Claude keys once no saved token remains. */
190
+ finishCleanup() {
191
+ if (this.listLegacy().length === 0)
192
+ this.credentials.pruneLegacyClaudeKeys();
193
+ }
194
+ async runOnce() {
195
+ const result = { retired: [], pending: [], notified: false };
196
+ for (const { account } of this.listLegacy()) {
197
+ // The default login is retired only by a sign-in done through Crewly
198
+ // (afterLogin): the machine's own Claude login may be another account.
199
+ if (account !== null && (await this.readStatus(this.configDirOf(account))) === true && (await this.retireIfVerified(account))) {
200
+ result.retired.push(account);
201
+ continue;
202
+ }
203
+ result.pending.push(account);
204
+ }
205
+ this.finishCleanup();
206
+ if (result.pending.length > 0)
207
+ result.notified = await this.notifyOnce(result.pending);
208
+ return result;
209
+ }
210
+ statePath() {
211
+ return path.join(this.crewlyHome ?? getCrewlyHomePath(), MIGRATION.STATE_FILE);
212
+ }
213
+ readState() {
214
+ try {
215
+ const parsed = JSON.parse(fs.readFileSync(this.statePath(), 'utf-8'));
216
+ if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed))
217
+ return { version: 1, ...parsed };
218
+ }
219
+ catch {
220
+ // no state yet
221
+ }
222
+ return { version: 1 };
223
+ }
224
+ writeState(state) {
225
+ const file = this.statePath();
226
+ fs.mkdirSync(path.dirname(file), { recursive: true });
227
+ const tmp = `${file}.${process.pid}.tmp`;
228
+ fs.writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\n`, { mode: HARNESS_CONSTANTS.CREDENTIALS_FILE_MODE });
229
+ fs.renameSync(tmp, file);
230
+ }
231
+ /**
232
+ * Tell the owner, once per machine, which logins need one re-sign-in.
233
+ *
234
+ * @param pending - Logins that still run on a saved token
235
+ * @returns True when the notice was delivered now
236
+ */
237
+ async notifyOnce(pending) {
238
+ if (this.readState().notifiedAt)
239
+ return false;
240
+ const notifier = this.notifier();
241
+ if (!notifier)
242
+ return false;
243
+ const lines = pending.map((account) => `• ${account ? `Claude account "${account}"` : 'The default Claude login'}: reply \`${loginCommandFor(account)}\``);
244
+ const text = [
245
+ 'Anthropic requires Claude sign-in to finish inside Claude Code itself, so Crewly no longer saves Claude sign-in tokens.',
246
+ 'Everything keeps working as before. Please sign these in once more, when you have a minute:',
247
+ ...lines,
248
+ 'After that, the old saved token is deleted from this machine.',
249
+ ].join('\n');
250
+ try {
251
+ const delivered = await notifier.sendToOwner(text);
252
+ if (delivered === false)
253
+ return false;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ this.writeState({ version: 1, notifiedAt: new Date(this.now()).toISOString(), notifiedFor: pending.map((a) => a ?? 'default') });
259
+ return true;
260
+ }
261
+ }
262
+ /** Backend singleton. */
263
+ let instance = null;
264
+ /**
265
+ * The backend's token migration, bound to the stored credentials.
266
+ *
267
+ * @returns The singleton
268
+ */
269
+ export function getClaudeTokenMigrationService() {
270
+ if (!instance)
271
+ instance = new ClaudeTokenMigrationService();
272
+ return instance;
273
+ }
274
+ /**
275
+ * Replace or clear the singleton (tests).
276
+ *
277
+ * @param service - Service, or null
278
+ */
279
+ export function setClaudeTokenMigrationServiceForTesting(service) {
280
+ instance?.stop();
281
+ instance = service;
282
+ }
283
+ //# sourceMappingURL=claude-token-migration.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-token-migration.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/claude-token-migration.service.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  /**
2
2
  * Harness credentials store — the harness logins Crewly itself holds.
3
3
  *
4
- * Claude Code's `setup-token` prints a long-lived OAuth token instead of
5
- * saving it, and an Anthropic API key has to reach agents somehow; both live
6
- * here, in `<crewlyHome>/harness-credentials.json` with mode 0600. Codex
4
+ * An Anthropic API key has to reach agents somehow, so it lives here, in
5
+ * `<crewlyHome>/harness-credentials.json` with mode 0600. Crewly no longer
6
+ * saves Claude.ai sign-in tokens: Claude Code stores its own login (config
7
+ * dir or keychain) and Anthropic's rules say developers may not collect or
8
+ * store those. Older versions did save a `claude setup-token` token here
9
+ * (`claude.oauthToken`, `claudeAccounts.<name>.oauthToken`); that data is
10
+ * only read to keep an account working until the owner signs it in again,
11
+ * then deleted (services/harness/claude-token-migration.service.ts). Codex
7
12
  * writes its own credentials (`$CODEX_HOME/auth.json`), so nothing is stored
8
13
  * for it unless a future flow needs the key. Antigravity CLI reads its Gemini
9
14
  * API key only from the environment, so Crewly keeps that key here too.
@@ -19,7 +24,7 @@
19
24
  /** Stored credentials. Every field is optional. */
20
25
  export interface HarnessCredentials {
21
26
  claude?: {
22
- /** Long-lived token from `claude setup-token` (exported as CLAUDE_CODE_OAUTH_TOKEN) */
27
+ /** LEGACY, read-only: token an older Crewly saved from `claude setup-token`; removed by the migration */
23
28
  oauthToken?: string;
24
29
  /** Anthropic API key (exported as ANTHROPIC_API_KEY) */
25
30
  anthropicApiKey?: string;
@@ -81,14 +86,6 @@ export declare class HarnessCredentialsStore {
81
86
  * @param credentials - Full credentials object
82
87
  */
83
88
  write(credentials: HarnessCredentials): void;
84
- /**
85
- * Store Claude's long-lived OAuth token. Replaces a stored API key, so
86
- * agents use exactly the login the owner chose last.
87
- *
88
- * @param token - Token printed by `claude setup-token`
89
- * @throws Error when the token is empty
90
- */
91
- setClaudeOauthToken(token: string): void;
92
89
  /**
93
90
  * Store an Anthropic API key. Replaces a stored OAuth token.
94
91
  *
@@ -125,15 +122,8 @@ export declare class HarnessCredentialsStore {
125
122
  */
126
123
  clearClaude(): void;
127
124
  /**
128
- * Store the `setup-token` token of one of the owner's other Claude Code accounts.
129
- *
130
- * @param account - Account name (validated by the caller)
131
- * @param token - Token printed by `claude setup-token`
132
- * @throws Error when the token is empty
133
- */
134
- setClaudeAccountToken(account: string, token: string): void;
135
- /**
136
- * The stored token of one of the owner's other Claude Code accounts.
125
+ * LEGACY: the token an older Crewly saved for one of the owner's other
126
+ * Claude Code accounts (never written any more).
137
127
  *
138
128
  * @param account - Account name
139
129
  * @returns The token, or null when none is stored
@@ -146,11 +136,41 @@ export declare class HarnessCredentialsStore {
146
136
  */
147
137
  listClaudeAccountsWithToken(): string[];
148
138
  /**
149
- * Forget the token of one of the owner's other Claude Code accounts.
139
+ * Forget the token of one of the owner's other Claude Code accounts. The
140
+ * `claudeAccounts` key goes away with its last entry.
150
141
  *
151
142
  * @param account - Account name
152
143
  */
153
144
  clearClaudeAccount(account: string): void;
145
+ /**
146
+ * LEGACY: the default login's token an older Crewly saved.
147
+ *
148
+ * @returns The token, or null
149
+ */
150
+ getLegacyClaudeOauthToken(): string | null;
151
+ /**
152
+ * Delete the default login's legacy token. The `claude` key is removed
153
+ * when nothing but bookkeeping is left (a stored API key stays).
154
+ */
155
+ clearLegacyClaudeOauthToken(): void;
156
+ /**
157
+ * Remove what an older Crewly left for Claude sign-in tokens once no token
158
+ * is stored: empty `claudeAccounts` entries or object, an empty
159
+ * `claude.oauthToken`, and a `claude` object holding nothing but
160
+ * bookkeeping. A stored API key and every other key stay untouched. Does
161
+ * nothing (and does not rewrite the file) when there is nothing to remove.
162
+ */
163
+ pruneLegacyClaudeKeys(): void;
164
+ /**
165
+ * Env that keeps an account working with the token an older Crewly saved
166
+ * for it. LEGACY, transition only: empty once the account's native login
167
+ * is verified and the token deleted. This is the only place the token is
168
+ * handed to a Claude Code process.
169
+ *
170
+ * @param account - Named account; null = the default login
171
+ * @returns `{ CLAUDE_CODE_OAUTH_TOKEN }`, or `{}` when no token is stored
172
+ */
173
+ legacyClaudeTokenEnv(account: string | null): Record<string, string>;
154
174
  /**
155
175
  * Which Claude credential Crewly holds (never the value).
156
176
  *
@@ -161,8 +181,8 @@ export declare class HarnessCredentialsStore {
161
181
  * Env vars to inject into agent sessions.
162
182
  *
163
183
  * Always sets PATH (user npm prefix bin first, see harness-exec.utils).
164
- * Adds `CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY` when Crewly holds
165
- * a Claude credential. Nothing is added for Codex: it reads its own
184
+ * Adds `ANTHROPIC_API_KEY` when Crewly holds one (and, during the token
185
+ * migration only, the legacy token of the default login). Nothing is added for Codex: it reads its own
166
186
  * `auth.json`.
167
187
  *
168
188
  * For an `antigravity-cli` session it also adds the stored Gemini key as
@@ -1 +1 @@
1
- {"version":3,"file":"harness-credentials.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE;QACR,uFAAuF;QACvF,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wDAAwD;QACxD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACP,iFAAiF;QACjF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACb,2GAA2G;QAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,gDAAgD;AAChD,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;AAYtE;;;;;GAKG;AACH,qBAAa,uBAAuB;IAKvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAJtC;;;OAGG;gBAC0B,QAAQ,CAAC,EAAE,MAAM,YAAA;IAE9C;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;OAIG;IACH,IAAI,IAAI,kBAAkB;IAS1B;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAe5C;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC;;;;;OAKG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7C;;;;OAIG;IACH,0BAA0B,IAAI,MAAM,GAAG,IAAI;IAK3C;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAQxB;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3D;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKrD;;;;OAIG;IACH,2BAA2B,IAAI,MAAM,EAAE;IAKvC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQzC;;;;OAIG;IACH,uBAAuB,IAAI,sBAAsB;IAOjD;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAgB3G;AAKD;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM1H"}
1
+ {"version":3,"file":"harness-credentials.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-credentials.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE;QACR,yGAAyG;QACzG,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wDAAwD;QACxD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACP,iFAAiF;QACjF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,CAAC,EAAE;QACb,2GAA2G;QAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED,gDAAgD;AAChD,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;AAYtE;;;;;GAKG;AACH,qBAAa,uBAAuB;IAKvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAJtC;;;OAGG;gBAC0B,QAAQ,CAAC,EAAE,MAAM,YAAA;IAE9C;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;OAIG;IACH,IAAI,IAAI,kBAAkB;IAS1B;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAe5C;;;;;OAKG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7C;;;;OAIG;IACH,0BAA0B,IAAI,MAAM,GAAG,IAAI;IAK3C;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAQxB;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;;;;;OAMG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKrD;;;;OAIG;IACH,2BAA2B,IAAI,MAAM,EAAE;IAKvC;;;;;OAKG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWzC;;;;OAIG;IACH,yBAAyB,IAAI,MAAM,GAAG,IAAI;IAK1C;;;OAGG;IACH,2BAA2B,IAAI,IAAI;IAUnC;;;;;;OAMG;IACH,qBAAqB,IAAI,IAAI;IAyB7B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKpE;;;;OAIG;IACH,uBAAuB,IAAI,sBAAsB;IAOjD;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAiB3G;AAKD;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,MAAM,CAAC,UAAwB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM1H"}
@@ -1,9 +1,14 @@
1
1
  /**
2
2
  * Harness credentials store — the harness logins Crewly itself holds.
3
3
  *
4
- * Claude Code's `setup-token` prints a long-lived OAuth token instead of
5
- * saving it, and an Anthropic API key has to reach agents somehow; both live
6
- * here, in `<crewlyHome>/harness-credentials.json` with mode 0600. Codex
4
+ * An Anthropic API key has to reach agents somehow, so it lives here, in
5
+ * `<crewlyHome>/harness-credentials.json` with mode 0600. Crewly no longer
6
+ * saves Claude.ai sign-in tokens: Claude Code stores its own login (config
7
+ * dir or keychain) and Anthropic's rules say developers may not collect or
8
+ * store those. Older versions did save a `claude setup-token` token here
9
+ * (`claude.oauthToken`, `claudeAccounts.<name>.oauthToken`); that data is
10
+ * only read to keep an account working until the owner signs it in again,
11
+ * then deleted (services/harness/claude-token-migration.service.ts). Codex
7
12
  * writes its own credentials (`$CODEX_HOME/auth.json`), so nothing is stored
8
13
  * for it unless a future flow needs the key. Antigravity CLI reads its Gemini
9
14
  * API key only from the environment, so Crewly keeps that key here too.
@@ -91,19 +96,6 @@ export class HarnessCredentialsStore {
91
96
  fs.renameSync(tmp, file);
92
97
  fs.chmodSync(file, HARNESS_CONSTANTS.CREDENTIALS_FILE_MODE);
93
98
  }
94
- /**
95
- * Store Claude's long-lived OAuth token. Replaces a stored API key, so
96
- * agents use exactly the login the owner chose last.
97
- *
98
- * @param token - Token printed by `claude setup-token`
99
- * @throws Error when the token is empty
100
- */
101
- setClaudeOauthToken(token) {
102
- if (!isNonEmptyString(token))
103
- throw new Error('Claude OAuth token is empty');
104
- const current = this.read();
105
- this.write({ ...current, claude: { oauthToken: token.trim(), updatedAt: new Date().toISOString() } });
106
- }
107
99
  /**
108
100
  * Store an Anthropic API key. Replaces a stored OAuth token.
109
101
  *
@@ -172,23 +164,8 @@ export class HarnessCredentialsStore {
172
164
  this.write(next);
173
165
  }
174
166
  /**
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.
167
+ * LEGACY: the token an older Crewly saved for one of the owner's other
168
+ * Claude Code accounts (never written any more).
192
169
  *
193
170
  * @param account - Account name
194
171
  * @returns The token, or null when none is stored
@@ -207,7 +184,8 @@ export class HarnessCredentialsStore {
207
184
  return Object.keys(accounts).filter((name) => isNonEmptyString(accounts[name]?.oauthToken));
208
185
  }
209
186
  /**
210
- * Forget the token of one of the owner's other Claude Code accounts.
187
+ * Forget the token of one of the owner's other Claude Code accounts. The
188
+ * `claudeAccounts` key goes away with its last entry.
211
189
  *
212
190
  * @param account - Account name
213
191
  */
@@ -217,7 +195,85 @@ export class HarnessCredentialsStore {
217
195
  return;
218
196
  const accounts = { ...current.claudeAccounts };
219
197
  delete accounts[account];
220
- this.write({ ...current, claudeAccounts: accounts });
198
+ const next = { ...current };
199
+ if (Object.keys(accounts).length > 0)
200
+ next.claudeAccounts = accounts;
201
+ else
202
+ delete next.claudeAccounts;
203
+ this.write(next);
204
+ }
205
+ /**
206
+ * LEGACY: the default login's token an older Crewly saved.
207
+ *
208
+ * @returns The token, or null
209
+ */
210
+ getLegacyClaudeOauthToken() {
211
+ const token = this.read().claude?.oauthToken;
212
+ return isNonEmptyString(token) ? token : null;
213
+ }
214
+ /**
215
+ * Delete the default login's legacy token. The `claude` key is removed
216
+ * when nothing but bookkeeping is left (a stored API key stays).
217
+ */
218
+ clearLegacyClaudeOauthToken() {
219
+ const current = this.read();
220
+ if (!current.claude || !('oauthToken' in current.claude))
221
+ return;
222
+ const { oauthToken: _removed, ...rest } = current.claude;
223
+ const next = { ...current };
224
+ if (isNonEmptyString(rest.anthropicApiKey))
225
+ next.claude = rest;
226
+ else
227
+ delete next.claude;
228
+ this.write(next);
229
+ }
230
+ /**
231
+ * Remove what an older Crewly left for Claude sign-in tokens once no token
232
+ * is stored: empty `claudeAccounts` entries or object, an empty
233
+ * `claude.oauthToken`, and a `claude` object holding nothing but
234
+ * bookkeeping. A stored API key and every other key stay untouched. Does
235
+ * nothing (and does not rewrite the file) when there is nothing to remove.
236
+ */
237
+ pruneLegacyClaudeKeys() {
238
+ const current = this.read();
239
+ const next = { ...current };
240
+ let changed = false;
241
+ if (next.claudeAccounts) {
242
+ const kept = Object.fromEntries(Object.entries(next.claudeAccounts).filter(([, v]) => isNonEmptyString(v?.oauthToken)));
243
+ if (Object.keys(kept).length !== Object.keys(next.claudeAccounts).length || Object.keys(kept).length === 0) {
244
+ changed = true;
245
+ if (Object.keys(kept).length > 0)
246
+ next.claudeAccounts = kept;
247
+ else
248
+ delete next.claudeAccounts;
249
+ }
250
+ }
251
+ if (next.claude && !isNonEmptyString(next.claude.oauthToken)) {
252
+ const { oauthToken: _unused, updatedAt: _stamp, ...rest } = next.claude;
253
+ if (Object.keys(rest).length === 0) {
254
+ delete next.claude;
255
+ changed = true;
256
+ }
257
+ else if ('oauthToken' in next.claude) {
258
+ next.claude = { ...rest, ...(next.claude.updatedAt ? { updatedAt: next.claude.updatedAt } : {}) };
259
+ changed = true;
260
+ }
261
+ }
262
+ if (changed)
263
+ this.write(next);
264
+ }
265
+ /**
266
+ * Env that keeps an account working with the token an older Crewly saved
267
+ * for it. LEGACY, transition only: empty once the account's native login
268
+ * is verified and the token deleted. This is the only place the token is
269
+ * handed to a Claude Code process.
270
+ *
271
+ * @param account - Named account; null = the default login
272
+ * @returns `{ CLAUDE_CODE_OAUTH_TOKEN }`, or `{}` when no token is stored
273
+ */
274
+ legacyClaudeTokenEnv(account) {
275
+ const token = account ? this.getClaudeAccountToken(account) : this.getLegacyClaudeOauthToken();
276
+ return token ? { [HARNESS_CONSTANTS.CLAUDE.OAUTH_TOKEN_ENV]: token } : {};
221
277
  }
222
278
  /**
223
279
  * Which Claude credential Crewly holds (never the value).
@@ -236,8 +292,8 @@ export class HarnessCredentialsStore {
236
292
  * Env vars to inject into agent sessions.
237
293
  *
238
294
  * Always sets PATH (user npm prefix bin first, see harness-exec.utils).
239
- * Adds `CLAUDE_CODE_OAUTH_TOKEN` or `ANTHROPIC_API_KEY` when Crewly holds
240
- * a Claude credential. Nothing is added for Codex: it reads its own
295
+ * Adds `ANTHROPIC_API_KEY` when Crewly holds one (and, during the token
296
+ * migration only, the legacy token of the default login). Nothing is added for Codex: it reads its own
241
297
  * `auth.json`.
242
298
  *
243
299
  * For an `antigravity-cli` session it also adds the stored Gemini key as
@@ -254,8 +310,9 @@ export class HarnessCredentialsStore {
254
310
  const env = { PATH: buildHarnessPath(baseEnv.PATH) };
255
311
  const stored = this.read();
256
312
  const claude = stored.claude;
257
- if (isNonEmptyString(claude?.oauthToken)) {
258
- env[HARNESS_CONSTANTS.CLAUDE.OAUTH_TOKEN_ENV] = claude.oauthToken;
313
+ const legacy = this.legacyClaudeTokenEnv(null);
314
+ if (Object.keys(legacy).length > 0) {
315
+ Object.assign(env, legacy);
259
316
  }
260
317
  else if (isNonEmptyString(claude?.anthropicApiKey)) {
261
318
  env[HARNESS_CONSTANTS.CLAUDE.API_KEY_ENV] = claude.anthropicApiKey;
@@ -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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"}