crewly 1.6.5 → 1.8.0

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 (338) hide show
  1. package/config/constants.ts +2 -0
  2. package/config/roles/auditor/prompt.md +24 -0
  3. package/config/roles/developer/prompt.md +2 -1
  4. package/config/roles/orchestrator/prompt.md +118 -2
  5. package/config/roles/team-leader/prompt.md +6 -0
  6. package/config/skills/agent/core/create-request/SKILL.md +1 -1
  7. package/config/skills/agent/core/create-request/execute.sh +29 -2
  8. package/config/skills/agent/core/create-request/execute.test.sh +168 -0
  9. package/config/skills/agent/core/report-status/SKILL.md +8 -1
  10. package/config/skills/agent/core/report-status/execute.sh +23 -1
  11. package/config/skills/orchestrator/heartbeat/execute.sh +48 -6
  12. package/config/sops/common/mid-flight-milestone-surface.md +128 -0
  13. package/config/sops/common/owner-facing-communication.md +46 -2
  14. package/config/sops/developer/git-workflow.md +33 -0
  15. package/dist/backend/backend/src/constants.d.ts +13 -0
  16. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  17. package/dist/backend/backend/src/constants.js +12 -0
  18. package/dist/backend/backend/src/constants.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/browser/browser.controller.js +2 -2
  20. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat/chat.controller.js +6 -0
  23. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  24. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +73 -0
  25. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +128 -0
  27. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +3 -0
  29. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +8 -0
  31. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/session/session.controller.js +50 -8
  34. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/slack/slack.controller.js +215 -94
  37. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/team/team.controller.js +27 -0
  40. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  41. package/dist/backend/backend/src/index.d.ts +1 -0
  42. package/dist/backend/backend/src/index.d.ts.map +1 -1
  43. package/dist/backend/backend/src/index.js +201 -37
  44. package/dist/backend/backend/src/index.js.map +1 -1
  45. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  46. package/dist/backend/backend/src/routes/api.routes.js +11 -1
  47. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  48. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +45 -3
  49. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/agent/agent-registration.service.js +219 -7
  51. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +61 -1
  53. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +117 -9
  55. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +44 -0
  57. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +179 -10
  59. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +6 -6
  61. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +3 -3
  63. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -1
  64. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +7 -1
  65. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  67. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +33 -0
  68. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/agent/idle-detection.service.js +108 -4
  70. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/agent/runtime-service.factory.js +4 -4
  72. package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
  73. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +1 -1
  74. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +40 -2
  76. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/chat/chat.service.d.ts +48 -331
  78. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/chat/chat.service.js +261 -712
  80. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  81. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +82 -1
  82. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  83. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +120 -2
  84. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  85. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +114 -0
  86. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -0
  87. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +182 -0
  88. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -0
  89. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts +188 -0
  90. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -0
  91. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +434 -0
  92. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -0
  93. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +401 -5
  94. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +619 -3
  96. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +93 -0
  98. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  99. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +138 -0
  100. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  101. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +46 -0
  102. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +75 -0
  104. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  105. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +10 -2
  106. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +178 -10
  108. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -1
  109. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +37 -0
  110. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  111. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +71 -0
  112. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  113. package/dist/backend/backend/src/services/chat-v2/types.d.ts +33 -1
  114. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  115. package/dist/backend/backend/src/services/chat-v2/types.js +1 -1
  116. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  117. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +22 -0
  118. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  119. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +71 -1
  120. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  121. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +102 -1
  122. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +61 -0
  124. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  125. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +21 -3
  126. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +47 -13
  128. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/core/system-health.util.d.ts +25 -4
  130. package/dist/backend/backend/src/services/core/system-health.util.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/core/system-health.util.js +30 -5
  132. package/dist/backend/backend/src/services/core/system-health.util.js.map +1 -1
  133. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +22 -11
  135. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  136. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/mcp-server.js +5 -0
  138. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  139. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +4 -0
  140. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/mcp-tool-definitions.js +12 -1
  142. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -1
  143. package/dist/backend/backend/src/services/memory/capability-inference.d.ts +73 -0
  144. package/dist/backend/backend/src/services/memory/capability-inference.d.ts.map +1 -0
  145. package/dist/backend/backend/src/services/memory/capability-inference.js +115 -0
  146. package/dist/backend/backend/src/services/memory/capability-inference.js.map +1 -0
  147. package/dist/backend/backend/src/services/memory/memory.service.d.ts +22 -1
  148. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  149. package/dist/backend/backend/src/services/memory/memory.service.js +81 -3
  150. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  151. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts +25 -1
  152. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  153. package/dist/backend/backend/src/services/memory/project-memory.service.js +43 -0
  154. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  155. package/dist/backend/backend/src/services/memory/task-history-seeder.d.ts +47 -0
  156. package/dist/backend/backend/src/services/memory/task-history-seeder.d.ts.map +1 -0
  157. package/dist/backend/backend/src/services/memory/task-history-seeder.js +89 -0
  158. package/dist/backend/backend/src/services/memory/task-history-seeder.js.map +1 -0
  159. package/dist/backend/backend/src/services/memory/task-history.subscriber.d.ts +76 -0
  160. package/dist/backend/backend/src/services/memory/task-history.subscriber.d.ts.map +1 -0
  161. package/dist/backend/backend/src/services/memory/task-history.subscriber.js +199 -0
  162. package/dist/backend/backend/src/services/memory/task-history.subscriber.js.map +1 -0
  163. package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts +2 -4
  164. package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts.map +1 -1
  165. package/dist/backend/backend/src/services/messaging/message-replay.service.js +22 -12
  166. package/dist/backend/backend/src/services/messaging/message-replay.service.js.map +1 -1
  167. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  168. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +25 -5
  169. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  170. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
  171. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +13 -3
  172. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
  173. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts +99 -0
  174. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts.map +1 -0
  175. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js +225 -0
  176. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js.map +1 -0
  177. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +39 -18
  178. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  179. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +60 -32
  180. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  181. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +134 -0
  182. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  183. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +416 -13
  184. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  185. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  186. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +73 -7
  187. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  188. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/session/session-handoff.service.js +30 -4
  190. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/skill/skill-executor.service.js +13 -1
  193. package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
  194. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  195. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +9 -6
  196. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  197. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +21 -2
  198. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  199. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +120 -46
  200. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  201. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/slack/slack.service.js +49 -0
  203. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  204. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +33 -2
  205. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  206. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +160 -8
  207. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  208. package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts.map +1 -1
  209. package/dist/backend/backend/src/services/v3/cascade-request-status.js +55 -2
  210. package/dist/backend/backend/src/services/v3/cascade-request-status.js.map +1 -1
  211. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  212. package/dist/backend/backend/src/services/v3/mission-executor.service.js +9 -1
  213. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  214. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -1
  215. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +28 -3
  216. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -1
  217. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +5 -2
  219. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  220. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -1
  221. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +57 -15
  222. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -1
  223. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +39 -0
  224. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  225. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +81 -0
  226. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  227. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +17 -1
  228. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  229. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +22 -3
  230. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  231. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +1 -1
  232. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
  233. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +26 -10
  234. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
  235. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/workflow/cron-task.service.js +68 -5
  237. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts +44 -0
  239. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts.map +1 -0
  240. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js +57 -0
  241. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js.map +1 -0
  242. package/dist/backend/backend/src/types/credential.types.d.ts +17 -1
  243. package/dist/backend/backend/src/types/credential.types.d.ts.map +1 -1
  244. package/dist/backend/backend/src/types/credential.types.js +15 -5
  245. package/dist/backend/backend/src/types/credential.types.js.map +1 -1
  246. package/dist/backend/backend/src/types/cron-task.types.d.ts +17 -0
  247. package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
  248. package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
  249. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  250. package/dist/backend/backend/src/types/event-bus.types.js +12 -0
  251. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  252. package/dist/backend/backend/src/types/intent-task.types.d.ts +10 -13
  253. package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
  254. package/dist/backend/backend/src/types/intent-task.types.js +4 -1
  255. package/dist/backend/backend/src/types/intent-task.types.js.map +1 -1
  256. package/dist/backend/backend/src/types/memory.types.d.ts +94 -1
  257. package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -1
  258. package/dist/backend/backend/src/types/memory.types.js.map +1 -1
  259. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +23 -0
  260. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  261. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  262. package/dist/backend/backend/src/utils/team.utils.d.ts +3 -1
  263. package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -1
  264. package/dist/backend/backend/src/utils/team.utils.js +26 -5
  265. package/dist/backend/backend/src/utils/team.utils.js.map +1 -1
  266. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +23 -0
  267. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -1
  268. package/dist/backend/backend/src/websocket/chat-v2.gateway.js +56 -7
  269. package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -1
  270. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +19 -4
  271. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  272. package/dist/backend/backend/src/websocket/chat.gateway.js +78 -63
  273. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  274. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  275. package/dist/backend/backend/src/websocket/terminal.gateway.js +10 -2
  276. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  277. package/dist/backend/config/constants.d.ts +2 -0
  278. package/dist/backend/config/constants.d.ts.map +1 -1
  279. package/dist/backend/config/constants.js +2 -0
  280. package/dist/backend/config/constants.js.map +1 -1
  281. package/dist/backend/config/index.d.ts +1 -0
  282. package/dist/backend/config/index.d.ts.map +1 -1
  283. package/dist/cli/backend/src/constants.d.ts +13 -0
  284. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  285. package/dist/cli/backend/src/constants.js +12 -0
  286. package/dist/cli/backend/src/constants.js.map +1 -1
  287. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  288. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +22 -11
  289. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  290. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  291. package/dist/cli/backend/src/services/mcp-server.js +5 -0
  292. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  293. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +4 -0
  294. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -1
  295. package/dist/cli/backend/src/services/mcp-tool-definitions.js +12 -1
  296. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -1
  297. package/dist/cli/backend/src/services/memory/memory.service.d.ts +22 -1
  298. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  299. package/dist/cli/backend/src/services/memory/memory.service.js +81 -3
  300. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  301. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +25 -1
  302. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  303. package/dist/cli/backend/src/services/memory/project-memory.service.js +43 -0
  304. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  305. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  306. package/dist/cli/backend/src/services/skill/skill-executor.service.js +13 -1
  307. package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
  308. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +33 -2
  309. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  310. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +160 -8
  311. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  312. package/dist/cli/backend/src/types/credential.types.d.ts +17 -1
  313. package/dist/cli/backend/src/types/credential.types.d.ts.map +1 -1
  314. package/dist/cli/backend/src/types/credential.types.js +15 -5
  315. package/dist/cli/backend/src/types/credential.types.js.map +1 -1
  316. package/dist/cli/backend/src/types/event-bus.types.d.ts +1 -1
  317. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  318. package/dist/cli/backend/src/types/event-bus.types.js +12 -0
  319. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  320. package/dist/cli/backend/src/types/memory.types.d.ts +94 -1
  321. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -1
  322. package/dist/cli/backend/src/types/memory.types.js.map +1 -1
  323. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +23 -0
  324. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  325. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  326. package/dist/cli/cli/src/commands/start.js +73 -12
  327. package/dist/cli/cli/src/commands/start.js.map +1 -1
  328. package/dist/cli/config/constants.d.ts +2 -0
  329. package/dist/cli/config/constants.d.ts.map +1 -1
  330. package/dist/cli/config/constants.js +2 -0
  331. package/dist/cli/config/constants.js.map +1 -1
  332. package/dist/cli/config/index.d.ts +1 -0
  333. package/dist/cli/config/index.d.ts.map +1 -1
  334. package/frontend/dist/assets/index-b279da34.js +4926 -0
  335. package/frontend/dist/assets/{index-b7e59b2b.css → index-c07e04c0.css} +2 -2
  336. package/frontend/dist/index.html +2 -2
  337. package/package.json +1 -1
  338. package/frontend/dist/assets/index-698305f3.js +0 -5228
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Provider factories backing the chat-v2 controller's `/agents` and
3
+ * `/presence/:agentId` endpoints.
4
+ *
5
+ * These are intentionally kept separate from the controller + service so
6
+ * tests can inject a fixture (`IAgentDirectoryProvider` / `IAgentPresenceProvider`
7
+ * stubs) without spinning up StorageService or the orchestrator-status
8
+ * helper. The production wiring in `api.routes.ts` instantiates them
9
+ * once per request stack and passes them as `ChatV2ControllerDeps`.
10
+ *
11
+ * Why a thin adapter layer over StorageService.getTeams + isAgentActive?
12
+ * - StorageService.getTeams returns the full `Team[]` shape including
13
+ * fields the directory doesn't need (templates, hierarchy graphs,
14
+ * project bindings). The controller's `IAgentDirectoryProvider`
15
+ * contract is intentionally narrow so the route handler stays
16
+ * decoupled from the storage shape.
17
+ * - `isAgentActive` returns a boolean only; the controller's wire DTO
18
+ * wants a `status` union + `lastSeenAt`. We do that mapping here.
19
+ *
20
+ * @module services/chat-v2/chat-v2.providers
21
+ */
22
+ /**
23
+ * Build the production `IAgentDirectoryProvider`. Flattens
24
+ * `StorageService.getTeams()` into the narrow controller-facing shape,
25
+ * filtering out members without a `sessionName` (incomplete team
26
+ * entries, deleted-but-not-purged rows).
27
+ *
28
+ * Also prepends a synthetic Orchestrator Team so the user can DM the
29
+ * orchestrator from /agents without setting up a regular team. This
30
+ * mirrors team.controller's `buildOrchestratorTeam` virtual-team
31
+ * synthesis on the /api/teams endpoint.
32
+ *
33
+ * @param storage - The StorageService instance (or a fixture stub)
34
+ * @param opts.resolveOrchestratorStatus - Optional override for the
35
+ * orchestrator's stored status. Defaults to a lazy import of
36
+ * `StorageService.getOrchestratorStatus()` so tests can inject a stub.
37
+ * Returning null skips the virtual-team prepend entirely.
38
+ * @returns Provider satisfying {@link IAgentDirectoryProvider}
39
+ */
40
+ export function createOssAgentDirectoryProvider(storage, opts = {}) {
41
+ const resolveOrc = opts.resolveOrchestratorStatus ??
42
+ (async () => {
43
+ try {
44
+ // `StorageService.getInstance` is exposed via the same module
45
+ // path used by every other caller (e.g. team.controller). Lazy
46
+ // import keeps the test-only dep optional and avoids a circular
47
+ // resolution when the chat-v2 module loads at boot time.
48
+ const mod = await import('../core/storage.service.js');
49
+ const status = await mod.StorageService.getInstance().getOrchestratorStatus();
50
+ if (!status)
51
+ return null;
52
+ return {
53
+ agentStatus: status.agentStatus,
54
+ workingStatus: status.workingStatus,
55
+ };
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ });
61
+ return {
62
+ async getTeams() {
63
+ const teams = await storage.getTeams();
64
+ const flat = teams.map((t) => ({
65
+ id: t.id,
66
+ name: t.name,
67
+ members: t.members
68
+ .filter((m) => typeof m.sessionName === 'string' && m.sessionName.length > 0)
69
+ .map((m) => ({
70
+ sessionName: m.sessionName,
71
+ name: m.name,
72
+ role: m.role,
73
+ agentStatus: m.agentStatus,
74
+ workingStatus: m.workingStatus,
75
+ avatar: m.avatar,
76
+ })),
77
+ }));
78
+ const orcStatus = await resolveOrc();
79
+ if (orcStatus) {
80
+ flat.unshift({
81
+ id: 'orchestrator',
82
+ name: 'Orchestrator Team',
83
+ members: [
84
+ {
85
+ sessionName: 'crewly-orc',
86
+ name: 'Orchestrator',
87
+ role: 'orchestrator',
88
+ agentStatus: orcStatus.agentStatus,
89
+ workingStatus: orcStatus.workingStatus,
90
+ avatar: undefined,
91
+ },
92
+ ],
93
+ });
94
+ }
95
+ return flat;
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Map the stored `(agentStatus, workingStatus, isActive)` tuple to the
101
+ * presence wire status. The chat-ui client expects the closed set:
102
+ * - `online` : agent is up and idle (ready for a new message)
103
+ * - `busy` : agent is up and working on something
104
+ * - `starting` : agent is registered but session not yet alive
105
+ * - `offline` : everything else (inactive, suspended, crash, …)
106
+ *
107
+ * Single source of truth — exported for tests + presence-aware UI bits.
108
+ *
109
+ * @param isActive - True when the PTY/in-process session is alive
110
+ * @param agentStatus - Stored `agentStatus` from team file
111
+ * @param workingStatus - Stored `workingStatus` from team file
112
+ * @returns Wire-level presence status
113
+ */
114
+ export function resolvePresenceStatus(isActive, agentStatus, workingStatus) {
115
+ if (!isActive) {
116
+ if (agentStatus === 'starting')
117
+ return 'starting';
118
+ return 'offline';
119
+ }
120
+ if (workingStatus === 'in_progress')
121
+ return 'busy';
122
+ return 'online';
123
+ }
124
+ /**
125
+ * Build the production `IAgentPresenceProvider`. Uses
126
+ * {@link IsAgentActiveFn} (defaulting to `isAgentActive` from
127
+ * orchestrator-status) for liveness and falls back to the stored
128
+ * agentStatus/workingStatus for unknown sessions.
129
+ *
130
+ * @param storage - StorageService for member lookups
131
+ * @param opts.isAgentActive - Optional override (tests pass a stub)
132
+ * @param opts.now - Optional clock override (tests freeze the
133
+ * `lastSeenAt` timestamp)
134
+ * @returns Provider satisfying {@link IAgentPresenceProvider}
135
+ */
136
+ export function createOssAgentPresenceProvider(storage, opts = {}) {
137
+ const isActiveFn = opts.isAgentActive ??
138
+ (async (sessionName) => {
139
+ const { isAgentActive } = await import('../orchestrator/orchestrator-status.service.js');
140
+ return isAgentActive(sessionName);
141
+ });
142
+ const now = opts.now ?? Date.now;
143
+ return {
144
+ async getPresence(agentSession) {
145
+ let agentStatus = 'inactive';
146
+ let workingStatus = 'idle';
147
+ try {
148
+ const teams = await storage.getTeams();
149
+ for (const team of teams) {
150
+ const member = team.members.find((m) => m.sessionName === agentSession);
151
+ if (member) {
152
+ agentStatus = member.agentStatus;
153
+ workingStatus = member.workingStatus;
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ catch {
159
+ // Storage failure — treat as offline below. Don't throw; the
160
+ // /presence endpoint should degrade gracefully when the team
161
+ // file is being rewritten under us.
162
+ }
163
+ let active = false;
164
+ try {
165
+ active = await isActiveFn(agentSession);
166
+ }
167
+ catch {
168
+ active = false;
169
+ }
170
+ return {
171
+ agentSession,
172
+ status: resolvePresenceStatus(active, agentStatus, workingStatus),
173
+ // Only stamp `lastSeenAt` when we have a positive liveness signal.
174
+ // The chat-ui surface treats null as "never seen" / "unknown" and
175
+ // hides the timestamp; offline agents would otherwise show a
176
+ // misleading "last seen just now".
177
+ lastSeenAt: active ? now() : null,
178
+ };
179
+ },
180
+ };
181
+ }
182
+ //# sourceMappingURL=chat-v2.providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-v2.providers.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmDH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,+BAA+B,CAC7C,OAA4B,EAC5B,OAEI,EAAE;IAEN,MAAM,UAAU,GACd,IAAI,CAAC,yBAAyB;QAC9B,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,+DAA+D;gBAC/D,gEAAgE;gBAChE,yDAAyD;gBACzD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBAC9E,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACzB,OAAO;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;iBACpC,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,KAAK,CAAC,QAAQ;YACZ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;qBACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;qBAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACX,WAAW,EAAE,CAAC,CAAC,WAAqB;oBACpC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,CAAC,CAAC;aACN,CAAC,CAAC,CAAC;YAEJ,MAAM,SAAS,GAAG,MAAM,UAAU,EAAE,CAAC;YACrC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC;oBACX,EAAE,EAAE,cAAc;oBAClB,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE;wBACP;4BACE,WAAW,EAAE,YAAY;4BACzB,IAAI,EAAE,cAAc;4BACpB,IAAI,EAAE,cAAc;4BACpB,WAAW,EAAE,SAAS,CAAC,WAAW;4BAClC,aAAa,EAAE,SAAS,CAAC,aAAa;4BACtC,MAAM,EAAE,SAAS;yBAClB;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAiB,EACjB,WAAmB,EACnB,aAAqB;IAErB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,WAAW,KAAK,UAAU;YAAE,OAAO,UAAU,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,aAAa,KAAK,aAAa;QAAE,OAAO,MAAM,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA4B,EAC5B,OAGI,EAAE;IAEN,MAAM,UAAU,GACd,IAAI,CAAC,aAAa;QAClB,CAAC,KAAK,EAAE,WAAmB,EAAE,EAAE;YAC7B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CACpC,gDAAgD,CACjD,CAAC;YACF,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAEjC,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,YAAoB;YACpC,IAAI,WAAW,GAAG,UAAU,CAAC;YAC7B,IAAI,aAAa,GAAG,MAAM,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC;oBACxE,IAAI,MAAM,EAAE,CAAC;wBACX,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;wBACjC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;wBACrC,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;gBAC7D,6DAA6D;gBAC7D,oCAAoC;YACtC,CAAC;YAED,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;YAED,OAAO;gBACL,YAAY;gBACZ,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC;gBACjE,mEAAmE;gBACnE,kEAAkE;gBAClE,6DAA6D;gBAC7D,mCAAmC;gBACnC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI;aAClC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * ChatV2RelayAdapter — bridge between the local chat-v2 service and the
3
+ * Cloud relay queue.
4
+ *
5
+ * Two responsibilities:
6
+ *
7
+ * 1. **Inbound RPC** — when a `chat_request` message lands on the local
8
+ * inbound queue, dispatch the named method against ChatV2Service (with
9
+ * the supplied `directory` / `presence` providers for the OSS-only
10
+ * methods), then return a `chat_response` to the originating device.
11
+ *
12
+ * 2. **Outbound events** — register an `onBroadcast` listener on
13
+ * {@link ChatV2Gateway} so every local broadcast (user message + agent
14
+ * reply) is also forwarded as a `chat_event` to all *known Portal
15
+ * devices* (devices that have issued a `chat_request` to this OSS
16
+ * recently). That keeps Portal UI in lockstep with the local one
17
+ * without any additional polling on Portal beyond its existing
18
+ * `/queue/poll` loop.
19
+ *
20
+ * Design notes:
21
+ * - Closed-set method dispatch via the {@link CHAT_RPC_METHODS} table;
22
+ * unknown methods produce `unsupported_method` errors so Portal sees
23
+ * a structured response rather than a hang.
24
+ * - Portal-device tracking is in-memory with an idle TTL (10 min).
25
+ * A Portal that sits silent for >TTL stops receiving chat_events;
26
+ * its next chat_request re-registers it. Survives across local OSS
27
+ * restarts via re-registration on the first chat_request, no
28
+ * persistence required.
29
+ * - Errors from ChatV2Service (ChatError) propagate verbatim via the
30
+ * response envelope so Portal can render the same error UX as the
31
+ * local OSS UI does on the REST surface.
32
+ *
33
+ * @module services/chat-v2/chat-v2.relay-adapter.service
34
+ */
35
+ import type { EventEmitter } from 'events';
36
+ import { type ComponentLogger } from '../core/logger.service.js';
37
+ import { type ChatChannelDTO, type ChatMessageDTO } from './types.js';
38
+ import type { ChatV2Service } from './chat-v2.service.js';
39
+ import type { IAgentDirectoryProvider, IAgentPresenceProvider } from '../../controllers/chat-v2/chat-v2.controller.js';
40
+ /**
41
+ * Wire frame produced by {@link ChatV2Gateway.broadcast} — duplicated here
42
+ * as `unknown`-typed in the relay payload so this module doesn't have to
43
+ * pull in the WebSocket layer's types. We only forward; we do not inspect.
44
+ */
45
+ type GatewayWireEvent = unknown;
46
+ /**
47
+ * Minimal CloudSyncService surface the adapter depends on. Declared
48
+ * narrowly so tests can stub a fake sync without spinning up the real
49
+ * polling loop / fetch lifecycle.
50
+ */
51
+ export interface ICloudSyncLike extends EventEmitter {
52
+ sendMessage(toDeviceId: string, type: 'chat_response' | 'chat_event', payload: unknown): Promise<void>;
53
+ /**
54
+ * Optional queueId-direct send. When present, the adapter prefers it
55
+ * for chat_response routing — Portal's queueId may not yet be in the
56
+ * 30s device-poll cache, and the production relay routes by queueId
57
+ * anyway. Methods without this fall back to sendMessage (stub-friendly).
58
+ */
59
+ sendToPeerQueueId?(peerQueueId: string, type: 'chat_response' | 'chat_event', payload: unknown): Promise<void>;
60
+ }
61
+ /**
62
+ * Minimal ChatV2Gateway surface the adapter depends on — only the
63
+ * `onBroadcast` listener registration.
64
+ */
65
+ export interface IChatV2GatewayLike {
66
+ onBroadcast(listener: (channelId: string, event: GatewayWireEvent) => void): () => void;
67
+ }
68
+ /**
69
+ * Minimal ChatV2DispatcherService surface. Required for the
70
+ * `sendMessage` RPC method — when Portal sends a user message via the
71
+ * relay, the adapter persists it (via ChatV2Service) AND fires the
72
+ * dispatcher so the bound agent's PTY actually receives a
73
+ * `[CHAT:<id>]` prompt. The HTTP controller does the same thing for
74
+ * local /agents traffic; this brings the relay path to parity.
75
+ */
76
+ export interface IChatV2DispatcherLike {
77
+ dispatchMessage(channel: ChatChannelDTO, message: ChatMessageDTO): Promise<unknown>;
78
+ }
79
+ /** Constructor options for {@link ChatV2RelayAdapter}. */
80
+ export interface ChatV2RelayAdapterOptions {
81
+ /** The chat service to dispatch RPC calls against. */
82
+ service: ChatV2Service;
83
+ /** The gateway whose broadcasts we mirror to the relay. */
84
+ gateway: IChatV2GatewayLike;
85
+ /** Cloud sync — used both to listen for chat_request and to send replies. */
86
+ cloudSync: ICloudSyncLike;
87
+ /**
88
+ * Optional ChatV2 dispatcher — fired after a Portal-sourced user
89
+ * `sendMessage` RPC so the bound agent's PTY receives the
90
+ * `[CHAT:<id>]` prompt (mirrors the HTTP controller's post-ack path).
91
+ * When omitted (REST-only tests), Portal messages persist but agents
92
+ * don't react — verify carefully before relying on this fallback.
93
+ */
94
+ dispatcher?: IChatV2DispatcherLike;
95
+ /** Directory provider — backs the `listAgents` RPC method. */
96
+ directory?: IAgentDirectoryProvider;
97
+ /** Presence provider — backs the `getAgentPresence` RPC method. */
98
+ presence?: IAgentPresenceProvider;
99
+ /**
100
+ * Idle TTL for Portal device registration (defaults to 10 min). A
101
+ * Portal device that sits silent longer than this stops receiving
102
+ * forwarded chat_events; the next chat_request re-registers it.
103
+ * Override only in tests.
104
+ */
105
+ portalIdleTtlMs?: number;
106
+ /** Optional logger override (defaults to a fresh component logger). */
107
+ logger?: ComponentLogger;
108
+ /** Optional clock for tests. */
109
+ now?: () => number;
110
+ }
111
+ /**
112
+ * Wraps a ChatV2Service so it can be driven over the Cloud relay queue
113
+ * from Cloud Portal. Single instance per running OSS process; instantiated
114
+ * by `index.ts` once both the gateway and the cloud sync are ready.
115
+ */
116
+ export declare class ChatV2RelayAdapter {
117
+ private readonly service;
118
+ private readonly gateway;
119
+ private readonly cloudSync;
120
+ private readonly dispatcher?;
121
+ private readonly directory?;
122
+ private readonly presence?;
123
+ private readonly portalIdleTtlMs;
124
+ private readonly logger;
125
+ private readonly now;
126
+ /** deviceId → last-seen ms timestamp; used for the portal-idle-TTL filter. */
127
+ private readonly knownPortals;
128
+ /** Cached unsubscribe hooks so {@link stop} can detach cleanly. */
129
+ private unsubscribeMessage;
130
+ private unsubscribeBroadcast;
131
+ constructor(options: ChatV2RelayAdapterOptions);
132
+ /**
133
+ * Wire the adapter to the cloud-sync inbound stream and the gateway's
134
+ * broadcast hook. Idempotent — calling twice is a logged no-op so the
135
+ * server bootstrap can be safe under partial restart sequences.
136
+ */
137
+ start(): void;
138
+ /** Detach all listeners. Safe to call during shutdown. */
139
+ stop(): void;
140
+ /**
141
+ * Number of currently-tracked Portal devices. Exposed for tests and
142
+ * future observability dashboards (e.g. `/api/cloud/status`).
143
+ */
144
+ knownPortalCount(): number;
145
+ /**
146
+ * Wrap {@link dispatchRpc} with the request-envelope unwrap and reply
147
+ * round-trip. Always resolves; any error is mapped to a structured
148
+ * `chat_response` so Portal never hangs on a missing reply.
149
+ *
150
+ * @param msg - Raw IncomingMessage from CloudSyncService
151
+ */
152
+ private handleRequest;
153
+ /**
154
+ * Dispatch one of the closed-set RPC methods. Each branch maps to the
155
+ * equivalent ChatV2Service / directory / presence call.
156
+ *
157
+ * Auth model: the originating Portal device shares an account with this
158
+ * OSS (the relay's `userId` check guarantees it), so we build a
159
+ * `ChatPrincipal` from the OSS's local owner id. Portal cannot
160
+ * impersonate other users — that's enforced at the relay layer.
161
+ *
162
+ * @param method - One of {@link CHAT_RPC_METHODS}
163
+ * @param params - Method-specific args
164
+ * @param fromDevice - The originating Portal device id (for audit)
165
+ * @returns The method-specific result (any JSON-serializable value)
166
+ */
167
+ private dispatchRpc;
168
+ /**
169
+ * Fan a gateway broadcast out to every currently-known Portal device.
170
+ * Drops expired (idle > TTL) entries inline so the set self-cleans.
171
+ *
172
+ * @param channelId - The channel whose timeline changed
173
+ * @param event - The gateway wire event (typed `unknown` here so this
174
+ * module doesn't import the WS layer's types)
175
+ */
176
+ private handleBroadcast;
177
+ /** Evict Portal device entries whose last-seen is older than the TTL. */
178
+ private pruneExpiredPortals;
179
+ private buildPrincipal;
180
+ private requireString;
181
+ private optionalString;
182
+ private optionalNumber;
183
+ private serializeChannel;
184
+ private serializeMessage;
185
+ private errorEnvelope;
186
+ }
187
+ export {};
188
+ //# sourceMappingURL=chat-v2.relay-adapter.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-v2.relay-adapter.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.relay-adapter.service.ts"],"names":[],"mappings":"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"}