crewly 1.20.362 → 1.20.363

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 (262) hide show
  1. package/config/hooks/destructive-git-guard/guard.mjs +96 -0
  2. package/config/skills/agent/core/ask-owner/SKILL.md +31 -0
  3. package/config/skills/agent/core/ask-owner/execute.sh +14 -3
  4. package/config/skills/agent/core/ask-owner/execute.test.sh +8 -0
  5. package/config/skills/agent/core/gmail-read/SKILL.md +8 -0
  6. package/config/skills/agent/core/gmail-send/SKILL.md +10 -3
  7. package/config/skills/agent/core/gmail-send/execute.sh +2 -1
  8. package/config/skills/agent/core/gmail-watch-thread/SKILL.md +69 -0
  9. package/config/skills/agent/core/gmail-watch-thread/execute.sh +51 -0
  10. package/config/skills/agent/core/project-tickets/SKILL.md +12 -0
  11. package/config/skills/agent/core/project-tickets/execute.sh +13 -3
  12. package/config/skills/agent/core/project-tickets/execute.test.sh +4 -0
  13. package/config/skills/agent/core/watch-for-event/SKILL.md +22 -0
  14. package/config/skills/orchestrator/harness-login/SKILL.md +1 -1
  15. package/dist/backend/backend/src/constants.d.ts +63 -2
  16. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  17. package/dist/backend/backend/src/constants.js +64 -3
  18. package/dist/backend/backend/src/constants.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +44 -0
  20. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  21. package/dist/backend/backend/src/controllers/google/google.controller.js +121 -3
  22. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  23. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/google/google.routes.js +5 -1
  25. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts +1 -1
  27. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +1 -1
  28. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
  29. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +2 -1
  31. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  32. package/dist/backend/backend/src/index.d.ts.map +1 -1
  33. package/dist/backend/backend/src/index.js +61 -0
  34. package/dist/backend/backend/src/index.js.map +1 -1
  35. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  37. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  38. package/dist/backend/backend/src/services/decisions/decision-card.d.ts +46 -13
  39. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/decisions/decision-card.js +100 -50
  41. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  42. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts +23 -1
  43. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/decisions/decision-contract.js +76 -4
  45. package/dist/backend/backend/src/services/decisions/decision-contract.js.map +1 -1
  46. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts +167 -0
  47. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/decisions/decision-wording.js +406 -0
  49. package/dist/backend/backend/src/services/decisions/decision-wording.js.map +1 -0
  50. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +30 -1
  51. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/decisions/decision.service.js +44 -8
  53. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  54. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/decisions/decision.wiring.js +17 -0
  56. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  57. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +1 -0
  59. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts +142 -0
  61. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js +304 -0
  63. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js.map +1 -0
  64. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts +130 -0
  65. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts.map +1 -0
  66. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js +216 -0
  67. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js.map +1 -0
  68. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts +28 -13
  69. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/google/gmail-send-gate.js +82 -29
  71. package/dist/backend/backend/src/services/google/gmail-send-gate.js.map +1 -1
  72. package/dist/backend/backend/src/services/google/gmail.service.d.ts +90 -0
  73. package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/google/gmail.service.js +122 -0
  75. package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -1
  76. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +24 -14
  77. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/harness/claude-accounts.js +35 -21
  79. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -1
  80. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts +106 -0
  81. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/harness/claude-native-login.js +174 -0
  83. package/dist/backend/backend/src/services/harness/claude-native-login.js.map +1 -0
  84. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  85. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  86. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js +283 -0
  87. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  88. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  89. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +96 -39
  91. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  92. package/dist/backend/backend/src/services/harness/harness-registry.js +1 -1
  93. package/dist/backend/backend/src/services/harness/harness-registry.js.map +1 -1
  94. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  95. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +2 -2
  96. package/dist/backend/backend/src/services/harness/harness.service.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/harness/harness.service.js +10 -1
  98. package/dist/backend/backend/src/services/harness/harness.service.js.map +1 -1
  99. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +24 -21
  100. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/harness/login-broker.service.js +50 -64
  102. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  103. package/dist/backend/backend/src/services/harness/login-rules.d.ts +17 -11
  104. package/dist/backend/backend/src/services/harness/login-rules.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/harness/login-rules.js +22 -25
  106. package/dist/backend/backend/src/services/harness/login-rules.js.map +1 -1
  107. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
  108. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/open-items/open-item-extractor.js +70 -0
  110. package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  111. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +25 -0
  112. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/open-items/open-items.service.js +65 -5
  114. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  116. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  118. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  119. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/project-tickets/ticket-file.js +6 -1
  121. package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  122. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts +64 -0
  123. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts.map +1 -0
  124. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js +93 -0
  125. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js.map +1 -0
  126. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  127. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  128. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js +301 -0
  129. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  130. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +33 -3
  131. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +50 -4
  133. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  134. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +8 -1
  135. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +26 -0
  137. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  138. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -1
  139. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +3 -2
  141. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  142. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +4 -1
  144. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  145. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts +34 -0
  146. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/stall/stall-watcher.service.js +70 -2
  148. package/dist/backend/backend/src/services/stall/stall-watcher.service.js.map +1 -1
  149. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  150. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  151. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +5 -2
  152. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  153. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts +7 -2
  154. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js +11 -2
  156. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js.map +1 -1
  157. package/dist/backend/backend/src/types/decision.types.d.ts +53 -1
  158. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  159. package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
  160. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  161. package/dist/backend/backend/src/types/event-bus.types.js +8 -0
  162. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  163. package/dist/backend/backend/src/types/project-ticket.types.d.ts +7 -0
  164. package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -1
  165. package/dist/backend/backend/src/types/project-ticket.types.js +1 -0
  166. package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -1
  167. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +8 -1
  168. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  169. package/dist/backend/build-info.json +2 -2
  170. package/dist/cli/backend/src/constants.d.ts +63 -2
  171. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  172. package/dist/cli/backend/src/constants.js +64 -3
  173. package/dist/cli/backend/src/constants.js.map +1 -1
  174. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  175. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  176. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  177. package/dist/cli/backend/src/services/decisions/decision-card.d.ts +46 -13
  178. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  179. package/dist/cli/backend/src/services/decisions/decision-card.js +100 -50
  180. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
  181. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +23 -1
  182. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  183. package/dist/cli/backend/src/services/decisions/decision-contract.js +76 -4
  184. package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -1
  185. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts +167 -0
  186. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  187. package/dist/cli/backend/src/services/decisions/decision-wording.js +406 -0
  188. package/dist/cli/backend/src/services/decisions/decision-wording.js.map +1 -0
  189. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +30 -1
  190. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  191. package/dist/cli/backend/src/services/decisions/decision.service.js +44 -8
  192. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  193. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  194. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +1 -0
  195. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  196. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +24 -14
  197. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  198. package/dist/cli/backend/src/services/harness/claude-accounts.js +35 -21
  199. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -1
  200. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts +106 -0
  201. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  202. package/dist/cli/backend/src/services/harness/claude-native-login.js +174 -0
  203. package/dist/cli/backend/src/services/harness/claude-native-login.js.map +1 -0
  204. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  205. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  206. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js +283 -0
  207. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  208. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  209. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  210. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +96 -39
  211. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  212. package/dist/cli/backend/src/services/harness/harness-registry.js +1 -1
  213. package/dist/cli/backend/src/services/harness/harness-registry.js.map +1 -1
  214. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  215. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +2 -2
  216. package/dist/cli/backend/src/services/harness/harness.service.d.ts.map +1 -1
  217. package/dist/cli/backend/src/services/harness/harness.service.js +10 -1
  218. package/dist/cli/backend/src/services/harness/harness.service.js.map +1 -1
  219. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +24 -21
  220. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  221. package/dist/cli/backend/src/services/harness/login-broker.service.js +50 -64
  222. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  223. package/dist/cli/backend/src/services/harness/login-rules.d.ts +17 -11
  224. package/dist/cli/backend/src/services/harness/login-rules.d.ts.map +1 -1
  225. package/dist/cli/backend/src/services/harness/login-rules.js +22 -25
  226. package/dist/cli/backend/src/services/harness/login-rules.js.map +1 -1
  227. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +36 -0
  228. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  229. package/dist/cli/backend/src/services/open-items/open-item-extractor.js +70 -0
  230. package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  231. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +25 -0
  232. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  233. package/dist/cli/backend/src/services/open-items/open-items.service.js +65 -5
  234. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  235. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +86 -0
  236. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +170 -0
  238. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
  239. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  240. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  241. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  242. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  243. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  244. package/dist/cli/backend/src/services/project-tickets/ticket-file.js +6 -1
  245. package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  246. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  247. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  248. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js +301 -0
  249. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  250. package/dist/cli/backend/src/types/decision.types.d.ts +53 -1
  251. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  252. package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
  253. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  254. package/dist/cli/backend/src/types/event-bus.types.js +8 -0
  255. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  256. package/dist/cli/backend/src/types/project-ticket.types.d.ts +7 -0
  257. package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -1
  258. package/dist/cli/backend/src/types/project-ticket.types.js +1 -0
  259. package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -1
  260. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +8 -1
  261. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  262. package/package.json +1 -1
@@ -0,0 +1,158 @@
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 { type HarnessCredentialsStore } from './harness-credentials.store.js';
36
+ import { type HarnessLogger, type LoginState } from './harness.types.js';
37
+ /** A login that still depends on a token an older Crewly saved. */
38
+ export interface LegacyTokenEntry {
39
+ /** Named account; null = the default login */
40
+ account: string | null;
41
+ }
42
+ /** What one run did. */
43
+ export interface MigrationResult {
44
+ /** Logins whose token was deleted this run */
45
+ retired: Array<string | null>;
46
+ /** Logins that still run on a saved token (need a native sign-in) */
47
+ pending: Array<string | null>;
48
+ /** The owner notice was sent this run */
49
+ notified: boolean;
50
+ }
51
+ /** Owner DM sender. */
52
+ export interface MigrationNotifier {
53
+ sendToOwner(text: string): Promise<unknown>;
54
+ }
55
+ /** Injectable dependencies. */
56
+ export interface ClaudeTokenMigrationDeps {
57
+ credentials?: Pick<HarnessCredentialsStore, 'getLegacyClaudeOauthToken' | 'listClaudeAccountsWithToken' | 'clearLegacyClaudeOauthToken' | 'clearClaudeAccount' | 'pruneLegacyClaudeKeys'>;
58
+ /** Real Claude turn on Claude Code's own login, no token in the env */
59
+ probe?: (configDir: string | null) => Promise<LoginState>;
60
+ /** `claude auth status` on Claude Code's own login */
61
+ readStatus?: (configDir: string | null) => Promise<boolean | null>;
62
+ /** Config dir of a named account */
63
+ accountConfigDir?: (account: string) => string;
64
+ notifier?: () => MigrationNotifier | null;
65
+ /** Directory of the state file (default CREWLY_HOME) */
66
+ crewlyHome?: string;
67
+ logger?: HarnessLogger;
68
+ now?: () => number;
69
+ }
70
+ /** Retires saved Claude tokens once the account is signed in natively. */
71
+ export declare class ClaudeTokenMigrationService {
72
+ private readonly credentials;
73
+ private readonly probe;
74
+ private readonly readStatus;
75
+ private readonly accountConfigDir;
76
+ private notifier;
77
+ private readonly crewlyHome;
78
+ private readonly logger;
79
+ private readonly now;
80
+ private running;
81
+ private timer;
82
+ /**
83
+ * @param deps - Injectable dependencies (all optional)
84
+ */
85
+ constructor(deps?: ClaudeTokenMigrationDeps);
86
+ /**
87
+ * Where the owner notice is sent.
88
+ *
89
+ * @param notifier - Lazy owner DM sender
90
+ */
91
+ setNotifier(notifier: () => MigrationNotifier | null): void;
92
+ /**
93
+ * Logins that still depend on a saved token.
94
+ *
95
+ * @returns Entries (default login first)
96
+ */
97
+ listLegacy(): LegacyTokenEntry[];
98
+ /**
99
+ * Check every login that still has a saved token; retire what can be
100
+ * retired and tell the owner about the rest, once. Safe to call at any
101
+ * time and as often as you like (idempotent); concurrent calls share one run.
102
+ *
103
+ * @returns What happened; never rejects
104
+ */
105
+ run(): Promise<MigrationResult>;
106
+ /**
107
+ * A sign-in done through Crewly just completed and was verified: retire
108
+ * the saved token of that login (default or named).
109
+ *
110
+ * @param account - Named account; null = the default login
111
+ * @returns Resolves when done; never rejects
112
+ */
113
+ afterLogin(account: string | null): Promise<void>;
114
+ /**
115
+ * Run now (after a short delay) and then on an interval.
116
+ *
117
+ * @param startDelayMs - Delay before the first run
118
+ */
119
+ start(startDelayMs?: number): void;
120
+ /** Stop the timers. */
121
+ stop(): void;
122
+ private hasLegacy;
123
+ private configDirOf;
124
+ /**
125
+ * Delete the saved token of a login when its native login passes a real
126
+ * Claude turn with no token in the env.
127
+ *
128
+ * @param account - Named account; null = the default login
129
+ * @returns True when the token was deleted
130
+ */
131
+ private retireIfVerified;
132
+ /** Remove leftover Claude keys once no saved token remains. */
133
+ private finishCleanup;
134
+ private runOnce;
135
+ private statePath;
136
+ private readState;
137
+ private writeState;
138
+ /**
139
+ * Tell the owner, once per machine, which logins need one re-sign-in.
140
+ *
141
+ * @param pending - Logins that still run on a saved token
142
+ * @returns True when the notice was delivered now
143
+ */
144
+ private notifyOnce;
145
+ }
146
+ /**
147
+ * The backend's token migration, bound to the stored credentials.
148
+ *
149
+ * @returns The singleton
150
+ */
151
+ export declare function getClaudeTokenMigrationService(): ClaudeTokenMigrationService;
152
+ /**
153
+ * Replace or clear the singleton (tests).
154
+ *
155
+ * @param service - Service, or null
156
+ */
157
+ export declare function setClaudeTokenMigrationServiceForTesting(service: ClaudeTokenMigrationService | null): void;
158
+ //# sourceMappingURL=claude-token-migration.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-token-migration.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/claude-token-migration.service.ts"],"names":[],"mappings":"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"}
@@ -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"}