crewly 1.20.202 → 1.20.204

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 (230) hide show
  1. package/config/skills/agent/core/reply/SKILL.md +1 -0
  2. package/config/skills/agent/core/reply/execute.sh +7 -1
  3. package/config/skills/agent/core/reply-channel/SKILL.md +4 -0
  4. package/config/skills/agent/core/reply-channel/execute.sh +12 -1
  5. package/dist/backend/backend/src/constants.d.ts +158 -0
  6. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  7. package/dist/backend/backend/src/constants.js +158 -0
  8. package/dist/backend/backend/src/constants.js.map +1 -1
  9. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +1 -0
  11. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/chat/chat.controller.js +11 -1
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -0
  17. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +6 -0
  19. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +30 -2
  21. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/session/session.controller.js +7 -0
  24. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +4 -1
  27. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  28. package/dist/backend/backend/src/index.d.ts +28 -0
  29. package/dist/backend/backend/src/index.d.ts.map +1 -1
  30. package/dist/backend/backend/src/index.js +141 -35
  31. package/dist/backend/backend/src/index.js.map +1 -1
  32. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/agent/agent-registration.service.js +7 -0
  34. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  35. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +11 -0
  37. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +22 -0
  39. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +39 -3
  41. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  42. package/dist/backend/backend/src/services/agent/in-process-turn-failure.service.d.ts +140 -0
  43. package/dist/backend/backend/src/services/agent/in-process-turn-failure.service.d.ts.map +1 -0
  44. package/dist/backend/backend/src/services/agent/in-process-turn-failure.service.js +267 -0
  45. package/dist/backend/backend/src/services/agent/in-process-turn-failure.service.js.map +1 -0
  46. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +117 -0
  47. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +165 -9
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  50. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.d.ts +93 -0
  51. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.js +138 -0
  53. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.js.map +1 -0
  54. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/decisions/decision-card.js +5 -1
  56. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  57. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +43 -1
  58. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/decisions/decision.service.js +110 -7
  60. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +2 -0
  62. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/decisions/decision.wiring.js +1 -0
  64. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  65. package/dist/backend/backend/src/services/messaging/drain-queued-delivery.d.ts +59 -0
  66. package/dist/backend/backend/src/services/messaging/drain-queued-delivery.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/messaging/drain-queued-delivery.js +70 -0
  68. package/dist/backend/backend/src/services/messaging/drain-queued-delivery.js.map +1 -0
  69. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +46 -1
  70. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +109 -0
  72. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts +2 -0
  74. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js +6 -0
  76. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.wiring.js.map +1 -1
  77. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +51 -1
  78. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +73 -3
  80. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  81. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.d.ts +168 -0
  82. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.js +280 -0
  84. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.js.map +1 -0
  85. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +21 -0
  86. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/open-items/open-items.service.js +72 -3
  88. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.d.ts +153 -0
  90. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.d.ts.map +1 -0
  91. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.js +276 -0
  92. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.js.map +1 -0
  93. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +16 -0
  94. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +22 -2
  96. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  97. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +9 -0
  98. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +11 -0
  100. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  101. package/dist/backend/backend/src/services/slack/room-responder.d.ts +144 -0
  102. package/dist/backend/backend/src/services/slack/room-responder.d.ts.map +1 -0
  103. package/dist/backend/backend/src/services/slack/room-responder.js +236 -0
  104. package/dist/backend/backend/src/services/slack/room-responder.js.map +1 -0
  105. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +11 -2
  106. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +22 -1
  108. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  109. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/slack/slack-initializer.js +64 -2
  111. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  112. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +8 -2
  113. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js +7 -4
  115. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.js.map +1 -1
  116. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +148 -2
  117. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  118. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +784 -231
  119. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  120. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +27 -0
  121. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  122. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +52 -0
  123. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  124. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +30 -5
  125. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  126. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +41 -8
  127. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  128. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +1 -0
  129. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +8 -3
  131. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +13 -1
  133. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +36 -3
  135. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  136. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +54 -3
  137. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  138. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +117 -9
  139. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  140. package/dist/backend/backend/src/types/decision.types.d.ts +7 -0
  141. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  142. package/dist/backend/build-info.json +2 -2
  143. package/dist/cli/backend/src/constants.d.ts +158 -0
  144. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  145. package/dist/cli/backend/src/constants.js +158 -0
  146. package/dist/cli/backend/src/constants.js.map +1 -1
  147. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  148. package/dist/cli/backend/src/services/agent/agent-registration.service.js +7 -0
  149. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  150. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  151. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +11 -0
  152. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  153. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +22 -0
  154. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  155. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +39 -3
  156. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  157. package/dist/cli/backend/src/services/agent/in-process-turn-failure.service.d.ts +140 -0
  158. package/dist/cli/backend/src/services/agent/in-process-turn-failure.service.d.ts.map +1 -0
  159. package/dist/cli/backend/src/services/agent/in-process-turn-failure.service.js +267 -0
  160. package/dist/cli/backend/src/services/agent/in-process-turn-failure.service.js.map +1 -0
  161. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +117 -0
  162. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  163. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +165 -9
  164. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  165. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.d.ts +93 -0
  166. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.d.ts.map +1 -0
  167. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.js +138 -0
  168. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.js.map +1 -0
  169. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  170. package/dist/cli/backend/src/services/decisions/decision-card.js +5 -1
  171. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
  172. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +43 -1
  173. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  174. package/dist/cli/backend/src/services/decisions/decision.service.js +110 -7
  175. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  176. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +46 -1
  177. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  178. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +109 -0
  179. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  180. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +51 -1
  181. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  182. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +73 -3
  183. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  184. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +21 -0
  185. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  186. package/dist/cli/backend/src/services/open-items/open-items.service.js +72 -3
  187. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  188. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +9 -0
  189. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  190. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +11 -0
  191. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  192. package/dist/cli/backend/src/services/runtime-fallback/reset-time.d.ts +66 -0
  193. package/dist/cli/backend/src/services/runtime-fallback/reset-time.d.ts.map +1 -0
  194. package/dist/cli/backend/src/services/runtime-fallback/reset-time.js +211 -0
  195. package/dist/cli/backend/src/services/runtime-fallback/reset-time.js.map +1 -0
  196. package/dist/cli/backend/src/services/runtime-fallback/usage-limit-rules.d.ts +113 -0
  197. package/dist/cli/backend/src/services/runtime-fallback/usage-limit-rules.d.ts.map +1 -0
  198. package/dist/cli/backend/src/services/runtime-fallback/usage-limit-rules.js +257 -0
  199. package/dist/cli/backend/src/services/runtime-fallback/usage-limit-rules.js.map +1 -0
  200. package/dist/cli/backend/src/services/slack/room-responder.d.ts +144 -0
  201. package/dist/cli/backend/src/services/slack/room-responder.d.ts.map +1 -0
  202. package/dist/cli/backend/src/services/slack/room-responder.js +236 -0
  203. package/dist/cli/backend/src/services/slack/room-responder.js.map +1 -0
  204. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +11 -2
  205. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  206. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +22 -1
  207. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  208. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +148 -2
  209. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  210. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +784 -231
  211. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  212. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +27 -0
  213. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  214. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +52 -0
  215. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  216. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +30 -5
  217. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  218. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +41 -8
  219. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  220. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +1 -0
  221. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  222. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +8 -3
  223. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  224. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +13 -1
  225. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  226. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +36 -3
  227. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  228. package/dist/cli/backend/src/types/decision.types.d.ts +7 -0
  229. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  230. package/package.json +1 -1
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Failed turns of the in-process Crewly Agent runtime (crewly#1015 §2).
3
+ *
4
+ * A turn of the in-process runtime that throws (DeepSeek "No output
5
+ * generated", an out-of-credit account, a crashed worker) used to be logged
6
+ * and nothing else: the message was gone, nobody was told. On 2026-10-01 the
7
+ * orchestrator failed about 80 turns that way over ~20 hours.
8
+ *
9
+ * Now:
10
+ * 1. The same message is delivered once more after RETRY_DELAY_MS (through
11
+ * `sendMessageToAgent`, so a runtime switch, the token cap or the
12
+ * restart drain can queue it instead).
13
+ * Not when the account is out of credit / quota (it fails the same way),
14
+ * and not when the agent is stopped or not running (the message is
15
+ * queued for its next start instead — that is no model failure).
16
+ * 2. When that fails too, the owner messages the agent owes are parked by the
17
+ * owner-message watchdog (owner told once, message kept and re-delivered
18
+ * on a backing-off timer, never on a timer for credit / quota), and the
19
+ * failure is reported ONCE per episode — for a member to the
20
+ * orchestrator, for the orchestrator to the owner — until a turn succeeds.
21
+ * 3. The agent's next successful turn re-delivers the parked owner messages.
22
+ *
23
+ * Harness text is English. The service never throws into its callers.
24
+ *
25
+ * @module services/agent/in-process-turn-failure.service
26
+ * @see specs/2026-10-03-harness-drop-gaps.md §2
27
+ */
28
+ import { createHash } from 'crypto';
29
+ import { IN_PROCESS_TURN_FAILURE_CONSTANTS as C, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
30
+ import { LoggerService } from '../core/logger.service.js';
31
+ /**
32
+ * Whether a turn error means the account is out of credit / quota: nothing
33
+ * helps until the owner tops up or the agent moves to another runtime.
34
+ *
35
+ * @param error - What the turn rejected with
36
+ * @returns True for `billing` / `usage_limit`
37
+ */
38
+ export function isCreditFailure(error) {
39
+ const kind = error?.usageLimitKind;
40
+ return kind === 'billing' || kind === 'usage_limit';
41
+ }
42
+ /**
43
+ * The reason of a failed turn in plain words, for the owner and the orchestrator.
44
+ *
45
+ * @param error - What the turn rejected with (`usageLimitKind` is set by the
46
+ * external runtime when a usage-limit rule matched its stderr)
47
+ * @returns A short phrase
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * describeTurnError(Object.assign(new Error('No output generated.'), { usageLimitKind: 'billing' }));
52
+ * // 'the model account is out of credit'
53
+ * ```
54
+ */
55
+ export function describeTurnError(error) {
56
+ const kind = error?.usageLimitKind;
57
+ if (kind === 'billing')
58
+ return 'the model account is out of credit';
59
+ if (kind === 'usage_limit')
60
+ return "the model's usage limit was reached";
61
+ if (kind === 'transient')
62
+ return 'the model provider is rate-limiting';
63
+ const message = error instanceof Error ? error.message : String(error ?? '');
64
+ if (/no output generated/i.test(message))
65
+ return 'the model returned no output';
66
+ const one = message.replace(/\s+/g, ' ').trim();
67
+ if (!one)
68
+ return 'unknown error';
69
+ return one.length > C.ERROR_CHARS ? `${one.slice(0, C.ERROR_CHARS)}…` : one;
70
+ }
71
+ /**
72
+ * Retries and reports failed in-process turns.
73
+ *
74
+ * One report per failure EPISODE: from the first reported failure until the
75
+ * agent completes a turn again, later failures are counted, not reported
76
+ * (crewly#1015 review B2: ~40 notices a day while credit was out).
77
+ */
78
+ export class InProcessTurnFailureService {
79
+ deps;
80
+ logger;
81
+ /** `<session>\0<message hash>` → retries made and when the first failure was */
82
+ attempts = new Map();
83
+ /** Agents in a reported failure episode → failures since the report */
84
+ failing = new Map();
85
+ /**
86
+ * @param deps - Injected behaviour
87
+ */
88
+ constructor(deps) {
89
+ this.deps = deps;
90
+ this.logger = LoggerService.getInstance().createComponentLogger('InProcessTurnFailure');
91
+ }
92
+ now() {
93
+ return this.deps.now ? this.deps.now() : Date.now();
94
+ }
95
+ /**
96
+ * A turn threw. Retry the message once (unless it cannot help); after
97
+ * that, report — once per failure episode.
98
+ *
99
+ * @param sessionName - The agent
100
+ * @param message - The message it was handling
101
+ * @param error - What the turn rejected with
102
+ */
103
+ onTurnFailed(sessionName, message, error) {
104
+ try {
105
+ // Stopped on purpose (by the owner) or not running: not a model
106
+ // failure. The message waits for the agent's next start.
107
+ if (this.agentIsDown(sessionName)) {
108
+ this.hold(sessionName, message, 'the agent is not running');
109
+ return;
110
+ }
111
+ const detail = describeTurnError(error);
112
+ const needsCredit = isCreditFailure(error);
113
+ this.prune();
114
+ const key = `${sessionName}\0${createHash('sha1').update(message).digest('hex')}`;
115
+ const seen = this.attempts.get(key);
116
+ const count = seen?.count ?? 0;
117
+ // Out of credit / quota: a retry in a minute fails the same way.
118
+ if (!needsCredit && count < C.MAX_RETRIES) {
119
+ const failedAt = this.now();
120
+ this.attempts.set(key, { count: count + 1, at: seen?.at ?? failedAt });
121
+ this.logger.warn('In-process turn failed — delivering the message once more', {
122
+ sessionName,
123
+ detail,
124
+ inSeconds: Math.round(C.RETRY_DELAY_MS / 1000),
125
+ });
126
+ const timer = (this.deps.setTimer ?? ((fn, ms) => setTimeout(fn, ms)))(() => void this.retry(sessionName, message, detail, failedAt), C.RETRY_DELAY_MS);
127
+ timer?.unref?.();
128
+ return;
129
+ }
130
+ // The key is kept (until ATTEMPT_TTL_MS): a later failure of this
131
+ // same message goes straight here, without another retry.
132
+ if (!seen)
133
+ this.attempts.set(key, { count, at: this.now() });
134
+ this.giveUp(sessionName, message, detail, needsCredit, 'failed');
135
+ }
136
+ catch (err) {
137
+ this.logger.warn('Handling a failed in-process turn failed', { sessionName, error: err instanceof Error ? err.message : String(err) });
138
+ }
139
+ }
140
+ /**
141
+ * A turn completed: the failure episode is over. The parked owner
142
+ * messages are re-delivered.
143
+ *
144
+ * @param sessionName - The agent
145
+ */
146
+ onTurnSucceeded(sessionName) {
147
+ const since = this.failing.get(sessionName);
148
+ if (since === undefined)
149
+ return;
150
+ this.failing.delete(sessionName);
151
+ this.logger.info('In-process agent completed a turn again after failures', { sessionName, failuresSinceReport: since });
152
+ void (this.deps.resumeOwnerMessages?.(sessionName) ?? Promise.resolve(0)).catch((err) => this.logger.warn('Could not re-deliver parked owner messages', { sessionName, error: err instanceof Error ? err.message : String(err) }));
153
+ }
154
+ agentIsDown(sessionName) {
155
+ try {
156
+ if (this.deps.isOwnerStopped?.(sessionName))
157
+ return true;
158
+ return this.deps.isRunning ? !this.deps.isRunning(sessionName) : false;
159
+ }
160
+ catch {
161
+ return false;
162
+ }
163
+ }
164
+ hold(sessionName, message, why) {
165
+ try {
166
+ this.deps.queueForAgent?.(sessionName, message);
167
+ }
168
+ catch (err) {
169
+ this.logger.warn('Could not queue the message for the stopped agent', { sessionName, error: err instanceof Error ? err.message : String(err) });
170
+ }
171
+ this.logger.info('Turn not completed and not retried — message queued for the agent\'s next start', { sessionName, why });
172
+ }
173
+ async retry(sessionName, message, detail, failedAt) {
174
+ // The failed turn may have answered before it threw: a second turn
175
+ // would answer twice (crewly#1015 review H3).
176
+ try {
177
+ if (this.deps.answeredSince?.(sessionName, message, failedAt - C.RETRY_DELAY_MS)) {
178
+ this.logger.info('Failed turn had already answered — not retrying', { sessionName });
179
+ return;
180
+ }
181
+ }
182
+ catch {
183
+ /* retry */
184
+ }
185
+ if (this.agentIsDown(sessionName)) {
186
+ this.hold(sessionName, message, 'the agent stopped before the retry');
187
+ return;
188
+ }
189
+ let result;
190
+ try {
191
+ result = await this.deps.redeliver(sessionName, message);
192
+ }
193
+ catch (err) {
194
+ result = { success: false, error: err instanceof Error ? err.message : String(err) };
195
+ }
196
+ // Delivered (its turn reports again if it fails) or queued (a runtime
197
+ // switch, the token cap, the drain — that queue reports its drops).
198
+ if (result.success || result.queued)
199
+ return;
200
+ if (this.agentIsDown(sessionName)) {
201
+ this.hold(sessionName, message, 'the agent stopped before the retry');
202
+ return;
203
+ }
204
+ this.giveUp(sessionName, message, `${detail}; delivering it again failed: ${result.error ?? 'unknown error'}`, false, 'undeliverable');
205
+ }
206
+ giveUp(sessionName, message, detail, needsCredit, how) {
207
+ this.logger.error('In-process turn failed again', { sessionName, detail, needsCredit, messagePreview: preview(message, 80) });
208
+ void (this.deps.noteOwnerMessages?.(sessionName, detail, { needsCredit }) ?? Promise.resolve(0)).catch((err) => this.logger.warn('Could not tell the owner about a failed turn', { sessionName, error: err instanceof Error ? err.message : String(err) }));
209
+ const since = this.failing.get(sessionName);
210
+ if (since !== undefined) {
211
+ // Same episode: already reported.
212
+ this.failing.set(sessionName, since + 1);
213
+ return;
214
+ }
215
+ this.failing.set(sessionName, 0);
216
+ const name = this.deps.displayName?.(sessionName) || sessionName;
217
+ const what = how === 'failed'
218
+ ? needsCredit
219
+ ? `${name}'s model run failed (${detail}).`
220
+ : `${name}'s model run failed twice on the same message (${detail}).`
221
+ : `${name}'s model run failed and the message could not be delivered to it again (${detail}).`;
222
+ const consequence = sessionName === ORCHESTRATOR_SESSION_NAME
223
+ ? ' Until this is fixed the orchestrator answers nothing; your own messages to it are kept and re-delivered once it works again.'
224
+ : ` Owner messages ${name} owes are kept and re-delivered once it works again; anything else sent to ${name} needs sending again.`;
225
+ const text = `${what} The message was: "${preview(message, C.PREVIEW_CHARS)}".${consequence} No further notices until it completes a run.`;
226
+ try {
227
+ this.deps.report(sessionName, text, message);
228
+ }
229
+ catch (err) {
230
+ this.logger.warn('Could not report a failed turn', { sessionName, error: err instanceof Error ? err.message : String(err) });
231
+ }
232
+ }
233
+ prune() {
234
+ const cutoff = this.now() - C.ATTEMPT_TTL_MS;
235
+ for (const [k, v] of this.attempts)
236
+ if (v.at < cutoff)
237
+ this.attempts.delete(k);
238
+ }
239
+ }
240
+ /**
241
+ * One-line preview of a message, without its routing header.
242
+ *
243
+ * @param message - Message text
244
+ * @param max - Limit
245
+ * @returns Preview
246
+ */
247
+ function preview(message, max) {
248
+ let body = message;
249
+ for (;;) {
250
+ const next = body.replace(/^\s*\[(?:G?CHAT|SLACK|SLACK-THREAD)[^\]]*\]\s*/, '');
251
+ if (next === body)
252
+ break;
253
+ body = next;
254
+ }
255
+ body = body.replace(/\s+/g, ' ').trim();
256
+ return body.length > max ? `${body.slice(0, max)}…` : body;
257
+ }
258
+ let instance = null;
259
+ /** @returns The wired service, or null before boot (and in tests) */
260
+ export function getInProcessTurnFailureService() {
261
+ return instance;
262
+ }
263
+ /** @param service - The service to expose (null to clear) */
264
+ export function setInProcessTurnFailureService(service) {
265
+ instance = service;
266
+ }
267
+ //# sourceMappingURL=in-process-turn-failure.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-process-turn-failure.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/in-process-turn-failure.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,iCAAiC,IAAI,CAAC,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACvG,OAAO,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAC;AAgDhF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC/C,MAAM,IAAI,GAAI,KAA6C,EAAE,cAAc,CAAC;IAC5E,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,aAAa,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IACjD,MAAM,IAAI,GAAI,KAA6C,EAAE,cAAc,CAAC;IAC5E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,oCAAoC,CAAC;IACpE,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,qCAAqC,CAAC;IACzE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,qCAAqC,CAAC;IACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7E,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAChF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,eAAe,CAAC;IACjC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,2BAA2B;IAUV;IATZ,MAAM,CAAkB;IACzC,gFAAgF;IAC/D,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;IAC7E,uEAAuE;IACtD,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAErD;;OAEG;IACH,YAA6B,IAA8B;QAA9B,SAAI,GAAJ,IAAI,CAA0B;QAC1D,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;IACzF,CAAC;IAEO,GAAG;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACrD,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAgB;QAClE,IAAI,CAAC;YACJ,gEAAgE;YAChE,yDAAyD;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;gBAC5D,OAAO;YACR,CAAC;YACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,WAAW,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;YAC/B,iEAAiE;YACjE,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE;oBAC7E,WAAW;oBACX,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC;iBAC9C,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CACrE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC7D,CAAC,CAAC,cAAc,CAChB,CAAC;gBACD,KAAuC,EAAE,KAAK,EAAE,EAAE,CAAC;gBACpD,OAAO;YACR,CAAC;YACD,kEAAkE;YAClE,0DAA0D;YAC1D,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxI,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,WAAmB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wDAAwD,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;QACxH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAChG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACxI,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,WAAmB;QACtC,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAEO,IAAI,CAAC,WAAmB,EAAE,OAAe,EAAE,GAAW;QAC7D,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iFAAiF,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3H,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,WAAmB,EAAE,OAAe,EAAE,MAAc,EAAE,QAAgB;QACzF,mEAAmE;QACnE,8CAA8C;QAC9C,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;gBACrF,OAAO;YACR,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,WAAW;QACZ,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,oCAAoC,CAAC,CAAC;YACtE,OAAO;QACR,CAAC;QACD,IAAI,MAA4B,CAAC;QACjC,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACtF,CAAC;QACD,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO;QAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,oCAAoC,CAAC,CAAC;YACtE,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,iCAAiC,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACxI,CAAC;IAEO,MAAM,CAAC,WAAmB,EAAE,OAAe,EAAE,MAAc,EAAE,WAAoB,EAAE,GAA+B;QACzH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9H,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CACvH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAC1I,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,kCAAkC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;QACjE,MAAM,IAAI,GACT,GAAG,KAAK,QAAQ;YACf,CAAC,CAAC,WAAW;gBACZ,CAAC,CAAC,GAAG,IAAI,wBAAwB,MAAM,IAAI;gBAC3C,CAAC,CAAC,GAAG,IAAI,kDAAkD,MAAM,IAAI;YACtE,CAAC,CAAC,GAAG,IAAI,2EAA2E,MAAM,IAAI,CAAC;QACjG,MAAM,WAAW,GAChB,WAAW,KAAK,yBAAyB;YACxC,CAAC,CAAC,+HAA+H;YACjI,CAAC,CAAC,mBAAmB,IAAI,8EAA8E,IAAI,uBAAuB,CAAC;QACrI,MAAM,IAAI,GAAG,GAAG,IAAI,sBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,WAAW,+CAA+C,CAAC;QAC3I,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9H,CAAC;IACF,CAAC;IAEO,KAAK;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC;QAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC;CACD;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,OAAe,EAAE,GAAW;IAC5C,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,SAAS,CAAC;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;QAChF,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM;QACzB,IAAI,GAAG,IAAI,CAAC;IACb,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,IAAI,QAAQ,GAAuC,IAAI,CAAC;AAExD,qEAAqE;AACrE,MAAM,UAAU,8BAA8B;IAC7C,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,8BAA8B,CAAC,OAA2C;IACzF,QAAQ,GAAG,OAAO,CAAC;AACpB,CAAC"}
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import type { ChatChannelDTO, ChatMessageDTO } from './types.js';
23
23
  import type { ChatV2MentionResolver, MentionTarget } from './chat-v2.mention-resolver.js';
24
+ import { RoomContextBacklog } from './room-context-backlog.js';
24
25
  /**
25
26
  * Minimal surface the dispatcher needs from the agent-registration service.
26
27
  * Typed explicitly so tests can pass a stub without pulling in the full
@@ -69,6 +70,12 @@ export interface HuddleDispatchOutcome {
69
70
  responseMode: 'required' | 'optional';
70
71
  /** Whether the prompt was successfully queued for the member. */
71
72
  dispatched: boolean;
73
+ /**
74
+ * The agent was busy: the prompt waits on its queue (`[AGENT_BUSY]` hold)
75
+ * and reaches it when it is idle. It holds the message — nobody else should
76
+ * be handed it meanwhile.
77
+ */
78
+ queued?: boolean;
72
79
  /** Error message, if delivery failed. */
73
80
  error?: string;
74
81
  /**
@@ -109,6 +116,51 @@ export interface DispatchMessageResult {
109
116
  * `responseMode: 'required'`; the rest are `'optional'`.
110
117
  */
111
118
  huddleOutcomes?: HuddleDispatchOutcome[];
119
+ /**
120
+ * One-responder dispatches (Slack rooms): local members that were not
121
+ * delivered the message but got it queued as context only, for their
122
+ * next prompt from this room (specs/2026-10-03-one-responder-per-message.md).
123
+ */
124
+ contextOnly?: string[];
125
+ }
126
+ /**
127
+ * A responder fixed by the caller from data only it has
128
+ * (specs/2026-10-03-one-responder-per-message.md §1 a / c).
129
+ */
130
+ export interface PinnedResponder {
131
+ /**
132
+ * The local member that answers. Null: nobody here answers — the
133
+ * decision path already delivered it, or the responder runs on another
134
+ * machine.
135
+ */
136
+ session: string | null;
137
+ /** The responder's display name, for the context-only line */
138
+ name?: string;
139
+ /** Why this responder */
140
+ reason: 'decision' | 'decision-consumed' | 'thread-owner' | 'deferred';
141
+ /** Who answers it, wherever it runs (local session or Cloud's name); recorded for the reply gate */
142
+ answeredBy?: string;
143
+ /**
144
+ * Nobody here answers, but this machine runs the 90 s unanswered watch
145
+ * (it is the room's owner machine): an owner message is never left
146
+ * without a watcher (specs/2026-10-03-one-responder-per-message.md §4).
147
+ */
148
+ watchHere?: boolean;
149
+ /**
150
+ * With `watchHere`: this machine only tells the owner if nobody has
151
+ * answered by `NOTE_ONLY_WATCH_MS`, and never hands the message over — it
152
+ * is not the room's watcher, or cannot tell whether it is.
153
+ */
154
+ watchNoteOnly?: boolean;
155
+ /** A local member that already holds the message (the decision's asker): no context entry for it */
156
+ alreadyHas?: string;
157
+ }
158
+ /** One responder per owner message (Slack rooms). */
159
+ export interface OneResponderOptions {
160
+ /** Set when the caller already knows the responder (decision card, Slack thread owner) */
161
+ pinned?: PinnedResponder;
162
+ /** Display name of a local session, for the context-only line */
163
+ nameFor?: (agentSession: string) => string | undefined;
112
164
  }
113
165
  /** Constructor options for {@link ChatV2DispatcherService}. */
114
166
  export interface ChatV2DispatcherOptions {
@@ -182,6 +234,8 @@ export interface ChatV2DispatcherOptions {
182
234
  * would rather not spend the tokens simply leaves it out.
183
235
  */
184
236
  recentTurnsFor?: (channelId: string, threadId?: string) => readonly ChatContextTurn[];
237
+ /** Context-only queue (one-responder rooms); a private one when omitted */
238
+ contextBacklog?: RoomContextBacklog;
185
239
  }
186
240
  /** One earlier message, as the prompt will show it. */
187
241
  export interface ChatContextTurn {
@@ -279,6 +333,13 @@ export interface FormatPromptArgs {
279
333
  slackThreadKey?: string;
280
334
  /** See {@link DispatchMessageOptions.peopleAddressing}. */
281
335
  peopleAddressing?: PeopleAddressing;
336
+ /**
337
+ * Set when this agent is the one responder the harness chose for the
338
+ * room; the others only got the message as context.
339
+ */
340
+ soleResponder?: boolean;
341
+ /** Context-only room messages queued since this agent's last prompt from the room, rendered */
342
+ contextOnlyBlock?: string;
282
343
  }
283
344
  /**
284
345
  * Who a Slack room message was meant for, when people are involved — the
@@ -333,6 +394,12 @@ export interface DispatchMessageOptions {
333
394
  slackContextFor?: (agentSession: string) => string;
334
395
  /** People the message (or the exchange it may continue) was addressed to; rendered as an `Addressed to:` line. */
335
396
  peopleAddressing?: PeopleAddressing;
397
+ /**
398
+ * Choose exactly one responder; every other member gets the message as
399
+ * context only (specs/2026-10-03-one-responder-per-message.md). Omitted:
400
+ * the older fan-out (chat-UI huddles, agent-authored messages).
401
+ */
402
+ oneResponder?: OneResponderOptions;
336
403
  }
337
404
  /** What the Slack bridge knows about a room's presence, from this machine's point of view. */
338
405
  export interface HuddleRoomState {
@@ -414,6 +481,11 @@ export declare function isSilentByDefault(addressing: PeopleAddressing | undefin
414
481
  * @returns The line, or null when there is nothing to say
415
482
  */
416
483
  export declare function peopleAddressingLine(args: FormatPromptArgs, mode: 'required' | 'optional'): string | null;
484
+ /**
485
+ * Told to the one agent the harness picked to answer a room message
486
+ * (specs/2026-10-03-one-responder-per-message.md).
487
+ */
488
+ export declare const SOLE_RESPONDER_LINE = "Responder: you are the one agent answering this for the room; the others only see it as context and will not reply. If a colleague should answer instead, @ them in your reply.";
417
489
  export declare function defaultFormatPrompt(args: FormatPromptArgs): string;
418
490
  /**
419
491
  * Dispatches user-origin chat messages to the agent session bound to the
@@ -432,6 +504,8 @@ export declare class ChatV2DispatcherService {
432
504
  private readonly recentTurnsFor?;
433
505
  private readonly onDispatched?;
434
506
  private readonly refuseDelivery?;
507
+ /** Room messages queued as context only, shown on each agent's next prompt from the room */
508
+ readonly contextBacklog: RoomContextBacklog;
435
509
  private readonly logger;
436
510
  constructor(options: ChatV2DispatcherOptions);
437
511
  /**
@@ -519,6 +593,18 @@ export declare class ChatV2DispatcherService {
519
593
  * @returns Aggregate result with one outcome per member.
520
594
  */
521
595
  private dispatchHuddleBroadcast;
596
+ /**
597
+ * Queue a room message as context only for the members that are not
598
+ * answering it — no turn, no wake-up. Each sees it at the top of its next
599
+ * prompt from this room (specs/2026-10-03-one-responder-per-message.md).
600
+ *
601
+ * @param channel - The room
602
+ * @param message - The message
603
+ * @param options - Dispatch options (thread id)
604
+ * @param sessions - Members that only listen
605
+ * @param responderName - Who answers it, when anyone does
606
+ */
607
+ private queueContextOnly;
522
608
  /**
523
609
  * Who a huddle message will be delivered to, and which of them owe a reply —
524
610
  * without delivering it.
@@ -547,6 +633,37 @@ export declare class ChatV2DispatcherService {
547
633
  * @returns Targets with their reply obligation, who was @'d, and who was woken to route it
548
634
  */
549
635
  private computeHuddleTargets;
636
+ /**
637
+ * Exactly one responder (specs/2026-10-03-one-responder-per-message.md §1):
638
+ * b. @-mentioned members (an explicit @ always wins) → required;
639
+ * a/c. the caller's pinned responder — the decision's asker, or the
640
+ * Slack thread's owner (null: nobody here) → required;
641
+ * c'. no pin, a thread reply: the agent that spoke last in it here;
642
+ * d. otherwise the room rules, narrowed to one: the leader when awake,
643
+ * else the awake agent that spoke last in the room, else the first
644
+ * awake one — optional, as the leader always was. Nobody awake: the
645
+ * existing wake-up rules.
646
+ * Every other member listens: context only.
647
+ *
648
+ * @param channel - The huddle
649
+ * @param message - The message
650
+ * @param options - Dispatch options
651
+ * @param one - The one-responder options
652
+ * @param memberSet - Members that may hear it (author excluded)
653
+ * @param mentioned - Members @'d
654
+ * @returns Targets, context-only members and the responder's name
655
+ */
656
+ private computeOneResponder;
657
+ /**
658
+ * Of several awake members, the one that answers an un-@'d message: the
659
+ * room's leader, else whoever of them spoke last in the room, else the
660
+ * first by session name (a stable choice).
661
+ *
662
+ * @param channelId - The room
663
+ * @param awake - Awake members (non-empty)
664
+ * @returns One of them
665
+ */
666
+ private pickOneAwake;
550
667
  /**
551
668
  * Deliver a huddle message to the targets {@link computeHuddleTargets} chose.
552
669
  *
@@ -1 +1 @@
1
- {"version":3,"file":"chat-v2.dispatcher.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EACV,qBAAqB,EAErB,aAAa,EACd,MAAM,+BAA+B,CAAC;AAYvC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACtF;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,MAAM,EAAE,aAAa,CAAC;IACtB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,iEAAiE;IACjE,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;OAMG;IACH,QAAQ,EAAE,IAAI,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,MAAM,CAAC;IAClE,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC3C;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC1C;AAED,+DAA+D;AAC/D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,CAAC;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzH;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAClD;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IAC5D;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IACnF,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9E;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChE;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,eAAe,EAAE,CAAC;CACvF;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;IAC1C,iFAAiF;IACjF,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;IAC1C;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;IACzE,6DAA6D;IAC7D,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;IAC1C;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,kHAAkH;IAClH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,GAAG,cAAc,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3F;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS,CAK9F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS,CAK9F;AAED;;;;;;;;GAQG;AACH;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAkB3E;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,EAC/C,IAAI,EAAE,UAAU,GAAG,UAAU,EAC7B,iBAAiB,EAAE,OAAO,GAAG,SAAS,GACrC,OAAO,CAKT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAezG;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAiGlE;AAMD;;;;GAIG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAwB;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAA2C;IAC7E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAA6D;IACpG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAyD;IAC/F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAgD;IACjF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAuE;IACvG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA0C;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA4C;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,OAAO,EAAE,uBAAuB;IAe5C;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU;IAuBlB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,eAAe,CACnB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;IAgBjC;;;;;;OAMG;YACW,SAAS;IASvB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAcrB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;YAQV,KAAK;IAgCnB;;;;;;;;;;;;;;;;;;;OAmBG;YACW,uBAAuB;IAkCrC;;;;;;;;;;;;;;;;OAgBG;IACG,iBAAiB,CACrB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IAOhD;;;;;;;;OAQG;YACW,oBAAoB;IAqFlC;;;;;;;;;;;OAWG;YACW,sBAAsB;IAsGpC;;;;;;;;;;;;OAYG;YACW,uBAAuB;IAuFrC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,eAAe,CACnB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,CAAM,GAC5D,OAAO,CAAC,cAAc,CAAC;CA+F3B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAOtF"}
1
+ {"version":3,"file":"chat-v2.dispatcher.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.dispatcher.service.ts"],"names":[],"mappings":"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"}