crewly 1.20.356 → 1.20.359

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 (277) hide show
  1. package/config/constants.ts +11 -0
  2. package/dist/backend/backend/src/constants.d.ts +313 -17
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +316 -17
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/index.d.ts +21 -0
  7. package/dist/backend/backend/src/index.d.ts.map +1 -1
  8. package/dist/backend/backend/src/index.js +232 -15
  9. package/dist/backend/backend/src/index.js.map +1 -1
  10. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  11. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/agent/agent-registration.service.js +27 -2
  13. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  14. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  15. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  17. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  18. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +8 -0
  19. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/idle-detection.service.js +26 -2
  21. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  23. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/agent/resource-mode.service.js +16 -0
  25. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  26. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  27. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +126 -11
  29. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  30. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  31. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  33. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts +150 -0
  35. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js +324 -0
  37. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +9 -7
  39. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +19 -17
  41. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -1
  42. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/memory/memory.service.js +11 -0
  44. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
  46. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/memory/startup-briefing.service.js +345 -0
  48. package/dist/backend/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  50. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  52. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts +24 -1
  54. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js +54 -3
  56. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js.map +1 -1
  57. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +9 -0
  58. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +16 -2
  60. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts +30 -0
  62. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts.map +1 -0
  63. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js +48 -0
  64. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js.map +1 -0
  65. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +8 -0
  66. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +29 -8
  68. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  69. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +27 -0
  70. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +78 -24
  72. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +23 -0
  74. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +38 -1
  76. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  77. package/dist/backend/backend/src/services/session/session-binding.d.ts +25 -2
  78. package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/session/session-binding.js +32 -4
  80. package/dist/backend/backend/src/services/session/session-binding.js.map +1 -1
  81. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts +119 -0
  82. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/slack/agent-coordination.js +174 -0
  84. package/dist/backend/backend/src/services/slack/agent-coordination.js.map +1 -0
  85. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -0
  87. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  88. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  89. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +619 -9
  91. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  93. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +49 -12
  95. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  97. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  98. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  99. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  100. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +21 -1
  101. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/team-move/team-move-chat.js +54 -2
  103. package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -1
  104. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +9 -4
  105. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/team-move/team-move-exporter.js +32 -10
  107. package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -1
  108. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +19 -0
  109. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/team-move/team-move-importer.js +78 -3
  111. package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -1
  112. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/team-move/team-move-runtime.js +8 -0
  114. package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -1
  115. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts +106 -0
  116. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts.map +1 -0
  117. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js +212 -0
  118. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js.map +1 -0
  119. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +20 -0
  120. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -1
  122. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -2
  123. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +11 -4
  125. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +3 -0
  128. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +4 -1
  131. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  133. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +4 -0
  134. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  135. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
  136. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  138. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +3 -1
  141. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
  142. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts +141 -0
  143. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js +324 -0
  145. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js.map +1 -0
  146. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  147. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js +222 -0
  149. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  150. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts +93 -0
  151. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js +142 -0
  153. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js.map +1 -0
  154. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts +104 -0
  155. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js +192 -0
  157. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js.map +1 -0
  158. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +3 -2
  159. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
  160. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +23 -39
  161. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
  162. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts +105 -0
  163. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts.map +1 -0
  164. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js +195 -0
  165. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js.map +1 -0
  166. package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +3 -0
  168. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -1
  169. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  170. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  171. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +96 -25
  172. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  173. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  174. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  175. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  176. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  177. package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
  178. package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
  179. package/dist/backend/backend/src/services/wiki/work-record-transcript.js +194 -0
  180. package/dist/backend/backend/src/services/wiki/work-record-transcript.js.map +1 -0
  181. package/dist/backend/backend/src/services/wiki/work-record.d.ts +239 -0
  182. package/dist/backend/backend/src/services/wiki/work-record.d.ts.map +1 -0
  183. package/dist/backend/backend/src/services/wiki/work-record.js +631 -0
  184. package/dist/backend/backend/src/services/wiki/work-record.js.map +1 -0
  185. package/dist/backend/backend/src/services/wiki/work-record.service.d.ts +209 -0
  186. package/dist/backend/backend/src/services/wiki/work-record.service.d.ts.map +1 -0
  187. package/dist/backend/backend/src/services/wiki/work-record.service.js +514 -0
  188. package/dist/backend/backend/src/services/wiki/work-record.service.js.map +1 -0
  189. package/dist/backend/build-info.json +2 -2
  190. package/dist/backend/config/constants.d.ts +11 -0
  191. package/dist/backend/config/constants.d.ts.map +1 -1
  192. package/dist/backend/config/constants.js +11 -0
  193. package/dist/backend/config/constants.js.map +1 -1
  194. package/dist/cli/backend/src/constants.d.ts +313 -17
  195. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  196. package/dist/cli/backend/src/constants.js +316 -17
  197. package/dist/cli/backend/src/constants.js.map +1 -1
  198. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  199. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  200. package/dist/cli/backend/src/services/agent/agent-registration.service.js +27 -2
  201. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  202. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  203. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  204. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  205. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  206. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  207. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  208. package/dist/cli/backend/src/services/agent/resource-mode.service.js +16 -0
  209. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  210. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  211. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  212. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +126 -11
  213. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  214. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  215. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  216. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  217. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  218. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  219. package/dist/cli/backend/src/services/memory/memory.service.js +11 -0
  220. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  221. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
  222. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  223. package/dist/cli/backend/src/services/memory/startup-briefing.service.js +345 -0
  224. package/dist/cli/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  225. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  226. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  227. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  228. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  229. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts +119 -0
  230. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  231. package/dist/cli/backend/src/services/slack/agent-coordination.js +174 -0
  232. package/dist/cli/backend/src/services/slack/agent-coordination.js.map +1 -0
  233. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  234. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  235. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +619 -9
  236. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  237. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  238. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  239. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +49 -12
  240. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  241. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  242. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  243. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  244. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  245. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
  246. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  247. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  248. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  249. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  250. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  251. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js +222 -0
  252. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  253. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
  254. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
  255. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js +105 -0
  256. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
  257. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  258. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  259. package/dist/cli/backend/src/services/wiki/wiki-search.service.js +96 -25
  260. package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  261. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  262. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  263. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  264. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  265. package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
  266. package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
  267. package/dist/cli/backend/src/services/wiki/work-record-transcript.js +194 -0
  268. package/dist/cli/backend/src/services/wiki/work-record-transcript.js.map +1 -0
  269. package/dist/cli/backend/src/services/wiki/work-record.d.ts +239 -0
  270. package/dist/cli/backend/src/services/wiki/work-record.d.ts.map +1 -0
  271. package/dist/cli/backend/src/services/wiki/work-record.js +631 -0
  272. package/dist/cli/backend/src/services/wiki/work-record.js.map +1 -0
  273. package/dist/cli/config/constants.d.ts +11 -0
  274. package/dist/cli/config/constants.d.ts.map +1 -1
  275. package/dist/cli/config/constants.js +11 -0
  276. package/dist/cli/config/constants.js.map +1 -1
  277. package/package.json +1 -1
@@ -76,6 +76,11 @@ export declare function claimsTeam(info: Pick<PersistedSessionInfo, 'teamId' | '
76
76
  * ```
77
77
  */
78
78
  export declare function resolvePersistedSessions(sessions: ReadonlyArray<PersistedSessionInfo>, teams: ReadonlyArray<BindingTeam>): ResolvedPersistedSessions;
79
+ /** A restore target resolved to the member bound to its name. */
80
+ export interface TargetBinding extends SessionBinding {
81
+ /** The bound session name */
82
+ name: string;
83
+ }
79
84
  /** Which persisted sessions startup auto-restore relaunches, and why the rest are skipped. */
80
85
  export interface AutoRestoreSelection {
81
86
  /** Sessions to relaunch, each under a bound name (or claiming no team). */
@@ -89,6 +94,14 @@ export interface AutoRestoreSelection {
89
94
  }>;
90
95
  /** Bound sessions skipped because no pending WorkItem targets them. */
91
96
  skippedNoWork: string[];
97
+ /**
98
+ * Targets that were not running at shutdown (absent from the persisted
99
+ * state) but are bound team members: they are owed something and come
100
+ * back from their binding (crewly#1348).
101
+ */
102
+ fromTargets: TargetBinding[];
103
+ /** Targets absent from the persisted state that are not launchable: unbound, or held back. */
104
+ droppedTargets: string[];
92
105
  }
93
106
  /**
94
107
  * Choose the persisted sessions startup auto-restore relaunches.
@@ -101,15 +114,25 @@ export interface AutoRestoreSelection {
101
114
  * A rebound session also counts work that still targets its old name. If
102
115
  * the pool could not be read (`targets === null`), the gate is skipped
103
116
  * (the pre-existing safety valve: better to over-restore than strand work).
117
+ * 3. Owed but idle: a target that is not in the persisted state at all (the
118
+ * agent had been idle-stopped before the shutdown) is still relaunched
119
+ * when a team member is bound to that name and `heldBack` does not refuse
120
+ * it (owner-stopped, paused or moved-away team). Pia promised the owner a
121
+ * follow-up, was idle-stopped, and the next restart only filtered the
122
+ * persisted sessions, so she never came back (2026-10-16, crewly#1348).
104
123
  *
105
124
  * @param input - Persisted sessions (orchestrator/auditor already removed),
106
- * the teams (or null), and the names targeted by pending WorkItems (or null).
107
- * @returns The sessions to relaunch and the reasons others were dropped.
125
+ * the teams (or null), the names targeted by pending WorkItems, interrupted
126
+ * turns, queued messages, owed promises and owner threads (or null), and an
127
+ * optional predicate for targets that must stay down.
128
+ * @returns The sessions to relaunch, the targets to relaunch from their
129
+ * binding, and the reasons others were dropped.
108
130
  */
109
131
  export declare function selectAutoRestoreSessions(input: {
110
132
  sessions: ReadonlyArray<PersistedSessionInfo>;
111
133
  teams: ReadonlyArray<BindingTeam> | null;
112
134
  targets: ReadonlySet<string> | null;
135
+ heldBack?: (sessionName: string) => boolean;
113
136
  }): AutoRestoreSelection;
114
137
  /**
115
138
  * Delete the Claude Code agent file Crewly generated for a session
@@ -1 +1 @@
1
- {"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAUrG;AAkBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAE3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,yBAAyB,CAoC3B;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACpC,2EAA2E;IAC3E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC9C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACpC,GAAG,oBAAoB,CAwBvB;AAKD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlH"}
1
+ {"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAUrG;AAkBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAE3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,yBAAyB,CAoC3B;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAc,SAAQ,cAAc;IACpD,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACpC,2EAA2E;IAC3E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,8FAA8F;IAC9F,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC9C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C,GAAG,oBAAoB,CA4CvB;AAKD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlH"}
@@ -123,10 +123,19 @@ export function resolvePersistedSessions(sessions, teams) {
123
123
  * A rebound session also counts work that still targets its old name. If
124
124
  * the pool could not be read (`targets === null`), the gate is skipped
125
125
  * (the pre-existing safety valve: better to over-restore than strand work).
126
+ * 3. Owed but idle: a target that is not in the persisted state at all (the
127
+ * agent had been idle-stopped before the shutdown) is still relaunched
128
+ * when a team member is bound to that name and `heldBack` does not refuse
129
+ * it (owner-stopped, paused or moved-away team). Pia promised the owner a
130
+ * follow-up, was idle-stopped, and the next restart only filtered the
131
+ * persisted sessions, so she never came back (2026-10-16, crewly#1348).
126
132
  *
127
133
  * @param input - Persisted sessions (orchestrator/auditor already removed),
128
- * the teams (or null), and the names targeted by pending WorkItems (or null).
129
- * @returns The sessions to relaunch and the reasons others were dropped.
134
+ * the teams (or null), the names targeted by pending WorkItems, interrupted
135
+ * turns, queued messages, owed promises and owner threads (or null), and an
136
+ * optional predicate for targets that must stay down.
137
+ * @returns The sessions to relaunch, the targets to relaunch from their
138
+ * binding, and the reasons others were dropped.
130
139
  */
131
140
  export function selectAutoRestoreSessions(input) {
132
141
  let bound;
@@ -141,16 +150,35 @@ export function selectAutoRestoreSessions(input) {
141
150
  ({ launchable: bound, unbound, rebound } = resolvePersistedSessions(input.sessions, input.teams));
142
151
  }
143
152
  if (input.targets === null) {
144
- return { sessions: bound, unbound, rebound, skippedNoWork: [] };
153
+ return { sessions: bound, unbound, rebound, skippedNoWork: [], fromTargets: [], droppedTargets: [] };
145
154
  }
146
155
  const targets = input.targets;
147
156
  const oldName = new Map(rebound.map((r) => [r.to, r.from]));
148
157
  const hasWork = (s) => targets.has(s.name) || targets.has(oldName.get(s.name) ?? '');
158
+ const sessions = bound.filter(hasWork);
159
+ // Targets no persisted entry covers (under the bound name, the stale name
160
+ // or at all): relaunch the bound ones from the team config.
161
+ const persisted = new Set([...input.sessions.map((s) => s.name), ...sessions.map((s) => s.name)]);
162
+ const bindings = input.teams === null ? new Map() : collectSessionBindings(input.teams);
163
+ const fromTargets = [];
164
+ const droppedTargets = [];
165
+ for (const name of targets) {
166
+ if (persisted.has(name))
167
+ continue;
168
+ const binding = bindings.get(name);
169
+ if (!binding || input.heldBack?.(name)) {
170
+ droppedTargets.push(name);
171
+ continue;
172
+ }
173
+ fromTargets.push({ name, ...binding });
174
+ }
149
175
  return {
150
- sessions: bound.filter(hasWork),
176
+ sessions,
151
177
  unbound,
152
178
  rebound,
153
179
  skippedNoWork: bound.filter((s) => !hasWork(s)).map((s) => s.name),
180
+ fromTargets,
181
+ droppedTargets,
154
182
  };
155
183
  }
156
184
  /** Marker Crewly writes into the frontmatter of the agent files it generates. */
@@ -1 +1 @@
1
- {"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Agent-to-agent coordination in Slack rooms (crewly#1340).
3
+ *
4
+ * 2026-10-16, #content-team: Ella, Max and Sam — all on the owner's Mac —
5
+ * posted 20+ top-level Slack messages to each other in 90 minutes ("@Max
6
+ * CREW-718 step 1 of 2 done…", "@Sam Got it, going with your first
7
+ * option…", "@Sam 1.0.217 is live…"). Each one was a new unread for the
8
+ * owner, who does not need that discussion; internal ticket ids leaked into
9
+ * every post; and Ella sent Sam the same conclusion three times.
10
+ *
11
+ * The model is a company group chat: whoever the room asked is the room's
12
+ * one voice; it reaches its helpers privately, and posts one update when
13
+ * their result is in. The pure pieces of that live here:
14
+ * - {@link classifyAgentAddressing}: whom an agent's room post is for —
15
+ * only agents on this machine (stays inside Crewly), agents elsewhere
16
+ * (Slack, in a thread), or anyone else (unchanged);
17
+ * - {@link stripTicketIds}: internal ticket ids out of anything an agent
18
+ * posts to Slack, for real ticket prefixes only;
19
+ * - {@link CoordinationDedupe}: the same agent sending a near-identical
20
+ * message to the same recipients in the same room within 15 minutes.
21
+ *
22
+ * @module services/slack/agent-coordination
23
+ */
24
+ /** Whom an agent's room post addresses. */
25
+ export type AgentAddressing =
26
+ /** Only agents running on this machine: delivered inside Crewly, never posted to Slack. */
27
+ 'local-only'
28
+ /** Only agents, at least one on another machine: Slack is the only way there, in a thread. */
29
+ | 'cross-machine'
30
+ /** No agent @'d, or a person / broadcast / name nobody knows: posted as before. */
31
+ | 'other';
32
+ /** What the room knows about the names an agent post @'s. */
33
+ export interface AgentAddressingInput {
34
+ /** Agents @'d that run on this machine (sessions) */
35
+ localAgents: readonly string[];
36
+ /** Agents @'d that run on another machine (sessions or names) */
37
+ remoteAgents: readonly string[];
38
+ /** @-tokens or native ids that are neither: a person, or a name nobody knows */
39
+ others: readonly string[];
40
+ /** A person addressed by name without an @ ("Steve, …"), or @here/@channel */
41
+ addressesPeople: boolean;
42
+ }
43
+ /**
44
+ * Whom an agent's post addresses. Anything that may be for a person — a
45
+ * person's name, a broadcast, a name that matched nobody — keeps today's
46
+ * behaviour: the owner must never miss a message meant for them.
47
+ *
48
+ * @param input - The resolved names
49
+ * @returns The addressing class
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: [], addressesPeople: false }); // 'local-only'
54
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: ['rex'], others: [], addressesPeople: false }); // 'cross-machine'
55
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: ['Steve'], addressesPeople: false }); // 'other'
56
+ * ```
57
+ */
58
+ export declare function classifyAgentAddressing(input: AgentAddressingInput): AgentAddressing;
59
+ /**
60
+ * The real ticket prefixes, normalised: upper case, two to ten letters or
61
+ * digits starting with a letter. One-letter prefixes (the `T` fallback,
62
+ * decisions' `D`) are left out — "T-5" or "D-3" in prose is too often not
63
+ * a ticket.
64
+ *
65
+ * @param prefixes - Prefixes as configured (project ticket counters, `TKT`)
66
+ * @returns Unique prefixes, longest first
67
+ */
68
+ export declare function normaliseTicketPrefixes(prefixes: readonly string[]): string[];
69
+ /**
70
+ * Take internal ticket ids out of a Slack post. Tickets are the harness's
71
+ * bookkeeping; the owner never sees their ids or mechanics.
72
+ *
73
+ * Only ids with a real prefix are touched, so "UTF-8", "GPT-6" or "ISO-27001"
74
+ * stay. An id that is part of a path, branch or URL ("fix/CREW-12",
75
+ * "/blog/CREW-12") stays too. A parenthetical of ids goes with its brackets,
76
+ * a leading "CREW-718:" with its colon, and a preposition left dangling
77
+ * before punctuation ("for CREW-718.") goes with the id.
78
+ *
79
+ * @param text - The post
80
+ * @param prefixes - Real ticket prefixes
81
+ * @returns The post without ticket ids (the original when nothing would be left)
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * stripTicketIds('@Max CREW-718 step 1 of 2 done', ['CREW']); // '@Max step 1 of 2 done'
86
+ * stripTicketIds('the fix (CREW-718) is live', ['CREW']); // 'the fix is live'
87
+ * stripTicketIds('UTF-8 and GPT-6', ['CREW']); // unchanged
88
+ * ```
89
+ */
90
+ export declare function stripTicketIds(text: string, prefixes: readonly string[]): string;
91
+ /**
92
+ * Drops an agent's near-identical repeat to the same recipients in the same
93
+ * room within {@link AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS} — Ella
94
+ * sent Sam one conclusion three times in six minutes (2026-10-16).
95
+ * In memory: a restart forgets, which only lets one repeat through.
96
+ */
97
+ export declare class CoordinationDedupe {
98
+ private readonly windowMs;
99
+ private readonly threshold;
100
+ private readonly sent;
101
+ /**
102
+ * @param windowMs - How long a message counts as recent
103
+ * @param threshold - Similarity (0..1) at which two messages are one
104
+ */
105
+ constructor(windowMs?: number, threshold?: number);
106
+ /**
107
+ * Whether this message repeats one the same agent sent the same recipients
108
+ * here recently. A message that is not a repeat is remembered.
109
+ *
110
+ * @param room - Room id
111
+ * @param sender - Sending agent
112
+ * @param recipients - Addressed agents
113
+ * @param text - The message
114
+ * @param now - Current time (ms)
115
+ * @returns True for a repeat (drop it)
116
+ */
117
+ isRepeat(room: string, sender: string, recipients: readonly string[], text: string, now: number): boolean;
118
+ }
119
+ //# sourceMappingURL=agent-coordination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-coordination.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/agent-coordination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,2CAA2C;AAC3C,MAAM,MAAM,eAAe;AACzB,2FAA2F;AACzF,YAAY;AACd,8FAA8F;GAC5F,eAAe;AACjB,mFAAmF;GACjF,OAAO,CAAC;AAEZ,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iEAAiE;IACjE,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,gFAAgF;IAChF,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,CAKpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAO7E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAoBhF;AAQD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IAEvD;;;OAGG;gBAEgB,QAAQ,GAAE,MAAyD,EACnE,SAAS,GAAE,MAA0D;IAGxF;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;CAc1G"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Agent-to-agent coordination in Slack rooms (crewly#1340).
3
+ *
4
+ * 2026-10-16, #content-team: Ella, Max and Sam — all on the owner's Mac —
5
+ * posted 20+ top-level Slack messages to each other in 90 minutes ("@Max
6
+ * CREW-718 step 1 of 2 done…", "@Sam Got it, going with your first
7
+ * option…", "@Sam 1.0.217 is live…"). Each one was a new unread for the
8
+ * owner, who does not need that discussion; internal ticket ids leaked into
9
+ * every post; and Ella sent Sam the same conclusion three times.
10
+ *
11
+ * The model is a company group chat: whoever the room asked is the room's
12
+ * one voice; it reaches its helpers privately, and posts one update when
13
+ * their result is in. The pure pieces of that live here:
14
+ * - {@link classifyAgentAddressing}: whom an agent's room post is for —
15
+ * only agents on this machine (stays inside Crewly), agents elsewhere
16
+ * (Slack, in a thread), or anyone else (unchanged);
17
+ * - {@link stripTicketIds}: internal ticket ids out of anything an agent
18
+ * posts to Slack, for real ticket prefixes only;
19
+ * - {@link CoordinationDedupe}: the same agent sending a near-identical
20
+ * message to the same recipients in the same room within 15 minutes.
21
+ *
22
+ * @module services/slack/agent-coordination
23
+ */
24
+ import { questionSimilarity } from '../open-items/open-item-card.js';
25
+ import { AGENT_COORDINATION_CONSTANTS } from '../../constants.js';
26
+ /**
27
+ * Whom an agent's post addresses. Anything that may be for a person — a
28
+ * person's name, a broadcast, a name that matched nobody — keeps today's
29
+ * behaviour: the owner must never miss a message meant for them.
30
+ *
31
+ * @param input - The resolved names
32
+ * @returns The addressing class
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: [], addressesPeople: false }); // 'local-only'
37
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: ['rex'], others: [], addressesPeople: false }); // 'cross-machine'
38
+ * classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: ['Steve'], addressesPeople: false }); // 'other'
39
+ * ```
40
+ */
41
+ export function classifyAgentAddressing(input) {
42
+ if (input.addressesPeople || input.others.length > 0)
43
+ return 'other';
44
+ if (input.remoteAgents.length > 0)
45
+ return 'cross-machine';
46
+ if (input.localAgents.length > 0)
47
+ return 'local-only';
48
+ return 'other';
49
+ }
50
+ /**
51
+ * The real ticket prefixes, normalised: upper case, two to ten letters or
52
+ * digits starting with a letter. One-letter prefixes (the `T` fallback,
53
+ * decisions' `D`) are left out — "T-5" or "D-3" in prose is too often not
54
+ * a ticket.
55
+ *
56
+ * @param prefixes - Prefixes as configured (project ticket counters, `TKT`)
57
+ * @returns Unique prefixes, longest first
58
+ */
59
+ export function normaliseTicketPrefixes(prefixes) {
60
+ const clean = new Set();
61
+ for (const p of prefixes) {
62
+ const up = (p ?? '').trim().toUpperCase();
63
+ if (/^[A-Z][A-Z0-9]{1,9}$/.test(up))
64
+ clean.add(up);
65
+ }
66
+ return [...clean].sort((a, b) => b.length - a.length || a.localeCompare(b));
67
+ }
68
+ /**
69
+ * Take internal ticket ids out of a Slack post. Tickets are the harness's
70
+ * bookkeeping; the owner never sees their ids or mechanics.
71
+ *
72
+ * Only ids with a real prefix are touched, so "UTF-8", "GPT-6" or "ISO-27001"
73
+ * stay. An id that is part of a path, branch or URL ("fix/CREW-12",
74
+ * "/blog/CREW-12") stays too. A parenthetical of ids goes with its brackets,
75
+ * a leading "CREW-718:" with its colon, and a preposition left dangling
76
+ * before punctuation ("for CREW-718.") goes with the id.
77
+ *
78
+ * @param text - The post
79
+ * @param prefixes - Real ticket prefixes
80
+ * @returns The post without ticket ids (the original when nothing would be left)
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * stripTicketIds('@Max CREW-718 step 1 of 2 done', ['CREW']); // '@Max step 1 of 2 done'
85
+ * stripTicketIds('the fix (CREW-718) is live', ['CREW']); // 'the fix is live'
86
+ * stripTicketIds('UTF-8 and GPT-6', ['CREW']); // unchanged
87
+ * ```
88
+ */
89
+ export function stripTicketIds(text, prefixes) {
90
+ const list = normaliseTicketPrefixes(prefixes);
91
+ if (!text || list.length === 0)
92
+ return text;
93
+ const id = `(?<![\\p{L}\\p{N}_/.#-])(?:${list.join('|')})-\\d+(?![\\p{L}\\p{N}_/-])`;
94
+ if (!new RegExp(id, 'u').test(text))
95
+ return text;
96
+ let out = text
97
+ // "(CREW-718)", "(CREW-718, CREW-719)"
98
+ .replace(new RegExp(`[ \\t]*\\(\\s*${id}(?:\\s*(?:,|/|&|and)\\s*${id})*\\s*\\)`, 'gu'), '')
99
+ // "CREW-718: …", "CREW-718 — …"
100
+ .replace(new RegExp(`${id}[ \\t]*[::—–][ \\t]*`, 'gu'), '')
101
+ // "for CREW-718." / "on CREW-718," — the preposition goes too
102
+ .replace(new RegExp(`[ \\t]+(?:[Ff]or|[Oo]n|[Ii]n|[Uu]nder|[Aa]bout|[Oo]f|[Rr]e)[ \\t]+${id}(?=[ \\t]*(?:[.,;:!?)]|$))`, 'gmu'), '')
103
+ // A bare id, with the space after it ("@Max CREW-718 step" → "@Max step")
104
+ .replace(new RegExp(`${id}[ \\t]?`, 'gu'), '');
105
+ out = out
106
+ .replace(/(\S)[ \t]{2,}(?=\S)/gu, '$1 ')
107
+ .replace(/[ \t]+([.,;:!?)])/gu, '$1')
108
+ .replace(/\([ \t]*\)/gu, '')
109
+ .replace(/[ \t]+$/gmu, '');
110
+ return out.trim().length > 0 ? out : text;
111
+ }
112
+ /**
113
+ * Drops an agent's near-identical repeat to the same recipients in the same
114
+ * room within {@link AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS} — Ella
115
+ * sent Sam one conclusion three times in six minutes (2026-10-16).
116
+ * In memory: a restart forgets, which only lets one repeat through.
117
+ */
118
+ export class CoordinationDedupe {
119
+ windowMs;
120
+ threshold;
121
+ sent = new Map();
122
+ /**
123
+ * @param windowMs - How long a message counts as recent
124
+ * @param threshold - Similarity (0..1) at which two messages are one
125
+ */
126
+ constructor(windowMs = AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS, threshold = AGENT_COORDINATION_CONSTANTS.DUPLICATE_SIMILARITY) {
127
+ this.windowMs = windowMs;
128
+ this.threshold = threshold;
129
+ }
130
+ /**
131
+ * Whether this message repeats one the same agent sent the same recipients
132
+ * here recently. A message that is not a repeat is remembered.
133
+ *
134
+ * @param room - Room id
135
+ * @param sender - Sending agent
136
+ * @param recipients - Addressed agents
137
+ * @param text - The message
138
+ * @param now - Current time (ms)
139
+ * @returns True for a repeat (drop it)
140
+ */
141
+ isRepeat(room, sender, recipients, text, now) {
142
+ const key = `${room}|${sender}|${[...new Set(recipients)].sort().join(',')}`;
143
+ const body = comparable(text);
144
+ const recent = (this.sent.get(key) ?? []).filter((e) => now - e.at <= this.windowMs);
145
+ const repeat = body.length > 0 && recent.some((e) => questionSimilarity(e.text, body) >= this.threshold);
146
+ if (!repeat)
147
+ recent.push({ text: body, at: now });
148
+ if (recent.length > 0)
149
+ this.sent.set(key, recent.slice(-AGENT_COORDINATION_CONSTANTS.DUPLICATE_HISTORY));
150
+ else
151
+ this.sent.delete(key);
152
+ if (this.sent.size > AGENT_COORDINATION_CONSTANTS.DUPLICATE_MAX_KEYS) {
153
+ const oldest = this.sent.keys().next().value;
154
+ if (oldest !== undefined)
155
+ this.sent.delete(oldest);
156
+ }
157
+ return repeat;
158
+ }
159
+ }
160
+ /**
161
+ * A message as compared for repeats: without @-mentions and Slack ids, so
162
+ * "@Sam X" and "@Sam @Max X" compare on X.
163
+ *
164
+ * @param text - Message
165
+ * @returns Comparable text
166
+ */
167
+ function comparable(text) {
168
+ return (text ?? '')
169
+ .replace(/<[@#!][^>]*>/g, ' ')
170
+ .replace(/(?<![\w])@[\p{L}\p{N}_.-]+/gu, ' ')
171
+ .replace(/\s+/g, ' ')
172
+ .trim();
173
+ }
174
+ //# sourceMappingURL=agent-coordination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-coordination.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/agent-coordination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAuBlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA2B;IACjE,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACrE,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,eAAe,CAAC;IAC1D,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAA2B;IACjE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAA2B;IACtE,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,EAAE,GAAG,8BAA8B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACrF,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,GAAG,GAAG,IAAI;QACZ,uCAAuC;SACtC,OAAO,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3F,gCAAgC;SAC/B,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3D,8DAA8D;SAC7D,OAAO,CAAC,IAAI,MAAM,CAAC,qEAAqE,EAAE,4BAA4B,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACpI,0EAA0E;SACzE,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,GAAG,GAAG,GAAG;SACN,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC;SACvC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;SACpC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAQD;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAQV;IACA;IARF,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvD;;;OAGG;IACH,YACmB,WAAmB,4BAA4B,CAAC,mBAAmB,EACnE,YAAoB,4BAA4B,CAAC,oBAAoB;QADrE,aAAQ,GAAR,QAAQ,CAA2D;QACnE,cAAS,GAAT,SAAS,CAA4D;IACrF,CAAC;IAEJ;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,UAA6B,EAAE,IAAY,EAAE,GAAW;QAC7F,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC,CAAC;;YACpG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC,kBAAkB,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC7C,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SAChB,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,8BAA8B,EAAE,GAAG,CAAC;SAC5C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-initializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-initializer.ts"],"names":[],"mappings":"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"}
@@ -897,6 +897,13 @@ export async function startSlackTeamChannels() {
897
897
  typing,
898
898
  autoWorking,
899
899
  isLocalAgent: (agentSession) => getSlackService().isLocalAgent?.(agentSession) ?? false,
900
+ // Ticket ids never reach Slack (crewly#1340): the real prefixes in use.
901
+ ticketPrefixes: async () => {
902
+ const { listTicketPrefixes } = await import('../project-tickets/ticket-prefixes.js');
903
+ return listTicketPrefixes({
904
+ listProjectPaths: async () => (await StorageService.getInstance().getProjects()).map((p) => p.path).filter((p) => !!p),
905
+ });
906
+ },
900
907
  isAgentAwake: (agentSession) => sessionBackendExists(agentSession),
901
908
  getOwnerUserId: () => getSlackCloudConfigService()?.getConfig()?.workspace.installedBy || null,
902
909
  resolveInstanceId: async () => getSlackInstanceRegistryService()?.resolveInstanceId() ?? null,