crewly 1.20.193 → 1.20.195

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 (407) hide show
  1. package/config/roles/auditor/prompt.md +2 -2
  2. package/config/roles/orchestrator/fragments/communication.md +1 -1
  3. package/config/roles/orchestrator/prompt.md +15 -505
  4. package/config/skills/agent/computer-use/SKILL.md +6 -0
  5. package/config/skills/agent/core/experiment-card/SKILL.md +101 -0
  6. package/config/skills/agent/core/experiment-card/execute.sh +149 -0
  7. package/config/skills/agent/core/experiment-card/execute.test.sh +97 -0
  8. package/config/skills/agent/desktop-app-control/execute.sh +5 -2
  9. package/config/skills/orchestrator/send-message/execute.sh +19 -2
  10. package/config/skills/orchestrator/send-message/execute.test.sh +80 -0
  11. package/config/skills/registry.json +7 -5
  12. package/config/skills/team-leader/signal-digest/SKILL.md +110 -0
  13. package/config/skills/team-leader/signal-digest/execute.sh +173 -0
  14. package/config/skills/team-leader/signal-digest/execute.test.sh +123 -0
  15. package/config/skills/team-leader/signal-digest/signal-digest.config.example.json +23 -0
  16. package/config/skills/team-leader/signal-digest/signal_digest.py +572 -0
  17. package/config/skills/team-leader/signal-digest/signal_digest.test.py +319 -0
  18. package/dist/backend/backend/src/constants.d.ts +191 -1
  19. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  20. package/dist/backend/backend/src/constants.js +194 -1
  21. package/dist/backend/backend/src/constants.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/chat/chat.controller.js +6 -0
  24. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  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 +3 -1
  27. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts +27 -0
  29. package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
  30. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
  31. package/dist/backend/backend/src/controllers/experiments/experiments.routes.js.map +1 -0
  32. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts +1 -0
  33. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
  35. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  36. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  37. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
  38. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  39. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
  41. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  42. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
  44. package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
  46. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
  47. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
  48. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
  49. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +47 -0
  50. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
  51. package/dist/backend/backend/src/controllers/trace/trace.controller.js +169 -0
  52. package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
  53. package/dist/backend/backend/src/index.d.ts.map +1 -1
  54. package/dist/backend/backend/src/index.js +66 -20
  55. package/dist/backend/backend/src/index.js.map +1 -1
  56. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  57. package/dist/backend/backend/src/routes/api.routes.js +14 -0
  58. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  59. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/agent/agent-registration.service.js +6 -1
  61. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  64. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  65. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  66. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  68. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
  70. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  71. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  72. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  73. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  75. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  76. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  77. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
  79. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  80. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
  81. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
  83. package/dist/backend/backend/src/services/canva/canva-token.service.js +5 -0
  84. package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
  85. package/dist/backend/backend/src/services/chat/chat.service.d.ts +78 -2
  86. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/chat/chat.service.js +210 -26
  88. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +14 -3
  90. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +28 -4
  92. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  93. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  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 +7 -4
  96. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  98. package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
  99. package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
  100. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
  101. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
  103. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  104. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +88 -0
  105. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
  106. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
  107. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
  108. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +350 -0
  109. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
  110. package/dist/backend/backend/src/services/experiments/experiment.service.js +908 -0
  111. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
  112. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +88 -0
  113. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
  114. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +162 -0
  115. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
  116. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +67 -0
  117. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
  118. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +133 -0
  119. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
  120. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +5 -0
  122. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  123. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  125. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +11 -3
  127. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +24 -7
  129. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
  131. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +5 -0
  132. package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
  133. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  134. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
  136. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  138. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +12 -3
  139. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  140. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
  142. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  143. package/dist/backend/backend/src/services/people/acting-for.service.d.ts +42 -5
  144. package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -1
  145. package/dist/backend/backend/src/services/people/acting-for.service.js +80 -5
  146. package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -1
  147. package/dist/backend/backend/src/services/people/grant-sharing.d.ts +5 -4
  148. package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -1
  149. package/dist/backend/backend/src/services/people/grant-sharing.js +12 -4
  150. package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -1
  151. package/dist/backend/backend/src/services/people/people-directory.service.d.ts +71 -13
  152. package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -1
  153. package/dist/backend/backend/src/services/people/people-directory.service.js +164 -27
  154. package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -1
  155. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  156. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +2 -0
  157. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  158. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  159. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
  160. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  161. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  162. package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
  163. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  164. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
  165. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
  166. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
  167. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
  168. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
  169. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
  170. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
  171. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
  172. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
  173. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
  174. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
  175. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
  176. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
  177. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
  178. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
  179. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
  180. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
  181. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
  182. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
  183. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
  184. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
  185. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  186. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
  187. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  188. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts +33 -0
  189. package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
  190. package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
  191. package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
  192. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +14 -1
  193. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +30 -10
  195. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  196. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
  197. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/slack/slack.service.d.ts +31 -1
  199. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/slack/slack.service.js +52 -7
  201. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  202. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
  203. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
  204. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
  206. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  207. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  208. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
  209. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  210. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +195 -0
  211. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  212. package/dist/backend/backend/src/services/trace/trace-context.service.js +432 -0
  213. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
  214. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +42 -0
  215. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
  216. package/dist/backend/backend/src/services/trace/trace-http.middleware.js +146 -0
  217. package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
  218. package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
  219. package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  220. package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
  221. package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
  222. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +290 -0
  223. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  224. package/dist/backend/backend/src/services/trace/trace-recorder.js +669 -0
  225. package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
  226. package/dist/backend/backend/src/services/trace/trace-store.d.ts +269 -0
  227. package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
  228. package/dist/backend/backend/src/services/trace/trace-store.js +602 -0
  229. package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
  230. package/dist/backend/backend/src/services/trace/trace.types.d.ts +118 -0
  231. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
  232. package/dist/backend/backend/src/services/trace/trace.types.js +85 -0
  233. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
  234. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
  235. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  237. package/dist/backend/backend/src/services/v3/request.service.js +4 -0
  238. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  239. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +22 -2
  241. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  242. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  243. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  244. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  245. package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
  246. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
  247. package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
  248. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  249. package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
  250. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  251. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  252. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  253. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
  254. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  255. package/dist/backend/backend/src/types/experiment.types.d.ts +155 -0
  256. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
  257. package/dist/backend/backend/src/types/experiment.types.js +32 -0
  258. package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
  259. package/dist/backend/backend/src/types/messaging.types.d.ts +6 -0
  260. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  261. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  262. package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
  263. package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
  264. package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
  265. package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
  266. package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
  267. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  268. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  269. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +4 -0
  270. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  271. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
  272. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  273. package/dist/backend/backend/src/utils/security.d.ts +2 -0
  274. package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
  275. package/dist/backend/backend/src/utils/security.js +3 -1
  276. package/dist/backend/backend/src/utils/security.js.map +1 -1
  277. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
  278. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  279. package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
  280. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  281. package/dist/backend/build-info.json +2 -2
  282. package/dist/cli/backend/src/constants.d.ts +191 -1
  283. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  284. package/dist/cli/backend/src/constants.js +194 -1
  285. package/dist/cli/backend/src/constants.js.map +1 -1
  286. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  287. package/dist/cli/backend/src/services/agent/agent-registration.service.js +6 -1
  288. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  289. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -1
  290. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
  291. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -1
  292. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  293. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  294. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  295. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  296. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
  297. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  298. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  299. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  300. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  301. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  302. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  303. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  304. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  305. package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
  306. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  307. package/dist/cli/backend/src/services/chat/chat.service.d.ts +185 -0
  308. package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/chat/chat.service.js +558 -0
  310. package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +14 -3
  312. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  313. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +28 -4
  314. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  315. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  316. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  317. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  318. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  319. package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  320. package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
  321. package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
  322. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  323. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  324. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  325. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +11 -3
  326. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  327. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +24 -7
  328. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  329. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  330. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  331. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
  332. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  333. package/dist/cli/backend/src/services/people/acting-for.service.d.ts +42 -5
  334. package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -1
  335. package/dist/cli/backend/src/services/people/acting-for.service.js +80 -5
  336. package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -1
  337. package/dist/cli/backend/src/services/people/people-directory.service.d.ts +71 -13
  338. package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -1
  339. package/dist/cli/backend/src/services/people/people-directory.service.js +164 -27
  340. package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -1
  341. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  342. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +2 -0
  343. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  344. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
  346. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  347. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +14 -1
  348. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  349. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +30 -10
  350. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  351. package/dist/cli/backend/src/services/slack/slack.service.d.ts +31 -1
  352. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  353. package/dist/cli/backend/src/services/slack/slack.service.js +52 -7
  354. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  355. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  356. package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
  357. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  358. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  359. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
  360. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  361. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +195 -0
  362. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  363. package/dist/cli/backend/src/services/trace/trace-context.service.js +432 -0
  364. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
  365. package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
  366. package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  367. package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
  368. package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
  369. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +290 -0
  370. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  371. package/dist/cli/backend/src/services/trace/trace-recorder.js +669 -0
  372. package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
  373. package/dist/cli/backend/src/services/trace/trace-store.d.ts +269 -0
  374. package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
  375. package/dist/cli/backend/src/services/trace/trace-store.js +602 -0
  376. package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
  377. package/dist/cli/backend/src/services/trace/trace.types.d.ts +118 -0
  378. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
  379. package/dist/cli/backend/src/services/trace/trace.types.js +85 -0
  380. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
  381. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  382. package/dist/cli/backend/src/services/v3/request.service.js +4 -0
  383. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  384. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +3 -1
  385. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  386. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  387. package/dist/cli/backend/src/types/messaging.types.d.ts +6 -0
  388. package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
  389. package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
  390. package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
  391. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  392. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  393. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +4 -0
  394. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  395. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
  396. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  397. package/dist/cli/backend/src/utils/security.d.ts +196 -0
  398. package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
  399. package/dist/cli/backend/src/utils/security.js +538 -0
  400. package/dist/cli/backend/src/utils/security.js.map +1 -0
  401. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
  402. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  403. package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
  404. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
  405. package/frontend/dist/assets/{index-465d1f8f.js → index-800118ca.js} +274 -274
  406. package/frontend/dist/index.html +1 -1
  407. package/package.json +1 -1
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Signal digest — wiring with the real Slack, project tickets and teams
3
+ * (#987, specs/2026-10-03-signal-digest.md). Process-specific hooks (how to
4
+ * reach an agent) come from `index.ts`.
5
+ *
6
+ * @module services/signal-digest/signal-digest.wiring
7
+ */
8
+ import { LoggerService } from '../core/logger.service.js';
9
+ import { getSlackService } from '../slack/slack.service.js';
10
+ import { getSlackInstanceRegistryService } from '../slack/slack-instance-registry.service.js';
11
+ import { getSlackTeamChannelService } from '../slack/slack-team-channel.service.js';
12
+ import { createAgentSlackIdentityResolver, isDecisionOwner } from '../decisions/decision.wiring.js';
13
+ import { teamOfSession } from '../decisions/decision-routing.js';
14
+ import { SignalDigestService } from './signal-digest.service.js';
15
+ import { SignalDigestStore } from './signal-digest-store.js';
16
+ const logger = LoggerService.getInstance().createComponentLogger('SignalDigest');
17
+ /**
18
+ * Open a Do ticket as the owner (who clicked Do). When the lead's team is not
19
+ * on the site's project, the ticket is opened without a team rather than not
20
+ * at all.
21
+ *
22
+ * @param workflow - Ticket workflow
23
+ * @param input - Ticket
24
+ * @returns The new ticket's id
25
+ */
26
+ export async function createSignalTicket(workflow, input) {
27
+ const body = {
28
+ title: input.title,
29
+ description: input.description,
30
+ acceptance: input.acceptance,
31
+ labels: input.labels,
32
+ status: 'ready',
33
+ source: input.source,
34
+ };
35
+ if (!input.team)
36
+ return workflow.create(input.project, body, {});
37
+ try {
38
+ return await workflow.create(input.project, { ...body, team: input.team }, {});
39
+ }
40
+ catch (err) {
41
+ const status = err.status;
42
+ if (status !== 400)
43
+ throw err;
44
+ logger.info('Signal digest ticket: team not on the project — opening it without a team', { project: input.project, team: input.team });
45
+ return workflow.create(input.project, body, {});
46
+ }
47
+ }
48
+ /**
49
+ * Build the service with the real collaborators.
50
+ *
51
+ * @param input - Composition-root hooks
52
+ * @returns The service
53
+ */
54
+ export function createSignalDigestService(input) {
55
+ return new SignalDigestService({
56
+ store: SignalDigestStore.inHome(input.crewlyHome),
57
+ slack: () => getSlackService(),
58
+ instanceId: () => getSlackInstanceRegistryService()?.getInstanceId() ?? '',
59
+ isOwner: isDecisionOwner,
60
+ identityOf: createAgentSlackIdentityResolver(input.getTeams),
61
+ teamOf: async (session) => teamOfSession(session, await input.getTeams()),
62
+ teamChannelOf: async (teamId) => {
63
+ const mappings = (await getSlackTeamChannelService()?.listMappings().catch(() => [])) ?? [];
64
+ return mappings.find((m) => m.teamId === teamId)?.slackChannelId ?? null;
65
+ },
66
+ ownerDmOf: async (identity) => {
67
+ const slack = getSlackService();
68
+ const owner = slack.getOwnerUserId?.() ?? null;
69
+ return owner ? slack.openDirectMessage(owner, identity.botToken) : null;
70
+ },
71
+ displayName: async (session) => {
72
+ const teams = await input.getTeams().catch(() => []);
73
+ return teams.flatMap((t) => t.members ?? []).find((m) => m.sessionName === session)?.name || undefined;
74
+ },
75
+ createTicket: async (ticket) => {
76
+ const { projectTicketWorkflow } = await import('../../controllers/project-tickets/project-tickets.controller.js');
77
+ return createSignalTicket(projectTicketWorkflow(), ticket);
78
+ },
79
+ createExperiment: async (experiment, caller) => {
80
+ const { ExperimentService } = await import('../experiments/experiment.service.js');
81
+ const service = ExperimentService.getInstance();
82
+ if (!service)
83
+ throw new Error('experiment cards are not running on this instance');
84
+ return service.create(experiment, caller);
85
+ },
86
+ deliverToAgent: input.sendToAgent,
87
+ notifyOwner: async ({ title, message, urgent }) => {
88
+ const slack = getSlackService();
89
+ if (!slack.isConnected())
90
+ return false;
91
+ return slack.sendNotification({ type: 'project_update', title, message, urgency: urgent ? 'high' : 'normal', timestamp: new Date().toISOString() });
92
+ },
93
+ logger,
94
+ });
95
+ }
96
+ /**
97
+ * Subscribe the service to Slack button clicks (Cloud relay, Socket Mode, HTTP).
98
+ *
99
+ * @param service - Signal digest service
100
+ * @returns Unsubscribe
101
+ */
102
+ export function attachSignalDigestSlackListeners(service) {
103
+ const slack = getSlackService();
104
+ const onInteraction = (event) => {
105
+ void service
106
+ .handleInteraction(event.payload)
107
+ .then((out) => {
108
+ if (out.handled || out.reason !== 'not a signal digest action')
109
+ logger.debug('Signal digest interaction', { source: event.source, handled: out.handled, reason: out.reason });
110
+ })
111
+ .catch((err) => logger.warn('Signal digest interaction failed', { error: err instanceof Error ? err.message : String(err) }));
112
+ };
113
+ slack.on('interaction', onInteraction);
114
+ return () => slack.off('interaction', onInteraction);
115
+ }
116
+ //# sourceMappingURL=signal-digest.wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-digest.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest.wiring.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,11 @@ export declare class NotifyReconciliationService {
35
35
  * Start the reconciliation scheduler.
36
36
  *
37
37
  * Schedules the first run after a startup delay (to allow the Slack bridge
38
- * to initialize), then runs at a regular interval.
38
+ * to initialize), then runs at a regular interval. Idempotent: a second
39
+ * call is a no-op both while the startup delay is pending and after the
40
+ * interval is running (guarding only on the interval handle would let a
41
+ * second call during the startup delay schedule a duplicate chain whose
42
+ * timer `stop()` could no longer clear).
39
43
  */
40
44
  start(): void;
41
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"notify-reconciliation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/notify-reconciliation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,2BAA2B;IACvC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,SAAS,CAAS;;IAM1B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAwBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;;;;;;;OAQG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmGxC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CAcpC"}
1
+ {"version":3,"file":"notify-reconciliation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/notify-reconciliation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,2BAA2B;IACvC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,SAAS,CAAS;;IAM1B;;;;;;;;;OASG;IACH,KAAK,IAAI,IAAI;IAwBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;;;;;;;OAQG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmGxC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CAcpC"}
@@ -42,10 +42,14 @@ export class NotifyReconciliationService {
42
42
  * Start the reconciliation scheduler.
43
43
  *
44
44
  * Schedules the first run after a startup delay (to allow the Slack bridge
45
- * to initialize), then runs at a regular interval.
45
+ * to initialize), then runs at a regular interval. Idempotent: a second
46
+ * call is a no-op both while the startup delay is pending and after the
47
+ * interval is running (guarding only on the interval handle would let a
48
+ * second call during the startup delay schedule a duplicate chain whose
49
+ * timer `stop()` could no longer clear).
46
50
  */
47
51
  start() {
48
- if (this.intervalHandle) {
52
+ if (this.intervalHandle || this.startupTimerHandle) {
49
53
  this.logger.debug('Reconciliation already started');
50
54
  return;
51
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notify-reconciliation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/notify-reconciliation.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify-reconciliation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/notify-reconciliation.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Whether a Slack user id is one of Crewly's own bots — the master bot or an
3
+ * agent's bot (issue #968). A bot is never a person: it is not added to the
4
+ * people directory and never becomes the person an agent acts for.
5
+ *
6
+ * Synchronous and best effort: it reads what is already loaded (the Cloud
7
+ * Slack config, the agent identity store, the master bot's cached id).
8
+ *
9
+ * @module services/slack/slack-bot-ids
10
+ */
11
+ /** Where bot ids come from (injectable for tests). */
12
+ export interface SlackBotIdSources {
13
+ /** Agent session for an agent bot's user id, or null */
14
+ findAgentByBotUserId?: (slackUserId: string) => string | null | undefined;
15
+ /** Bot user ids from the Cloud Slack config (master bot and every agent bot) */
16
+ cloudBotUserIds?: () => readonly string[];
17
+ /** The master bot's user id when known */
18
+ masterBotUserId?: () => string | null | undefined;
19
+ }
20
+ /**
21
+ * Whether a Slack user id is a Crewly bot.
22
+ *
23
+ * @param slackUserId - Slack user id
24
+ * @param sources - Where to look (default: the backend's Slack services)
25
+ * @returns True for the master bot or an agent's bot; false when unknown or on any error
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * isCrewlyBotUserId('U0BOTDEV1'); // true when it is an agent's bot
30
+ * ```
31
+ */
32
+ export declare function isCrewlyBotUserId(slackUserId: string, sources?: SlackBotIdSources): boolean;
33
+ //# sourceMappingURL=slack-bot-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bot-ids.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-bot-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IACjC,wDAAwD;IACxD,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1E,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAC1C,0CAA0C;IAC1C,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAClD;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAkC,GAAG,OAAO,CAe3G"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Whether a Slack user id is one of Crewly's own bots — the master bot or an
3
+ * agent's bot (issue #968). A bot is never a person: it is not added to the
4
+ * people directory and never becomes the person an agent acts for.
5
+ *
6
+ * Synchronous and best effort: it reads what is already loaded (the Cloud
7
+ * Slack config, the agent identity store, the master bot's cached id).
8
+ *
9
+ * @module services/slack/slack-bot-ids
10
+ */
11
+ import { getSlackAgentIdentityService } from './slack-agent-identity.service.js';
12
+ import { getSlackCloudConfigService } from './slack-cloud-config.service.js';
13
+ import { getSlackService } from './slack.service.js';
14
+ /** The backend's sources. */
15
+ const defaultSources = {
16
+ findAgentByBotUserId: (id) => getSlackAgentIdentityService()?.findByBotUserId(id) ?? null,
17
+ cloudBotUserIds: () => {
18
+ const config = getSlackCloudConfigService()?.getConfig();
19
+ if (!config)
20
+ return [];
21
+ return [config.workspace?.botUserId, ...(config.agents ?? []).map((a) => a.botUserId)].filter((id) => !!id);
22
+ },
23
+ masterBotUserId: () => getSlackService().getCachedBotUserId?.() ?? null,
24
+ };
25
+ /**
26
+ * Whether a Slack user id is a Crewly bot.
27
+ *
28
+ * @param slackUserId - Slack user id
29
+ * @param sources - Where to look (default: the backend's Slack services)
30
+ * @returns True for the master bot or an agent's bot; false when unknown or on any error
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * isCrewlyBotUserId('U0BOTDEV1'); // true when it is an agent's bot
35
+ * ```
36
+ */
37
+ export function isCrewlyBotUserId(slackUserId, sources = defaultSources) {
38
+ if (!slackUserId)
39
+ return false;
40
+ const tries = [
41
+ () => !!sources.findAgentByBotUserId?.(slackUserId),
42
+ () => (sources.cloudBotUserIds?.() ?? []).includes(slackUserId),
43
+ () => sources.masterBotUserId?.() === slackUserId,
44
+ ];
45
+ for (const t of tries) {
46
+ try {
47
+ if (t())
48
+ return true;
49
+ }
50
+ catch {
51
+ // one source failing does not decide
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+ //# sourceMappingURL=slack-bot-ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bot-ids.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-bot-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAYrD,6BAA6B;AAC7B,MAAM,cAAc,GAAgC;IACnD,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,4BAA4B,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC,IAAI,IAAI;IACzF,eAAe,EAAE,GAAG,EAAE;QACrB,MAAM,MAAM,GAAG,0BAA0B,EAAE,EAAE,SAAS,EAAE,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3H,CAAC;IACD,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,kBAAkB,EAAE,EAAE,IAAI,IAAI;CACvE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,UAA6B,cAAc;IACjG,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,KAAK,GAAyB;QACnC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,WAAW,CAAC;QACnD,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC/D,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,KAAK,WAAW;KACjD,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC;YACJ,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACR,qCAAqC;QACtC,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -7,6 +7,7 @@
7
7
  * @module services/slack/bridge
8
8
  */
9
9
  import { EventEmitter } from 'events';
10
+ import type { SourceMetadata } from '../../types/messaging.types.js';
10
11
  import { SlackIncomingMessage, SlackNotification, SlackConversationContext, ParsedSlackCommand } from '../../types/slack.types.js';
11
12
  import type { MessageQueueService } from '../messaging/message-queue.service.js';
12
13
  import type { SlackThreadStoreService } from './slack-thread-store.service.js';
@@ -64,6 +65,17 @@ export declare function deriveSlackThreadName(content: string | undefined): stri
64
65
  * mentionedBotUserIds('<@U01> hi <@U02>') // ['U01', 'U02']
65
66
  */
66
67
  export declare function mentionedBotUserIds(text: string | undefined): string[];
68
+ /**
69
+ * The acting-for part of a queued Slack message's source metadata (issue
70
+ * #968): the human who sent this very message (`actingForUserId`;
71
+ * `userId` is the thread starter), or — for a post an agent wrote — that
72
+ * agent (`authorAgentSession`), so its bot user id is never taken for a person.
73
+ *
74
+ * @param context - Conversation context (`messageUserId` = this message's sender)
75
+ * @param authorAgentSession - Set when an agent wrote the message
76
+ * @returns Metadata fields to spread into `sourceMetadata`
77
+ */
78
+ export declare function slackActingForMetadata(context: Pick<SlackConversationContext, 'messageUserId'> | undefined | null, authorAgentSession: string | undefined): Pick<SourceMetadata, 'actingForUserId' | 'authorAgentSession'>;
67
79
  /**
68
80
  * Put the Slack context block in front of the text an agent is handed.
69
81
  * Only the delivered copy carries it; the persisted chat row does not, so
@@ -489,8 +501,9 @@ export declare class SlackOrchestratorBridge extends EventEmitter {
489
501
  * Send proactive notification to Slack
490
502
  *
491
503
  * @param notification - Notification to send
504
+ * @returns True when it was delivered (false: notifications off, or no channel)
492
505
  */
493
- sendNotification(notification: SlackNotification): Promise<void>;
506
+ sendNotification(notification: SlackNotification): Promise<boolean>;
494
507
  /**
495
508
  * Send a content approval notification to Slack with Block Kit buttons.
496
509
  *
@@ -1 +1 @@
1
- {"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"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"}
@@ -113,6 +113,21 @@ export function mentionedBotUserIds(text) {
113
113
  }
114
114
  return out;
115
115
  }
116
+ /**
117
+ * The acting-for part of a queued Slack message's source metadata (issue
118
+ * #968): the human who sent this very message (`actingForUserId`;
119
+ * `userId` is the thread starter), or — for a post an agent wrote — that
120
+ * agent (`authorAgentSession`), so its bot user id is never taken for a person.
121
+ *
122
+ * @param context - Conversation context (`messageUserId` = this message's sender)
123
+ * @param authorAgentSession - Set when an agent wrote the message
124
+ * @returns Metadata fields to spread into `sourceMetadata`
125
+ */
126
+ export function slackActingForMetadata(context, authorAgentSession) {
127
+ if (authorAgentSession)
128
+ return { authorAgentSession };
129
+ return context?.messageUserId ? { actingForUserId: context.messageUserId } : {};
130
+ }
116
131
  /**
117
132
  * Put the Slack context block in front of the text an agent is handed.
118
133
  * Only the delivered copy carries it; the persisted chat row does not, so
@@ -885,8 +900,9 @@ Just type naturally to chat with the orchestrator!`;
885
900
  conversationId: result.conversation.id,
886
901
  source: 'slack',
887
902
  sourceMetadata: {
888
- // The sender of this very message (context.userId is the thread starter) — issue #968
889
- actingForUserId: context?.messageUserId,
903
+ // Whom the turn acts for (issue #968): this message's human sender, or
904
+ // the agent that wrote it — never the agent's bot user id.
905
+ ...slackActingForMetadata(context, authorAgentSession),
890
906
  userId: context?.userId,
891
907
  channelId: context?.channelId,
892
908
  threadTs: context?.threadTs,
@@ -987,8 +1003,9 @@ Just type naturally to chat with the orchestrator!`;
987
1003
  conversationId: result.conversation.id,
988
1004
  source: 'slack',
989
1005
  sourceMetadata: {
990
- // The sender of this very message (context.userId is the thread starter) — issue #968
991
- actingForUserId: context?.messageUserId,
1006
+ // Whom the turn acts for (issue #968): this message's human sender, or
1007
+ // the agent that wrote it — never the agent's bot user id.
1008
+ ...slackActingForMetadata(context, authorAgentSession),
992
1009
  slackResolve: (resp) => {
993
1010
  if (!resolved) {
994
1011
  resolved = true;
@@ -1128,8 +1145,9 @@ Just type naturally to chat with the orchestrator!`;
1128
1145
  source: 'slack',
1129
1146
  targetSession: auditorSession,
1130
1147
  sourceMetadata: {
1131
- // The sender of this very message (context.userId is the thread starter) — issue #968
1132
- actingForUserId: context?.messageUserId,
1148
+ // Whom the turn acts for (issue #968): this message's human sender, or
1149
+ // the agent that wrote it — never the agent's bot user id.
1150
+ ...slackActingForMetadata(context, authorAgentSession),
1133
1151
  slackResolve: undefined,
1134
1152
  userId: context?.userId,
1135
1153
  channelId: context?.channelId,
@@ -1769,11 +1787,12 @@ Just type naturally to chat with the orchestrator!`;
1769
1787
  * Send proactive notification to Slack
1770
1788
  *
1771
1789
  * @param notification - Notification to send
1790
+ * @returns True when it was delivered (false: notifications off, or no channel)
1772
1791
  */
1773
1792
  async sendNotification(notification) {
1774
1793
  if (!this.config.enableNotifications)
1775
- return;
1776
- await this.slackService.sendNotification(notification);
1794
+ return false;
1795
+ return this.slackService.sendNotification(notification);
1777
1796
  }
1778
1797
  /**
1779
1798
  * Send a content approval notification to Slack with Block Kit buttons.
@@ -2040,8 +2059,9 @@ Just type naturally to chat with the orchestrator!`;
2040
2059
  source: 'slack',
2041
2060
  targetSession: sessionName,
2042
2061
  sourceMetadata: {
2043
- // The sender of this very message (context.userId is the thread starter) — issue #968
2044
- actingForUserId: context?.messageUserId,
2062
+ // Whom the turn acts for (issue #968): this message's human sender, or
2063
+ // the agent that wrote it — never the agent's bot user id.
2064
+ ...slackActingForMetadata(context, authorAgentSession),
2045
2065
  slackResolve: (resp) => {
2046
2066
  if (!resolved) {
2047
2067
  resolved = true;