crewly 1.20.194 → 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 (320) 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 +10 -5
  6. package/config/skills/agent/core/experiment-card/execute.sh +5 -3
  7. package/config/skills/agent/core/experiment-card/execute.test.sh +6 -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 +6 -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 +133 -0
  19. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  20. package/dist/backend/backend/src/constants.js +135 -2
  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/marketplace/marketplace.routes.d.ts +1 -0
  29. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +1 -0
  31. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +5 -2
  34. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/request/request.controller.js +5 -1
  37. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/settings/settings.controller.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/settings/settings.controller.js +18 -2
  40. package/dist/backend/backend/src/controllers/settings/settings.controller.js.map +1 -1
  41. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts +26 -0
  42. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.d.ts.map +1 -0
  43. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js +100 -0
  44. package/dist/backend/backend/src/controllers/signal-digest/signal-digest.controller.js.map +1 -0
  45. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts +47 -0
  46. package/dist/backend/backend/src/controllers/trace/trace.controller.d.ts.map +1 -0
  47. package/dist/backend/backend/src/controllers/trace/trace.controller.js +169 -0
  48. package/dist/backend/backend/src/controllers/trace/trace.controller.js.map +1 -0
  49. package/dist/backend/backend/src/index.d.ts.map +1 -1
  50. package/dist/backend/backend/src/index.js +29 -19
  51. package/dist/backend/backend/src/index.js.map +1 -1
  52. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  53. package/dist/backend/backend/src/routes/api.routes.js +11 -0
  54. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  55. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/agent/agent-registration.service.js +6 -1
  57. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  59. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  61. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +22 -6
  63. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  64. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  65. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  66. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  67. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/backup/backup-archive.service.js +7 -1
  69. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  70. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +1 -1
  71. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/chat/chat.service.d.ts +78 -2
  73. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/chat/chat.service.js +210 -26
  75. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  76. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  77. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  79. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  80. package/dist/backend/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/decisions/decision-store.js +5 -1
  82. package/dist/backend/backend/src/services/decisions/decision-store.js.map +1 -1
  83. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +10 -1
  84. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/decisions/decision.wiring.js +20 -9
  86. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  87. package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts +1 -1
  88. package/dist/backend/backend/src/services/experiments/experiment-verdict.js +2 -2
  89. package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -1
  90. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +52 -3
  91. package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/experiments/experiment.service.js +178 -24
  93. package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +20 -5
  95. package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/experiments/experiment.wiring.js +27 -7
  97. package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -1
  98. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +7 -0
  99. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +21 -1
  101. package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -1
  102. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  104. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  105. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  106. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +4 -0
  108. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  109. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +10 -2
  111. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  112. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +16 -0
  114. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  115. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +2 -0
  117. package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  119. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +15 -0
  120. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  121. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  122. package/dist/backend/backend/src/services/session/session-handoff.service.js +8 -5
  123. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  124. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts +75 -0
  125. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.d.ts.map +1 -0
  126. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js +187 -0
  127. package/dist/backend/backend/src/services/signal-digest/signal-digest-card.js.map +1 -0
  128. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts +86 -0
  129. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.d.ts.map +1 -0
  130. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js +307 -0
  131. package/dist/backend/backend/src/services/signal-digest/signal-digest-contract.js.map +1 -0
  132. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts +85 -0
  133. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.d.ts.map +1 -0
  134. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js +185 -0
  135. package/dist/backend/backend/src/services/signal-digest/signal-digest-store.js.map +1 -0
  136. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts +272 -0
  137. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.d.ts.map +1 -0
  138. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js +570 -0
  139. package/dist/backend/backend/src/services/signal-digest/signal-digest.service.js.map +1 -0
  140. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts +51 -0
  141. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.d.ts.map +1 -0
  142. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js +116 -0
  143. package/dist/backend/backend/src/services/signal-digest/signal-digest.wiring.js.map +1 -0
  144. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts +5 -1
  145. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  146. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +6 -2
  147. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  148. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  149. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  150. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  151. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  152. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts +1 -1
  153. package/dist/backend/backend/src/services/slack/slack-relogin-dm.service.d.ts.map +1 -1
  154. package/dist/backend/backend/src/services/slack/slack.service.d.ts +25 -1
  155. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  156. package/dist/backend/backend/src/services/slack/slack.service.js +44 -7
  157. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  158. package/dist/backend/backend/src/services/system/auto-update.service.d.ts +2 -2
  159. package/dist/backend/backend/src/services/system/auto-update.service.d.ts.map +1 -1
  160. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/task-pool/pool-storage.js +4 -0
  162. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  163. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  164. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
  165. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  166. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts +195 -0
  167. package/dist/backend/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  168. package/dist/backend/backend/src/services/trace/trace-context.service.js +432 -0
  169. package/dist/backend/backend/src/services/trace/trace-context.service.js.map +1 -0
  170. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts +42 -0
  171. package/dist/backend/backend/src/services/trace/trace-http.middleware.d.ts.map +1 -0
  172. package/dist/backend/backend/src/services/trace/trace-http.middleware.js +146 -0
  173. package/dist/backend/backend/src/services/trace/trace-http.middleware.js.map +1 -0
  174. package/dist/backend/backend/src/services/trace/trace-markers.d.ts +93 -0
  175. package/dist/backend/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  176. package/dist/backend/backend/src/services/trace/trace-markers.js +162 -0
  177. package/dist/backend/backend/src/services/trace/trace-markers.js.map +1 -0
  178. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts +290 -0
  179. package/dist/backend/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  180. package/dist/backend/backend/src/services/trace/trace-recorder.js +669 -0
  181. package/dist/backend/backend/src/services/trace/trace-recorder.js.map +1 -0
  182. package/dist/backend/backend/src/services/trace/trace-store.d.ts +269 -0
  183. package/dist/backend/backend/src/services/trace/trace-store.d.ts.map +1 -0
  184. package/dist/backend/backend/src/services/trace/trace-store.js +602 -0
  185. package/dist/backend/backend/src/services/trace/trace-store.js.map +1 -0
  186. package/dist/backend/backend/src/services/trace/trace.types.d.ts +118 -0
  187. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -0
  188. package/dist/backend/backend/src/services/trace/trace.types.js +85 -0
  189. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -0
  190. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts +1 -1
  191. package/dist/backend/backend/src/services/v3/owner-receipt/owner-receipt.boot.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/v3/request.service.js +4 -0
  194. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  196. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +22 -2
  197. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  198. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +3 -0
  199. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +7 -0
  201. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  202. package/dist/backend/backend/src/types/experiment.types.d.ts +8 -6
  203. package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -1
  204. package/dist/backend/backend/src/types/experiment.types.js.map +1 -1
  205. package/dist/backend/backend/src/types/signal-digest.types.d.ts +185 -0
  206. package/dist/backend/backend/src/types/signal-digest.types.d.ts.map +1 -0
  207. package/dist/backend/backend/src/types/signal-digest.types.js +21 -0
  208. package/dist/backend/backend/src/types/signal-digest.types.js.map +1 -0
  209. package/dist/backend/backend/src/types/v2/request.types.d.ts +4 -0
  210. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  211. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  212. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +4 -0
  213. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  214. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
  215. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  216. package/dist/backend/backend/src/utils/security.d.ts +2 -0
  217. package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
  218. package/dist/backend/backend/src/utils/security.js +3 -1
  219. package/dist/backend/backend/src/utils/security.js.map +1 -1
  220. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +9 -0
  221. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  222. package/dist/backend/backend/src/websocket/chat.gateway.js +26 -0
  223. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  224. package/dist/backend/build-info.json +2 -2
  225. package/dist/cli/backend/src/constants.d.ts +133 -0
  226. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  227. package/dist/cli/backend/src/constants.js +135 -2
  228. package/dist/cli/backend/src/constants.js.map +1 -1
  229. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  230. package/dist/cli/backend/src/services/agent/agent-registration.service.js +6 -1
  231. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  232. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +1 -1
  233. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  234. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +4 -2
  235. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  236. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +22 -6
  237. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  238. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +2 -2
  239. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  240. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +6 -0
  241. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  242. package/dist/cli/backend/src/services/backup/backup-archive.service.js +7 -1
  243. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  244. package/dist/cli/backend/src/services/chat/chat.service.d.ts +185 -0
  245. package/dist/cli/backend/src/services/chat/chat.service.d.ts.map +1 -0
  246. package/dist/cli/backend/src/services/chat/chat.service.js +558 -0
  247. package/dist/cli/backend/src/services/chat/chat.service.js.map +1 -0
  248. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +4 -3
  249. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  250. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +7 -4
  251. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  252. package/dist/cli/backend/src/services/decisions/decision-store.d.ts.map +1 -1
  253. package/dist/cli/backend/src/services/decisions/decision-store.js +5 -1
  254. package/dist/cli/backend/src/services/decisions/decision-store.js.map +1 -1
  255. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  256. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +7 -0
  257. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  258. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +7 -0
  259. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  260. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +4 -0
  261. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  262. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
  263. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +2 -0
  264. package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
  265. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  266. package/dist/cli/backend/src/services/session/session-handoff.service.js +8 -5
  267. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  268. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +2 -1
  269. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  270. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +3 -2
  271. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  272. package/dist/cli/backend/src/services/slack/slack.service.d.ts +25 -1
  273. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
  274. package/dist/cli/backend/src/services/slack/slack.service.js +44 -7
  275. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -1
  276. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  277. package/dist/cli/backend/src/services/task-pool/pool-storage.js +4 -0
  278. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  279. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  280. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
  281. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  282. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts +195 -0
  283. package/dist/cli/backend/src/services/trace/trace-context.service.d.ts.map +1 -0
  284. package/dist/cli/backend/src/services/trace/trace-context.service.js +432 -0
  285. package/dist/cli/backend/src/services/trace/trace-context.service.js.map +1 -0
  286. package/dist/cli/backend/src/services/trace/trace-markers.d.ts +93 -0
  287. package/dist/cli/backend/src/services/trace/trace-markers.d.ts.map +1 -0
  288. package/dist/cli/backend/src/services/trace/trace-markers.js +162 -0
  289. package/dist/cli/backend/src/services/trace/trace-markers.js.map +1 -0
  290. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts +290 -0
  291. package/dist/cli/backend/src/services/trace/trace-recorder.d.ts.map +1 -0
  292. package/dist/cli/backend/src/services/trace/trace-recorder.js +669 -0
  293. package/dist/cli/backend/src/services/trace/trace-recorder.js.map +1 -0
  294. package/dist/cli/backend/src/services/trace/trace-store.d.ts +269 -0
  295. package/dist/cli/backend/src/services/trace/trace-store.d.ts.map +1 -0
  296. package/dist/cli/backend/src/services/trace/trace-store.js +602 -0
  297. package/dist/cli/backend/src/services/trace/trace-store.js.map +1 -0
  298. package/dist/cli/backend/src/services/trace/trace.types.d.ts +118 -0
  299. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -0
  300. package/dist/cli/backend/src/services/trace/trace.types.js +85 -0
  301. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -0
  302. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -1
  303. package/dist/cli/backend/src/services/v3/request.service.js +4 -0
  304. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -1
  305. package/dist/cli/backend/src/types/v2/request.types.d.ts +4 -0
  306. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -1
  307. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -1
  308. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +4 -0
  309. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  310. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
  311. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  312. package/dist/cli/backend/src/utils/security.d.ts +196 -0
  313. package/dist/cli/backend/src/utils/security.d.ts.map +1 -0
  314. package/dist/cli/backend/src/utils/security.js +538 -0
  315. package/dist/cli/backend/src/utils/security.js.map +1 -0
  316. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +9 -0
  317. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  318. package/dist/cli/backend/src/websocket/chat.gateway.js +26 -0
  319. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -1
  320. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Durable store of signal digests (#987, specs/2026-10-03-signal-digest.md).
3
+ *
4
+ * One JSON file under CREWLY_HOME with a monotonically increasing id counter,
5
+ * so `SD-3` is never reused. All writes are serialised and atomic. Digests
6
+ * untouched for {@link SIGNAL_DIGEST_CONSTANTS.KEEP_MS} are pruned.
7
+ *
8
+ * @module services/signal-digest/signal-digest-store
9
+ */
10
+ import type { SignalDigest, SignalSiteSources } from '../../types/signal-digest.types.js';
11
+ /**
12
+ * Persistent digest store.
13
+ */
14
+ export declare class SignalDigestStore {
15
+ private readonly filePath;
16
+ private readonly now;
17
+ private data;
18
+ private chain;
19
+ /**
20
+ * @param filePath - JSON file
21
+ * @param now - Clock (tests)
22
+ */
23
+ constructor(filePath: string, now?: () => Date);
24
+ /**
25
+ * Store under a CREWLY_HOME.
26
+ *
27
+ * @param crewlyHome - CREWLY_HOME
28
+ * @returns The store
29
+ */
30
+ static inHome(crewlyHome: string): SignalDigestStore;
31
+ /**
32
+ * Add a digest, assigning its id.
33
+ *
34
+ * @param draft - Digest without id/timestamps
35
+ * @returns The stored digest
36
+ */
37
+ create(draft: Omit<SignalDigest, 'id' | 'createdAt' | 'updatedAt'>): Promise<SignalDigest>;
38
+ /**
39
+ * Change a digest under the write lock.
40
+ *
41
+ * @param id - Digest id
42
+ * @param fn - Gets a copy; returns the new digest, or null to leave it alone
43
+ * @returns The updated digest, or null when missing / unchanged
44
+ */
45
+ update(id: string, fn: (d: SignalDigest) => SignalDigest | null): Promise<SignalDigest | null>;
46
+ /**
47
+ * One digest.
48
+ *
49
+ * @param id - Digest id
50
+ * @returns Copy, or null
51
+ */
52
+ get(id: string): Promise<SignalDigest | null>;
53
+ /**
54
+ * All digests, newest first, optionally filtered.
55
+ *
56
+ * @param filter - Predicate
57
+ * @returns Copies
58
+ */
59
+ list(filter?: (d: SignalDigest) => boolean): Promise<SignalDigest[]>;
60
+ /**
61
+ * A site's latest source report.
62
+ *
63
+ * @param site - Site
64
+ * @returns Copy, or null when none was reported
65
+ */
66
+ getSiteSources(site: string): Promise<SignalSiteSources | null>;
67
+ /**
68
+ * Change a site's source report under the write lock.
69
+ *
70
+ * @param site - Site
71
+ * @param fn - Gets a copy (null when none); returns the new report
72
+ * @returns The stored report
73
+ */
74
+ updateSiteSources(site: string, fn: (cur: SignalSiteSources | null) => SignalSiteSources): Promise<SignalSiteSources>;
75
+ /**
76
+ * Drop digests with nothing open that were last changed before the keep window.
77
+ *
78
+ * @returns How many were dropped
79
+ */
80
+ prune(): Promise<number>;
81
+ private load;
82
+ private save;
83
+ private serial;
84
+ }
85
+ //# sourceMappingURL=signal-digest-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-digest-store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AA8B1F;;GAEG;AACH,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,KAAK,CAAuC;IAEpD;;;OAGG;gBAEgB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,IAAuB;IAGrD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB;IAIpD;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAYhG;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAcpG;;;;;OAKG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAMnD;;;;;OAKG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ1E;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAMrE;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,KAAK,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY3H;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;YAYhB,IAAI;YAUJ,IAAI;IAIlB,OAAO,CAAC,MAAM;CAKf"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Durable store of signal digests (#987, specs/2026-10-03-signal-digest.md).
3
+ *
4
+ * One JSON file under CREWLY_HOME with a monotonically increasing id counter,
5
+ * so `SD-3` is never reused. All writes are serialised and atomic. Digests
6
+ * untouched for {@link SIGNAL_DIGEST_CONSTANTS.KEEP_MS} are pruned.
7
+ *
8
+ * @module services/signal-digest/signal-digest-store
9
+ */
10
+ import * as path from 'path';
11
+ import { SIGNAL_DIGEST_CONSTANTS } from '../../constants.js';
12
+ import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
13
+ /**
14
+ * Store key of a site.
15
+ *
16
+ * @param site - Site
17
+ * @returns Lower-cased, trimmed
18
+ */
19
+ function siteKey(site) {
20
+ return site.trim().toLowerCase();
21
+ }
22
+ /**
23
+ * Deep copy (digests hold nested item arrays).
24
+ *
25
+ * @param d - Digest
26
+ * @returns Independent copy
27
+ */
28
+ function copy(d) {
29
+ return JSON.parse(JSON.stringify(d));
30
+ }
31
+ /**
32
+ * Persistent digest store.
33
+ */
34
+ export class SignalDigestStore {
35
+ filePath;
36
+ now;
37
+ data = null;
38
+ chain = Promise.resolve();
39
+ /**
40
+ * @param filePath - JSON file
41
+ * @param now - Clock (tests)
42
+ */
43
+ constructor(filePath, now = () => new Date()) {
44
+ this.filePath = filePath;
45
+ this.now = now;
46
+ }
47
+ /**
48
+ * Store under a CREWLY_HOME.
49
+ *
50
+ * @param crewlyHome - CREWLY_HOME
51
+ * @returns The store
52
+ */
53
+ static inHome(crewlyHome) {
54
+ return new SignalDigestStore(path.join(crewlyHome, SIGNAL_DIGEST_CONSTANTS.STORE_FILENAME));
55
+ }
56
+ /**
57
+ * Add a digest, assigning its id.
58
+ *
59
+ * @param draft - Digest without id/timestamps
60
+ * @returns The stored digest
61
+ */
62
+ async create(draft) {
63
+ return this.serial(async () => {
64
+ const data = await this.load();
65
+ const at = this.now().toISOString();
66
+ const digest = { ...copy(draft), id: `${SIGNAL_DIGEST_CONSTANTS.ID_PREFIX}${data.nextId}`, createdAt: at, updatedAt: at };
67
+ data.nextId += 1;
68
+ data.digests.push(digest);
69
+ await this.save();
70
+ return copy(digest);
71
+ });
72
+ }
73
+ /**
74
+ * Change a digest under the write lock.
75
+ *
76
+ * @param id - Digest id
77
+ * @param fn - Gets a copy; returns the new digest, or null to leave it alone
78
+ * @returns The updated digest, or null when missing / unchanged
79
+ */
80
+ async update(id, fn) {
81
+ return this.serial(async () => {
82
+ const data = await this.load();
83
+ const idx = data.digests.findIndex((d) => d.id === id);
84
+ if (idx < 0)
85
+ return null;
86
+ const next = fn(copy(data.digests[idx]));
87
+ if (!next)
88
+ return null;
89
+ const stored = { ...next, id, updatedAt: this.now().toISOString() };
90
+ data.digests[idx] = stored;
91
+ await this.save();
92
+ return copy(stored);
93
+ });
94
+ }
95
+ /**
96
+ * One digest.
97
+ *
98
+ * @param id - Digest id
99
+ * @returns Copy, or null
100
+ */
101
+ async get(id) {
102
+ const data = await this.load();
103
+ const d = data.digests.find((x) => x.id === id);
104
+ return d ? copy(d) : null;
105
+ }
106
+ /**
107
+ * All digests, newest first, optionally filtered.
108
+ *
109
+ * @param filter - Predicate
110
+ * @returns Copies
111
+ */
112
+ async list(filter) {
113
+ const data = await this.load();
114
+ return data.digests
115
+ .filter((d) => !filter || filter(d))
116
+ .map(copy)
117
+ .sort((a, b) => Date.parse(b.createdAt) - Date.parse(a.createdAt) || b.id.localeCompare(a.id, undefined, { numeric: true }));
118
+ }
119
+ /**
120
+ * A site's latest source report.
121
+ *
122
+ * @param site - Site
123
+ * @returns Copy, or null when none was reported
124
+ */
125
+ async getSiteSources(site) {
126
+ const data = await this.load();
127
+ const s = data.siteSources[siteKey(site)];
128
+ return s ? JSON.parse(JSON.stringify(s)) : null;
129
+ }
130
+ /**
131
+ * Change a site's source report under the write lock.
132
+ *
133
+ * @param site - Site
134
+ * @param fn - Gets a copy (null when none); returns the new report
135
+ * @returns The stored report
136
+ */
137
+ async updateSiteSources(site, fn) {
138
+ return this.serial(async () => {
139
+ const data = await this.load();
140
+ const key = siteKey(site);
141
+ const cur = data.siteSources[key];
142
+ const next = fn(cur ? JSON.parse(JSON.stringify(cur)) : null);
143
+ data.siteSources[key] = next;
144
+ await this.save();
145
+ return JSON.parse(JSON.stringify(next));
146
+ });
147
+ }
148
+ /**
149
+ * Drop digests with nothing open that were last changed before the keep window.
150
+ *
151
+ * @returns How many were dropped
152
+ */
153
+ async prune() {
154
+ return this.serial(async () => {
155
+ const data = await this.load();
156
+ const cutoff = this.now().getTime() - SIGNAL_DIGEST_CONSTANTS.KEEP_MS;
157
+ const before = data.digests.length;
158
+ data.digests = data.digests.filter((d) => d.items.some((i) => i.status === 'open') || Date.parse(d.updatedAt) >= cutoff);
159
+ const dropped = before - data.digests.length;
160
+ if (dropped > 0)
161
+ await this.save();
162
+ return dropped;
163
+ });
164
+ }
165
+ async load() {
166
+ if (this.data)
167
+ return this.data;
168
+ const raw = await safeReadJson(this.filePath, {});
169
+ const digests = Array.isArray(raw.digests) ? raw.digests : [];
170
+ const maxId = digests.reduce((m, d) => Math.max(m, Number(String(d.id).replace(SIGNAL_DIGEST_CONSTANTS.ID_PREFIX, '')) || 0), 0);
171
+ const siteSources = raw.siteSources && typeof raw.siteSources === 'object' && !Array.isArray(raw.siteSources) ? raw.siteSources : {};
172
+ this.data = { nextId: Math.max(Number(raw.nextId) || 1, maxId + 1), digests, siteSources };
173
+ return this.data;
174
+ }
175
+ async save() {
176
+ if (this.data)
177
+ await atomicWriteJson(this.filePath, this.data);
178
+ }
179
+ serial(fn) {
180
+ const next = this.chain.then(fn, fn);
181
+ this.chain = next.catch(() => undefined);
182
+ return next;
183
+ }
184
+ }
185
+ //# sourceMappingURL=signal-digest-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-digest-store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Daily signal digest (#987, specs/2026-10-03-signal-digest.md).
3
+ *
4
+ * A team lead proposes 3–5 actions for a site (the `signal-digest` skill
5
+ * collects the signals and drafts them). This service:
6
+ * 1. refuses actions the site's history blocks (tried with Do, or skipped
7
+ * recently), and replaces the site's earlier unanswered actions;
8
+ * 2. posts ONE Slack card with Do / Skip per action, from the lead's bot, in
9
+ * the lead's team channel (else the owner's DM);
10
+ * 3. on Do, opens an experiment ticket in the site's project and tells the
11
+ * lead; on Skip, records it so the action stays off the list for a while;
12
+ * 4. keeps each site's signal-source status and tells the owner once when a
13
+ * source starts or stops failing (nothing on the days it does not change).
14
+ *
15
+ * @module services/signal-digest/signal-digest.service
16
+ */
17
+ import type { ComponentLogger } from '../core/logger.service.js';
18
+ import type { DecisionPostIdentity, DecisionSlackApi, BlockActionsPayload } from '../decisions/decision.service.js';
19
+ import type { CreateSignalDigestInput, SignalChoice, SignalDigest, SignalDigestItem, SignalHistoryEntry, SignalSourceReport } from '../../types/signal-digest.types.js';
20
+ import type { SignalDigestStore } from './signal-digest-store.js';
21
+ /** A ticket a Do asks for. */
22
+ export interface SignalTicketInput {
23
+ /** Project reference (name, id or path) */
24
+ project: string;
25
+ /** The lead's team, when known (dropped when it is not on the project) */
26
+ team?: string;
27
+ title: string;
28
+ description: string;
29
+ acceptance: string[];
30
+ labels: string[];
31
+ source: string;
32
+ }
33
+ /** The experiment card a Do asks for (#986): the experiment service's create input. */
34
+ export interface SignalExperimentInput {
35
+ title: string;
36
+ hypothesis: string;
37
+ metric: Record<string, string>;
38
+ ticket: {
39
+ kind: 'project';
40
+ project: string;
41
+ id: string;
42
+ };
43
+ }
44
+ /** Collaborators. */
45
+ export interface SignalDigestServiceDeps {
46
+ store: SignalDigestStore;
47
+ slack: () => DecisionSlackApi | null;
48
+ instanceId: () => string;
49
+ /** Whether a Slack user may answer (the owner) */
50
+ isOwner: (userId: string) => boolean;
51
+ identityOf: (session: string) => Promise<DecisionPostIdentity>;
52
+ teamOf: (session: string) => Promise<string | undefined>;
53
+ teamChannelOf: (teamId: string) => Promise<string | null>;
54
+ /** The owner's DM, opened with that identity (fallback place) */
55
+ ownerDmOf?: (identity: DecisionPostIdentity) => Promise<string | null>;
56
+ displayName?: (session: string) => Promise<string | undefined>;
57
+ /** Open a ticket; returns its id */
58
+ createTicket: (input: SignalTicketInput) => Promise<{
59
+ id: string;
60
+ }>;
61
+ /** Create an experiment card as that session (#986); absent = experiment cards are off */
62
+ createExperiment?: (input: SignalExperimentInput, caller: string) => Promise<{
63
+ id: string;
64
+ }>;
65
+ /** Tell an agent something (wakes it when needed) */
66
+ deliverToAgent: (session: string, text: string) => Promise<boolean>;
67
+ /** Tell the owner (false = not delivered); absent = no source-change notices */
68
+ notifyOwner?: (notice: {
69
+ title: string;
70
+ message: string;
71
+ urgent: boolean;
72
+ }) => Promise<boolean>;
73
+ logger: ComponentLogger;
74
+ now?: () => Date;
75
+ }
76
+ /** What a Slack click did. */
77
+ export interface SignalInteractionOutcome {
78
+ handled: boolean;
79
+ reason: string;
80
+ digest?: SignalDigest;
81
+ }
82
+ /**
83
+ * The description of the ticket a Do opens: the digest item plus the
84
+ * experiment card fields #986 measures (hypothesis, metric, baseline, window).
85
+ *
86
+ * @param digest - Digest
87
+ * @param item - The action
88
+ * @returns Markdown
89
+ */
90
+ export declare function experimentTicketDescription(digest: SignalDigest, item: SignalDigestItem): string;
91
+ /**
92
+ * How a source is named to the owner.
93
+ *
94
+ * @param name - Source name
95
+ * @returns Label
96
+ */
97
+ export declare function sourceLabel(name: string): string;
98
+ /**
99
+ * Signal digests: proposals, the Slack card, the owner's answers.
100
+ */
101
+ export declare class SignalDigestService {
102
+ private readonly deps;
103
+ private static instance;
104
+ private readonly now;
105
+ /** Source reports are handled one at a time (one change notice per change) */
106
+ private sourceChain;
107
+ /**
108
+ * @param deps - Collaborators
109
+ */
110
+ constructor(deps: SignalDigestServiceDeps);
111
+ /** The running service, when started. */
112
+ static getInstance(): SignalDigestService | null;
113
+ /**
114
+ * Set (or clear) the running service.
115
+ *
116
+ * @param service - Service or null
117
+ */
118
+ static setInstance(service: SignalDigestService | null): void;
119
+ /**
120
+ * Propose a digest. The site's earlier unanswered actions are replaced
121
+ * (expired) first; then any action the history still blocks is refused.
122
+ *
123
+ * @param callerSession - Team lead session (X-Agent-Session)
124
+ * @param input - `{ site, project?, config?, items }`
125
+ * @returns The stored digest (with `card`, or `postError` when Slack refused)
126
+ * @throws SignalDigestError(400) for a contract violation, (409) for blocked actions
127
+ */
128
+ propose(callerSession: string | undefined, input: CreateSignalDigestInput): Promise<SignalDigest>;
129
+ /**
130
+ * A site's digest proposed within DUPLICATE_WINDOW_MS that still has open actions.
131
+ *
132
+ * @param site - Site
133
+ * @returns The newest such digest, or null
134
+ */
135
+ private recentOpenDigest;
136
+ /**
137
+ * The site's latest source report, when it is recent enough to describe today's run.
138
+ *
139
+ * @param site - Site
140
+ * @returns Statuses, or undefined
141
+ */
142
+ private latestSources;
143
+ /**
144
+ * A collect run's source statuses (`POST /api/signal-digests/sources`).
145
+ * Stored per site; the owner is told once when a source starts or stops
146
+ * failing — not every day it stays broken.
147
+ *
148
+ * @param callerSession - Team lead session (X-Agent-Session)
149
+ * @param input - `{ site, sources }`
150
+ * @returns What changed and whether the owner was told
151
+ * @throws SignalDigestError(400)
152
+ */
153
+ reportSources(callerSession: string | undefined, input: {
154
+ site?: unknown;
155
+ sources?: unknown;
156
+ }): Promise<SignalSourceReport>;
157
+ /**
158
+ * Store a source report and send the change notice (see {@link reportSources}).
159
+ *
160
+ * @param caller - Reporting session
161
+ * @param site - Site
162
+ * @param sources - Statuses
163
+ * @returns The report outcome
164
+ */
165
+ private recordSources;
166
+ /**
167
+ * The site's blocked keys (Do within 90 days, Skip within 30) and its open ones.
168
+ *
169
+ * @param site - Site
170
+ * @returns History entries
171
+ */
172
+ history(site: string): Promise<SignalHistoryEntry[]>;
173
+ /**
174
+ * Digests, newest first.
175
+ *
176
+ * @param site - Only this site, when given
177
+ * @returns Digests
178
+ */
179
+ list(site?: string): Promise<SignalDigest[]>;
180
+ /**
181
+ * One digest.
182
+ *
183
+ * @param id - Digest id
184
+ * @returns Digest or null
185
+ */
186
+ get(id: string): Promise<SignalDigest | null>;
187
+ /**
188
+ * Answer one action from the dashboard / API (owner only; the caller checks).
189
+ *
190
+ * @param id - Digest id
191
+ * @param n - Item number
192
+ * @param choice - do / skip
193
+ * @returns The updated digest
194
+ * @throws SignalDigestError(404) unknown digest / item, (409) already answered
195
+ */
196
+ choose(id: string, n: number, choice: SignalChoice): Promise<SignalDigest>;
197
+ /**
198
+ * A Slack `block_actions` payload. Ignores anything that is not a click on
199
+ * one of this instance's digest cards by the owner.
200
+ *
201
+ * @param payload - Slack payload
202
+ * @returns What happened
203
+ */
204
+ handleInteraction(payload: BlockActionsPayload): Promise<SignalInteractionOutcome>;
205
+ /**
206
+ * Record the answer; on Do open the ticket and tell the lead; redraw the card.
207
+ *
208
+ * @param id - Digest id
209
+ * @param n - Item number
210
+ * @param choice - do / skip
211
+ * @param by - Slack user id, or `dashboard`
212
+ * @returns The updated digest, or null when the item was not open
213
+ */
214
+ private apply;
215
+ /**
216
+ * Open the experiment ticket of a Do.
217
+ *
218
+ * @param digest - Digest
219
+ * @param item - The action
220
+ * @returns The ticket id, or why there is none
221
+ */
222
+ private openTicket;
223
+ /**
224
+ * Create the experiment card of a Do (#986), linked to its ticket, as the
225
+ * lead (its prediction is recorded under the lead). Only when the action
226
+ * names a metric and the digest has the seo-ops config.
227
+ *
228
+ * @param digest - Digest
229
+ * @param item - The action
230
+ * @param ticketId - The ticket the Do opened
231
+ * @returns The card id, why there is none, or null when none was asked for
232
+ */
233
+ private openExperiment;
234
+ /**
235
+ * What the lead is told after a Do.
236
+ *
237
+ * @param digest - Digest
238
+ * @param item - The answered action
239
+ * @returns Message text
240
+ */
241
+ private doNote;
242
+ /**
243
+ * Replace the site's earlier unanswered actions: they become `expired` and
244
+ * their cards say so.
245
+ *
246
+ * @param site - Site
247
+ */
248
+ private expireOpen;
249
+ /**
250
+ * Post the card: the lead's team channel from the lead's bot, else the
251
+ * owner's DM.
252
+ *
253
+ * @param digest - Digest without a card
254
+ * @returns The digest with `card`, or `postError`
255
+ */
256
+ private postCard;
257
+ /**
258
+ * Redraw a posted card.
259
+ *
260
+ * @param digest - Digest
261
+ * @returns True when Slack accepted the update
262
+ */
263
+ private refreshCard;
264
+ /**
265
+ * Tell the lead (best effort).
266
+ *
267
+ * @param digest - Digest
268
+ * @param text - Message
269
+ */
270
+ private tellAsker;
271
+ }
272
+ //# sourceMappingURL=signal-digest.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-digest.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/signal-digest/signal-digest.service.ts"],"names":[],"mappings":"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"}