crewly 1.20.194 → 1.20.196

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 (791) hide show
  1. package/config/constants.ts +68 -0
  2. package/config/hooks/agent-status/report.sh +31 -12
  3. package/config/hooks/subagent-guard/subagent.sh +25 -1
  4. package/config/roles/auditor/prompt.md +2 -2
  5. package/config/roles/orchestrator/fragments/communication.md +1 -1
  6. package/config/roles/orchestrator/fragments/lifecycle.md +1 -1
  7. package/config/roles/orchestrator/prompt.md +18 -508
  8. package/config/skills/_common/lib.sh +28 -5
  9. package/config/skills/_common/lib.test.sh +32 -1
  10. package/config/skills/agent/computer-use/SKILL.md +6 -0
  11. package/config/skills/agent/core/create-intent-tasks/execute.sh +2 -0
  12. package/config/skills/agent/core/decompose-intent/execute.sh +2 -0
  13. package/config/skills/agent/core/experiment-card/SKILL.md +38 -5
  14. package/config/skills/agent/core/experiment-card/execute.sh +40 -4
  15. package/config/skills/agent/core/experiment-card/execute.test.sh +17 -0
  16. package/config/skills/agent/core/project-tickets/SKILL.md +35 -2
  17. package/config/skills/agent/core/project-tickets/execute.sh +59 -6
  18. package/config/skills/agent/core/project-tickets/execute.test.sh +24 -0
  19. package/config/skills/agent/core/send-message/execute.sh +16 -0
  20. package/config/skills/agent/core/send-message/execute.test.sh +10 -0
  21. package/config/skills/agent/core/trace-read/SKILL.md +117 -0
  22. package/config/skills/agent/core/trace-read/execute.sh +116 -0
  23. package/config/skills/agent/core/update-intent-task/execute.sh +2 -0
  24. package/config/skills/agent/desktop-app-control/execute.sh +5 -2
  25. package/config/skills/agent/marketing/submit-for-approval/execute.sh +3 -2
  26. package/config/skills/orchestrator/decompose-mission/execute.sh +2 -0
  27. package/config/skills/orchestrator/decompose-okr/execute.sh +1 -0
  28. package/config/skills/orchestrator/design-team/execute.sh +2 -0
  29. package/config/skills/orchestrator/measure-kr/execute.sh +2 -0
  30. package/config/skills/orchestrator/review-mission/execute.sh +2 -0
  31. package/config/skills/orchestrator/send-message/execute.sh +27 -2
  32. package/config/skills/orchestrator/send-message/execute.test.sh +89 -0
  33. package/config/skills/registry.json +6 -5
  34. package/config/skills/team-leader/design-checklist/execute.sh +2 -0
  35. package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
  36. package/config/skills/team-leader/signal-digest/execute.sh +173 -0
  37. package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
  38. package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
  39. package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
  40. package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
  41. package/dist/backend/backend/src/constants.d.ts +356 -5
  42. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  43. package/dist/backend/backend/src/constants.js +341 -8
  44. package/dist/backend/backend/src/constants.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +9 -3
  46. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  47. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +38 -5
  48. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  49. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts +4 -9
  50. package/dist/backend/backend/src/controllers/approvals/approvals.controller.d.ts.map +1 -1
  51. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js +6 -14
  52. package/dist/backend/backend/src/controllers/approvals/approvals.controller.js.map +1 -1
  53. package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts +64 -0
  54. package/dist/backend/backend/src/controllers/auth/owner-session.controller.d.ts.map +1 -0
  55. package/dist/backend/backend/src/controllers/auth/owner-session.controller.js +164 -0
  56. package/dist/backend/backend/src/controllers/auth/owner-session.controller.js.map +1 -0
  57. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  58. package/dist/backend/backend/src/controllers/browser/browser.routes.js +18 -5
  59. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  60. package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/canva/canva.routes.js +8 -1
  62. package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
  63. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/chat/chat.controller.js +16 -1
  65. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  67. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +3 -1
  68. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  69. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts.map +1 -1
  70. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +3 -5
  71. package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js.map +1 -1
  72. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -2
  73. package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
  74. package/dist/backend/backend/src/controllers/connector/connector.controller.js +17 -2
  75. package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
  76. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -1
  77. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +2 -3
  78. package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -1
  79. package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts +4 -2
  80. package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts.map +1 -1
  81. package/dist/backend/backend/src/controllers/decisions/decisions.controller.js +31 -20
  82. package/dist/backend/backend/src/controllers/decisions/decisions.controller.js.map +1 -1
  83. package/dist/backend/backend/src/controllers/desktop/desktop.controller.d.ts.map +1 -1
  84. package/dist/backend/backend/src/controllers/desktop/desktop.controller.js +16 -0
  85. package/dist/backend/backend/src/controllers/desktop/desktop.controller.js.map +1 -1
  86. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  87. package/dist/backend/backend/src/controllers/google/google.controller.js +9 -5
  88. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  89. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  90. package/dist/backend/backend/src/controllers/google/google.routes.js +16 -3
  91. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  92. package/dist/backend/backend/src/controllers/harness/harness.controller.d.ts.map +1 -1
  93. package/dist/backend/backend/src/controllers/harness/harness.controller.js +3 -5
  94. package/dist/backend/backend/src/controllers/harness/harness.controller.js.map +1 -1
  95. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
  96. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  97. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
  98. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  99. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
  100. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +8 -1
  101. package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
  102. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +1 -1
  103. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  104. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  105. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
  106. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  107. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.d.ts.map +1 -1
  108. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js +3 -5
  109. package/dist/backend/backend/src/controllers/owner-receipt/owner-receipt.controller.js.map +1 -1
  110. package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -1
  111. package/dist/backend/backend/src/controllers/people/people.routes.js +3 -5
  112. package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -1
  113. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +35 -2
  114. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
  115. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +138 -4
  116. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
  117. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +2 -0
  118. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
  119. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +7 -1
  120. package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
  121. package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -1
  122. package/dist/backend/backend/src/controllers/request/open-items.controller.js +2 -4
  123. package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
  124. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  125. package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
  126. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  127. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
  128. package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
  129. package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
  130. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
  131. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
  132. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
  133. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
  134. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  135. package/dist/backend/backend/src/controllers/slack/slack.controller.js +9 -0
  136. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  137. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
  138. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +11 -0
  139. package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
  140. package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts +6 -4
  141. package/dist/backend/backend/src/controllers/system/system-control.controller.d.ts.map +1 -1
  142. package/dist/backend/backend/src/controllers/system/system-control.controller.js +20 -13
  143. package/dist/backend/backend/src/controllers/system/system-control.controller.js.map +1 -1
  144. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  145. package/dist/backend/backend/src/controllers/team/team.controller.js +14 -7
  146. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  147. package/dist/backend/backend/src/controllers/tickets/tickets.controller.d.ts.map +1 -1
  148. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js +5 -7
  149. package/dist/backend/backend/src/controllers/tickets/tickets.controller.js.map +1 -1
  150. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +73 -0
  151. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
  152. package/dist/backend/backend/src/controllers/trace/trace.controller.js +437 -0
  153. package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
  154. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts +3 -3
  155. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.d.ts.map +1 -1
  156. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js +4 -2
  157. package/dist/backend/backend/src/controllers/whatsapp/whatsapp-inbox.controller.js.map +1 -1
  158. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.d.ts.map +1 -1
  159. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js +10 -2
  160. package/dist/backend/backend/src/controllers/whatsapp/whatsapp.controller.js.map +1 -1
  161. package/dist/backend/backend/src/index.d.ts +34 -0
  162. package/dist/backend/backend/src/index.d.ts.map +1 -1
  163. package/dist/backend/backend/src/index.js +342 -61
  164. package/dist/backend/backend/src/index.js.map +1 -1
  165. package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts +31 -0
  166. package/dist/backend/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
  167. package/dist/backend/backend/src/middleware/agent-origin-correction.js +31 -0
  168. package/dist/backend/backend/src/middleware/agent-origin-correction.js.map +1 -0
  169. package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts +6 -0
  170. package/dist/backend/backend/src/middleware/agent-origin.middleware.d.ts.map +1 -1
  171. package/dist/backend/backend/src/middleware/agent-origin.middleware.js +4 -1
  172. package/dist/backend/backend/src/middleware/agent-origin.middleware.js.map +1 -1
  173. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +20 -17
  174. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -1
  175. package/dist/backend/backend/src/middleware/api-token.middleware.js +27 -37
  176. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -1
  177. package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts +213 -0
  178. package/dist/backend/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
  179. package/dist/backend/backend/src/middleware/caller-identity.middleware.js +481 -0
  180. package/dist/backend/backend/src/middleware/caller-identity.middleware.js.map +1 -0
  181. package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts +67 -0
  182. package/dist/backend/backend/src/middleware/caller-identity.testing.d.ts.map +1 -0
  183. package/dist/backend/backend/src/middleware/caller-identity.testing.js +108 -0
  184. package/dist/backend/backend/src/middleware/caller-identity.testing.js.map +1 -0
  185. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  186. package/dist/backend/backend/src/routes/api.routes.js +11 -0
  187. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  188. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/agent/agent-registration.service.js +17 -2
  190. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
  192. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +19 -10
  194. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
  197. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  198. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  199. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/agent/restore-filter.d.ts +5 -2
  201. package/dist/backend/backend/src/services/agent/restore-filter.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/agent/restore-filter.js +5 -2
  203. package/dist/backend/backend/src/services/agent/restore-filter.js.map +1 -1
  204. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
  206. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  207. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
  208. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
  210. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  211. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  212. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
  214. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  215. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  216. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  217. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  219. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  220. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  221. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
  223. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  224. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
  225. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/chat/chat.service.d.ts +175 -2
  227. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  228. package/dist/backend/backend/src/services/chat/chat.service.js +444 -35
  229. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  230. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
  231. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  232. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
  233. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  234. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  235. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  237. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
  239. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
  241. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  242. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
  243. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  244. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
  245. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  246. package/dist/backend/backend/src/services/chat-v2/types.d.ts +0 -1
  247. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  248. package/dist/backend/backend/src/services/chat-v2/types.js +0 -1
  249. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  250. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  251. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
  252. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  253. package/dist/backend/backend/src/services/core/api-token.service.d.ts +28 -0
  254. package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -1
  255. package/dist/backend/backend/src/services/core/api-token.service.js +46 -0
  256. package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -1
  257. package/dist/backend/backend/src/services/core/dashboard-build.d.ts +49 -0
  258. package/dist/backend/backend/src/services/core/dashboard-build.d.ts.map +1 -0
  259. package/dist/backend/backend/src/services/core/dashboard-build.js +68 -0
  260. package/dist/backend/backend/src/services/core/dashboard-build.js.map +1 -0
  261. package/dist/backend/backend/src/services/core/owner-auth.service.d.ts +127 -0
  262. package/dist/backend/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
  263. package/dist/backend/backend/src/services/core/owner-auth.service.js +205 -0
  264. package/dist/backend/backend/src/services/core/owner-auth.service.js.map +1 -0
  265. package/dist/backend/backend/src/services/core/peer-process.service.d.ts +168 -0
  266. package/dist/backend/backend/src/services/core/peer-process.service.d.ts.map +1 -0
  267. package/dist/backend/backend/src/services/core/peer-process.service.js +352 -0
  268. package/dist/backend/backend/src/services/core/peer-process.service.js.map +1 -0
  269. package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  270. package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
  271. package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
  272. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
  273. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  274. package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
  275. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  276. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +1 -1
  277. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +2 -2
  278. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -1
  279. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +149 -4
  280. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
  281. package/dist/backend/backend/src/services/experiments/experiment.service.js +549 -24
  282. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
  283. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +20 -5
  284. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
  285. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +46 -9
  286. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -1
  287. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +7 -0
  288. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -1
  289. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +21 -1
  290. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -1
  291. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  293. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  294. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
  295. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +2 -1
  296. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
  297. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
  298. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  299. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +0 -18
  300. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  301. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
  302. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  303. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +41 -5
  304. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  305. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
  306. package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
  307. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +391 -0
  308. package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
  309. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +35 -1
  310. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
  311. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +138 -2
  312. package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
  313. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
  314. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
  315. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
  316. package/dist/backend/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
  317. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts +82 -0
  318. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.d.ts.map +1 -0
  319. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js +141 -0
  320. package/dist/backend/backend/src/services/monitoring/deferred-idle-settle.js.map +1 -0
  321. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts +51 -1
  322. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
  323. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +118 -2
  324. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
  325. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  326. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  327. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
  328. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  329. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts +103 -0
  330. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.d.ts.map +1 -0
  331. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js +86 -0
  332. package/dist/backend/backend/src/services/monitoring/transcript-cost-repair.js.map +1 -0
  333. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +57 -0
  334. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  335. package/dist/backend/backend/src/services/open-items/open-items.service.js +100 -4
  336. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  337. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  338. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +10 -2
  339. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  340. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  341. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
  342. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  343. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
  344. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +13 -0
  345. package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
  346. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
  347. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  348. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +44 -3
  349. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  350. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.d.ts.map +1 -1
  351. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js +2 -1
  352. package/dist/backend/backend/src/services/project-tickets/ticket-assignee-waker.js.map +1 -1
  353. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  354. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +3 -0
  355. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  356. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts +156 -0
  357. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.d.ts.map +1 -0
  358. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js +308 -0
  359. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-retro.js.map +1 -0
  360. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts +212 -0
  361. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -0
  362. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +515 -0
  363. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -0
  364. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts +186 -0
  365. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts.map +1 -0
  366. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js +341 -0
  367. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js.map +1 -0
  368. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +309 -0
  369. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  370. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +726 -1
  371. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  372. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  373. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
  374. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  375. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
  376. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  377. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
  378. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  379. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts +61 -3
  380. package/dist/backend/backend/src/services/restart/interrupted-turns.d.ts.map +1 -1
  381. package/dist/backend/backend/src/services/restart/interrupted-turns.js +106 -9
  382. package/dist/backend/backend/src/services/restart/interrupted-turns.js.map +1 -1
  383. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts +22 -0
  384. package/dist/backend/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
  385. package/dist/backend/backend/src/services/restart/restart-drain.service.js +37 -5
  386. package/dist/backend/backend/src/services/restart/restart-drain.service.js.map +1 -1
  387. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts +62 -0
  388. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.d.ts.map +1 -0
  389. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js +126 -0
  390. package/dist/backend/backend/src/services/restart/supervisor-stop-budget.js.map +1 -0
  391. package/dist/backend/backend/src/services/restart/turn-probe.d.ts +17 -2
  392. package/dist/backend/backend/src/services/restart/turn-probe.d.ts.map +1 -1
  393. package/dist/backend/backend/src/services/restart/turn-probe.js +29 -4
  394. package/dist/backend/backend/src/services/restart/turn-probe.js.map +1 -1
  395. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  396. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +4 -0
  397. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  398. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  399. package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
  400. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  401. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
  402. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
  403. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
  404. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
  405. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
  406. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
  407. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
  408. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
  409. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
  410. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
  411. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
  412. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
  413. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
  414. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
  415. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
  416. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
  417. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
  418. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
  419. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
  420. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
  421. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
  422. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  423. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
  424. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  425. package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
  426. package/dist/backend/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
  427. package/dist/backend/backend/src/services/slack/slack-auto-working.service.js +66 -3
  428. package/dist/backend/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
  429. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  430. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  431. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  432. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  433. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
  434. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  435. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
  436. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  437. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +200 -41
  438. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  439. package/dist/backend/backend/src/services/slack/slack.service.d.ts +43 -1
  440. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  441. package/dist/backend/backend/src/services/slack/slack.service.js +76 -7
  442. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  443. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
  444. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
  445. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  446. package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
  447. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  448. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  449. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
  450. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  451. package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts +99 -0
  452. package/dist/backend/backend/src/services/trace/trace-analysis.service.d.ts.map +1 -0
  453. package/dist/backend/backend/src/services/trace/trace-analysis.service.js +148 -0
  454. package/dist/backend/backend/src/services/trace/trace-analysis.service.js.map +1 -0
  455. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +212 -0
  456. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  457. package/dist/backend/backend/src/services/trace/trace-context.service.js +489 -0
  458. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
  459. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +46 -0
  460. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
  461. package/dist/backend/backend/src/services/trace/trace-http.middleware.js +176 -0
  462. package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
  463. package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
  464. package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  465. package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
  466. package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
  467. package/dist/backend/backend/src/services/trace/trace-metrics.d.ts +262 -0
  468. package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -0
  469. package/dist/backend/backend/src/services/trace/trace-metrics.js +810 -0
  470. package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -0
  471. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +338 -0
  472. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  473. package/dist/backend/backend/src/services/trace/trace-recorder.js +789 -0
  474. package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
  475. package/dist/backend/backend/src/services/trace/trace-store.d.ts +308 -0
  476. package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
  477. package/dist/backend/backend/src/services/trace/trace-store.js +714 -0
  478. package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
  479. package/dist/backend/backend/src/services/trace/trace-summary.d.ts +77 -0
  480. package/dist/backend/backend/src/services/trace/trace-summary.d.ts.map +1 -0
  481. package/dist/backend/backend/src/services/trace/trace-summary.js +239 -0
  482. package/dist/backend/backend/src/services/trace/trace-summary.js.map +1 -0
  483. package/dist/backend/backend/src/services/trace/trace-timeline.d.ts +74 -0
  484. package/dist/backend/backend/src/services/trace/trace-timeline.d.ts.map +1 -0
  485. package/dist/backend/backend/src/services/trace/trace-timeline.js +162 -0
  486. package/dist/backend/backend/src/services/trace/trace-timeline.js.map +1 -0
  487. package/dist/backend/backend/src/services/trace/trace.types.d.ts +137 -0
  488. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
  489. package/dist/backend/backend/src/services/trace/trace.types.js +104 -0
  490. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
  491. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts +80 -0
  492. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.d.ts.map +1 -0
  493. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js +184 -0
  494. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt-format-ask.js.map +1 -0
  495. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
  496. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
  497. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts +7 -0
  498. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.d.ts.map +1 -1
  499. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js +16 -0
  500. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.service.js.map +1 -1
  501. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts +16 -0
  502. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.d.ts.map +1 -1
  503. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.types.js.map +1 -1
  504. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  505. package/dist/backend/backend/src/services/v3/request.service.js +4 -0
  506. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  507. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  508. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +2 -1
  509. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  510. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +8 -0
  511. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  512. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +46 -4
  513. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  514. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts +4 -3
  515. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.d.ts.map +1 -1
  516. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js +3 -2
  517. package/dist/backend/backend/src/services/whatsapp/whatsapp-draft-gate.js.map +1 -1
  518. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  519. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  520. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  521. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  522. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
  523. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  524. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  525. package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
  526. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  527. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.d.ts.map +1 -1
  528. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js +2 -1
  529. package/dist/backend/backend/src/services/worktree/workitem-worktree.subscriber.js.map +1 -1
  530. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  531. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  532. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
  533. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  534. package/dist/backend/backend/src/types/decision.types.d.ts +3 -1
  535. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  536. package/dist/backend/backend/src/types/experiment.types.d.ts +65 -6
  537. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
  538. package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
  539. package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
  540. package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
  541. package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
  542. package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
  543. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +9 -0
  544. package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  545. package/dist/backend/backend/src/types/ticket-autopilot.types.js +14 -0
  546. package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
  547. package/dist/backend/backend/src/types/v2/open-item.types.d.ts +4 -0
  548. package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  549. package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
  550. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  551. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  552. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +5 -1
  553. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  554. package/dist/backend/backend/src/types/v2/work-item.types.js +2 -0
  555. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  556. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts +44 -37
  557. package/dist/backend/backend/src/utils/agent-caller.utils.d.ts.map +1 -1
  558. package/dist/backend/backend/src/utils/agent-caller.utils.js +48 -42
  559. package/dist/backend/backend/src/utils/agent-caller.utils.js.map +1 -1
  560. package/dist/backend/backend/src/utils/secret-env.d.ts.map +1 -1
  561. package/dist/backend/backend/src/utils/secret-env.js +8 -1
  562. package/dist/backend/backend/src/utils/secret-env.js.map +1 -1
  563. package/dist/backend/backend/src/utils/security.d.ts +2 -0
  564. package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
  565. package/dist/backend/backend/src/utils/security.js +3 -1
  566. package/dist/backend/backend/src/utils/security.js.map +1 -1
  567. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
  568. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  569. package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
  570. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  571. package/dist/backend/build-info.json +2 -2
  572. package/dist/backend/config/constants.d.ts +67 -0
  573. package/dist/backend/config/constants.d.ts.map +1 -1
  574. package/dist/backend/config/constants.js +67 -0
  575. package/dist/backend/config/constants.js.map +1 -1
  576. package/dist/cli/backend/src/constants.d.ts +356 -5
  577. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  578. package/dist/cli/backend/src/constants.js +341 -8
  579. package/dist/cli/backend/src/constants.js.map +1 -1
  580. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  581. package/dist/cli/backend/src/services/agent/agent-registration.service.js +17 -2
  582. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  583. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +7 -5
  584. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  585. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +19 -10
  586. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  587. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  588. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +10 -1
  589. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  590. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  591. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  592. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  593. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +4 -0
  594. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  595. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +29 -0
  596. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  597. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +77 -1
  598. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  599. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  600. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  601. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
  602. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  603. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  604. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  605. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  606. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  607. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  608. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  609. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  610. package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
  611. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  612. package/dist/cli/backend/src/services/chat/chat.service.d.ts +282 -0
  613. package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
  614. package/dist/cli/backend/src/services/chat/chat.service.js +783 -0
  615. package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
  616. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -5
  617. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  618. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +34 -4
  619. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  620. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  621. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  622. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  623. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  624. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +18 -11
  625. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  626. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +19 -25
  627. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  628. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -4
  629. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  630. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +8 -4
  631. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  632. package/dist/cli/backend/src/services/chat-v2/types.d.ts +0 -1
  633. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -1
  634. package/dist/cli/backend/src/services/chat-v2/types.js +0 -1
  635. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -1
  636. package/dist/cli/backend/src/services/core/api-token.service.d.ts +28 -0
  637. package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -1
  638. package/dist/cli/backend/src/services/core/api-token.service.js +46 -0
  639. package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -1
  640. package/dist/cli/backend/src/services/core/owner-auth.service.d.ts +127 -0
  641. package/dist/cli/backend/src/services/core/owner-auth.service.d.ts.map +1 -0
  642. package/dist/cli/backend/src/services/core/owner-auth.service.js +205 -0
  643. package/dist/cli/backend/src/services/core/owner-auth.service.js.map +1 -0
  644. package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  645. package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
  646. package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
  647. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  648. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  649. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  650. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +0 -8
  651. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  652. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +0 -18
  653. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  654. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts +19 -0
  655. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  656. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js +41 -5
  657. package/dist/cli/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  658. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +184 -0
  659. package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -0
  660. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +391 -0
  661. package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -0
  662. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts +73 -0
  663. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.d.ts.map +1 -0
  664. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js +258 -0
  665. package/dist/cli/backend/src/services/monitoring/claude-transcript-turn.js.map +1 -0
  666. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  667. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  668. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
  669. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  670. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +57 -0
  671. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  672. package/dist/cli/backend/src/services/open-items/open-items.service.js +100 -4
  673. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  674. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +36 -0
  675. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  676. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +44 -3
  677. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  678. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +34 -3
  679. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  680. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +57 -2
  681. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  682. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts +22 -0
  683. package/dist/cli/backend/src/services/restart/restart-drain.service.d.ts.map +1 -1
  684. package/dist/cli/backend/src/services/restart/restart-drain.service.js +37 -5
  685. package/dist/cli/backend/src/services/restart/restart-drain.service.js.map +1 -1
  686. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  687. package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
  688. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  689. package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts +29 -0
  690. package/dist/cli/backend/src/services/slack/slack-auto-working.service.d.ts.map +1 -1
  691. package/dist/cli/backend/src/services/slack/slack-auto-working.service.js +66 -3
  692. package/dist/cli/backend/src/services/slack/slack-auto-working.service.js.map +1 -1
  693. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  694. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  695. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  696. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  697. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +79 -15
  698. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  699. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +200 -41
  700. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  701. package/dist/cli/backend/src/services/slack/slack.service.d.ts +43 -1
  702. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  703. package/dist/cli/backend/src/services/slack/slack.service.js +76 -7
  704. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  705. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  706. package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
  707. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  708. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  709. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
  710. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  711. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +212 -0
  712. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  713. package/dist/cli/backend/src/services/trace/trace-context.service.js +489 -0
  714. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
  715. package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
  716. package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  717. package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
  718. package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
  719. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +338 -0
  720. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  721. package/dist/cli/backend/src/services/trace/trace-recorder.js +789 -0
  722. package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
  723. package/dist/cli/backend/src/services/trace/trace-store.d.ts +308 -0
  724. package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
  725. package/dist/cli/backend/src/services/trace/trace-store.js +714 -0
  726. package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
  727. package/dist/cli/backend/src/services/trace/trace.types.d.ts +137 -0
  728. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
  729. package/dist/cli/backend/src/services/trace/trace.types.js +104 -0
  730. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
  731. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  732. package/dist/cli/backend/src/services/v3/request.service.js +4 -0
  733. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  734. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  735. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  736. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  737. package/dist/cli/backend/src/types/decision.types.d.ts +3 -1
  738. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  739. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +9 -0
  740. package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
  741. package/dist/cli/backend/src/types/ticket-autopilot.types.js +14 -0
  742. package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
  743. package/dist/cli/backend/src/types/v2/open-item.types.d.ts +4 -0
  744. package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
  745. package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
  746. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  747. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  748. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +5 -1
  749. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  750. package/dist/cli/backend/src/types/v2/work-item.types.js +2 -0
  751. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  752. package/dist/cli/backend/src/utils/secret-env.d.ts.map +1 -1
  753. package/dist/cli/backend/src/utils/secret-env.js +8 -1
  754. package/dist/cli/backend/src/utils/secret-env.js.map +1 -1
  755. package/dist/cli/backend/src/utils/security.d.ts +196 -0
  756. package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
  757. package/dist/cli/backend/src/utils/security.js +538 -0
  758. package/dist/cli/backend/src/utils/security.js.map +1 -0
  759. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
  760. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  761. package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
  762. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
  763. package/dist/cli/cli/src/commands/service.d.ts +12 -0
  764. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  765. package/dist/cli/cli/src/commands/service.js +36 -2
  766. package/dist/cli/cli/src/commands/service.js.map +1 -1
  767. package/dist/cli/cli/src/index.js +4 -0
  768. package/dist/cli/cli/src/index.js.map +1 -1
  769. package/dist/cli/cli/src/utils/owner-token-fetch.d.ts +41 -0
  770. package/dist/cli/cli/src/utils/owner-token-fetch.d.ts.map +1 -0
  771. package/dist/cli/cli/src/utils/owner-token-fetch.js +83 -0
  772. package/dist/cli/cli/src/utils/owner-token-fetch.js.map +1 -0
  773. package/dist/cli/cli/src/utils/safe-shutdown.d.ts +13 -3
  774. package/dist/cli/cli/src/utils/safe-shutdown.d.ts.map +1 -1
  775. package/dist/cli/cli/src/utils/safe-shutdown.js +26 -4
  776. package/dist/cli/cli/src/utils/safe-shutdown.js.map +1 -1
  777. package/dist/cli/config/constants.d.ts +67 -0
  778. package/dist/cli/config/constants.d.ts.map +1 -1
  779. package/dist/cli/config/constants.js +67 -0
  780. package/dist/cli/config/constants.js.map +1 -1
  781. package/frontend/dist/assets/index-bfa0e2e8.css +42 -0
  782. package/frontend/dist/assets/{index-800118ca.js → index-edfa8e04.js} +285 -285
  783. package/frontend/dist/index.html +2 -2
  784. package/package.json +1 -1
  785. package/packages/crewly-agent/src/runtime/api-client.test.ts +42 -0
  786. package/packages/crewly-agent/src/runtime/api-client.ts +6 -0
  787. package/dist/backend/backend/src/services/v3/request-notification.service.d.ts +0 -52
  788. package/dist/backend/backend/src/services/v3/request-notification.service.d.ts.map +0 -1
  789. package/dist/backend/backend/src/services/v3/request-notification.service.js +0 -161
  790. package/dist/backend/backend/src/services/v3/request-notification.service.js.map +0 -1
  791. package/frontend/dist/assets/index-5e967795.css +0 -42
@@ -0,0 +1,783 @@
1
+ /**
2
+ * Chat Service — facade over ChatV2Service.
3
+ *
4
+ * Phase 6 of the unified-chat-message-store spec
5
+ * (`specs/2026-05-14-unified-chat-message-store.md`):
6
+ * the legacy JSON-file storage at `~/.crewly/chat/` is retired.
7
+ * All chat persistence and read paths now flow through the canonical
8
+ * `ChatV2Service` (SQLite at `~/.crewly/chat.db`). This file remains
9
+ * temporarily as a deprecation shim so the many legacy callers
10
+ * (`chat.controller.ts`, `chat.gateway.ts`, `slack-orchestrator-bridge.ts`,
11
+ * `notify-reconciliation.service.ts`, `message-replay.service.ts`,
12
+ * `index.ts`) continue to compile and run while they are migrated to
13
+ * call ChatV2Service directly. Each facade method translates between
14
+ * the legacy `ChatMessage` / `ChatConversation` DTOs and chat-v2's
15
+ * `ChatMessageDTO` / `ChatChannelDTO` so existing event subscribers
16
+ * (chat.gateway.ts) see the same shapes they always have.
17
+ *
18
+ * @module services/chat/chat.service
19
+ */
20
+ import { EventEmitter } from 'events';
21
+ import { LoggerService } from '../core/logger.service.js';
22
+ /**
23
+ * Default page size for legacy `getMessages` calls without an explicit
24
+ * `filter.limit`. Matches the historical hardcoded value so the change
25
+ * to honor `filter.limit` is a strict superset of the prior behavior.
26
+ */
27
+ const LEGACY_DEFAULT_PAGE_SIZE = 200;
28
+ /**
29
+ * Hard cap on `getMessages` limit, applied after the caller-supplied
30
+ * value. Keeps a buggy/malicious caller from asking chat-v2 to load
31
+ * the entire channel history into a single response. Requests above
32
+ * this are clamped (documented contract), never silently truncated
33
+ * below it: a limit larger than chat-v2's per-page cap
34
+ * (`MessageStore.MAX_LIMIT`, 100) is served by walking several
35
+ * chat-v2 pages.
36
+ */
37
+ const LEGACY_MAX_PAGE_SIZE = 1000;
38
+ /**
39
+ * Upper bound on how many chat-v2 rows a single legacy read may scan.
40
+ *
41
+ * Legacy filters (`senderType`, `contentType`, timestamp `before`/`after`)
42
+ * have no chat-v2 equivalent, so they are applied while walking chat-v2
43
+ * pages until `limit` matches are found or the channel is exhausted. This
44
+ * bound stops a sparse filter on a huge channel from turning one HTTP
45
+ * request into an unbounded table scan; when it is hit the result (or
46
+ * count) is a best-effort subset and a warning is logged.
47
+ */
48
+ const LEGACY_MAX_SCAN_ROWS = 20_000;
49
+ /**
50
+ * Pick the chat-v2 `metadata.source` for a legacy `addAgentMessage`
51
+ * /`addDirectMessage` call. Returns the caller-provided
52
+ * `metadata.source` when it is one of the closed chat-v2 source enum
53
+ * values, otherwise falls back to `defaultSource` (the historical
54
+ * hardcoded value for the call site).
55
+ *
56
+ * @param metadata - Legacy metadata blob (possibly undefined)
57
+ * @param defaultSource - Source to use when metadata has no valid source
58
+ * @returns A chat-v2 `RecordTurnSource` value
59
+ */
60
+ function resolveLegacyRecordSource(metadata, defaultSource) {
61
+ const raw = metadata?.source;
62
+ if (raw === 'web' ||
63
+ raw === 'slack' ||
64
+ raw === 'pty-runtime' ||
65
+ raw === 'in-process-runtime' ||
66
+ raw === 'reply-tool' ||
67
+ raw === 'system') {
68
+ return raw;
69
+ }
70
+ return defaultSource;
71
+ }
72
+ import { getChatV2Service } from '../chat-v2/chat-v2.singleton.js';
73
+ import { ChatError, CHAT_ERROR_CODES } from '../chat-v2/types.js';
74
+ import { MessageStore, encodeCursor } from '../chat-v2/sqlite/message.store.js';
75
+ import { SYSTEM_PRINCIPAL, senderToV2, v2MessageToLegacy, v2ChannelToLegacy, inferSourceFromLegacyMetadata, synthesizeSlackConversationId, } from '../chat-v2/legacy-dto.utils.js';
76
+ /**
77
+ * Whether an error is chat-v2's "channel not found" (404) error.
78
+ *
79
+ * The legacy façade contract maps a missing conversation to either a
80
+ * `ConversationNotFoundError` (mutations) or an empty result (reads);
81
+ * this predicate lets each method translate chat-v2's typed error.
82
+ *
83
+ * @param err - Any thrown value
84
+ * @returns True when `err` is a `ChatError` with code `channel_not_found`
85
+ */
86
+ function isChannelNotFound(err) {
87
+ return err instanceof ChatError && err.code === CHAT_ERROR_CODES.CHANNEL_NOT_FOUND;
88
+ }
89
+ /**
90
+ * Whether a message lies strictly before (is older than) an anchor.
91
+ *
92
+ * @param dto - chat-v2 DTO (supplies `seq`)
93
+ * @param legacy - The same message in legacy shape (supplies `timestamp`)
94
+ * @param anchor - Resolved boundary
95
+ * @returns True when the message is older than the anchor
96
+ */
97
+ function isOlderThanAnchor(dto, legacy, anchor) {
98
+ return anchor.kind === 'seq' ? dto.seq < anchor.seq : legacy.timestamp < anchor.value;
99
+ }
100
+ /**
101
+ * Whether a message lies strictly after (is newer than) an anchor.
102
+ *
103
+ * @param dto - chat-v2 DTO (supplies `seq`)
104
+ * @param legacy - The same message in legacy shape (supplies `timestamp`)
105
+ * @param anchor - Resolved boundary
106
+ * @returns True when the message is newer than the anchor
107
+ */
108
+ function isNewerThanAnchor(dto, legacy, anchor) {
109
+ return anchor.kind === 'seq' ? dto.seq > anchor.seq : legacy.timestamp > anchor.value;
110
+ }
111
+ /**
112
+ * Apply the legacy per-message content filters (`senderType`,
113
+ * `contentType`) that the original JSON-backed ChatService honored.
114
+ * The `before` / `after` window is enforced by the paging walk itself.
115
+ *
116
+ * @param message - Legacy message to test
117
+ * @param filter - Legacy message filter
118
+ * @returns True when the message matches every supplied content filter
119
+ */
120
+ function matchesLegacyContentFilters(message, filter) {
121
+ return ((!filter.senderType || message.from.type === filter.senderType) &&
122
+ (!filter.contentType || message.contentType === filter.contentType));
123
+ }
124
+ /**
125
+ * Resolve a legacy `filter.limit` to the effective page size: positive
126
+ * finite values are honored (floored), anything else falls back to
127
+ * {@link LEGACY_DEFAULT_PAGE_SIZE}, and the result is clamped to
128
+ * {@link LEGACY_MAX_PAGE_SIZE}.
129
+ *
130
+ * @param raw - Caller-supplied limit (possibly undefined / NaN / <= 0)
131
+ * @returns The limit to serve
132
+ */
133
+ function resolveLegacyLimit(raw) {
134
+ const requested = typeof raw === 'number' && Number.isFinite(raw) && raw > 0
135
+ ? Math.floor(raw)
136
+ : LEGACY_DEFAULT_PAGE_SIZE;
137
+ return Math.min(requested, LEGACY_MAX_PAGE_SIZE);
138
+ }
139
+ /**
140
+ * Resolve a legacy `filter.offset` to a non-negative integer, or null
141
+ * when the caller did not request offset pagination.
142
+ *
143
+ * @param raw - Caller-supplied offset
144
+ * @returns The offset, or null for the default newest-tail read
145
+ */
146
+ function resolveLegacyOffset(raw) {
147
+ if (typeof raw !== 'number' || !Number.isFinite(raw))
148
+ return null;
149
+ return Math.max(0, Math.floor(raw));
150
+ }
151
+ /**
152
+ * Whether a legacy message filter narrows beyond the conversation id.
153
+ *
154
+ * @param filter - Legacy message filter
155
+ * @returns True when any of senderType/contentType/after/before is set
156
+ */
157
+ function hasLegacyMessageFilters(filter) {
158
+ return Boolean(filter.senderType || filter.contentType || filter.after || filter.before);
159
+ }
160
+ // =============================================================================
161
+ // Error classes — preserved for callers that catch them by name
162
+ // =============================================================================
163
+ export class ConversationNotFoundError extends Error {
164
+ conversationId;
165
+ constructor(conversationId) {
166
+ super(`Conversation not found: ${conversationId}`);
167
+ this.conversationId = conversationId;
168
+ this.name = 'ConversationNotFoundError';
169
+ }
170
+ }
171
+ export class MessageValidationError extends Error {
172
+ constructor(message) {
173
+ super(message);
174
+ this.name = 'MessageValidationError';
175
+ }
176
+ }
177
+ // =============================================================================
178
+ // ChatService facade
179
+ // =============================================================================
180
+ /**
181
+ * Deprecated façade over ChatV2Service.
182
+ *
183
+ * Preserves the public surface of the original `ChatService` so the
184
+ * remaining legacy callers compile unchanged. Internally every method
185
+ * delegates to `ChatV2Service`. The original ~/.crewly/chat/*.json
186
+ * storage layer has been removed.
187
+ *
188
+ * New code MUST NOT depend on this class; call `getChatV2Service()`
189
+ * directly. Phase 6c of the spec deletes this file once all callers
190
+ * are migrated.
191
+ */
192
+ export class ChatService extends EventEmitter {
193
+ logger;
194
+ chatV2;
195
+ constructor(_options) {
196
+ super();
197
+ this.logger = LoggerService.getInstance().createComponentLogger('ChatService');
198
+ this.chatV2 = getChatV2Service();
199
+ }
200
+ // ---------------------------------------------------------------------------
201
+ // Lifecycle (no-ops — chat-v2 manages its own DB lifecycle)
202
+ // ---------------------------------------------------------------------------
203
+ async initialize() {
204
+ // chat-v2 lazy-initializes on first access; nothing to do.
205
+ }
206
+ isInitialized() {
207
+ return true;
208
+ }
209
+ // ---------------------------------------------------------------------------
210
+ // Writes
211
+ // ---------------------------------------------------------------------------
212
+ /**
213
+ * Send a user message. Idempotency via legacy callers' own
214
+ * metadata.clientMessageId when present.
215
+ */
216
+ async sendMessage(input) {
217
+ const conversationId = input.conversationId ?? this.synthesizeConversationId(input);
218
+ const channel = this.chatV2.ensureChannelForLegacyConversation({
219
+ conversationId,
220
+ agentSession: 'crewly-orc',
221
+ });
222
+ const senderId = (typeof input.metadata?.userId === 'string' && input.metadata.userId) || 'user';
223
+ const { message } = this.chatV2.recordTurn({
224
+ channelId: channel.id,
225
+ senderType: 'user',
226
+ senderId,
227
+ content: input.content,
228
+ clientMessageId: typeof input.metadata?.clientMessageId === 'string'
229
+ ? input.metadata.clientMessageId
230
+ : undefined,
231
+ // Source resolution here is intentionally STRICTER than
232
+ // `recordViaFacade` (which uses `resolveLegacyRecordSource`).
233
+ // `sendMessage` always writes `senderType: 'user'`, so the only
234
+ // legitimate sources are 'web' or 'slack'. Caller-supplied values
235
+ // like 'reply-tool' or 'pty-runtime' are agent-reply tags and
236
+ // would be nonsensical on a user-authored row — `inferSource…`
237
+ // downgrades them to 'system' on purpose. Phase 6α follow-up #5.
238
+ metadata: {
239
+ ...(input.metadata ?? {}),
240
+ source: inferSourceFromLegacyMetadata(input.metadata),
241
+ },
242
+ });
243
+ const conversation = v2ChannelToLegacy(channel, this.chatV2.countChannelMessages(channel.id, SYSTEM_PRINCIPAL));
244
+ const legacyMessage = v2MessageToLegacy(message);
245
+ // Phase 6α follow-up #6: chat-v2 already emits 'chat_message' for
246
+ // every fresh recordTurn write (chat-v2.service.ts:936/1063). The
247
+ // chat.gateway WebSocket subscriber listens on the chat-v2
248
+ // EventEmitter directly, so a second emit here would double-broadcast
249
+ // to every connected client. The 'conversation_updated' event has no
250
+ // chat-v2 equivalent yet, so we keep emitting that one until chat-v2
251
+ // grows a channel-touched event.
252
+ this.emitConversationUpdated(conversation);
253
+ return { conversation, message: legacyMessage };
254
+ }
255
+ /**
256
+ * Add an agent reply extracted from raw terminal output. The legacy
257
+ * regex extraction (`[RESPONSE]` / `[CHAT_RESPONSE]` markers) is gone
258
+ * — callers should pass already-clean content. Kept for source
259
+ * compatibility with `chat.gateway.processTerminalOutput`, which has
260
+ * no production callers post Phase 4 discovery.
261
+ */
262
+ async addAgentMessage(conversationId, rawOutput, sender, metadata) {
263
+ // Phase 6α follow-up #5: source defaults to 'pty-runtime' (the
264
+ // historical caller) but the caller can override via
265
+ // `metadata.source` — e.g. an in-process runtime route should tag
266
+ // its replies 'in-process-runtime', not 'pty-runtime'. Falling back
267
+ // through inferSourceFromLegacyMetadata preserves the previous
268
+ // default for callers that don't tag.
269
+ const source = resolveLegacyRecordSource(metadata, 'pty-runtime');
270
+ return this.recordViaFacade(conversationId, rawOutput, sender, metadata, source);
271
+ }
272
+ /**
273
+ * Persist a pre-extracted markdown reply. Primary call site is the
274
+ * PTY `[NOTIFY]` path in `chat.gateway.processNotifyMessage`.
275
+ */
276
+ async addDirectMessage(conversationId, content, sender, metadata) {
277
+ // Phase 6α follow-up #5: see addAgentMessage. Same default + override.
278
+ const source = resolveLegacyRecordSource(metadata, 'pty-runtime');
279
+ return this.recordViaFacade(conversationId, content, sender, metadata, source);
280
+ }
281
+ /**
282
+ * Add a server-side system note (progress markers, errors, etc.).
283
+ */
284
+ async addSystemMessage(conversationId, content, metadata) {
285
+ return this.recordViaFacade(conversationId, content, { type: 'system', id: 'system', name: 'System' }, metadata, 'system');
286
+ }
287
+ async recordViaFacade(conversationId, content, sender, metadata, source) {
288
+ const channel = this.chatV2.ensureChannelForLegacyConversation({
289
+ conversationId,
290
+ agentSession: 'crewly-orc',
291
+ });
292
+ const { type: senderType, id: senderId } = senderToV2(sender);
293
+ const { message } = this.chatV2.recordTurn({
294
+ channelId: channel.id,
295
+ senderType,
296
+ senderId,
297
+ content,
298
+ clientMessageId: typeof metadata?.clientMessageId === 'string' ? metadata.clientMessageId : undefined,
299
+ // `source` AFTER the spread: the resolved source from
300
+ // resolveLegacyRecordSource already incorporated metadata.source
301
+ // (if valid) or fell back to the default. Putting it last
302
+ // guarantees a value from the closed enum lands in the row
303
+ // regardless of what the legacy caller passed.
304
+ metadata: { ...(metadata ?? {}), source },
305
+ });
306
+ const legacyMessage = v2MessageToLegacy(message);
307
+ // Phase 6α follow-up #6: chat-v2 already emits 'chat_message';
308
+ // chat.gateway subscribes to chat-v2 directly. No re-emit here to
309
+ // avoid double-broadcasting to WebSocket clients.
310
+ return legacyMessage;
311
+ }
312
+ // ---------------------------------------------------------------------------
313
+ // Reads
314
+ // ---------------------------------------------------------------------------
315
+ /**
316
+ * Read messages from a conversation with the legacy filter contract.
317
+ *
318
+ * Semantics (matching the original JSON-backed service, issue #1000):
319
+ * - Default (no `offset`): the NEWEST `limit` messages that match every
320
+ * filter, returned oldest → newest. `before` / `after` bound the window
321
+ * exclusively, so `before=<oldest loaded id|timestamp>` yields the
322
+ * `limit` messages immediately preceding that point ("load older"),
323
+ * and `after=<ts>` yields the newest `limit` messages after it (the
324
+ * original service also returned the newest tail when `after` was set,
325
+ * which is what `ChatHighlightsService` relies on).
326
+ * - With `offset`: legacy offset pagination over the matching window,
327
+ * counted from the OLDEST message — skip `offset`, return `limit`.
328
+ *
329
+ * `before` / `after` accept a message id from this conversation (exact
330
+ * seq boundary) or an ISO timestamp (string comparison, legacy).
331
+ *
332
+ * Implementation: walks chat-v2 `listMessages` pages through its cursors
333
+ * (`backward` from the newest message or the `before` id; `forward` for
334
+ * offset reads) and applies the content filters while walking, fetching
335
+ * more pages until `limit` matches are found, the window boundary is
336
+ * crossed, or the channel is exhausted. So a sparse filter does not
337
+ * return fewer than `limit` messages while older matches exist — up to
338
+ * the {@link LEGACY_MAX_SCAN_ROWS} scan bound. Stopping the walk at the
339
+ * opposite boundary assumes chat-v2 `seq` order agrees with `createdAt`
340
+ * order (both are assigned at insert time from the same clock).
341
+ *
342
+ * @param filter - Legacy message filter (`conversationId` required)
343
+ * @returns Matching messages in chronological order; [] for an unknown
344
+ * conversation or when `conversationId` is missing
345
+ * @throws Any chat-v2 error other than "channel not found"
346
+ *
347
+ * @example
348
+ * ```typescript
349
+ * const newest = await chatService.getMessages({ conversationId, limit: 50 });
350
+ * const older = await chatService.getMessages({ conversationId, limit: 50, before: newest[0].id });
351
+ * ```
352
+ */
353
+ async getMessages(filter) {
354
+ if (!filter.conversationId) {
355
+ // Legacy callers occasionally call with no conversationId to get
356
+ // everything. chat-v2 has no global query — return [] and let
357
+ // the migration of those call sites surface explicit filters.
358
+ return [];
359
+ }
360
+ const conversationId = filter.conversationId;
361
+ const limit = resolveLegacyLimit(filter.limit);
362
+ const offset = resolveLegacyOffset(filter.offset);
363
+ try {
364
+ const window = this.resolveLegacyWindow(conversationId, filter);
365
+ return offset === null
366
+ ? this.selectNewestInWindow(conversationId, filter, window, limit)
367
+ : this.selectFromOffsetInWindow(conversationId, filter, window, offset, limit);
368
+ }
369
+ catch (err) {
370
+ // Legacy contract: an unknown conversation reads as empty.
371
+ if (isChannelNotFound(err))
372
+ return [];
373
+ throw err;
374
+ }
375
+ }
376
+ /**
377
+ * Count messages in a conversation, honoring the same filters as
378
+ * {@link getMessages} (`limit` / `offset` are ignored). Returns 0 for an
379
+ * unknown conversation (legacy contract) instead of surfacing chat-v2's
380
+ * 404. Unfiltered counts use chat-v2's count query; filtered counts walk
381
+ * the same pages as `getMessages`, bounded by {@link LEGACY_MAX_SCAN_ROWS}.
382
+ *
383
+ * @param filter - Legacy message filter (`conversationId` required for a non-zero count)
384
+ * @returns Number of matching messages
385
+ * @throws Any chat-v2 error other than "channel not found"
386
+ */
387
+ async getMessageCount(filter) {
388
+ if (!filter.conversationId)
389
+ return 0;
390
+ const conversationId = filter.conversationId;
391
+ try {
392
+ if (!hasLegacyMessageFilters(filter)) {
393
+ return this.chatV2.countChannelMessages(conversationId, SYSTEM_PRINCIPAL);
394
+ }
395
+ const window = this.resolveLegacyWindow(conversationId, filter);
396
+ return this.selectNewestInWindow(conversationId, filter, window, Number.POSITIVE_INFINITY)
397
+ .length;
398
+ }
399
+ catch (err) {
400
+ if (isChannelNotFound(err))
401
+ return 0;
402
+ throw err;
403
+ }
404
+ }
405
+ /**
406
+ * Resolve a legacy `before` / `after` value to a boundary. A value that
407
+ * is the id of a message in this conversation becomes an exact `seq`
408
+ * boundary; anything else is treated as a timestamp.
409
+ *
410
+ * @param conversationId - Conversation being read
411
+ * @param value - Raw `before` / `after` value
412
+ * @returns The anchor, or null when no value was supplied
413
+ */
414
+ resolveLegacyAnchor(conversationId, value) {
415
+ if (!value)
416
+ return null;
417
+ const dto = this.chatV2.getMessageForBridge(value);
418
+ if (dto && dto.channelId === conversationId)
419
+ return { kind: 'seq', seq: dto.seq };
420
+ return { kind: 'timestamp', value };
421
+ }
422
+ /**
423
+ * Resolve both window boundaries of a legacy filter.
424
+ *
425
+ * @param conversationId - Conversation being read
426
+ * @param filter - Legacy message filter
427
+ * @returns The resolved window
428
+ */
429
+ resolveLegacyWindow(conversationId, filter) {
430
+ return {
431
+ before: this.resolveLegacyAnchor(conversationId, filter.before),
432
+ after: this.resolveLegacyAnchor(conversationId, filter.after),
433
+ };
434
+ }
435
+ /**
436
+ * Walk a channel's messages through chat-v2 cursor pagination, one full
437
+ * chat-v2 page (`MessageStore.MAX_LIMIT`) at a time. Pages are fetched
438
+ * lazily, so a consumer that stops early never loads further pages.
439
+ *
440
+ * @param conversationId - Channel to walk
441
+ * @param direction - `backward` = newest → oldest, `forward` = oldest → newest
442
+ * @param startSeq - Exclusive starting seq, or null to start at the channel
443
+ * end (newest for backward, first message for forward)
444
+ * @returns A generator of chat-v2 DTOs in walk order, at most
445
+ * {@link LEGACY_MAX_SCAN_ROWS} of them
446
+ * @throws {ChatError} `channel_not_found` when the conversation does not exist
447
+ */
448
+ *walkChannel(conversationId, direction, startSeq) {
449
+ let cursor = startSeq === null ? null : encodeCursor({ seq: startSeq, channelId: conversationId });
450
+ let scanned = 0;
451
+ do {
452
+ const page = this.chatV2.listMessages({
453
+ channelId: conversationId,
454
+ principal: SYSTEM_PRINCIPAL,
455
+ cursor,
456
+ limit: MessageStore.MAX_LIMIT,
457
+ direction,
458
+ });
459
+ for (const dto of page.messages) {
460
+ if (scanned >= LEGACY_MAX_SCAN_ROWS) {
461
+ this.logger.warn('Legacy chat read hit the scan bound; result is partial', {
462
+ conversationId,
463
+ direction,
464
+ maxScanRows: LEGACY_MAX_SCAN_ROWS,
465
+ });
466
+ return;
467
+ }
468
+ scanned++;
469
+ yield dto;
470
+ }
471
+ cursor = page.nextCursor;
472
+ } while (cursor);
473
+ }
474
+ /**
475
+ * Select the newest `limit` messages inside the window that match the
476
+ * content filters, walking backward from the `before` id (or the newest
477
+ * message) and stopping at the `after` boundary.
478
+ *
479
+ * @param conversationId - Conversation being read
480
+ * @param filter - Legacy message filter (content filters)
481
+ * @param window - Resolved before/after window
482
+ * @param limit - Max messages to return (`Infinity` to collect all, for counts)
483
+ * @returns Matching messages, oldest → newest
484
+ */
485
+ selectNewestInWindow(conversationId, filter, window, limit) {
486
+ const newestFirst = [];
487
+ const startSeq = window.before?.kind === 'seq' ? window.before.seq : null;
488
+ for (const dto of this.walkChannel(conversationId, 'backward', startSeq)) {
489
+ const message = v2MessageToLegacy(dto);
490
+ // Crossed the lower bound: every older message is outside the window.
491
+ if (window.after && !isNewerThanAnchor(dto, message, window.after))
492
+ break;
493
+ // Timestamp `before`: skip newer messages until the walk reaches it.
494
+ if (window.before && !isOlderThanAnchor(dto, message, window.before))
495
+ continue;
496
+ if (!matchesLegacyContentFilters(message, filter))
497
+ continue;
498
+ newestFirst.push(message);
499
+ if (newestFirst.length >= limit)
500
+ break;
501
+ }
502
+ return newestFirst.reverse();
503
+ }
504
+ /**
505
+ * Legacy offset pagination: skip the first `offset` matching messages of
506
+ * the window (counted from the oldest) and return the next `limit`.
507
+ *
508
+ * @param conversationId - Conversation being read
509
+ * @param filter - Legacy message filter (content filters)
510
+ * @param window - Resolved before/after window
511
+ * @param offset - Matching messages to skip, counted from the oldest
512
+ * @param limit - Max messages to return
513
+ * @returns Matching messages, oldest → newest
514
+ */
515
+ selectFromOffsetInWindow(conversationId, filter, window, offset, limit) {
516
+ const result = [];
517
+ let skipped = 0;
518
+ const startSeq = window.after?.kind === 'seq' ? window.after.seq : null;
519
+ for (const dto of this.walkChannel(conversationId, 'forward', startSeq)) {
520
+ const message = v2MessageToLegacy(dto);
521
+ // Crossed the upper bound: every newer message is outside the window.
522
+ if (window.before && !isOlderThanAnchor(dto, message, window.before))
523
+ break;
524
+ // Timestamp `after`: skip older messages until the walk reaches it.
525
+ if (window.after && !isNewerThanAnchor(dto, message, window.after))
526
+ continue;
527
+ if (!matchesLegacyContentFilters(message, filter))
528
+ continue;
529
+ if (skipped < offset) {
530
+ skipped++;
531
+ continue;
532
+ }
533
+ result.push(message);
534
+ if (result.length >= limit)
535
+ break;
536
+ }
537
+ return result;
538
+ }
539
+ /**
540
+ * Look up a single message by id within a conversation.
541
+ *
542
+ * @param conversationId - Conversation the message must belong to
543
+ * @param messageId - The message id
544
+ * @returns The legacy message, or null when absent or in another conversation
545
+ */
546
+ async getMessage(conversationId, messageId) {
547
+ const dto = this.chatV2.getMessageForBridge(messageId);
548
+ if (!dto || dto.channelId !== conversationId)
549
+ return null;
550
+ return v2MessageToLegacy(dto);
551
+ }
552
+ async updateMessageMetadata(_conversationId, messageId, metadataPatch) {
553
+ const dto = this.chatV2.updateMessageMetadata(messageId, metadataPatch);
554
+ return dto ? v2MessageToLegacy(dto) : null;
555
+ }
556
+ async getMessagesWithPendingSlackDelivery(maxAgeMs) {
557
+ return this.chatV2.findMessagesWithPendingSlackDelivery(maxAgeMs).map(v2MessageToLegacy);
558
+ }
559
+ /**
560
+ * List conversations in the legacy shape, honoring the legacy filters:
561
+ * `includeArchived` (archived rows are hidden by default), `channelType`,
562
+ * a case-insensitive title `search`, and `offset` / `limit` pagination.
563
+ *
564
+ * @param filter - Optional legacy conversation filter
565
+ * @returns Matching conversations
566
+ */
567
+ async getConversations(filter) {
568
+ const channels = this.chatV2.listChannels({
569
+ principal: SYSTEM_PRINCIPAL,
570
+ includeArchived: filter?.includeArchived === true,
571
+ });
572
+ let conversations = channels.map((c) => v2ChannelToLegacy(c, this.chatV2.countChannelMessages(c.id, SYSTEM_PRINCIPAL)));
573
+ if (filter?.channelType) {
574
+ conversations = conversations.filter((c) => c.channelType === filter.channelType);
575
+ }
576
+ if (filter?.search) {
577
+ const needle = filter.search.toLowerCase();
578
+ conversations = conversations.filter((c) => c.title?.toLowerCase().includes(needle));
579
+ }
580
+ if (filter?.offset !== undefined || filter?.limit !== undefined) {
581
+ const offset = filter.offset ?? 0;
582
+ conversations = conversations.slice(offset, filter.limit !== undefined ? offset + filter.limit : undefined);
583
+ }
584
+ return conversations;
585
+ }
586
+ async getConversation(id) {
587
+ try {
588
+ const channel = this.chatV2.getChannel(id, SYSTEM_PRINCIPAL);
589
+ return v2ChannelToLegacy(channel, this.chatV2.countChannelMessages(id, SYSTEM_PRINCIPAL));
590
+ }
591
+ catch {
592
+ return null;
593
+ }
594
+ }
595
+ async createNewConversation(title, idOverride, _channelType) {
596
+ const conversationId = idOverride ?? `web-conv-${Date.now()}`;
597
+ const channel = this.chatV2.ensureChannelForLegacyConversation({
598
+ conversationId,
599
+ agentSession: 'crewly-orc',
600
+ name: title ?? conversationId,
601
+ });
602
+ const conversation = v2ChannelToLegacy(channel, 0);
603
+ this.emitConversationUpdated(conversation);
604
+ return conversation;
605
+ }
606
+ /**
607
+ * Rename a conversation.
608
+ *
609
+ * @param id - Conversation id
610
+ * @param title - New title
611
+ * @returns The updated conversation
612
+ * @throws {ConversationNotFoundError} when the conversation does not exist
613
+ */
614
+ async updateConversationTitle(id, title) {
615
+ const conversation = this.withConversation(id, () => {
616
+ const channel = this.chatV2.renameChannel(id, title, SYSTEM_PRINCIPAL);
617
+ return v2ChannelToLegacy(channel, this.chatV2.countChannelMessages(id, SYSTEM_PRINCIPAL));
618
+ });
619
+ this.emitConversationUpdated(conversation);
620
+ return conversation;
621
+ }
622
+ /**
623
+ * Archive a conversation.
624
+ *
625
+ * @param id - Conversation id
626
+ * @throws {ConversationNotFoundError} when the conversation does not exist
627
+ */
628
+ async archiveConversation(id) {
629
+ this.withConversation(id, () => this.chatV2.archiveChannel(id, SYSTEM_PRINCIPAL));
630
+ await this.emitConversationUpdatedById(id);
631
+ }
632
+ /**
633
+ * Unarchive a conversation.
634
+ *
635
+ * @param id - Conversation id
636
+ * @throws {ConversationNotFoundError} when the conversation does not exist
637
+ */
638
+ async unarchiveConversation(id) {
639
+ this.withConversation(id, () => this.chatV2.unarchiveChannel(id, SYSTEM_PRINCIPAL));
640
+ await this.emitConversationUpdatedById(id);
641
+ }
642
+ /**
643
+ * Delete a conversation and its messages. Idempotent: deleting an
644
+ * unknown conversation is a no-op (legacy contract).
645
+ *
646
+ * @param id - Conversation id
647
+ */
648
+ async deleteConversation(id) {
649
+ try {
650
+ this.chatV2.deleteChannel(id, SYSTEM_PRINCIPAL);
651
+ }
652
+ catch (err) {
653
+ if (!isChannelNotFound(err))
654
+ throw err;
655
+ }
656
+ }
657
+ async clearConversation(id) {
658
+ this.chatV2.clearChannel(id, SYSTEM_PRINCIPAL);
659
+ }
660
+ async getCurrentConversation() {
661
+ // Frontend should adopt "latest channel" via listChannels;
662
+ // here we approximate by returning the most recently touched channel.
663
+ const channels = this.chatV2.listChannels({ principal: SYSTEM_PRINCIPAL });
664
+ if (channels.length === 0)
665
+ return null;
666
+ const newest = channels.reduce((a, b) => (a.lastMessageAt ?? a.createdAt) > (b.lastMessageAt ?? b.createdAt) ? a : b);
667
+ return v2ChannelToLegacy(newest, this.chatV2.countChannelMessages(newest.id, SYSTEM_PRINCIPAL));
668
+ }
669
+ emitTypingIndicator(conversationId, sender, isTyping) {
670
+ this.emit('chat_typing', {
671
+ type: 'chat_typing',
672
+ data: { conversationId, sender, isTyping },
673
+ });
674
+ }
675
+ emitProgress(conversationId, text) {
676
+ // Transient — emit but don't persist. Frontend renders progress
677
+ // ephemerally. Legacy behaviour preserved.
678
+ this.emit('chat_message', {
679
+ type: 'chat_message',
680
+ data: {
681
+ id: `progress-${Date.now()}`,
682
+ conversationId,
683
+ from: { type: 'system', id: 'system', name: 'System' },
684
+ content: text,
685
+ contentType: 'system',
686
+ status: 'sent',
687
+ timestamp: new Date().toISOString(),
688
+ metadata: { ephemeral: true },
689
+ },
690
+ });
691
+ }
692
+ async getStatistics() {
693
+ const s = this.chatV2.getStatistics();
694
+ return {
695
+ totalConversations: s.totalChannels,
696
+ activeConversations: s.activeChannels,
697
+ archivedConversations: s.archivedChannels,
698
+ totalMessages: s.totalMessages,
699
+ };
700
+ }
701
+ // ---------------------------------------------------------------------------
702
+ // Helpers
703
+ // ---------------------------------------------------------------------------
704
+ /**
705
+ * Generate a conversationId for a brand-new sendMessage call that
706
+ * didn't supply one. Web-chat-style id; Slack callers always pass
707
+ * their own slack-CHANNEL-TS identifier.
708
+ */
709
+ synthesizeConversationId(input) {
710
+ if (typeof input.metadata?.channelId === 'string') {
711
+ // Slack source — derive from channel + timestamp pattern.
712
+ const channel = input.metadata.channelId;
713
+ const ts = typeof input.metadata.threadTs === 'string' ? input.metadata.threadTs : `${Date.now()}`;
714
+ return synthesizeSlackConversationId(channel, ts);
715
+ }
716
+ return `web-conv-${Date.now()}`;
717
+ }
718
+ /**
719
+ * Emit the legacy `conversation_updated` event. chat-v2 has no
720
+ * channel-touched event yet, so the façade remains its source and
721
+ * `ChatGateway` forwards it to WebSocket clients (the chat sidebar
722
+ * listens for it).
723
+ *
724
+ * @param conversation - The conversation in its new state
725
+ */
726
+ emitConversationUpdated(conversation) {
727
+ this.emit('conversation_updated', {
728
+ type: 'conversation_updated',
729
+ data: conversation,
730
+ });
731
+ }
732
+ /**
733
+ * Re-read a conversation and emit `conversation_updated` for it.
734
+ * No-op when the conversation no longer exists.
735
+ *
736
+ * @param id - Conversation id
737
+ */
738
+ async emitConversationUpdatedById(id) {
739
+ const conversation = await this.getConversation(id);
740
+ if (conversation)
741
+ this.emitConversationUpdated(conversation);
742
+ }
743
+ /**
744
+ * Run a chat-v2 mutation on a conversation, translating chat-v2's
745
+ * `channel_not_found` error into the legacy `ConversationNotFoundError`
746
+ * that callers (chat.controller → 404) catch by type.
747
+ *
748
+ * @param id - Conversation id
749
+ * @param fn - The chat-v2 operation
750
+ * @returns Whatever `fn` returns
751
+ * @throws {ConversationNotFoundError} when the conversation does not exist
752
+ */
753
+ withConversation(id, fn) {
754
+ try {
755
+ return fn();
756
+ }
757
+ catch (err) {
758
+ if (isChannelNotFound(err))
759
+ throw new ConversationNotFoundError(id);
760
+ throw err;
761
+ }
762
+ }
763
+ /**
764
+ * @deprecated Will be removed when the façade is retired.
765
+ */
766
+ async ensureInitialized() {
767
+ /* no-op */
768
+ }
769
+ }
770
+ // =============================================================================
771
+ // Singleton accessors — preserved for source compatibility
772
+ // =============================================================================
773
+ let _instance = null;
774
+ export function getChatService(options) {
775
+ if (!_instance) {
776
+ _instance = new ChatService(options);
777
+ }
778
+ return _instance;
779
+ }
780
+ export function resetChatService() {
781
+ _instance = null;
782
+ }
783
+ //# sourceMappingURL=chat.service.js.map