crewly 1.20.361 → 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 (370) hide show
  1. package/config/hooks/destructive-git-guard/guard.mjs +96 -0
  2. package/config/roles/team-leader/prompt.md +1 -1
  3. package/config/roles/team-leader/tl-addon.md +1 -1
  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/harness-login/SKILL.md +1 -1
  17. package/config/skills/team-leader/delegate-task/SKILL.md +21 -6
  18. package/config/skills/team-leader/delegate-task/execute.sh +12 -1
  19. package/dist/backend/backend/src/constants.d.ts +216 -8
  20. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  21. package/dist/backend/backend/src/constants.js +217 -9
  22. package/dist/backend/backend/src/constants.js.map +1 -1
  23. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +44 -0
  24. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  25. package/dist/backend/backend/src/controllers/google/google.controller.js +121 -3
  26. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  27. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/google/google.routes.js +5 -1
  29. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  30. package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts +1 -1
  31. package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +1 -1
  32. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +1 -1
  33. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +2 -1
  35. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  36. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  37. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +7 -4
  38. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  39. package/dist/backend/backend/src/index.d.ts.map +1 -1
  40. package/dist/backend/backend/src/index.js +114 -1
  41. package/dist/backend/backend/src/index.js.map +1 -1
  42. package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/agent/follow-through.wiring.js +2 -0
  44. package/dist/backend/backend/src/services/agent/follow-through.wiring.js.map +1 -1
  45. package/dist/backend/backend/src/services/agent/handover-interrupted.d.ts +76 -0
  46. package/dist/backend/backend/src/services/agent/handover-interrupted.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/agent/handover-interrupted.js +139 -0
  48. package/dist/backend/backend/src/services/agent/handover-interrupted.js.map +1 -0
  49. package/dist/backend/backend/src/services/agent/handover-pointers.d.ts +4 -0
  50. package/dist/backend/backend/src/services/agent/handover-pointers.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/handover-pointers.js +11 -4
  52. package/dist/backend/backend/src/services/agent/handover-pointers.js.map +1 -1
  53. package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts +3 -1
  54. package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/agent/idle-work-guard.js +2 -0
  56. package/dist/backend/backend/src/services/agent/idle-work-guard.js.map +1 -1
  57. package/dist/backend/backend/src/services/agent/resource-mode-protection.d.ts +5 -1
  58. package/dist/backend/backend/src/services/agent/resource-mode-protection.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/agent/resource-mode-protection.js +6 -1
  60. package/dist/backend/backend/src/services/agent/resource-mode-protection.js.map +1 -1
  61. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +7 -0
  62. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +18 -1
  64. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  65. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  67. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  68. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +8 -0
  69. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +10 -0
  71. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -1
  72. package/dist/backend/backend/src/services/decisions/decision-card.d.ts +46 -13
  73. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/decisions/decision-card.js +100 -50
  75. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  76. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts +23 -1
  77. package/dist/backend/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/decisions/decision-contract.js +76 -4
  79. package/dist/backend/backend/src/services/decisions/decision-contract.js.map +1 -1
  80. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts +167 -0
  81. package/dist/backend/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/decisions/decision-wording.js +406 -0
  83. package/dist/backend/backend/src/services/decisions/decision-wording.js.map +1 -0
  84. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +30 -1
  85. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/decisions/decision.service.js +44 -8
  87. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  88. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/decisions/decision.wiring.js +17 -0
  90. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  91. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +1 -0
  93. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts +142 -0
  95. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.d.ts.map +1 -0
  96. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js +304 -0
  97. package/dist/backend/backend/src/services/google/gmail-reply-watch.service.js.map +1 -0
  98. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts +130 -0
  99. package/dist/backend/backend/src/services/google/gmail-send-approval.service.d.ts.map +1 -0
  100. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js +216 -0
  101. package/dist/backend/backend/src/services/google/gmail-send-approval.service.js.map +1 -0
  102. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts +28 -13
  103. package/dist/backend/backend/src/services/google/gmail-send-gate.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/google/gmail-send-gate.js +82 -29
  105. package/dist/backend/backend/src/services/google/gmail-send-gate.js.map +1 -1
  106. package/dist/backend/backend/src/services/google/gmail.service.d.ts +90 -0
  107. package/dist/backend/backend/src/services/google/gmail.service.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/google/gmail.service.js +122 -0
  109. package/dist/backend/backend/src/services/google/gmail.service.js.map +1 -1
  110. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +24 -14
  111. package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/harness/claude-accounts.js +35 -21
  113. package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -1
  114. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts +106 -0
  115. package/dist/backend/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  116. package/dist/backend/backend/src/services/harness/claude-native-login.js +174 -0
  117. package/dist/backend/backend/src/services/harness/claude-native-login.js.map +1 -0
  118. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  119. package/dist/backend/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  120. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js +283 -0
  121. package/dist/backend/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  122. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  123. package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/harness/harness-credentials.store.js +96 -39
  125. package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  126. package/dist/backend/backend/src/services/harness/harness-registry.js +1 -1
  127. package/dist/backend/backend/src/services/harness/harness-registry.js.map +1 -1
  128. package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  129. package/dist/backend/backend/src/services/harness/harness-relogin.service.js +2 -2
  130. package/dist/backend/backend/src/services/harness/harness.service.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/harness/harness.service.js +10 -1
  132. package/dist/backend/backend/src/services/harness/harness.service.js.map +1 -1
  133. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +24 -21
  134. package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/harness/login-broker.service.js +50 -64
  136. package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/harness/login-rules.d.ts +17 -11
  138. package/dist/backend/backend/src/services/harness/login-rules.d.ts.map +1 -1
  139. package/dist/backend/backend/src/services/harness/login-rules.js +22 -25
  140. package/dist/backend/backend/src/services/harness/login-rules.js.map +1 -1
  141. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts +79 -2
  142. package/dist/backend/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/open-items/open-item-extractor.js +194 -13
  144. package/dist/backend/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  145. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +65 -1
  146. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/open-items/open-items.service.js +140 -7
  148. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  149. package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts +8 -0
  150. package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts.map +1 -1
  151. package/dist/backend/backend/src/services/open-items/open-items.wiring.js +19 -1
  152. package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -1
  153. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +35 -19
  154. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +60 -63
  156. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts +86 -0
  158. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
  159. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js +170 -0
  160. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
  161. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts +24 -0
  162. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts.map +1 -1
  163. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js +38 -1
  164. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js.map +1 -1
  165. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +2 -0
  166. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +8 -3
  168. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  169. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +76 -0
  170. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  171. package/dist/backend/backend/src/services/orc/work-item-destination.js +83 -3
  172. package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
  173. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +31 -2
  174. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
  175. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +38 -0
  176. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
  177. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  178. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  179. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  180. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  181. package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  182. package/dist/backend/backend/src/services/project-tickets/ticket-file.js +6 -1
  183. package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  184. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts +64 -0
  185. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.d.ts.map +1 -0
  186. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js +93 -0
  187. package/dist/backend/backend/src/services/project-tickets/ticket-hold-registry.js.map +1 -0
  188. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  189. package/dist/backend/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  190. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js +301 -0
  191. package/dist/backend/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  192. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +33 -3
  193. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +50 -4
  195. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  196. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +8 -1
  197. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +26 -0
  199. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  200. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +6 -1
  201. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +3 -2
  203. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  204. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +4 -1
  206. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  207. package/dist/backend/backend/src/services/stall/background-run-detector.d.ts +56 -0
  208. package/dist/backend/backend/src/services/stall/background-run-detector.d.ts.map +1 -0
  209. package/dist/backend/backend/src/services/stall/background-run-detector.js +93 -0
  210. package/dist/backend/backend/src/services/stall/background-run-detector.js.map +1 -0
  211. package/dist/backend/backend/src/services/stall/claim-check.d.ts +60 -0
  212. package/dist/backend/backend/src/services/stall/claim-check.d.ts.map +1 -0
  213. package/dist/backend/backend/src/services/stall/claim-check.js +98 -0
  214. package/dist/backend/backend/src/services/stall/claim-check.js.map +1 -0
  215. package/dist/backend/backend/src/services/stall/in-flight-runs.store.d.ts +110 -0
  216. package/dist/backend/backend/src/services/stall/in-flight-runs.store.d.ts.map +1 -0
  217. package/dist/backend/backend/src/services/stall/in-flight-runs.store.js +109 -0
  218. package/dist/backend/backend/src/services/stall/in-flight-runs.store.js.map +1 -0
  219. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts +490 -0
  220. package/dist/backend/backend/src/services/stall/stall-watcher.service.d.ts.map +1 -0
  221. package/dist/backend/backend/src/services/stall/stall-watcher.service.js +922 -0
  222. package/dist/backend/backend/src/services/stall/stall-watcher.service.js.map +1 -0
  223. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.d.ts +98 -0
  224. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.d.ts.map +1 -0
  225. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.js +217 -0
  226. package/dist/backend/backend/src/services/stall/stall-watcher.wiring.js.map +1 -0
  227. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +53 -0
  228. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  229. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +162 -15
  230. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  231. package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js +1 -1
  232. package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js.map +1 -1
  233. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  234. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  235. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +5 -2
  236. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  237. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts +7 -2
  238. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.d.ts.map +1 -1
  239. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js +11 -2
  240. package/dist/backend/backend/src/services/worktree/worktree-unmerged-notice.js.map +1 -1
  241. package/dist/backend/backend/src/types/decision.types.d.ts +53 -1
  242. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  243. package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
  244. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  245. package/dist/backend/backend/src/types/event-bus.types.js +8 -0
  246. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  247. package/dist/backend/backend/src/types/project-ticket.types.d.ts +7 -0
  248. package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -1
  249. package/dist/backend/backend/src/types/project-ticket.types.js +1 -0
  250. package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -1
  251. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +10 -1
  252. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  253. package/dist/backend/build-info.json +2 -2
  254. package/dist/cli/backend/src/constants.d.ts +216 -8
  255. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  256. package/dist/cli/backend/src/constants.js +217 -9
  257. package/dist/cli/backend/src/constants.js.map +1 -1
  258. package/dist/cli/backend/src/services/agent/handover-interrupted.d.ts +76 -0
  259. package/dist/cli/backend/src/services/agent/handover-interrupted.d.ts.map +1 -0
  260. package/dist/cli/backend/src/services/agent/handover-interrupted.js +139 -0
  261. package/dist/cli/backend/src/services/agent/handover-interrupted.js.map +1 -0
  262. package/dist/cli/backend/src/services/agent/handover-pointers.d.ts +4 -0
  263. package/dist/cli/backend/src/services/agent/handover-pointers.d.ts.map +1 -1
  264. package/dist/cli/backend/src/services/agent/handover-pointers.js +11 -4
  265. package/dist/cli/backend/src/services/agent/handover-pointers.js.map +1 -1
  266. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +7 -0
  267. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  268. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +18 -1
  269. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  270. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  271. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -1
  272. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  273. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +8 -0
  274. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -1
  275. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +10 -0
  276. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -1
  277. package/dist/cli/backend/src/services/decisions/decision-card.d.ts +46 -13
  278. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  279. package/dist/cli/backend/src/services/decisions/decision-card.js +100 -50
  280. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
  281. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +23 -1
  282. package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
  283. package/dist/cli/backend/src/services/decisions/decision-contract.js +76 -4
  284. package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -1
  285. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts +167 -0
  286. package/dist/cli/backend/src/services/decisions/decision-wording.d.ts.map +1 -0
  287. package/dist/cli/backend/src/services/decisions/decision-wording.js +406 -0
  288. package/dist/cli/backend/src/services/decisions/decision-wording.js.map +1 -0
  289. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +30 -1
  290. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  291. package/dist/cli/backend/src/services/decisions/decision.service.js +44 -8
  292. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  293. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  294. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +1 -0
  295. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  296. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +24 -14
  297. package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -1
  298. package/dist/cli/backend/src/services/harness/claude-accounts.js +35 -21
  299. package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -1
  300. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts +106 -0
  301. package/dist/cli/backend/src/services/harness/claude-native-login.d.ts.map +1 -0
  302. package/dist/cli/backend/src/services/harness/claude-native-login.js +174 -0
  303. package/dist/cli/backend/src/services/harness/claude-native-login.js.map +1 -0
  304. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts +158 -0
  305. package/dist/cli/backend/src/services/harness/claude-token-migration.service.d.ts.map +1 -0
  306. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js +283 -0
  307. package/dist/cli/backend/src/services/harness/claude-token-migration.service.js.map +1 -0
  308. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +44 -24
  309. package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
  310. package/dist/cli/backend/src/services/harness/harness-credentials.store.js +96 -39
  311. package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
  312. package/dist/cli/backend/src/services/harness/harness-registry.js +1 -1
  313. package/dist/cli/backend/src/services/harness/harness-registry.js.map +1 -1
  314. package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +2 -2
  315. package/dist/cli/backend/src/services/harness/harness-relogin.service.js +2 -2
  316. package/dist/cli/backend/src/services/harness/harness.service.d.ts.map +1 -1
  317. package/dist/cli/backend/src/services/harness/harness.service.js +10 -1
  318. package/dist/cli/backend/src/services/harness/harness.service.js.map +1 -1
  319. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +24 -21
  320. package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
  321. package/dist/cli/backend/src/services/harness/login-broker.service.js +50 -64
  322. package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
  323. package/dist/cli/backend/src/services/harness/login-rules.d.ts +17 -11
  324. package/dist/cli/backend/src/services/harness/login-rules.d.ts.map +1 -1
  325. package/dist/cli/backend/src/services/harness/login-rules.js +22 -25
  326. package/dist/cli/backend/src/services/harness/login-rules.js.map +1 -1
  327. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts +79 -2
  328. package/dist/cli/backend/src/services/open-items/open-item-extractor.d.ts.map +1 -1
  329. package/dist/cli/backend/src/services/open-items/open-item-extractor.js +194 -13
  330. package/dist/cli/backend/src/services/open-items/open-item-extractor.js.map +1 -1
  331. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +65 -1
  332. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  333. package/dist/cli/backend/src/services/open-items/open-items.service.js +140 -7
  334. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  335. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +86 -0
  336. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +170 -0
  338. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -0
  339. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +76 -0
  340. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  341. package/dist/cli/backend/src/services/orc/work-item-destination.js +83 -3
  342. package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
  343. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +5 -0
  344. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +30 -6
  346. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  347. package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
  348. package/dist/cli/backend/src/services/project-tickets/ticket-file.js +6 -1
  349. package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -1
  350. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts +176 -0
  351. package/dist/cli/backend/src/services/project-tickets/ticket-hold.d.ts.map +1 -0
  352. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js +301 -0
  353. package/dist/cli/backend/src/services/project-tickets/ticket-hold.js.map +1 -0
  354. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +53 -0
  355. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  356. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +162 -15
  357. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  358. package/dist/cli/backend/src/types/decision.types.d.ts +53 -1
  359. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  360. package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
  361. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  362. package/dist/cli/backend/src/types/event-bus.types.js +8 -0
  363. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  364. package/dist/cli/backend/src/types/project-ticket.types.d.ts +7 -0
  365. package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -1
  366. package/dist/cli/backend/src/types/project-ticket.types.js +1 -0
  367. package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -1
  368. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +10 -1
  369. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  370. package/package.json +1 -1
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Owner-facing wording of decision cards (crewly#1367, crewly#1369 §3). Pure.
3
+ *
4
+ * A card is read by the owner on a phone: it leads with the question in
5
+ * plain words, in the owner's language. Ticket ids, PR numbers, branch and
6
+ * worktree names and `GOAL:` prefixes are internal mechanics; they are
7
+ * taken out of the question when the card is created (a PR link may stay in
8
+ * a short details line). The harness's own text on the card — buttons, the
9
+ * context line, reminders — follows the owner's language.
10
+ *
11
+ * Card D-822 (2026-10-16) is the incident: its title was
12
+ * "CREW-646 · GOAL: Decide the fate of OPEN PR #1138 (…, CREW-257), worktree
13
+ * crewly-projec…", in English, to an owner who writes Chinese; the question
14
+ * really was "should agent-sent Gmail go out only after you approve a card?".
15
+ *
16
+ * The Chinese strings below are owner-facing text in the owner's language
17
+ * (an allowed exception to the English-only rule).
18
+ *
19
+ * @module services/decisions/decision-wording
20
+ */
21
+ import type { DecisionContext, DecisionLanguage, DecisionOption } from '../../types/decision.types.js';
22
+ /** Result of {@link stripInternalRefs}. */
23
+ export interface StrippedText {
24
+ /** The text without internal references (one line, tidied) */
25
+ text: string;
26
+ /** PR references and links that were taken out, for a details line */
27
+ refs: string[];
28
+ }
29
+ /**
30
+ * Take ticket ids, PR numbers, links, branch / worktree names, paths and
31
+ * `GOAL:` prefixes out of a question or title (crewly#1367).
32
+ *
33
+ * @param raw - Question or title
34
+ * @returns The plain text, and the PR references / links removed
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * stripInternalRefs('CREW-646 · GOAL: Merge PR #1138 (Gmail approve card)?');
39
+ * // { text: 'Merge (Gmail approve card)?', refs: ['PR #1138'] }
40
+ * ```
41
+ */
42
+ export declare function stripInternalRefs(raw: string | undefined | null): StrippedText;
43
+ /** How many letters (any script) a text has. */
44
+ export declare function letterCount(s: string): number;
45
+ /**
46
+ * Whether an ask is about merging a PR: the question (before stripping) or
47
+ * one of its options talks about merging. A card that only names a PR (to
48
+ * close it, to review it) is not a merge card.
49
+ *
50
+ * @param rawQuestion - The question as the agent wrote it
51
+ * @param options - Its options
52
+ * @returns True for a merge card
53
+ */
54
+ export declare function isMergeAsk(rawQuestion: string, options: ReadonlyArray<Pick<DecisionOption, 'label' | 'detail'>>): boolean;
55
+ /**
56
+ * Parse the optional card context. Each field is one short line.
57
+ *
58
+ * @param raw - `{requestedBy?, ownerLastSaid?, runtimeChanges?, link?}`
59
+ * @returns The context, or undefined when empty
60
+ * @throws Error (message for the agent) when a field is too long or not text
61
+ */
62
+ export declare function parseDecisionContext(raw: unknown): DecisionContext | undefined;
63
+ /**
64
+ * Whether a question is written in the owner's language. Only a Chinese
65
+ * owner is checked (an English owner reading a bilingual question is fine).
66
+ *
67
+ * @param question - The plain question
68
+ * @param ownerLanguage - The owner's language, when known
69
+ * @returns True when the question can go out as is
70
+ */
71
+ export declare function questionFitsOwnerLanguage(question: string, ownerLanguage: DecisionLanguage | null | undefined): boolean;
72
+ /**
73
+ * The option label in the owner's language: generic English labels ("Yes",
74
+ * "Not now", "Yes, merge") become Chinese for a Chinese owner; a merge card
75
+ * names the outcome (合并 / 先不合). Any other label is left as written.
76
+ *
77
+ * @param label - Label as asked
78
+ * @param lang - Owner language
79
+ * @param merge - The card is a merge question
80
+ * @returns Label to show (and to match replies against)
81
+ */
82
+ export declare function localizeOptionLabel(label: string, lang: DecisionLanguage | undefined, merge?: boolean): string;
83
+ /**
84
+ * Localize every option label; keeps labels distinct (a collision keeps the
85
+ * original label).
86
+ *
87
+ * @param options - Options
88
+ * @param lang - Owner language
89
+ * @param merge - Merge card
90
+ * @returns Options with localized labels
91
+ */
92
+ export declare function localizeOptions(options: DecisionOption[], lang: DecisionLanguage | undefined, merge?: boolean): DecisionOption[];
93
+ /**
94
+ * A question clipped for a one-line reminder.
95
+ *
96
+ * @param q - Question
97
+ * @param max - Max characters
98
+ * @returns Clipped text
99
+ */
100
+ export declare function clipQuestion(q: string, max?: number): string;
101
+ /** The harness's own card text, per owner language. */
102
+ export interface CardText {
103
+ remindButton: string;
104
+ skipButton: string;
105
+ details: string;
106
+ requestedBy: string;
107
+ ownerLastSaid: string;
108
+ runtimeChanges: string;
109
+ mergeRuntimeChanges: string;
110
+ remindingAt: (when: string) => string;
111
+ declineDefault: (when: string, label: string) => string;
112
+ heldDefault: (when: string, label: string) => string;
113
+ sensitive: (kind: string) => string;
114
+ waitHold: string;
115
+ goWithDefault: (when: string, label: string) => string;
116
+ waitReminder: (at: string, q: string) => string;
117
+ waitReminderMany: (at: string, n: number) => string;
118
+ remindNow: (at: string, q: string) => string;
119
+ sensitiveReask: (at: string, q: string, kind: string) => string;
120
+ chose: (who: string, label: string, at: string) => string;
121
+ answered: (who: string, words: string, at: string) => string;
122
+ answeredInThread: (at: string) => string;
123
+ parked: (id: string) => string;
124
+ closed: (reason: string, at: string) => string;
125
+ skipped: (who: string, at: string) => string;
126
+ theOwner: string;
127
+ defaultNoAnswerOpen: (when: string) => string;
128
+ defaultNoAnswer: (when: string, verb: string, label: string) => string;
129
+ defaultVerb: (name: string | null, settled: boolean) => string;
130
+ }
131
+ /**
132
+ * The harness's card text in a language.
133
+ *
134
+ * @param lang - Owner language (absent = English)
135
+ * @returns Strings
136
+ */
137
+ export declare function cardText(lang: DecisionLanguage | undefined): CardText;
138
+ /**
139
+ * Short local time in Chinese: "14:05" today, "明天 12:00", else "10月2日 周四 12:00".
140
+ *
141
+ * @param at - Moment
142
+ * @param now - Clock
143
+ * @returns Text
144
+ */
145
+ export declare function formatWhenZh(at: Date, now?: Date): string;
146
+ /**
147
+ * The context lines of a card (who asked, what the owner said last, what
148
+ * changes), as mrkdwn — null when there is no context.
149
+ *
150
+ * @param context - Card context
151
+ * @param lang - Owner language
152
+ * @param merge - Merge card ("What merging changes")
153
+ * @returns mrkdwn, or null
154
+ */
155
+ export declare function contextSection(context: DecisionContext | undefined, lang: DecisionLanguage | undefined, merge?: boolean): string | null;
156
+ /**
157
+ * The short details line (PR link / references), or null.
158
+ *
159
+ * @param d - Decision context + stripped refs
160
+ * @param lang - Owner language
161
+ * @returns mrkdwn, or null
162
+ */
163
+ export declare function detailsLine(d: {
164
+ context?: DecisionContext;
165
+ details?: string[];
166
+ }, lang: DecisionLanguage | undefined): string | null;
167
+ //# sourceMappingURL=decision-wording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-wording.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision-wording.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,406 @@
1
+ /**
2
+ * Owner-facing wording of decision cards (crewly#1367, crewly#1369 §3). Pure.
3
+ *
4
+ * A card is read by the owner on a phone: it leads with the question in
5
+ * plain words, in the owner's language. Ticket ids, PR numbers, branch and
6
+ * worktree names and `GOAL:` prefixes are internal mechanics; they are
7
+ * taken out of the question when the card is created (a PR link may stay in
8
+ * a short details line). The harness's own text on the card — buttons, the
9
+ * context line, reminders — follows the owner's language.
10
+ *
11
+ * Card D-822 (2026-10-16) is the incident: its title was
12
+ * "CREW-646 · GOAL: Decide the fate of OPEN PR #1138 (…, CREW-257), worktree
13
+ * crewly-projec…", in English, to an owner who writes Chinese; the question
14
+ * really was "should agent-sent Gmail go out only after you approve a card?".
15
+ *
16
+ * The Chinese strings below are owner-facing text in the owner's language
17
+ * (an allowed exception to the English-only rule).
18
+ *
19
+ * @module services/decisions/decision-wording
20
+ */
21
+ import { DECISION_WORDING_CONSTANTS as W } from '../../constants.js';
22
+ import { detectOwnerLanguage } from '../orc/owner-completion-report.text.js';
23
+ /** URLs (plain and Slack `<url|label>`). */
24
+ const URL_RE = /<?https?:\/\/[^\s<>|]+(?:\|[^>]*)?>?/gi;
25
+ /** `PR #1138`, `PR 1138`, `pull request #1138`. */
26
+ const PR_RE = /\b(?:PR|pull\s+request)\s*#?\s*(\d{1,7})\b/gi;
27
+ /** A bare `#1138` (two digits or more). */
28
+ const HASH_NUM_RE = /(?<![\w&])#(\d{2,7})\b/g;
29
+ /** Ticket and decision ids: `CREW-646`, `APP-12`, `D-822`. Single-letter prefixes other than D (H-1B) are words. */
30
+ const TICKET_RE = /\b(?:[A-Z][A-Z0-9]{1,9}|D)-\d{1,6}\b/g;
31
+ /** `GOAL:` / `Goal -` prefixes. */
32
+ const GOAL_RE = /\bgoal\s*[::-]\s*/gi;
33
+ /** `worktree crewly-projects/wt-x`, `branch fix/foo`. */
34
+ const WORKTREE_RE = /\b(?:in\s+|on\s+)?(?:the\s+)?(?:git\s+)?(?:worktrees?|branch(?:es)?)\s*[::]?\s*[`'"]?[\w./~@-]+[`'"]?(?:…|\.{3})?/gi;
35
+ /** Branch names with a conventional prefix: `fix/decision-card-wording`. */
36
+ const BRANCH_RE = /\b(?:feat|feature|fix|bugfix|hotfix|chore|docs|refactor|test|release|wip)\/[\w./-]+/gi;
37
+ /** `wt-crew257`-style worktree directory names. */
38
+ const WT_RE = /\bwt-[\w.-]+/gi;
39
+ /** Absolute / home / relative paths. */
40
+ const PATH_RE = /(?:~|\.{1,2})?\/[\w.@-]+(?:\/[\w.@-]+)+\/?|\b[\w.@-]+(?:\/[\w.@-]+){2,}\/?/g;
41
+ /** Marks where a reference was removed (so only prepositions left dangling by a removal are dropped). */
42
+ const GAP = '\u0000';
43
+ /** A preposition (or "the") right before a removed reference that ended its phrase: "in <path>?" → "?". */
44
+ const DANGLING_PREP_RE = new RegExp(`\\b(?:in|at|on|from|to|into|onto|of|for|with|via|under|the|see)\\s*${GAP}(?=[\\s${GAP}]*(?:[??.。!!,,;;::))—–-]|$))`, 'gi');
45
+ /** Backtick code spans. */
46
+ const CODE_RE = /`[^`]*`/g;
47
+ /**
48
+ * Take ticket ids, PR numbers, links, branch / worktree names, paths and
49
+ * `GOAL:` prefixes out of a question or title (crewly#1367).
50
+ *
51
+ * @param raw - Question or title
52
+ * @returns The plain text, and the PR references / links removed
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * stripInternalRefs('CREW-646 · GOAL: Merge PR #1138 (Gmail approve card)?');
57
+ * // { text: 'Merge (Gmail approve card)?', refs: ['PR #1138'] }
58
+ * ```
59
+ */
60
+ export function stripInternalRefs(raw) {
61
+ const refs = [];
62
+ const addRef = (r) => {
63
+ if (!refs.includes(r))
64
+ refs.push(r);
65
+ };
66
+ let t = String(raw ?? '').replace(/\s+/g, ' ');
67
+ t = t.replace(URL_RE, (m) => {
68
+ addRef(m.replace(/^</, '').replace(/>$/, '').split('|')[0]);
69
+ return ` ${GAP} `;
70
+ });
71
+ t = t.replace(CODE_RE, (m) => (/[/#]|\b[A-Z]{2,}-\d/.test(m) ? ` ${GAP} ` : m.replace(/`/g, '')));
72
+ t = t.replace(PR_RE, (_m, n) => {
73
+ addRef(`PR #${n}`);
74
+ return ` ${GAP} `;
75
+ });
76
+ t = t.replace(HASH_NUM_RE, (_m, n) => {
77
+ addRef(`PR #${n}`);
78
+ return ` ${GAP} `;
79
+ });
80
+ const gap = ` ${GAP} `;
81
+ t = t
82
+ .replace(GOAL_RE, ' ')
83
+ .replace(WORKTREE_RE, gap)
84
+ .replace(BRANCH_RE, gap)
85
+ .replace(WT_RE, gap)
86
+ .replace(PATH_RE, gap)
87
+ .replace(TICKET_RE, gap);
88
+ if (!t.includes(GAP) && t === String(raw ?? '').replace(/\s+/g, ' '))
89
+ return { text: t.trim(), refs };
90
+ t = t.replace(/\s+/g, ' ');
91
+ for (let i = 0; i < 3; i++)
92
+ t = t.replace(DANGLING_PREP_RE, GAP);
93
+ return { text: tidy(t.split(GAP).join(' ')), refs };
94
+ }
95
+ /**
96
+ * Tidy what stripping left: empty brackets, doubled separators, dangling
97
+ * punctuation at the ends.
98
+ *
99
+ * @param s - Text
100
+ * @returns One clean line
101
+ */
102
+ function tidy(s) {
103
+ let t = s.replace(/\s+/g, ' ');
104
+ for (let i = 0; i < 3; i++) {
105
+ t = t
106
+ .replace(/\(\s*[,;·:|]*\s*\)|(\s*[,,;;·::|]*\s*)|\[\s*\]/g, ' ')
107
+ .replace(/([((])\s*[,;,;·|]+\s*/g, '$1')
108
+ .replace(/\s*[,;,;·|]+\s*([))])/g, '$1')
109
+ .replace(/\s*([·|])\s*(?:[·|,;:]\s*)+/g, ' $1 ')
110
+ .replace(/\s+([,;:,;:??!!.。])/g, '$1')
111
+ .replace(/([,;,;])(?:\s*[,;,;])+/g, '$1')
112
+ .replace(/\s+/g, ' ');
113
+ }
114
+ return t
115
+ .replace(/^[\s·|,;::,;…—–-]+/u, '')
116
+ .replace(/[\s·|,;::,;—–-]+$/u, '')
117
+ .replace(/\s*(?:…|\.{3})\s*$/u, '')
118
+ .trim();
119
+ }
120
+ /** How many letters (any script) a text has. */
121
+ export function letterCount(s) {
122
+ return s.match(/\p{L}/gu)?.length ?? 0;
123
+ }
124
+ /** Words that make a question a merge question. */
125
+ const MERGE_RE = /\bmerg(?:e|es|ing)\b|合并|合入|合进/i;
126
+ /**
127
+ * Whether an ask is about merging a PR: the question (before stripping) or
128
+ * one of its options talks about merging. A card that only names a PR (to
129
+ * close it, to review it) is not a merge card.
130
+ *
131
+ * @param rawQuestion - The question as the agent wrote it
132
+ * @param options - Its options
133
+ * @returns True for a merge card
134
+ */
135
+ export function isMergeAsk(rawQuestion, options) {
136
+ if (MERGE_RE.test(rawQuestion))
137
+ return true;
138
+ return options.some((o) => MERGE_RE.test(`${o.label} ${o.detail ?? ''}`));
139
+ }
140
+ /**
141
+ * Parse the optional card context. Each field is one short line.
142
+ *
143
+ * @param raw - `{requestedBy?, ownerLastSaid?, runtimeChanges?, link?}`
144
+ * @returns The context, or undefined when empty
145
+ * @throws Error (message for the agent) when a field is too long or not text
146
+ */
147
+ export function parseDecisionContext(raw) {
148
+ if (raw === undefined || raw === null || raw === '')
149
+ return undefined;
150
+ if (typeof raw !== 'object' || Array.isArray(raw))
151
+ throw new Error('context must be an object: {"requestedBy": "...", "ownerLastSaid": "...", "runtimeChanges": "...", "link": "..."}.');
152
+ const o = raw;
153
+ const out = {};
154
+ for (const key of ['requestedBy', 'ownerLastSaid', 'runtimeChanges', 'link']) {
155
+ const v = o[key];
156
+ if (v === undefined || v === null || v === '')
157
+ continue;
158
+ if (typeof v !== 'string')
159
+ throw new Error(`context.${key} must be text.`);
160
+ const line = v.replace(/\s+/g, ' ').trim();
161
+ if (!line)
162
+ continue;
163
+ const max = key === 'link' ? W.LINK_MAX_CHARS : W.CONTEXT_FIELD_MAX_CHARS;
164
+ if (line.length > max)
165
+ throw new Error(`context.${key} is too long (max ${max} characters): one short line the owner reads on a phone.`);
166
+ out[key] = line;
167
+ }
168
+ return Object.keys(out).length ? out : undefined;
169
+ }
170
+ /**
171
+ * Whether a question is written in the owner's language. Only a Chinese
172
+ * owner is checked (an English owner reading a bilingual question is fine).
173
+ *
174
+ * @param question - The plain question
175
+ * @param ownerLanguage - The owner's language, when known
176
+ * @returns True when the question can go out as is
177
+ */
178
+ export function questionFitsOwnerLanguage(question, ownerLanguage) {
179
+ if (ownerLanguage !== 'zh')
180
+ return true;
181
+ return detectOwnerLanguage(question) === 'zh';
182
+ }
183
+ /** Generic English option labels, lower-cased with trailing punctuation removed, and their Chinese. */
184
+ const GENERIC_ZH = {
185
+ yes: '好',
186
+ 'yes, do it': '好,去做',
187
+ 'do it': '去做',
188
+ 'go ahead': '去做',
189
+ ok: '好',
190
+ okay: '好',
191
+ approve: '同意',
192
+ no: '不用',
193
+ 'not now': '先不',
194
+ 'not yet': '先不',
195
+ later: '以后再说',
196
+ hold: '先放着',
197
+ wait: '先等等',
198
+ cancel: '取消',
199
+ skip: '不用了',
200
+ 'remind me tomorrow': '明天再问',
201
+ };
202
+ /** Merge-card option labels and their Chinese. */
203
+ const MERGE_ZH = {
204
+ yes: '合并',
205
+ 'yes, merge': '合并',
206
+ 'yes, merge it': '合并',
207
+ 'yes merge': '合并',
208
+ merge: '合并',
209
+ 'merge it': '合并',
210
+ 'merge now': '合并',
211
+ approve: '合并',
212
+ ok: '合并',
213
+ no: '先不合',
214
+ 'not now': '先不合',
215
+ 'not yet': '先不合',
216
+ "don't merge": '先不合',
217
+ 'dont merge': '先不合',
218
+ 'do not merge': '先不合',
219
+ hold: '先不合',
220
+ wait: '先不合',
221
+ close: '关掉这个 PR',
222
+ 'close it': '关掉这个 PR',
223
+ 'close the pr': '关掉这个 PR',
224
+ };
225
+ /**
226
+ * The option label in the owner's language: generic English labels ("Yes",
227
+ * "Not now", "Yes, merge") become Chinese for a Chinese owner; a merge card
228
+ * names the outcome (合并 / 先不合). Any other label is left as written.
229
+ *
230
+ * @param label - Label as asked
231
+ * @param lang - Owner language
232
+ * @param merge - The card is a merge question
233
+ * @returns Label to show (and to match replies against)
234
+ */
235
+ export function localizeOptionLabel(label, lang, merge = false) {
236
+ if (lang !== 'zh')
237
+ return label;
238
+ const k = label.toLowerCase().replace(/[.。!!]+$/u, '').trim();
239
+ return (merge ? MERGE_ZH[k] : undefined) ?? GENERIC_ZH[k] ?? label;
240
+ }
241
+ /**
242
+ * Localize every option label; keeps labels distinct (a collision keeps the
243
+ * original label).
244
+ *
245
+ * @param options - Options
246
+ * @param lang - Owner language
247
+ * @param merge - Merge card
248
+ * @returns Options with localized labels
249
+ */
250
+ export function localizeOptions(options, lang, merge = false) {
251
+ if (lang !== 'zh')
252
+ return options;
253
+ const used = new Set();
254
+ return options.map((o) => {
255
+ const next = localizeOptionLabel(o.label, lang, merge);
256
+ const label = used.has(next.toLowerCase()) ? o.label : next;
257
+ used.add(label.toLowerCase());
258
+ return label === o.label ? o : { ...o, label };
259
+ });
260
+ }
261
+ /**
262
+ * A question clipped for a one-line reminder.
263
+ *
264
+ * @param q - Question
265
+ * @param max - Max characters
266
+ * @returns Clipped text
267
+ */
268
+ export function clipQuestion(q, max = W.REMINDER_QUESTION_MAX_CHARS) {
269
+ const t = q.replace(/\s+/g, ' ').trim();
270
+ return t.length > max ? `${t.slice(0, max - 1).trimEnd()}…` : t;
271
+ }
272
+ const SENSITIVE_ZH = {
273
+ email: '对外发消息',
274
+ publish: '公开发布',
275
+ deploy: '上线部署',
276
+ spend: '花钱',
277
+ };
278
+ const EN = {
279
+ remindButton: 'Remind me tomorrow',
280
+ skipButton: 'Skip',
281
+ details: 'Details',
282
+ requestedBy: 'Asked for by',
283
+ ownerLastSaid: 'You said last',
284
+ runtimeChanges: 'What it changes',
285
+ mergeRuntimeChanges: 'What merging changes',
286
+ remindingAt: (when) => `⏰ Reminding you ${when}.`,
287
+ declineDefault: (when, label) => `Nothing is accepted until you answer. No answer by ${when}: ${label}.`,
288
+ heldDefault: (when, label) => `Nothing happens without your OK. If no answer by ${when}, the answer is ${label}.`,
289
+ sensitive: (kind) => `This needs your OK (${kind}); I won't go ahead without an answer.`,
290
+ waitHold: 'Tap an answer or reply in this thread — I\'ll hold this until you do.',
291
+ goWithDefault: (when, label) => `If no answer by ${when}, I'll go with ${label}.`,
292
+ waitReminder: (at, q) => `${at}Still waiting on you: “${q}” — tap an answer on the card above, or reply here.`,
293
+ waitReminderMany: (at, n) => `${at}Still waiting on you for ${n} questions in this thread — tap an answer on each card above, or reply here.`,
294
+ remindNow: (at, q) => `${at}Reminder: “${q}” — tap an answer on the card above, or reply here.`,
295
+ sensitiveReask: (at, q, kind) => `${at}Still need your answer: “${q}” — it needs your OK (${kind}), so I'm not going ahead without it. The card is above.`,
296
+ chose: (who, label, at) => `✔ ${who} chose *${label}* · ${at}`,
297
+ answered: (who, words, at) => `✔ ${who} answered: “${words}” · ${at}`,
298
+ answeredInThread: (at) => `✔ Answered in thread · ${at}`,
299
+ parked: (id) => `⏸ Parked — no answer, so I'm not going ahead. Answer from "Waiting on you" to reopen it. · ${id}`,
300
+ closed: (reason, at) => `✓ Closed — ${reason} · ${at}`,
301
+ skipped: (who, at) => `⤼ ${who} skipped this · ${at}`,
302
+ theOwner: 'The owner',
303
+ defaultNoAnswerOpen: (when) => `No answer by ${when} — still open.`,
304
+ defaultNoAnswer: (when, verb, label) => `No answer by ${when}, so ${verb} "${label}".`,
305
+ defaultVerb: (name, settled) => (settled ? `${name ?? 'I'} went with` : name ? `${name} will go with` : "I'll go with"),
306
+ };
307
+ const ZH = {
308
+ remindButton: '明天再问',
309
+ skipButton: '不用了',
310
+ details: '详情',
311
+ requestedBy: '谁提的',
312
+ ownerLastSaid: '你上次说',
313
+ runtimeChanges: '会带来的变化',
314
+ mergeRuntimeChanges: '合并后会',
315
+ remindingAt: (when) => `⏰ ${when} 再提醒你。`,
316
+ declineDefault: (when, label) => `你回答之前什么都不会生效。${when} 前没回答:${label}。`,
317
+ heldDefault: (when, label) => `没有你的同意什么都不会发生。${when} 前没回答就按「${label}」。`,
318
+ sensitive: (kind) => `这件事需要你同意(${SENSITIVE_ZH[kind] ?? kind}),没有答复我不会继续。`,
319
+ waitHold: '点一个选项,或在这个帖子里回复——你回答之前我先不动。',
320
+ goWithDefault: (when, label) => `${when} 前没回答,我就按「${label}」。`,
321
+ waitReminder: (at, q) => `${at}还在等你回复:「${q}」——点上面卡片里的选项,或直接在这里回复。`,
322
+ waitReminderMany: (at, n) => `${at}这个帖子里还有 ${n} 个问题在等你回复——点上面卡片里的选项,或直接在这里回复。`,
323
+ remindNow: (at, q) => `${at}提醒一下:「${q}」——点上面卡片里的选项,或直接在这里回复。`,
324
+ sensitiveReask: (at, q, kind) => `${at}还需要你确认:「${q}」——这件事需要你同意(${SENSITIVE_ZH[kind] ?? kind}),没有答复我不会继续。卡片在上面。`,
325
+ chose: (who, label, at) => `✔ ${who} 选了 *${label}* · ${at}`,
326
+ answered: (who, words, at) => `✔ ${who} 回复:“${words}” · ${at}`,
327
+ answeredInThread: (at) => `✔ 已在帖子里回复 · ${at}`,
328
+ parked: (id) => `⏸ 没有答复,先不做。在「等你处理」里回答可以重新打开。 · ${id}`,
329
+ closed: (reason, at) => `✓ 已关闭——${reason} · ${at}`,
330
+ skipped: (who, at) => `⤼ ${who} 跳过了 · ${at}`,
331
+ theOwner: '你',
332
+ defaultNoAnswerOpen: (when) => `${when} 前没有回答——还开着。`,
333
+ defaultNoAnswer: (when, verb, label) => `${when} 前没有回答,所以${verb}「${label}」。`,
334
+ defaultVerb: (name, settled) => (settled ? `${name ?? '我'}按了` : `${name ?? '我'}会按`),
335
+ };
336
+ /**
337
+ * The harness's card text in a language.
338
+ *
339
+ * @param lang - Owner language (absent = English)
340
+ * @returns Strings
341
+ */
342
+ export function cardText(lang) {
343
+ return lang === 'zh' ? ZH : EN;
344
+ }
345
+ const DAYS_ZH = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
346
+ /**
347
+ * Short local time in Chinese: "14:05" today, "明天 12:00", else "10月2日 周四 12:00".
348
+ *
349
+ * @param at - Moment
350
+ * @param now - Clock
351
+ * @returns Text
352
+ */
353
+ export function formatWhenZh(at, now = new Date()) {
354
+ const hm = `${String(at.getHours()).padStart(2, '0')}:${String(at.getMinutes()).padStart(2, '0')}`;
355
+ const day = (d) => `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;
356
+ if (day(at) === day(now))
357
+ return hm;
358
+ const tomorrow = new Date(now.getTime());
359
+ tomorrow.setDate(tomorrow.getDate() + 1);
360
+ if (day(at) === day(tomorrow))
361
+ return `明天 ${hm}`;
362
+ return `${at.getMonth() + 1}月${at.getDate()}日 ${DAYS_ZH[at.getDay()]} ${hm}`;
363
+ }
364
+ /**
365
+ * The context lines of a card (who asked, what the owner said last, what
366
+ * changes), as mrkdwn — null when there is no context.
367
+ *
368
+ * @param context - Card context
369
+ * @param lang - Owner language
370
+ * @param merge - Merge card ("What merging changes")
371
+ * @returns mrkdwn, or null
372
+ */
373
+ export function contextSection(context, lang, merge = false) {
374
+ if (!context)
375
+ return null;
376
+ const t = cardText(lang);
377
+ const sep = lang === 'zh' ? ':' : ': ';
378
+ const lines = [];
379
+ if (context.requestedBy)
380
+ lines.push(`*${t.requestedBy}*${sep}${context.requestedBy}`);
381
+ if (context.ownerLastSaid)
382
+ lines.push(`*${t.ownerLastSaid}*${sep}“${context.ownerLastSaid.replace(/^[“"「]+|[”"」]+$/gu, '')}”`);
383
+ if (context.runtimeChanges)
384
+ lines.push(`*${merge ? t.mergeRuntimeChanges : t.runtimeChanges}*${sep}${context.runtimeChanges}`);
385
+ return lines.length ? lines.join('\n') : null;
386
+ }
387
+ /**
388
+ * The short details line (PR link / references), or null.
389
+ *
390
+ * @param d - Decision context + stripped refs
391
+ * @param lang - Owner language
392
+ * @returns mrkdwn, or null
393
+ */
394
+ export function detailsLine(d, lang) {
395
+ const refs = [...(d.context?.link ? [d.context.link] : []), ...(d.details ?? [])];
396
+ const unique = refs.filter((r, i) => refs.indexOf(r) === i);
397
+ // A link already names the PR: drop a bare "PR #n" it contains.
398
+ const shown = unique.filter((r) => {
399
+ const n = /^PR #(\d+)$/.exec(r)?.[1];
400
+ return !n || !unique.some((o) => o !== r && new RegExp(`/pull/${n}\\b`).test(o));
401
+ });
402
+ if (shown.length === 0)
403
+ return null;
404
+ return `${cardText(lang).details}${lang === 'zh' ? ':' : ': '}${shown.slice(0, W.DETAILS_MAX_REFS).join(' · ')}`;
405
+ }
406
+ //# sourceMappingURL=decision-wording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-wording.js","sourceRoot":"","sources":["../../../../../../backend/src/services/decisions/decision-wording.ts"],"names":[],"mappings":"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"}