crewly 1.6.4 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. package/config/roles/architect/prompt.md +68 -2
  2. package/config/roles/auditor/prompt.md +92 -0
  3. package/config/roles/backend-developer/prompt.md +68 -2
  4. package/config/roles/content-strategist/prompt.md +73 -5
  5. package/config/roles/designer/prompt.md +69 -4
  6. package/config/roles/developer/prompt.md +233 -5
  7. package/config/roles/frontend-developer/prompt.md +68 -2
  8. package/config/roles/fullstack-dev/prompt.md +68 -2
  9. package/config/roles/generalist/prompt.md +68 -2
  10. package/config/roles/ops/prompt.md +69 -3
  11. package/config/roles/orchestrator/fragments/communication.md +27 -0
  12. package/config/roles/orchestrator/fragments/role-boundary.md +1 -1
  13. package/config/roles/orchestrator/prompt.md +285 -70
  14. package/config/roles/product-manager/prompt.md +140 -7
  15. package/config/roles/qa/prompt.md +70 -5
  16. package/config/roles/qa-engineer/prompt.md +70 -5
  17. package/config/roles/researcher/prompt.md +68 -2
  18. package/config/roles/sales/prompt.md +70 -5
  19. package/config/roles/support/prompt.md +69 -4
  20. package/config/roles/team-leader/prompt.md +93 -6
  21. package/config/roles/team-leader/role-boundaries.md +26 -0
  22. package/config/roles/team-leader/tl-addon.md +153 -1
  23. package/config/roles/tpm/prompt.md +68 -2
  24. package/config/roles/ux-designer/prompt.md +70 -5
  25. package/config/skills/_common/complete-body-shape.test.sh +249 -0
  26. package/config/skills/agent/core/accept-task/execute.sh +18 -15
  27. package/config/skills/agent/core/block-task/execute.sh +27 -9
  28. package/config/skills/agent/core/cancel-followup/SKILL.md +18 -0
  29. package/config/skills/agent/core/complete-task/execute.sh +45 -7
  30. package/config/skills/agent/core/create-request/SKILL.md +1 -1
  31. package/config/skills/agent/core/create-request/execute.sh +29 -2
  32. package/config/skills/agent/core/create-request/execute.test.sh +168 -0
  33. package/config/skills/agent/core/create-task/execute.sh +40 -12
  34. package/config/skills/agent/core/get-my-active-work/SKILL.md +3 -1
  35. package/config/skills/agent/core/get-my-tasks/execute.sh +7 -5
  36. package/config/skills/agent/core/handoff-task/execute.sh +34 -48
  37. package/config/skills/agent/core/list-my-followups/SKILL.md +18 -0
  38. package/config/skills/agent/core/read-task/execute.sh +21 -8
  39. package/config/skills/agent/core/recall/SKILL.md +7 -0
  40. package/config/skills/agent/core/remember/SKILL.md +17 -1
  41. package/config/skills/agent/core/remember/execute.sh +5 -1
  42. package/config/skills/agent/core/reply-channel/SKILL.md +19 -0
  43. package/config/skills/agent/core/report-progress/execute.sh +39 -16
  44. package/config/skills/agent/core/report-status/SKILL.md +8 -1
  45. package/config/skills/agent/core/report-status/execute.sh +59 -13
  46. package/config/skills/agent/core/save-working-state/execute.sh +17 -6
  47. package/config/skills/agent/core/schedule-followup/SKILL.md +19 -0
  48. package/config/skills/agent/core/send-message/SKILL.md +6 -0
  49. package/config/skills/agent/core/supersede-memory/SKILL.md +76 -0
  50. package/config/skills/agent/core/supersede-memory/execute.sh +108 -0
  51. package/config/skills/agent/core/watch-for-event/SKILL.md +19 -0
  52. package/config/skills/agent/onboarding/materialize-team/SKILL.md +94 -0
  53. package/config/skills/agent/onboarding/materialize-team/execute.sh +98 -0
  54. package/config/skills/agent/onboarding/recommend-team/SKILL.md +90 -0
  55. package/config/skills/agent/onboarding/recommend-team/execute.sh +96 -0
  56. package/config/skills/agent/xhs-article-to-image/SKILL.md +20 -0
  57. package/config/skills/auditor/score-task/SKILL.md +15 -0
  58. package/config/skills/orchestrator/assign-task/execute.sh +28 -4
  59. package/config/skills/orchestrator/cancel-all-schedules/SKILL.md +15 -1
  60. package/config/skills/orchestrator/complete-task/execute.sh +45 -4
  61. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -0
  62. package/config/skills/orchestrator/delegate-task/execute.sh +41 -2
  63. package/config/skills/orchestrator/get-tasks/execute.sh +22 -18
  64. package/config/skills/orchestrator/heartbeat/execute.sh +48 -6
  65. package/config/skills/orchestrator/list-schedules/SKILL.md +15 -1
  66. package/config/skills/orchestrator/update-team-member/SKILL.md +20 -0
  67. package/config/skills/team-leader/decompose-goal/execute.sh +51 -20
  68. package/config/skills/team-leader/delegate-task/execute.sh +67 -26
  69. package/config/skills/team-leader/delegate-task/execute.test.sh +117 -0
  70. package/config/skills/team-leader/verify-output/execute.sh +19 -20
  71. package/config/slack-app-manifest.json +2 -1
  72. package/config/sops/common/dev-process-tiers.md +181 -0
  73. package/config/sops/common/mid-flight-milestone-surface.md +128 -0
  74. package/config/sops/common/owner-facing-communication.md +175 -0
  75. package/config/sops/developer/git-workflow.md +33 -0
  76. package/config/souls/orchestrator.md +8 -0
  77. package/config/souls/team-leader.md +77 -0
  78. package/dist/backend/backend/src/constants.d.ts +12 -0
  79. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  80. package/dist/backend/backend/src/constants.js +12 -0
  81. package/dist/backend/backend/src/constants.js.map +1 -1
  82. package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +4 -1
  84. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts +8 -1
  86. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
  87. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +30 -26
  88. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
  89. package/dist/backend/backend/src/controllers/api.controller.d.ts +0 -9
  90. package/dist/backend/backend/src/controllers/api.controller.d.ts.map +1 -1
  91. package/dist/backend/backend/src/controllers/api.controller.js +4 -32
  92. package/dist/backend/backend/src/controllers/api.controller.js.map +1 -1
  93. package/dist/backend/backend/src/controllers/browser/browser.controller.js +2 -2
  94. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  95. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  96. package/dist/backend/backend/src/controllers/chat/chat.controller.js +11 -2
  97. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  98. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +73 -0
  99. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  100. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +133 -2
  101. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  102. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +3 -0
  103. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  104. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +8 -0
  105. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  106. package/dist/backend/backend/src/controllers/checklist/checklist.controller.d.ts +45 -0
  107. package/dist/backend/backend/src/controllers/checklist/checklist.controller.d.ts.map +1 -0
  108. package/dist/backend/backend/src/controllers/checklist/checklist.controller.js +122 -0
  109. package/dist/backend/backend/src/controllers/checklist/checklist.controller.js.map +1 -0
  110. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts +24 -0
  111. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
  112. package/dist/backend/backend/src/controllers/memory/memory.controller.js +69 -1
  113. package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
  114. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts +1 -0
  115. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts.map +1 -1
  116. package/dist/backend/backend/src/controllers/memory/memory.routes.js +3 -1
  117. package/dist/backend/backend/src/controllers/memory/memory.routes.js.map +1 -1
  118. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  119. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +80 -5
  120. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  121. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +1 -0
  122. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
  123. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +30 -0
  124. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js.map +1 -1
  125. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.d.ts +41 -0
  126. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.d.ts.map +1 -0
  127. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.js +213 -0
  128. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.controller.js.map +1 -0
  129. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.d.ts +21 -0
  130. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.d.ts.map +1 -0
  131. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.js +27 -0
  132. package/dist/backend/backend/src/controllers/orchestrator-onboarding/orchestrator-onboarding.routes.js.map +1 -0
  133. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
  134. package/dist/backend/backend/src/controllers/session/session.controller.js +50 -8
  135. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
  136. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  137. package/dist/backend/backend/src/controllers/slack/slack.controller.js +236 -18
  138. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  139. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts +13 -3
  140. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.d.ts.map +1 -1
  141. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js +29 -24
  142. package/dist/backend/backend/src/controllers/task-management/in-progress-tasks.controller.js.map +1 -1
  143. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
  144. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +61 -13
  145. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
  146. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +159 -7
  147. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  148. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +421 -37
  149. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  150. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  151. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +15 -1
  152. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  153. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  154. package/dist/backend/backend/src/controllers/team/team.controller.js +221 -10
  155. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  156. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts +22 -0
  157. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.d.ts.map +1 -1
  158. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js +92 -0
  159. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.controller.js.map +1 -1
  160. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.d.ts.map +1 -1
  161. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js +6 -2
  162. package/dist/backend/backend/src/controllers/teams-backup/teams-backup.routes.js.map +1 -1
  163. package/dist/backend/backend/src/controllers/types.d.ts +1 -2
  164. package/dist/backend/backend/src/controllers/types.d.ts.map +1 -1
  165. package/dist/backend/backend/src/index.d.ts +5 -1
  166. package/dist/backend/backend/src/index.d.ts.map +1 -1
  167. package/dist/backend/backend/src/index.js +476 -100
  168. package/dist/backend/backend/src/index.js.map +1 -1
  169. package/dist/backend/backend/src/models/Project.d.ts +2 -0
  170. package/dist/backend/backend/src/models/Project.d.ts.map +1 -1
  171. package/dist/backend/backend/src/models/Project.js +10 -1
  172. package/dist/backend/backend/src/models/Project.js.map +1 -1
  173. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  174. package/dist/backend/backend/src/routes/api.routes.js +15 -2
  175. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  176. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts +15 -0
  177. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  178. package/dist/backend/backend/src/routes/modules/task-management.routes.js +23 -43
  179. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  180. package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.d.ts +87 -0
  181. package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.d.ts.map +1 -0
  182. package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.js +116 -0
  183. package/dist/backend/backend/src/scripts/cleanup-stale-pool.lib.js.map +1 -0
  184. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +46 -6
  185. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
  186. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +56 -13
  187. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
  188. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +51 -0
  189. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  190. package/dist/backend/backend/src/services/agent/agent-registration.service.js +246 -9
  191. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  192. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +31 -5
  193. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +69 -29
  195. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -1
  196. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +61 -1
  197. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +230 -84
  199. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
  200. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -1
  201. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +5 -3
  202. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -1
  203. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +35 -0
  204. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
  205. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +127 -3
  206. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
  207. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +79 -0
  208. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +1 -0
  209. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +145 -0
  210. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +1 -0
  211. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +64 -9
  212. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
  213. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +125 -15
  214. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
  215. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
  216. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +101 -33
  217. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
  218. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +76 -1
  219. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  220. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +73 -1
  221. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  222. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +33 -0
  223. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  224. package/dist/backend/backend/src/services/agent/idle-detection.service.js +108 -4
  225. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  226. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +5 -5
  227. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  228. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +22 -8
  229. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  230. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +10 -0
  231. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  232. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +160 -4
  233. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  234. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +37 -0
  235. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +77 -3
  237. package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
  238. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  239. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  240. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  241. package/dist/backend/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  242. package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  243. package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  244. package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  245. package/dist/backend/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  246. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +4 -0
  247. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  248. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +4 -0
  249. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  250. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  251. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  252. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  253. package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  254. package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  255. package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  256. package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  257. package/dist/backend/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  258. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  259. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +45 -0
  260. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  261. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +16 -0
  262. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  263. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  264. package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  265. package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  266. package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  267. package/dist/backend/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  268. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
  269. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +28 -0
  270. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -1
  271. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts +38 -6
  272. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -1
  273. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js +73 -10
  274. package/dist/backend/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -1
  275. package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  276. package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  277. package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  278. package/dist/backend/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  279. package/dist/backend/backend/src/services/autonomous/index.d.ts +7 -3
  280. package/dist/backend/backend/src/services/autonomous/index.d.ts.map +1 -1
  281. package/dist/backend/backend/src/services/autonomous/index.js +7 -3
  282. package/dist/backend/backend/src/services/autonomous/index.js.map +1 -1
  283. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  284. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +16 -22
  285. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  286. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +1 -1
  287. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  288. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +40 -2
  289. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  290. package/dist/backend/backend/src/services/chat/chat.service.d.ts +48 -331
  291. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  292. package/dist/backend/backend/src/services/chat/chat.service.js +261 -712
  293. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  294. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +82 -1
  295. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  296. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +120 -2
  297. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  298. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +114 -0
  299. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -0
  300. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +182 -0
  301. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -0
  302. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts +188 -0
  303. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.d.ts.map +1 -0
  304. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js +434 -0
  305. package/dist/backend/backend/src/services/chat-v2/chat-v2.relay-adapter.service.js.map +1 -0
  306. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +414 -5
  307. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  308. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +634 -3
  309. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  310. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +93 -0
  311. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  312. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +138 -0
  313. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  314. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +46 -0
  315. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  316. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +75 -0
  317. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  318. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +21 -2
  319. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -1
  320. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +229 -29
  321. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -1
  322. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +55 -0
  323. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  324. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +94 -0
  325. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  326. package/dist/backend/backend/src/services/chat-v2/types.d.ts +33 -1
  327. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  328. package/dist/backend/backend/src/services/chat-v2/types.js +1 -1
  329. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  330. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +22 -0
  331. package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
  332. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +71 -1
  333. package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
  334. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +102 -1
  335. package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
  336. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js +61 -0
  337. package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
  338. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +21 -3
  339. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -1
  340. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +47 -13
  341. package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -1
  342. package/dist/backend/backend/src/services/core/config.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/core/config.service.js +8 -1
  344. package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
  345. package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts +51 -0
  346. package/dist/backend/backend/src/services/core/crewly-home.utils.d.ts.map +1 -0
  347. package/dist/backend/backend/src/services/core/crewly-home.utils.js +59 -0
  348. package/dist/backend/backend/src/services/core/crewly-home.utils.js.map +1 -0
  349. package/dist/backend/backend/src/services/core/state-invariant.types.d.ts +53 -0
  350. package/dist/backend/backend/src/services/core/state-invariant.types.d.ts.map +1 -0
  351. package/dist/backend/backend/src/services/core/state-invariant.types.js +61 -0
  352. package/dist/backend/backend/src/services/core/state-invariant.types.js.map +1 -0
  353. package/dist/backend/backend/src/services/core/storage.service.d.ts +20 -0
  354. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  355. package/dist/backend/backend/src/services/core/storage.service.js +96 -8
  356. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  357. package/dist/backend/backend/src/services/core/system-health.util.d.ts +25 -4
  358. package/dist/backend/backend/src/services/core/system-health.util.d.ts.map +1 -1
  359. package/dist/backend/backend/src/services/core/system-health.util.js +30 -5
  360. package/dist/backend/backend/src/services/core/system-health.util.js.map +1 -1
  361. package/dist/backend/backend/src/services/core/teams-backup.service.d.ts +94 -4
  362. package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
  363. package/dist/backend/backend/src/services/core/teams-backup.service.js +172 -10
  364. package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -1
  365. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  366. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +22 -11
  367. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  368. package/dist/backend/backend/src/services/index.d.ts +0 -2
  369. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  370. package/dist/backend/backend/src/services/index.js +0 -2
  371. package/dist/backend/backend/src/services/index.js.map +1 -1
  372. package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.d.ts +78 -0
  373. package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.d.ts.map +1 -0
  374. package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.js +209 -0
  375. package/dist/backend/backend/src/services/intent-task/intent-classifier.fixture.js.map +1 -0
  376. package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.d.ts +331 -0
  377. package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  378. package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.js +413 -0
  379. package/dist/backend/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  380. package/dist/backend/backend/src/services/intent-task/intent-task.service.d.ts.map +1 -1
  381. package/dist/backend/backend/src/services/intent-task/intent-task.service.js +13 -4
  382. package/dist/backend/backend/src/services/intent-task/intent-task.service.js.map +1 -1
  383. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  384. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -13
  385. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  386. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +102 -0
  387. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +1 -0
  388. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +118 -0
  389. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +1 -0
  390. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  391. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +11 -15
  392. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  393. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +20 -0
  394. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
  395. package/dist/backend/backend/src/services/memory/agent-memory.service.js +27 -2
  396. package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -1
  397. package/dist/backend/backend/src/services/memory/memory-supersession.service.d.ts +104 -0
  398. package/dist/backend/backend/src/services/memory/memory-supersession.service.d.ts.map +1 -0
  399. package/dist/backend/backend/src/services/memory/memory-supersession.service.js +127 -0
  400. package/dist/backend/backend/src/services/memory/memory-supersession.service.js.map +1 -0
  401. package/dist/backend/backend/src/services/memory/memory.service.d.ts +48 -17
  402. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  403. package/dist/backend/backend/src/services/memory/memory.service.js +97 -35
  404. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  405. package/dist/backend/backend/src/services/memory/mission-context.service.d.ts +168 -0
  406. package/dist/backend/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  407. package/dist/backend/backend/src/services/memory/mission-context.service.js +365 -0
  408. package/dist/backend/backend/src/services/memory/mission-context.service.js.map +1 -0
  409. package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts +138 -0
  410. package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -0
  411. package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.js +183 -0
  412. package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -0
  413. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
  414. package/dist/backend/backend/src/services/memory/vector-store.service.js +7 -11
  415. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
  416. package/dist/backend/backend/src/services/memory/working-memory.service.d.ts +232 -0
  417. package/dist/backend/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  418. package/dist/backend/backend/src/services/memory/working-memory.service.js +417 -0
  419. package/dist/backend/backend/src/services/memory/working-memory.service.js.map +1 -0
  420. package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts +2 -4
  421. package/dist/backend/backend/src/services/messaging/message-replay.service.d.ts.map +1 -1
  422. package/dist/backend/backend/src/services/messaging/message-replay.service.js +22 -12
  423. package/dist/backend/backend/src/services/messaging/message-replay.service.js.map +1 -1
  424. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  425. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +48 -7
  426. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  427. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +2 -2
  428. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  429. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.d.ts.map +1 -1
  430. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js +13 -3
  431. package/dist/backend/backend/src/services/monitoring/system-resource-alert.service.js.map +1 -1
  432. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts +27 -7
  433. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.d.ts.map +1 -1
  434. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js +66 -27
  435. package/dist/backend/backend/src/services/monitoring/team-activity-websocket.service.js.map +1 -1
  436. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.d.ts.map +1 -1
  437. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js +2 -2
  438. package/dist/backend/backend/src/services/monitoring/teams-json-watcher.service.js.map +1 -1
  439. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts +99 -0
  440. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.d.ts.map +1 -0
  441. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js +225 -0
  442. package/dist/backend/backend/src/services/notification/milestone-notification.subscriber.js.map +1 -0
  443. package/dist/backend/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  444. package/dist/backend/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  445. package/dist/backend/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  446. package/dist/backend/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  447. package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  448. package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  449. package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  450. package/dist/backend/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  451. package/dist/backend/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  452. package/dist/backend/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  453. package/dist/backend/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  454. package/dist/backend/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  455. package/dist/backend/backend/src/services/observability/observability-db.d.ts +84 -0
  456. package/dist/backend/backend/src/services/observability/observability-db.d.ts.map +1 -0
  457. package/dist/backend/backend/src/services/observability/observability-db.js +165 -0
  458. package/dist/backend/backend/src/services/observability/observability-db.js.map +1 -0
  459. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +22 -0
  460. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -1
  461. package/dist/backend/backend/src/services/onboarding/onboarding.service.js +36 -0
  462. package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -1
  463. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +21 -2
  464. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -1
  465. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -1
  466. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js +12 -3
  467. package/dist/backend/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -1
  468. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts +108 -0
  469. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -0
  470. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +165 -0
  471. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -0
  472. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts +114 -0
  473. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.d.ts.map +1 -0
  474. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js +299 -0
  475. package/dist/backend/backend/src/services/orchestrator/onboarding/recommend-team.js.map +1 -0
  476. package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.d.ts +128 -0
  477. package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.d.ts.map +1 -0
  478. package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.js +195 -0
  479. package/dist/backend/backend/src/services/orchestrator/onboarding-bootstrap.service.js.map +1 -0
  480. package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.d.ts +66 -0
  481. package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.d.ts.map +1 -0
  482. package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.js +145 -0
  483. package/dist/backend/backend/src/services/orchestrator/onboarding-mode-loader.js.map +1 -0
  484. package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.d.ts +59 -0
  485. package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.d.ts.map +1 -0
  486. package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.js +68 -0
  487. package/dist/backend/backend/src/services/orchestrator/onboarding-mode.skill-allowlist.js.map +1 -0
  488. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts +67 -0
  489. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.d.ts.map +1 -0
  490. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js +290 -0
  491. package/dist/backend/backend/src/services/orchestrator/prompts/onboarding-mode.prompt.js.map +1 -0
  492. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts +23 -1
  493. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -1
  494. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js +64 -1
  495. package/dist/backend/backend/src/services/orchestrator/state-persistence.service.js.map +1 -1
  496. package/dist/backend/backend/src/services/project/active-projects.service.d.ts.map +1 -1
  497. package/dist/backend/backend/src/services/project/active-projects.service.js +2 -2
  498. package/dist/backend/backend/src/services/project/active-projects.service.js.map +1 -1
  499. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
  500. package/dist/backend/backend/src/services/project/task-tracking.service.js +2 -2
  501. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
  502. package/dist/backend/backend/src/services/prompt/prompt-generator.service.d.ts.map +1 -1
  503. package/dist/backend/backend/src/services/prompt/prompt-generator.service.js +2 -2
  504. package/dist/backend/backend/src/services/prompt/prompt-generator.service.js.map +1 -1
  505. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +73 -6
  506. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  507. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +200 -25
  508. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  509. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +149 -2
  510. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  511. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +569 -24
  512. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  513. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  514. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +73 -7
  515. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  516. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +31 -18
  517. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  518. package/dist/backend/backend/src/services/session/session-handoff.service.js +103 -84
  519. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  520. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -1
  521. package/dist/backend/backend/src/services/session/session-state-persistence.js +15 -4
  522. package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -1
  523. package/dist/backend/backend/src/services/settings/settings.service.d.ts.map +1 -1
  524. package/dist/backend/backend/src/services/settings/settings.service.js +25 -0
  525. package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
  526. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +14 -3
  527. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  528. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +28 -3
  529. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  530. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  531. package/dist/backend/backend/src/services/skill/skill-executor.service.js +13 -1
  532. package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
  533. package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
  534. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +13 -18
  535. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
  536. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.d.ts.map +1 -1
  537. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js +9 -6
  538. package/dist/backend/backend/src/services/slack/notify-reconciliation.service.js.map +1 -1
  539. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +66 -2
  540. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  541. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +318 -61
  542. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  543. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  544. package/dist/backend/backend/src/services/slack/slack.service.js +70 -0
  545. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  546. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +15 -1
  547. package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  548. package/dist/backend/backend/src/services/task-pool/pool-storage.js +31 -8
  549. package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
  550. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +216 -2
  551. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  552. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +562 -14
  553. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  554. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +14 -1
  555. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  556. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +128 -17
  557. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  558. package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts +95 -0
  559. package/dist/backend/backend/src/services/v3/cascade-request-status.d.ts.map +1 -0
  560. package/dist/backend/backend/src/services/v3/cascade-request-status.js +200 -0
  561. package/dist/backend/backend/src/services/v3/cascade-request-status.js.map +1 -0
  562. package/dist/backend/backend/src/services/v3/escalation-router.service.d.ts.map +1 -1
  563. package/dist/backend/backend/src/services/v3/escalation-router.service.js +42 -0
  564. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  565. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  566. package/dist/backend/backend/src/services/v3/mission-executor.service.js +25 -5
  567. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  568. package/dist/backend/backend/src/services/v3/request-cascade.subscriber.d.ts +87 -0
  569. package/dist/backend/backend/src/services/v3/request-cascade.subscriber.d.ts.map +1 -0
  570. package/dist/backend/backend/src/services/v3/request-cascade.subscriber.js +152 -0
  571. package/dist/backend/backend/src/services/v3/request-cascade.subscriber.js.map +1 -0
  572. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts +253 -0
  573. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.d.ts.map +1 -0
  574. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js +501 -0
  575. package/dist/backend/backend/src/services/v3/request-decompose.subscriber.js.map +1 -0
  576. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +55 -0
  577. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  578. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +262 -22
  579. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  580. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts +204 -0
  581. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.d.ts.map +1 -0
  582. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js +617 -0
  583. package/dist/backend/backend/src/services/v3/request-status-update.subscriber.js.map +1 -0
  584. package/dist/backend/backend/src/services/v3/request.service.d.ts +107 -0
  585. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  586. package/dist/backend/backend/src/services/v3/request.service.js +155 -2
  587. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  588. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +108 -1
  589. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  590. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +238 -4
  591. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  592. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +50 -26
  593. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  594. package/dist/backend/backend/src/services/v3/v3-data.service.js +126 -161
  595. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  596. package/dist/backend/backend/src/services/v3/work-item-projection.d.ts +40 -0
  597. package/dist/backend/backend/src/services/v3/work-item-projection.d.ts.map +1 -0
  598. package/dist/backend/backend/src/services/v3/work-item-projection.js +115 -0
  599. package/dist/backend/backend/src/services/v3/work-item-projection.js.map +1 -0
  600. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +137 -0
  601. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -0
  602. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +287 -0
  603. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -0
  604. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts +1 -1
  605. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.d.ts.map +1 -1
  606. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js +26 -10
  607. package/dist/backend/backend/src/services/whatsapp/whatsapp-orchestrator-bridge.js.map +1 -1
  608. package/dist/backend/backend/src/services/whatsapp/whatsapp.service.d.ts.map +1 -1
  609. package/dist/backend/backend/src/services/whatsapp/whatsapp.service.js +11 -2
  610. package/dist/backend/backend/src/services/whatsapp/whatsapp.service.js.map +1 -1
  611. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  612. package/dist/backend/backend/src/services/workflow/cron-task.service.js +68 -5
  613. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  614. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  615. package/dist/backend/backend/src/services/workflow/scheduler.service.js +68 -14
  616. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  617. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts +44 -0
  618. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.d.ts.map +1 -0
  619. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js +57 -0
  620. package/dist/backend/backend/src/services/workflow/team-identifier-resolver.js.map +1 -0
  621. package/dist/backend/backend/src/types/credential.types.d.ts +17 -1
  622. package/dist/backend/backend/src/types/credential.types.d.ts.map +1 -1
  623. package/dist/backend/backend/src/types/credential.types.js +15 -5
  624. package/dist/backend/backend/src/types/credential.types.js.map +1 -1
  625. package/dist/backend/backend/src/types/cron-task.types.d.ts +17 -0
  626. package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
  627. package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
  628. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  629. package/dist/backend/backend/src/types/event-bus.types.js +24 -0
  630. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  631. package/dist/backend/backend/src/types/index.d.ts +11 -1
  632. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  633. package/dist/backend/backend/src/types/index.js +0 -2
  634. package/dist/backend/backend/src/types/index.js.map +1 -1
  635. package/dist/backend/backend/src/types/intent-task.types.d.ts +27 -11
  636. package/dist/backend/backend/src/types/intent-task.types.d.ts.map +1 -1
  637. package/dist/backend/backend/src/types/intent-task.types.js +204 -40
  638. package/dist/backend/backend/src/types/intent-task.types.js.map +1 -1
  639. package/dist/backend/backend/src/types/memory.types.d.ts +53 -0
  640. package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -1
  641. package/dist/backend/backend/src/types/memory.types.js.map +1 -1
  642. package/dist/backend/backend/src/types/orchestrator-state.types.d.ts +49 -0
  643. package/dist/backend/backend/src/types/orchestrator-state.types.d.ts.map +1 -1
  644. package/dist/backend/backend/src/types/orchestrator-state.types.js +27 -0
  645. package/dist/backend/backend/src/types/orchestrator-state.types.js.map +1 -1
  646. package/dist/backend/backend/src/types/settings.types.d.ts +38 -2
  647. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  648. package/dist/backend/backend/src/types/settings.types.js +16 -2
  649. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  650. package/dist/backend/backend/src/types/v2/request.types.d.ts +5 -1
  651. package/dist/backend/backend/src/types/v2/request.types.d.ts.map +1 -1
  652. package/dist/backend/backend/src/types/v2/request.types.js +2 -2
  653. package/dist/backend/backend/src/types/v2/request.types.js.map +1 -1
  654. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +63 -1
  655. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  656. package/dist/backend/backend/src/types/v2/work-item.types.js +20 -0
  657. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  658. package/dist/backend/backend/src/utils/esm-require.utils.d.ts +111 -0
  659. package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +1 -0
  660. package/dist/backend/backend/src/utils/esm-require.utils.js +124 -0
  661. package/dist/backend/backend/src/utils/esm-require.utils.js.map +1 -0
  662. package/dist/backend/backend/src/utils/integrity-guarded-write.utils.d.ts +119 -0
  663. package/dist/backend/backend/src/utils/integrity-guarded-write.utils.d.ts.map +1 -0
  664. package/dist/backend/backend/src/utils/integrity-guarded-write.utils.js +212 -0
  665. package/dist/backend/backend/src/utils/integrity-guarded-write.utils.js.map +1 -0
  666. package/dist/backend/backend/src/utils/native-binding.utils.d.ts +128 -0
  667. package/dist/backend/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  668. package/dist/backend/backend/src/utils/native-binding.utils.js +206 -0
  669. package/dist/backend/backend/src/utils/native-binding.utils.js.map +1 -0
  670. package/dist/backend/backend/src/utils/node-require.utils.d.ts +104 -0
  671. package/dist/backend/backend/src/utils/node-require.utils.d.ts.map +1 -0
  672. package/dist/backend/backend/src/utils/node-require.utils.js +111 -0
  673. package/dist/backend/backend/src/utils/node-require.utils.js.map +1 -0
  674. package/dist/backend/backend/src/utils/team.utils.d.ts +3 -1
  675. package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -1
  676. package/dist/backend/backend/src/utils/team.utils.js +26 -5
  677. package/dist/backend/backend/src/utils/team.utils.js.map +1 -1
  678. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +23 -0
  679. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -1
  680. package/dist/backend/backend/src/websocket/chat-v2.gateway.js +56 -7
  681. package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -1
  682. package/dist/backend/backend/src/websocket/chat.gateway.d.ts +19 -4
  683. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  684. package/dist/backend/backend/src/websocket/chat.gateway.js +78 -63
  685. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  686. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  687. package/dist/backend/backend/src/websocket/terminal.gateway.js +10 -2
  688. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  689. package/dist/cli/backend/src/constants.d.ts +12 -0
  690. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  691. package/dist/cli/backend/src/constants.js +12 -0
  692. package/dist/cli/backend/src/constants.js.map +1 -1
  693. package/dist/cli/backend/src/models/Project.d.ts +2 -0
  694. package/dist/cli/backend/src/models/Project.d.ts.map +1 -1
  695. package/dist/cli/backend/src/models/Project.js +10 -1
  696. package/dist/cli/backend/src/models/Project.js.map +1 -1
  697. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +16 -0
  698. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  699. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  700. package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -1
  701. package/dist/cli/backend/src/services/core/config.service.js +8 -1
  702. package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
  703. package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts +51 -0
  704. package/dist/cli/backend/src/services/core/crewly-home.utils.d.ts.map +1 -0
  705. package/dist/cli/backend/src/services/core/crewly-home.utils.js +59 -0
  706. package/dist/cli/backend/src/services/core/crewly-home.utils.js.map +1 -0
  707. package/dist/cli/backend/src/services/core/state-invariant.types.d.ts +53 -0
  708. package/dist/cli/backend/src/services/core/state-invariant.types.d.ts.map +1 -0
  709. package/dist/cli/backend/src/services/core/state-invariant.types.js +61 -0
  710. package/dist/cli/backend/src/services/core/state-invariant.types.js.map +1 -0
  711. package/dist/cli/backend/src/services/core/storage.service.d.ts +20 -0
  712. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  713. package/dist/cli/backend/src/services/core/storage.service.js +96 -8
  714. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  715. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +94 -4
  716. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
  717. package/dist/cli/backend/src/services/core/teams-backup.service.js +172 -10
  718. package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -1
  719. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts +245 -0
  720. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -0
  721. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +650 -0
  722. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -0
  723. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  724. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -13
  725. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  726. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +102 -0
  727. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +1 -0
  728. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +118 -0
  729. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +1 -0
  730. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  731. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +11 -15
  732. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  733. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +20 -0
  734. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
  735. package/dist/cli/backend/src/services/memory/agent-memory.service.js +27 -2
  736. package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -1
  737. package/dist/cli/backend/src/services/memory/memory.service.d.ts +48 -17
  738. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  739. package/dist/cli/backend/src/services/memory/memory.service.js +97 -35
  740. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  741. package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts +138 -0
  742. package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -0
  743. package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.js +183 -0
  744. package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -0
  745. package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts +236 -0
  746. package/dist/cli/backend/src/services/messaging/message-queue.service.d.ts.map +1 -0
  747. package/dist/cli/backend/src/services/messaging/message-queue.service.js +581 -0
  748. package/dist/cli/backend/src/services/messaging/message-queue.service.js.map +1 -0
  749. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
  750. package/dist/cli/backend/src/services/project/task-tracking.service.js +2 -2
  751. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -1
  752. package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -1
  753. package/dist/cli/backend/src/services/settings/settings.service.js +25 -0
  754. package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -1
  755. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  756. package/dist/cli/backend/src/services/skill/skill-executor.service.js +13 -1
  757. package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
  758. package/dist/cli/backend/src/services/slack/slack-thread-store.service.d.ts +147 -0
  759. package/dist/cli/backend/src/services/slack/slack-thread-store.service.d.ts.map +1 -0
  760. package/dist/cli/backend/src/services/slack/slack-thread-store.service.js +258 -0
  761. package/dist/cli/backend/src/services/slack/slack-thread-store.service.js.map +1 -0
  762. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +15 -1
  763. package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
  764. package/dist/cli/backend/src/services/task-pool/pool-storage.js +31 -8
  765. package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
  766. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +490 -9
  767. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  768. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +1197 -121
  769. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  770. package/dist/cli/backend/src/services/v3/work-item-projection.d.ts +40 -0
  771. package/dist/cli/backend/src/services/v3/work-item-projection.d.ts.map +1 -0
  772. package/dist/cli/backend/src/services/v3/work-item-projection.js +115 -0
  773. package/dist/cli/backend/src/services/v3/work-item-projection.js.map +1 -0
  774. package/dist/cli/backend/src/types/credential.types.d.ts +17 -1
  775. package/dist/cli/backend/src/types/credential.types.d.ts.map +1 -1
  776. package/dist/cli/backend/src/types/credential.types.js +15 -5
  777. package/dist/cli/backend/src/types/credential.types.js.map +1 -1
  778. package/dist/cli/backend/src/types/event-bus.types.d.ts +173 -0
  779. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -0
  780. package/dist/cli/backend/src/types/event-bus.types.js +230 -0
  781. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -0
  782. package/dist/cli/backend/src/types/index.d.ts +11 -1
  783. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  784. package/dist/cli/backend/src/types/index.js +0 -2
  785. package/dist/cli/backend/src/types/index.js.map +1 -1
  786. package/dist/cli/backend/src/types/memory.types.d.ts +53 -0
  787. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -1
  788. package/dist/cli/backend/src/types/memory.types.js.map +1 -1
  789. package/dist/cli/backend/src/types/messaging.types.d.ts +223 -0
  790. package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -0
  791. package/dist/cli/backend/src/types/messaging.types.js +231 -0
  792. package/dist/cli/backend/src/types/messaging.types.js.map +1 -0
  793. package/dist/cli/backend/src/types/settings.types.d.ts +38 -2
  794. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  795. package/dist/cli/backend/src/types/settings.types.js +16 -2
  796. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  797. package/dist/cli/backend/src/types/slack.types.d.ts +356 -0
  798. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -0
  799. package/dist/cli/backend/src/types/slack.types.js +66 -0
  800. package/dist/cli/backend/src/types/slack.types.js.map +1 -0
  801. package/dist/cli/backend/src/types/v2/claim.types.d.ts +2 -5
  802. package/dist/cli/backend/src/types/v2/claim.types.d.ts.map +1 -1
  803. package/dist/cli/backend/src/types/v2/claim.types.js +2 -5
  804. package/dist/cli/backend/src/types/v2/claim.types.js.map +1 -1
  805. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +63 -1
  806. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  807. package/dist/cli/backend/src/types/v2/work-item.types.js +20 -0
  808. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  809. package/dist/cli/backend/src/utils/format-error.d.ts +8 -0
  810. package/dist/cli/backend/src/utils/format-error.d.ts.map +1 -0
  811. package/dist/cli/backend/src/utils/format-error.js +10 -0
  812. package/dist/cli/backend/src/utils/format-error.js.map +1 -0
  813. package/dist/cli/backend/src/utils/integrity-guarded-write.utils.d.ts +119 -0
  814. package/dist/cli/backend/src/utils/integrity-guarded-write.utils.d.ts.map +1 -0
  815. package/dist/cli/backend/src/utils/integrity-guarded-write.utils.js +212 -0
  816. package/dist/cli/backend/src/utils/integrity-guarded-write.utils.js.map +1 -0
  817. package/dist/cli/backend/src/utils/node-require.utils.d.ts +104 -0
  818. package/dist/cli/backend/src/utils/node-require.utils.d.ts.map +1 -0
  819. package/dist/cli/backend/src/utils/node-require.utils.js +111 -0
  820. package/dist/cli/backend/src/utils/node-require.utils.js.map +1 -0
  821. package/dist/cli/cli/src/commands/start.js +73 -12
  822. package/dist/cli/cli/src/commands/start.js.map +1 -1
  823. package/frontend/dist/assets/index-b279da34.js +4926 -0
  824. package/frontend/dist/assets/{index-b7e59b2b.css → index-c07e04c0.css} +2 -2
  825. package/frontend/dist/index.html +2 -2
  826. package/package.json +6 -2
  827. package/dist/backend/backend/src/controllers/eval/eval.controller.d.ts +0 -63
  828. package/dist/backend/backend/src/controllers/eval/eval.controller.d.ts.map +0 -1
  829. package/dist/backend/backend/src/controllers/eval/eval.controller.js +0 -228
  830. package/dist/backend/backend/src/controllers/eval/eval.controller.js.map +0 -1
  831. package/dist/backend/backend/src/controllers/eval/eval.routes.d.ts +0 -23
  832. package/dist/backend/backend/src/controllers/eval/eval.routes.d.ts.map +0 -1
  833. package/dist/backend/backend/src/controllers/eval/eval.routes.js +0 -37
  834. package/dist/backend/backend/src/controllers/eval/eval.routes.js.map +0 -1
  835. package/dist/backend/backend/src/controllers/knowledge-v3/index.d.ts +0 -8
  836. package/dist/backend/backend/src/controllers/knowledge-v3/index.d.ts.map +0 -1
  837. package/dist/backend/backend/src/controllers/knowledge-v3/index.js +0 -8
  838. package/dist/backend/backend/src/controllers/knowledge-v3/index.js.map +0 -1
  839. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.d.ts +0 -63
  840. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.d.ts.map +0 -1
  841. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.js +0 -179
  842. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.controller.js.map +0 -1
  843. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.d.ts +0 -22
  844. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.d.ts.map +0 -1
  845. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.js +0 -34
  846. package/dist/backend/backend/src/controllers/knowledge-v3/knowledge-v3.routes.js.map +0 -1
  847. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.d.ts +0 -130
  848. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.d.ts.map +0 -1
  849. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.js +0 -406
  850. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/cli-adapter.js.map +0 -1
  851. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.d.ts +0 -68
  852. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.d.ts.map +0 -1
  853. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.js +0 -206
  854. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/crewly-agent-adapter.js.map +0 -1
  855. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.d.ts +0 -32
  856. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.d.ts.map +0 -1
  857. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.js +0 -46
  858. package/dist/backend/backend/src/services/agent/crewly-agent/eval/adapters/index.js.map +0 -1
  859. package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.d.ts +0 -87
  860. package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.d.ts.map +0 -1
  861. package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.js +0 -299
  862. package/dist/backend/backend/src/services/agent/crewly-agent/eval/context-generator.js.map +0 -1
  863. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.d.ts +0 -59
  864. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.d.ts.map +0 -1
  865. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.js +0 -218
  866. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-runner.js.map +0 -1
  867. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.d.ts +0 -203
  868. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.d.ts.map +0 -1
  869. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.js +0 -467
  870. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-scorer.js.map +0 -1
  871. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.d.ts +0 -313
  872. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.d.ts.map +0 -1
  873. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.js +0 -45
  874. package/dist/backend/backend/src/services/agent/crewly-agent/eval/eval-types.js.map +0 -1
  875. package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.d.ts +0 -21
  876. package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.d.ts.map +0 -1
  877. package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.js +0 -21
  878. package/dist/backend/backend/src/services/agent/crewly-agent/eval/index.js.map +0 -1
  879. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.d.ts +0 -15
  880. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.d.ts.map +0 -1
  881. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.js +0 -349
  882. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-cli.js.map +0 -1
  883. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.d.ts +0 -97
  884. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.d.ts.map +0 -1
  885. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.js +0 -414
  886. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-l4.js.map +0 -1
  887. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.d.ts +0 -42
  888. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.d.ts.map +0 -1
  889. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.js +0 -403
  890. package/dist/backend/backend/src/services/agent/crewly-agent/eval/run-eval-standalone.js.map +0 -1
  891. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.d.ts +0 -41
  892. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.d.ts.map +0 -1
  893. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.js +0 -58
  894. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/index.js.map +0 -1
  895. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.d.ts +0 -15
  896. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.d.ts.map +0 -1
  897. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.js +0 -396
  898. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l1-tasks.js.map +0 -1
  899. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.d.ts +0 -14
  900. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.d.ts.map +0 -1
  901. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.js +0 -564
  902. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l2-tasks.js.map +0 -1
  903. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.d.ts +0 -13
  904. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.d.ts.map +0 -1
  905. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.js +0 -634
  906. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l3-tasks.js.map +0 -1
  907. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.d.ts +0 -21
  908. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.d.ts.map +0 -1
  909. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.js +0 -1036
  910. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tasks/l4-tasks.js.map +0 -1
  911. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.d.ts +0 -100
  912. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.d.ts.map +0 -1
  913. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.js +0 -187
  914. package/dist/backend/backend/src/services/agent/crewly-agent/eval/tool-log-parser.js.map +0 -1
  915. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +0 -79
  916. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +0 -1
  917. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +0 -118
  918. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +0 -1
  919. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +0 -113
  920. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +0 -1
  921. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +0 -179
  922. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +0 -1
  923. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +0 -131
  924. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +0 -1
  925. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +0 -227
  926. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +0 -1
  927. package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
  928. package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
  929. package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
  930. package/dist/backend/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
  931. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +0 -97
  932. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +0 -1
  933. package/dist/backend/backend/src/services/memory/learning-format.validator.js +0 -209
  934. package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +0 -1
  935. package/frontend/dist/assets/index-7a4e7df5.js +0 -5228
  936. /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.d.ts +0 -0
  937. /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -0
  938. /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.js +0 -0
  939. /package/dist/{backend → cli}/backend/src/services/knowledge/learnings-index.service.js.map +0 -0
@@ -13,7 +13,7 @@ import helmet from 'helmet';
13
13
  import morgan from 'morgan';
14
14
  import os from 'os';
15
15
  import { fileURLToPath } from 'url';
16
- import { StorageService, TmuxService, SchedulerService, MessageSchedulerService, ActivityMonitorService, TaskTrackingService, TeamActivityWebSocketService, TeamsJsonWatcherService, } from './services/index.js';
16
+ import { StorageService, TmuxService, SchedulerService, MessageSchedulerService, ActivityMonitorService, TeamActivityWebSocketService, TeamsJsonWatcherService, } from './services/index.js';
17
17
  import { getSessionBackend, getSessionBackendSync, getSessionStatePersistence, destroySessionBackend, PtySessionBackend, } from './services/session/index.js';
18
18
  import { ApiController } from './controllers/api.controller.js';
19
19
  import { createApiRoutes } from './routes/api.routes.js';
@@ -25,6 +25,7 @@ import { getSettingsService } from './services/settings/index.js';
25
25
  import { MemoryService } from './services/memory/memory.service.js';
26
26
  import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
27
27
  import { initializeSlackIfConfigured, shutdownSlack } from './services/slack/index.js';
28
+ import { resolveTeamByIdOrSlug, slugifyTeamName } from './services/workflow/team-identifier-resolver.js';
28
29
  import { initializeWhatsAppIfConfigured, shutdownWhatsApp } from './services/whatsapp/index.js';
29
30
  import { initializeGoogleChatIfConfigured } from './services/messaging/google-chat-initializer.js';
30
31
  import { initializeTelegramIfConfigured, shutdownTelegram } from './services/telegram/index.js';
@@ -34,7 +35,11 @@ import { ThreadStatusQueueService } from './services/messaging/thread-status-que
34
35
  import { EventBusService } from './services/event-bus/index.js';
35
36
  import { EventToWorkItemBridge } from './services/event-bus/event-to-workitem-bridge.service.js';
36
37
  import { AutoLearningSubscriber } from './services/memory/auto-learning.subscriber.js';
38
+ import { MilestoneNotificationSubscriber } from './services/notification/milestone-notification.subscriber.js';
37
39
  import { RequestSlaSubscriber, setRequestSlaSubscriber, } from './services/v3/request-sla.subscriber.js';
40
+ import { RequestDecomposeSubscriber, setRequestDecomposeSubscriber, } from './services/v3/request-decompose.subscriber.js';
41
+ import { RequestStatusUpdateSubscriber } from './services/v3/request-status-update.subscriber.js';
42
+ import { RequestCascadeSubscriber } from './services/v3/request-cascade.subscriber.js';
38
43
  import { setRequestServiceEventBus, RequestService } from './services/v3/request.service.js';
39
44
  import { getSlackService } from './services/slack/slack.service.js';
40
45
  import { SlackThreadStoreService, setSlackThreadStore, getSlackThreadStore } from './services/slack/slack-thread-store.service.js';
@@ -42,7 +47,6 @@ import { GoogleChatThreadStoreService, setGchatThreadStore } from './services/me
42
47
  import { SlackImageService, setSlackImageService } from './services/slack/slack-image.service.js';
43
48
  import { NotifyReconciliationService } from './services/slack/notify-reconciliation.service.js';
44
49
  import { setEventBusService as setEventBusControllerService } from './controllers/event-bus/event-bus.controller.js';
45
- import { setEventBusServiceForTaskCleanup } from './controllers/task-management/task-management.controller.js';
46
50
  import { setTeamControllerEventBusService } from './controllers/team/team.controller.js';
47
51
  import { SkillCatalogService } from './services/skill/skill-catalog.service.js';
48
52
  import { setMessageQueueService as setChatMessageQueueService, setThreadStatusQueueService as setChatThreadStatusQueueService } from './controllers/chat/chat.controller.js';
@@ -61,6 +65,7 @@ import { RuntimeExitMonitorService } from './services/agent/runtime-exit-monitor
61
65
  import { ContextWindowMonitorService } from './services/agent/context-window-monitor.service.js';
62
66
  import { OAuthReloginMonitorService } from './services/agent/oauth-relogin-monitor.service.js';
63
67
  import { findPackageRoot } from './utils/package-root.js';
68
+ import { isNativeBindingFatalError } from './utils/native-binding.utils.js';
64
69
  import { VersionCheckService } from './services/system/version-check.service.js';
65
70
  import { LogRotationService } from './services/session/log-rotation.service.js';
66
71
  import { AuditorSchedulerService } from './services/agent/auditor-scheduler.service.js';
@@ -123,7 +128,6 @@ export class CrewlyServer {
123
128
  schedulerService;
124
129
  messageSchedulerService;
125
130
  activityMonitorService;
126
- taskTrackingService;
127
131
  teamActivityWebSocketService;
128
132
  teamsJsonWatcherService;
129
133
  apiController;
@@ -136,8 +140,15 @@ export class CrewlyServer {
136
140
  eventToWorkItemBridge = null;
137
141
  /** LEARN-1: subscribes to terminal task / mission:replanned events and auto-records learnings. */
138
142
  autoLearningSubscriber = null;
143
+ // DF-1 #438 — symmetric to AutoLearningSubscriber; surfaces milestones
144
+ // to orc's chat queue.
145
+ milestoneNotificationSubscriber = null;
139
146
  /** INBOUND-1: subscribes to request:created and tracks 5/10 min SLA on respond_to_user WIs. */
140
147
  requestSlaSubscriber = null;
148
+ /** Pipeline-#4 follow-up: subscribes to request:created and auto-decomposes actionable L2 Requests via plan() → addToPool. */
149
+ requestDecomposeSubscriber = null;
150
+ requestStatusUpdateSubscriber = null;
151
+ requestCascadeSubscriber = null;
141
152
  notifyReconciliationService;
142
153
  systemResourceAlertService;
143
154
  reconcilerService = null;
@@ -207,15 +218,16 @@ export class CrewlyServer {
207
218
  this.schedulerService = new SchedulerService(this.storageService);
208
219
  this.messageSchedulerService = new MessageSchedulerService(this.tmuxService, this.storageService);
209
220
  this.activityMonitorService = ActivityMonitorService.getInstance();
210
- this.taskTrackingService = new TaskTrackingService();
211
- this.teamActivityWebSocketService = new TeamActivityWebSocketService(this.storageService, this.tmuxService, this.taskTrackingService);
221
+ // V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
222
+ // TaskTrackingService is deleted; in-progress task data and lifecycle
223
+ // events come from TaskPoolService + EventBusService respectively.
224
+ this.teamActivityWebSocketService = new TeamActivityWebSocketService(this.storageService, this.tmuxService);
212
225
  this.teamsJsonWatcherService = new TeamsJsonWatcherService();
213
226
  this.apiController = new ApiController(this.storageService, this.tmuxService, this.schedulerService, this.messageSchedulerService);
214
227
  // Wire up reliable delivery: both schedulers use AgentRegistrationService
215
228
  // for retry + progressive verification + background stuck-detection
216
229
  this.messageSchedulerService.setAgentRegistrationService(this.apiController.agentRegistrationService);
217
230
  this.schedulerService.setAgentRegistrationService(this.apiController.agentRegistrationService);
218
- this.schedulerService.setTaskTrackingService(this.taskTrackingService);
219
231
  // Initialize message queue services (with disk persistence)
220
232
  // NOTE: Must be created before services that depend on them (scheduler, thread status queue)
221
233
  this.messageQueueService = new MessageQueueService(this.config.crewlyHome);
@@ -255,6 +267,23 @@ export class CrewlyServer {
255
267
  // triggers addToPool — the slack listener / TaskPool router below both
256
268
  // depend on this for the auto-close path b chain. Idempotent.
257
269
  TaskPoolService.getInstance().setEventBusService(this.eventBusService);
270
+ // P1 Bug B (Pool umbrella WI 72ca743a): Wire RequestService into the
271
+ // TaskPool singleton so addToPool intrinsically links new WIs into
272
+ // their parent Request.workItemIds[] — independent of the
273
+ // subscriber-driven path (request-sla.subscriber, V3DataService).
274
+ // Pre-fix, manual / programmatic / cron callers that bypassed the
275
+ // event chain left Requests with empty workItemIds[]. The linker is
276
+ // idempotent (request.service.ts:328 short-circuits on duplicate id)
277
+ // so subscriber-driven linking stays as belt-and-suspenders.
278
+ TaskPoolService.getInstance().setRequestService(RequestService.getInstance());
279
+ // P1 Bug C (Pool umbrella WI 72ca743a, sub-WI Bug C): Wire the inverse
280
+ // dependency — RequestService → TaskPool — so RequestService.update
281
+ // can refuse `Request → done` when any child WorkItem is still in a
282
+ // non-terminal state. Bug B (above) makes Request.workItemIds[]
283
+ // authoritative on every addToPool; Bug C makes the closure honor
284
+ // that data. The setter is duck-typed on IWorkItemQueryable so
285
+ // neither side needs a static import of the other.
286
+ RequestService.getInstance().setTaskPoolService(TaskPoolService.getInstance());
258
287
  // Wire Task Pool router so [TASK]-prefixed messages route through the pool
259
288
  this.queueProcessorService.setTaskPoolRouter(async (messageContent, targetSession) => {
260
289
  const { createWorkItem } = await import('./types/v2/work-item.types.js');
@@ -283,24 +312,14 @@ export class CrewlyServer {
283
312
  this.activityMonitorService.setEventBusService(this.eventBusService);
284
313
  setEventBusControllerService(this.eventBusService);
285
314
  setTeamControllerEventBusService(this.eventBusService);
286
- setEventBusServiceForTaskCleanup(this.eventBusService);
287
- // Architecture Upgrade Phase 6: Bridge task workflow events to EventBus
288
- this.taskTrackingService.on('task_workflow_event', (payload) => {
289
- this.eventBusService.publish({
290
- id: `task-workflow-${payload.taskId || 'team'}-${Date.now()}`,
291
- type: payload.type,
292
- timestamp: new Date().toISOString(),
293
- teamId: payload.teamId || '',
294
- teamName: '',
295
- memberId: payload.ownerMemberId || '',
296
- memberName: '',
297
- sessionName: payload.assignedSessionName || '',
298
- previousValue: '',
299
- newValue: payload.taskStatus || payload.type,
300
- changedField: 'taskStatus',
301
- taskId: payload.taskId,
302
- });
303
- });
315
+ // Wire team-activity-websocket to EventBus so it reacts to V3
316
+ // WorkItem lifecycle events (replaces the legacy
317
+ // TaskTrackingService.on('task_workflow_event') bridge that was
318
+ // deleted with the v1 task-management subsystem).
319
+ this.teamActivityWebSocketService.setEventBus(this.eventBusService);
320
+ // V3-only autonomy: AgentAutoClaimService (started later in boot)
321
+ // is the single autonomy loop. The legacy AutoAssignService has
322
+ // been retired — see spec 2026-05-06-task-management-v1-deprecation.md.
304
323
  // BRIDGE-1: subscribe to autonomy events (task:done_by_worker,
305
324
  // task:rejected, task:blocked, team:all_tasks_done, mission:*) and
306
325
  // create the appropriate WorkItem(s) — verification WI for TL on
@@ -316,24 +335,128 @@ export class CrewlyServer {
316
335
  // contract (V1) and the V7/V9 self-checks in the co-located test.
317
336
  this.autoLearningSubscriber = AutoLearningSubscriber.boot(this.eventBusService);
318
337
  this.autoLearningSubscriber.start();
319
- // INBOUND-1: wire RequestService bus, then subscribe SLA tracker.
320
- // Order matters: setRequestServiceEventBus must run BEFORE any code
321
- // path can call RequestService.create() the slack listener at
322
- // line ~370 is the first hot caller, but the slack service hasn't
323
- // been initialised yet at this point in boot, so we're safe.
324
- setRequestServiceEventBus(this.eventBusService);
325
- this.requestSlaSubscriber = RequestSlaSubscriber.boot(this.eventBusService, RequestService.getInstance(), TaskPoolService.getInstance(), async ({ channelId, threadTs, messageText }) => {
326
- // Production wiring of the 10-min escalation hook: nudge the user
327
- // in the same Slack thread so they're never blind to the miss.
328
- const slack = getSlackService();
329
- await slack.sendMessage({
330
- channelId,
331
- threadTs,
332
- text: messageText,
333
- });
338
+ // DF-1 #438: symmetric notification subscriber. Same architectural
339
+ // pattern as AutoLearningSubscriber listens to terminal lifecycle
340
+ // events (`task:verified`, `mission:replanned`) and enqueues a
341
+ // `[MILESTONE]` envelope into orc's chat queue. The QW-3 row in
342
+ // `config/roles/orchestrator/prompt.md` (#436) handles the
343
+ // always-forward-to-owner rule on the orc side; this subscriber
344
+ // closes the gap where an agent ships work but forgets to call
345
+ // `report-status --status milestone` (the agent-side QW-1 path).
346
+ this.milestoneNotificationSubscriber = new MilestoneNotificationSubscriber({
347
+ eventBus: this.eventBusService,
348
+ messageQueueService: this.messageQueueService,
334
349
  });
335
- this.requestSlaSubscriber.start();
336
- setRequestSlaSubscriber(this.requestSlaSubscriber);
350
+ this.milestoneNotificationSubscriber.start();
351
+ // INBOUND-1 + Pipeline-#4 follow-up: wire RequestService → bus, then
352
+ // boot both v3 subscribers (SLA tracker + auto-decompose). Order
353
+ // matters within the block: setRequestServiceEventBus must run
354
+ // BEFORE any code path can call RequestService.create() — the slack
355
+ // listener at line ~370 is the first hot caller, but the slack
356
+ // service hasn't been initialised yet at this point in boot, so
357
+ // we're safe.
358
+ //
359
+ // Failure-isolated (issue #465): the entire v3 subscriber boot is
360
+ // wrapped in try/catch so a wiring failure logs + continues rather
361
+ // than crashing the whole backend. Neither subscriber is essential
362
+ // to API liveness — degrading them is preferable to losing the
363
+ // process. A single catch block treats both as a unit because the
364
+ // failure mode is "wiring is broken, fix the deploy" not
365
+ // "intermittently flaky"; partial recovery would be unnecessary
366
+ // complexity for v1. B0 broadcast (line ~2336) and TriggerEngine
367
+ // boot (line ~1464) already have equivalent isolation; this brings
368
+ // the v3 subscriber block in line with that pattern.
369
+ try {
370
+ setRequestServiceEventBus(this.eventBusService);
371
+ this.requestSlaSubscriber = RequestSlaSubscriber.boot(this.eventBusService, RequestService.getInstance(), TaskPoolService.getInstance(), async ({ channelId, threadTs, messageText }) => {
372
+ // Production wiring of the 10-min escalation hook: nudge the user
373
+ // in the same Slack thread so they're never blind to the miss.
374
+ const slack = getSlackService();
375
+ await slack.sendMessage({
376
+ channelId,
377
+ threadTs,
378
+ text: messageText,
379
+ });
380
+ });
381
+ this.requestSlaSubscriber.start();
382
+ setRequestSlaSubscriber(this.requestSlaSubscriber);
383
+ // Pipeline-#4 follow-up: auto-decompose actionable L2 Requests on
384
+ // request:created. Sequenced AFTER the SLA subscriber so the
385
+ // respond_to_user WI seeding still runs first when both fire on
386
+ // the same event (deterministic listener-attach order; both run
387
+ // via the same in-process bus). Side note: order is semantically
388
+ // irrelevant — the linkWorkItem path keys on workitem:queued, not
389
+ // on relative listener position — but predictable startup ordering
390
+ // helps debug.
391
+ this.requestDecomposeSubscriber = RequestDecomposeSubscriber.boot(this.eventBusService, RequestService.getInstance(), TaskPoolService.getInstance());
392
+ this.requestDecomposeSubscriber.start();
393
+ setRequestDecomposeSubscriber(this.requestDecomposeSubscriber);
394
+ // Status-update subscriber: posts progress on Slack-originated
395
+ // Requests as their child WIs reach milestones, plus a heartbeat
396
+ // while work is still in flight. Closes the "long silence after
397
+ // orc's first ack" UX gap. Idempotent — duplicate boots are no-ops.
398
+ this.requestStatusUpdateSubscriber = new RequestStatusUpdateSubscriber({
399
+ eventBus: this.eventBusService,
400
+ requestService: RequestService.getInstance(),
401
+ taskPool: TaskPoolService.getInstance(),
402
+ slackPoster: async ({ channelId, text, threadTs }) => {
403
+ // Post via the in-process SlackService to avoid a self-HTTP
404
+ // hop. The /api/slack/send route's other side-effects (chat
405
+ // persistence, thread-status replied marker) don't apply
406
+ // to mid-thread heartbeat updates — those are only for
407
+ // the user's direct reply, not for orc's progress pings.
408
+ const slack = getSlackService();
409
+ if (!slack.isConnected())
410
+ return;
411
+ await slack.sendMessage({ channelId, text, threadTs });
412
+ },
413
+ heartbeatMinutes: 30,
414
+ });
415
+ this.requestStatusUpdateSubscriber.start();
416
+ // Cascade subscriber: keeps Request.status in sync with the
417
+ // aggregate state of its child WIs by reacting to live task
418
+ // lifecycle events. Closes the gap left by V3DataService's
419
+ // retired `v3:task_*` subscriptions (see 2026-05-09 dogfood
420
+ // note in request-cascade.subscriber.ts).
421
+ this.requestCascadeSubscriber = new RequestCascadeSubscriber({
422
+ eventBus: this.eventBusService,
423
+ requestService: RequestService.getInstance(),
424
+ taskPool: TaskPoolService.getInstance(),
425
+ notifier: this.eventBusService,
426
+ });
427
+ this.requestCascadeSubscriber.start();
428
+ }
429
+ catch (subscriberBootErr) {
430
+ // Degraded mode: SLA tracking + auto-decompose are off, but the
431
+ // API surface and rest of the backend continue to serve. Ops can
432
+ // grep for `v3 subscriber boot failed` in logs to triage.
433
+ this.logger.error('v3 subscriber boot failed — degrading SLA + auto-decompose paths, continuing backend startup', {
434
+ error: subscriberBootErr instanceof Error
435
+ ? subscriberBootErr.message
436
+ : String(subscriberBootErr),
437
+ });
438
+ // Best-effort cleanup of any partial wiring so a later restart
439
+ // doesn't see stale singletons. The setters are idempotent.
440
+ setRequestSlaSubscriber(null);
441
+ setRequestDecomposeSubscriber(null);
442
+ setRequestServiceEventBus(null);
443
+ this.requestSlaSubscriber = null;
444
+ this.requestDecomposeSubscriber = null;
445
+ if (this.requestStatusUpdateSubscriber) {
446
+ try {
447
+ this.requestStatusUpdateSubscriber.stop();
448
+ }
449
+ catch { /* best-effort */ }
450
+ this.requestStatusUpdateSubscriber = null;
451
+ }
452
+ if (this.requestCascadeSubscriber) {
453
+ try {
454
+ this.requestCascadeSubscriber.stop();
455
+ }
456
+ catch { /* best-effort */ }
457
+ this.requestCascadeSubscriber = null;
458
+ }
459
+ }
337
460
  // Initialize Slack thread store for persistent thread conversations
338
461
  const slackThreadStore = new SlackThreadStoreService(this.config.crewlyHome);
339
462
  setSlackThreadStore(slackThreadStore);
@@ -368,28 +491,45 @@ export class CrewlyServer {
368
491
  }
369
492
  }
370
493
  });
494
+ // Shared LiveReconcilerDataProvider instance used by both the
495
+ // Reconciler service and the TeamHealthWatchdog data provider.
496
+ // Sharing is required so the memory-pressure broadcast state
497
+ // (`consecutivePressureSkips` / `lastPressureNotifiedAt`) is
498
+ // counted ONCE per sustained pressure episode. Two separate
499
+ // instances would each cross the 5-skip threshold around the same
500
+ // time and publish two `system:memory_pressure` events with
501
+ // distinct `event.id` values (no debounce match), so orc would
502
+ // receive duplicates. See follow-up #5 from PR #543 review.
503
+ const liveDataProvider = new LiveReconcilerDataProvider();
504
+ liveDataProvider.setEventBus(this.eventBusService);
505
+ // Wire AgentRegistrationService so the memory-pressure eviction
506
+ // path can terminate idle agents to free wake slots (issue surfaced
507
+ // 2026-05-16: queued WIs for inactive Atlas could not get woken
508
+ // because the floor was held by idle product/marketing agents).
509
+ liveDataProvider.setAgentRegistrationService(this.apiController.agentRegistrationService);
371
510
  // Initialize Reconciler Service (V2 — system truth recomputation)
372
511
  {
373
512
  const reconcilerLogger = LoggerService.getInstance().createComponentLogger('ReconcilerInit');
374
513
  // Live data provider — connects Reconciler to Task Pool, Claim Service,
375
514
  // Storage Service, and Agent Suspend for real reconciliation including
376
515
  // Hybrid Wake (auto-rehydrating suspended agents when tasks go unclaimed).
377
- const liveDataProvider = new LiveReconcilerDataProvider();
378
516
  this.reconcilerService = new ReconcilerService(liveDataProvider);
379
517
  setReconcilerService(this.reconcilerService);
380
518
  // Subscribe EventBus events for targeted reconciliation
381
519
  if (this.reconcilerService) {
382
520
  const reconciler = this.reconcilerService;
383
- const eventTypes = ['agent:idle', 'task:completed', 'task:failed', 'agent:inactive'];
384
- for (const eventType of eventTypes) {
385
- this.eventBusService.subscribe({
386
- eventType,
387
- filter: {},
388
- subscriberSession: '__reconciler__',
389
- oneShot: false,
390
- ttlMinutes: 525_600, // 1 yearpermanent subscription
391
- });
392
- }
521
+ // 2026-05-15 Steve dogfood: the prior `subscribe({ subscriberSession:
522
+ // '__reconciler__' })` loop here was redundant AND wrong. The
523
+ // subscribe path routes critical events through
524
+ // `MessageQueueService.enqueue` keyed by `targetSession`, which
525
+ // then fails noisily because `__reconciler__` is not a PTY
526
+ // session ("Session '__reconciler__' does not exist", every
527
+ // reconciler tick). The in-process `event_published` listener
528
+ // below already drives the reconciler no second wiring needed.
529
+ // Removed the subscribe-block; if a future change needs persistent
530
+ // metadata for the reconciler subscription, attach it as a real
531
+ // in-process subscriber via `onInProcess` rather than the
532
+ // session-targeted `subscribe` API.
393
533
  // Listen for all published events and trigger targeted reconciliation
394
534
  this.eventBusService.on('event_published', (payload) => {
395
535
  const targetedEventTypes = ['task:completed', 'task:failed', 'agent:idle', 'agent:inactive'];
@@ -422,9 +562,11 @@ export class CrewlyServer {
422
562
  thwLogger.warn('Reconciler not available; skipping TeamHealthWatchdog init.');
423
563
  }
424
564
  else {
425
- const reconcilerProvider = new LiveReconcilerDataProvider();
565
+ // Reuse the shared LiveReconcilerDataProvider declared
566
+ // above (follow-up #5 from PR #543 review) — instantiating
567
+ // a second copy would double-broadcast memory-pressure.
426
568
  const dataProvider = new LiveTeamHealthDataProvider({
427
- reconcilerProvider,
569
+ reconcilerProvider: liveDataProvider,
428
570
  getTeams: async () => StorageService.getInstance().getTeams(),
429
571
  bootedAt: new Date(),
430
572
  });
@@ -892,7 +1034,7 @@ export class CrewlyServer {
892
1034
  const ctxSessionBackend = getSessionBackendSync();
893
1035
  if (ctxSessionBackend) {
894
1036
  const contextWindowMonitor = ContextWindowMonitorService.getInstance();
895
- contextWindowMonitor.setDependencies(ctxSessionBackend, this.apiController.agentRegistrationService, this.storageService, this.taskTrackingService, this.eventBusService);
1037
+ contextWindowMonitor.setDependencies(ctxSessionBackend, this.apiController.agentRegistrationService, this.storageService, this.eventBusService);
896
1038
  contextWindowMonitor.start();
897
1039
  this.logger.info('ContextWindowMonitorService started');
898
1040
  }
@@ -915,7 +1057,6 @@ export class CrewlyServer {
915
1057
  try {
916
1058
  const runtimeExitMonitor = RuntimeExitMonitorService.getInstance();
917
1059
  runtimeExitMonitor.setAgentRegistrationService(this.apiController.agentRegistrationService);
918
- runtimeExitMonitor.setTaskTrackingService(this.taskTrackingService);
919
1060
  runtimeExitMonitor.setEventBusService(this.eventBusService);
920
1061
  }
921
1062
  catch (error) {
@@ -974,6 +1115,11 @@ export class CrewlyServer {
974
1115
  const chatDispatcher = new ChatV2DispatcherService({
975
1116
  agentSink: this.apiController.agentRegistrationService,
976
1117
  mentionResolver: chatMentionResolver,
1118
+ // Phase B-2 — huddle roster lookup. ChatV2Service owns
1119
+ // the chat_channel_members table; the dispatcher just
1120
+ // needs the list of session names for a given channel
1121
+ // to fan-out a user message to every huddle member.
1122
+ huddleMembersFor: (channelId) => chatService.queryHuddleMembersForDispatch(channelId),
977
1123
  });
978
1124
  this.chatV2Gateway = chatGateway;
979
1125
  this.chatV2Dispatcher = chatDispatcher;
@@ -985,8 +1131,73 @@ export class CrewlyServer {
985
1131
  path: '/ws/chat',
986
1132
  authMode: jwtSecret ? 'jwt' : 'dev-anonymous',
987
1133
  });
1134
+ // Cloud Portal relay bridge — gives the Crewly Portal at
1135
+ // crewlyai.com the same /agents experience by tunnelling chat-v2
1136
+ // RPC calls through the Cloud relay queue + forwarding gateway
1137
+ // broadcasts as `chat_event` messages. Only wired when Cloud Sync
1138
+ // is running (BrowserRelayAdapter pattern).
1139
+ try {
1140
+ const { ChatV2RelayAdapter } = await import('./services/chat-v2/chat-v2.relay-adapter.service.js');
1141
+ const { CloudSyncService } = await import('./services/cloud/cloud-sync.service.js');
1142
+ const { createOssAgentDirectoryProvider, createOssAgentPresenceProvider, } = await import('./services/chat-v2/chat-v2.providers.js');
1143
+ const sync = CloudSyncService.getInstance();
1144
+ if (sync) {
1145
+ const chatRelayAdapter = new ChatV2RelayAdapter({
1146
+ service: chatService,
1147
+ gateway: chatGateway,
1148
+ cloudSync: sync,
1149
+ // Wire the dispatcher so Portal-sent user messages also fire the
1150
+ // agent-side prompt (parity with the HTTP controller path).
1151
+ // Without this, Portal user-messages persist but the bound agent
1152
+ // never receives the `[CHAT:<id>]` prompt — orc/etc. stay silent.
1153
+ dispatcher: chatDispatcher,
1154
+ directory: createOssAgentDirectoryProvider(this.storageService),
1155
+ presence: createOssAgentPresenceProvider(this.storageService),
1156
+ });
1157
+ chatRelayAdapter.start();
1158
+ this.logger.info('ChatV2RelayAdapter started — Cloud Portal can now drive chat-v2 via relay');
1159
+ }
1160
+ }
1161
+ catch (err) {
1162
+ // Adapter wiring failure is non-fatal — local OSS UI still works.
1163
+ this.logger.warn('ChatV2RelayAdapter wiring skipped', {
1164
+ error: err instanceof Error ? err.message : String(err),
1165
+ });
1166
+ }
1167
+ // Onboarding v3 (B1) — wire the cold-start detector with the
1168
+ // chat-v2 service we just stood up. The orc bootstrap path
1169
+ // (CrewlyAgentRuntimeService.detectOnboardingMode) probes this
1170
+ // singleton; null means "skip the cold-start probe", so this
1171
+ // wiring is what flips onboarding mode on for the demo path.
1172
+ try {
1173
+ const { OnboardingBootstrapService, setOnboardingBootstrapService } = await import('./services/orchestrator/onboarding-bootstrap.service.js');
1174
+ setOnboardingBootstrapService(new OnboardingBootstrapService({
1175
+ storage: this.storageService,
1176
+ chat: { countAllMessages: () => chatService.countAllMessages() },
1177
+ }));
1178
+ this.logger.info('OnboardingBootstrapService wired with storage + chat probes');
1179
+ }
1180
+ catch (wireErr) {
1181
+ this.logger.warn('Failed to wire OnboardingBootstrapService (non-critical)', {
1182
+ error: wireErr instanceof Error ? wireErr.message : String(wireErr),
1183
+ });
1184
+ }
988
1185
  }
989
1186
  catch (error) {
1187
+ // F-CYCLE7-1: a native-binding failure (e.g. better-sqlite3 built
1188
+ // for the wrong arch) MUST crash the boot rather than be downgraded
1189
+ // to a JSON-file fallback. The audit on 2026-05-07 caught this
1190
+ // exact path: chat.db went stale at 11:17Z because dlopen errors
1191
+ // were swallowed here as "non-critical", so operators had no signal
1192
+ // to run `npm rebuild better-sqlite3 --build-from-source`.
1193
+ //
1194
+ // `isNativeBindingFatalError` matches structurally (not just via
1195
+ // instanceof) so realm-boundary cases — same module loaded via
1196
+ // two require paths — still trip the rethrow.
1197
+ if (isNativeBindingFatalError(error)) {
1198
+ this.logger.error('FATAL native binding failed at chat-v2 boot — refusing to downgrade to JSON fallback. Run the printed remediation and restart.', { error: error.message });
1199
+ throw error;
1200
+ }
990
1201
  this.logger.warn('Failed to start chat-v2 WS gateway (non-critical)', {
991
1202
  error: error instanceof Error ? error.message : String(error),
992
1203
  });
@@ -1073,6 +1284,7 @@ export class CrewlyServer {
1073
1284
  // resume notification won't re-send already-answered conversations.
1074
1285
  try {
1075
1286
  const { RequestService } = await import('./services/v3/request.service.js');
1287
+ const { extractSlackChannelId, extractSlackThreadTs } = await import('./services/v3/request-sla.subscriber.js');
1076
1288
  const reqSvc = RequestService.getInstance();
1077
1289
  const allReqs = await reqSvc.listAll();
1078
1290
  let backfilled = 0;
@@ -1080,13 +1292,17 @@ export class CrewlyServer {
1080
1292
  if (req.status !== 'done')
1081
1293
  continue;
1082
1294
  const scid = req.sourceConversationItemId || '';
1083
- if (!scid.startsWith('slack-'))
1084
- continue;
1085
- const m = scid.match(/^slack-(.+)-(\d+)[.-](\d+)$/);
1086
- if (!m)
1295
+ // `extractSlack*` strips the optional `-msg-{ts}` thread-reply
1296
+ // suffix before parsing, so both top-level and in-thread
1297
+ // Requests resolve to the canonical `{channelId}:{threadRoot}`.
1298
+ // Previously a local regex was used here and its greedy `.+`
1299
+ // swallowed the suffix, producing a malformed threadKey that
1300
+ // missed the dedup check and bloated the persistence file.
1301
+ const channelId = extractSlackChannelId(scid);
1302
+ const threadTs = extractSlackThreadTs(scid);
1303
+ if (!channelId || !threadTs)
1087
1304
  continue;
1088
- const [, channelId, t1, t2] = m;
1089
- const threadKey = `${channelId}:${t1}.${t2}`;
1305
+ const threadKey = `${channelId}:${threadTs}`;
1090
1306
  if (this.threadStatusQueueService.get(threadKey))
1091
1307
  continue;
1092
1308
  this.threadStatusQueueService.trackInbound({
@@ -1112,9 +1328,7 @@ export class CrewlyServer {
1112
1328
  // but before the queue processor starts (so replayed messages are ready for delivery).
1113
1329
  try {
1114
1330
  const { MessageReplayService } = await import('./services/messaging/message-replay.service.js');
1115
- const { getChatService } = await import('./services/chat/chat.service.js');
1116
- const chatService = getChatService();
1117
- const replayService = new MessageReplayService(this.messageQueueService, chatService, this.config.crewlyHome);
1331
+ const replayService = new MessageReplayService(this.messageQueueService, this.config.crewlyHome);
1118
1332
  const replayResult = await replayService.replayPendingMessages();
1119
1333
  if (replayResult.replayedCount > 0) {
1120
1334
  this.logger.info('Replayed pending messages from offline period (#247)', {
@@ -1170,6 +1384,16 @@ export class CrewlyServer {
1170
1384
  this.logger.info('Executing cron task', { id: task.id, target: task.targetAgent });
1171
1385
  await registrationRef.sendMessageToAgent(task.targetAgent, `[CRON_TASK:${task.id}] ${task.taskDescription}`);
1172
1386
  });
1387
+ // Issue #307: cron tasks created with `targetTeamId` set to a
1388
+ // name slug (e.g. "stock-ops-team") instead of the UUID would
1389
+ // silently 404 on every fire — `teams.find(t => t.id === teamId)`
1390
+ // returned undefined and both callbacks returned `false` with
1391
+ // no log surface. `resolveTeamByIdOrSlug` (imported statically
1392
+ // at the top of the file) tries UUID first, then falls back
1393
+ // to a slug match against `name`. Misses now surface a distinct
1394
+ // warn-log with the available slugs so the cause is visible
1395
+ // instead of hiding behind the generic "agent offline" warn
1396
+ // from cron-task.service.
1173
1397
  cronTaskService.setAgentStatusCallback(async (sessionName, teamId) => {
1174
1398
  // Handle orchestrator separately — it's not in regular teams
1175
1399
  if (sessionName === CREWLY_CONSTANTS.SESSIONS.ORCHESTRATOR_NAME || teamId === 'orchestrator') {
@@ -1177,9 +1401,16 @@ export class CrewlyServer {
1177
1401
  return orchStatus?.agentStatus === 'active' || orchStatus?.agentStatus === 'started';
1178
1402
  }
1179
1403
  const teams = await storageRef.getTeams();
1180
- const team = teams.find((t) => t.id === teamId);
1181
- if (!team)
1404
+ const team = resolveTeamByIdOrSlug(teams, teamId);
1405
+ if (!team) {
1406
+ this.logger.warn('CronTask: targetTeamId resolves to no team', {
1407
+ sessionName,
1408
+ targetTeamId: teamId,
1409
+ availableSlugs: teams.slice(0, 10).map((t) => slugifyTeamName(t.name)),
1410
+ hint: 'Set targetTeamId to either the team UUID or one of availableSlugs (lowercase, spaces→-)',
1411
+ });
1182
1412
  return false;
1413
+ }
1183
1414
  const member = team.members.find((m) => m.sessionName === sessionName);
1184
1415
  if (!member)
1185
1416
  return false;
@@ -1189,16 +1420,25 @@ export class CrewlyServer {
1189
1420
  cronTaskService.setAgentStartCallback(async (sessionName, teamId) => {
1190
1421
  try {
1191
1422
  const teams = await storageRef.getTeams();
1192
- const team = teams.find((t) => t.id === teamId);
1193
- if (!team)
1423
+ const team = resolveTeamByIdOrSlug(teams, teamId);
1424
+ if (!team) {
1425
+ this.logger.warn('CronTask auto-start: targetTeamId resolves to no team', {
1426
+ sessionName,
1427
+ targetTeamId: teamId,
1428
+ availableSlugs: teams.slice(0, 10).map((t) => slugifyTeamName(t.name)),
1429
+ hint: 'Set targetTeamId to either the team UUID or one of availableSlugs (lowercase, spaces→-)',
1430
+ });
1194
1431
  return false;
1432
+ }
1195
1433
  const member = team.members.find((m) => m.sessionName === sessionName);
1196
1434
  if (!member)
1197
1435
  return false;
1198
1436
  await registrationRef.createAgentSession({
1199
1437
  sessionName: member.sessionName,
1200
1438
  role: member.role,
1201
- teamId,
1439
+ // Use the resolved team's UUID — not the user-supplied identifier
1440
+ // — so downstream agent-registration always sees the canonical id.
1441
+ teamId: team.id,
1202
1442
  memberId: member.id,
1203
1443
  });
1204
1444
  return true;
@@ -1392,12 +1632,27 @@ export class CrewlyServer {
1392
1632
  error: v3Err instanceof Error ? v3Err.message : String(v3Err),
1393
1633
  });
1394
1634
  }
1635
+ // Start WorkItemDispatchSubscriber FIRST — AgentAutoClaim's recovery
1636
+ // path delegates to its dispatchTo() for the "active target session"
1637
+ // branch, so the singleton must be reachable when recovery fires.
1638
+ try {
1639
+ const { WorkItemDispatchSubscriber } = await import('./services/v3/workitem-dispatch.subscriber.js');
1640
+ const dispatchSubscriber = WorkItemDispatchSubscriber.getInstance();
1641
+ dispatchSubscriber.initialize(this.eventBusService);
1642
+ dispatchSubscriber.start();
1643
+ this.logger.info('WorkItemDispatchSubscriber started — workitem:queued events push to target sessions');
1644
+ }
1645
+ catch (dispatchErr) {
1646
+ this.logger.warn('WorkItemDispatchSubscriber initialization failed (non-critical)', {
1647
+ error: dispatchErr instanceof Error ? dispatchErr.message : String(dispatchErr),
1648
+ });
1649
+ }
1395
1650
  // Start AgentAutoClaimService — auto-assign work to idle agents
1396
1651
  try {
1397
1652
  const { AgentAutoClaimService } = await import('./services/v3/agent-auto-claim.service.js');
1398
1653
  const autoClaimService = AgentAutoClaimService.getInstance();
1399
1654
  autoClaimService.initialize(this.eventBusService);
1400
- autoClaimService.start();
1655
+ await autoClaimService.start();
1401
1656
  this.logger.info('AgentAutoClaimService started — idle agents will auto-claim work');
1402
1657
  }
1403
1658
  catch (autoClaimErr) {
@@ -1474,8 +1729,9 @@ export class CrewlyServer {
1474
1729
  VersionCheckService.getInstance().checkForUpdate().catch(() => {
1475
1730
  // Silently ignore — version check is non-critical
1476
1731
  });
1477
- // Start periodic task file system sync (#137) — cleans up stale tracking entries
1478
- this.taskTrackingService.startAutoSync();
1732
+ // V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
1733
+ // The legacy `TaskTrackingService.startAutoSync()` is gone — V3
1734
+ // task-pool reconciler owns lifecycle cleanup now.
1479
1735
  // Initialize token usage tracking: load persisted data and start periodic flush
1480
1736
  try {
1481
1737
  const tokenUsageService = TokenUsageService.getInstance();
@@ -1511,6 +1767,25 @@ export class CrewlyServer {
1511
1767
  });
1512
1768
  }
1513
1769
  }
1770
+ // C1 — boot-time state invariant check (Persistence P0 spec).
1771
+ // Refuses to start serving traffic if the live teams directory
1772
+ // is empty but a healthy backup snapshot exists. Override via
1773
+ // CREWLY_FORCE_EMPTY_BOOT=1 for legitimate fresh-install / reset.
1774
+ try {
1775
+ await this.storageService.verifyStateInvariantOnBoot();
1776
+ }
1777
+ catch (invariantErr) {
1778
+ const { StateInvariantViolation } = await import('./services/core/state-invariant.types.js');
1779
+ if (invariantErr instanceof StateInvariantViolation) {
1780
+ this.logger.error('Boot aborted by state invariant check — refusing to serve traffic with wiped state', {
1781
+ currentTeamCount: invariantErr.currentTeamCount,
1782
+ backupTeamCount: invariantErr.backupTeamCount,
1783
+ backupTimestamp: invariantErr.backupTimestamp,
1784
+ message: invariantErr.message,
1785
+ });
1786
+ }
1787
+ throw invariantErr;
1788
+ }
1514
1789
  // Start HTTP server with enhanced error handling
1515
1790
  await this.startHttpServer();
1516
1791
  // Load addons from ~/.crewly/addons/ (Pro features, extensions, etc.)
@@ -1534,21 +1809,27 @@ export class CrewlyServer {
1534
1809
  await this.autoStartOrchestratorIfEnabled();
1535
1810
  // Auto-restore agent sessions that were running before the last shutdown
1536
1811
  await this.autoRestoreAgentSessionsIfEnabled();
1537
- // #166: Auto-recover in-progress tasks after restart
1538
- // #196: Skip tasks older than 1 hour to avoid re-sending stale work
1812
+ // #166: Auto-recover in-progress tasks after restart.
1813
+ // #196: Skip tasks older than 1 hour to avoid re-sending stale work.
1814
+ // V3-only as of spec 2026-05-06-task-management-v1-deprecation.md —
1815
+ // reads WorkItems from TaskPoolService (replaces the prior
1816
+ // `TaskTrackingService.getAllInProgressTasks()` call).
1539
1817
  try {
1540
1818
  const TASK_RECOVERY_MAX_AGE_MS = 60 * 60 * 1000; // 1 hour
1541
- const inProgressTasks = await this.taskTrackingService.getAllInProgressTasks();
1819
+ const { TaskPoolService } = await import('./services/task-pool/task-pool.service.js');
1820
+ const allItems = await TaskPoolService.getInstance().getAllItems();
1542
1821
  const now = Date.now();
1543
- const activeTasks = inProgressTasks.filter(t => {
1544
- if (t.status !== 'assigned' && t.status !== 'active' && t.status !== 'working')
1822
+ const activeTasks = allItems.filter(wi => {
1823
+ if (wi.status !== 'queued' && wi.status !== 'accepted' && wi.status !== 'running')
1545
1824
  return false;
1546
- // Skip stale tasks — assignedAt older than threshold
1547
- const taskTime = new Date(t.assignedAt || 0).getTime();
1825
+ if (!wi.target)
1826
+ return false;
1827
+ // Skip stale tasks — startedAt/createdAt older than threshold
1828
+ const taskTime = new Date(wi.startedAt || wi.createdAt || 0).getTime();
1548
1829
  if (now - taskTime > TASK_RECOVERY_MAX_AGE_MS) {
1549
1830
  this.logger.info('Skipping stale task recovery (older than 1 hour)', {
1550
- taskId: t.id,
1551
- taskName: t.taskName,
1831
+ workItemId: wi.id,
1832
+ taskName: wi.title,
1552
1833
  age: `${Math.round((now - taskTime) / 60000)} minutes`,
1553
1834
  });
1554
1835
  return false;
@@ -1556,24 +1837,24 @@ export class CrewlyServer {
1556
1837
  return true;
1557
1838
  });
1558
1839
  if (activeTasks.length > 0) {
1559
- this.logger.info('Found in-progress tasks to recover after restart', {
1840
+ this.logger.info('Found in-progress WorkItems to recover after restart', {
1560
1841
  count: activeTasks.length,
1561
1842
  });
1562
- for (const task of activeTasks) {
1843
+ for (const wi of activeTasks) {
1563
1844
  try {
1564
- const recoveryMessage = `[SYSTEM — TASK RECOVERY] You were working on this task before the server restarted. Please continue:\n\nTask: ${task.taskName}\nPriority: ${task.priority || 'normal'}\nFile: ${task.taskFilePath}\n\nPlease check the current state and continue working.`;
1565
- await this.apiController.agentRegistrationService.sendMessageToAgent(task.assignedSessionName, recoveryMessage, undefined);
1845
+ const recoveryMessage = `[SYSTEM — TASK RECOVERY] You were working on this task before the server restarted. Please continue:\n\nTask: ${wi.title}\nWorkItem: ${wi.id}\n\nFetch full brief: bash config/skills/agent/core/read-task/execute.sh '{"workItemId":"${wi.id}"}'\n\nPlease check the current state and continue working.`;
1846
+ await this.apiController.agentRegistrationService.sendMessageToAgent(wi.target, recoveryMessage, undefined);
1566
1847
  this.logger.info('Task recovery message sent', {
1567
- taskId: task.id,
1568
- sessionName: task.assignedSessionName,
1569
- taskName: task.taskName,
1848
+ workItemId: wi.id,
1849
+ sessionName: wi.target,
1850
+ taskName: wi.title,
1570
1851
  });
1571
1852
  }
1572
1853
  catch (err) {
1573
1854
  // Agent might not be online yet — DLQ in scheduler will handle it
1574
1855
  this.logger.warn('Task recovery delivery deferred (agent may not be online yet)', {
1575
- taskId: task.id,
1576
- sessionName: task.assignedSessionName,
1856
+ workItemId: wi.id,
1857
+ sessionName: wi.target,
1577
1858
  error: err instanceof Error ? err.message : String(err),
1578
1859
  });
1579
1860
  }
@@ -1869,15 +2150,56 @@ export class CrewlyServer {
1869
2150
  // and auditor sessions when auditor is disabled
1870
2151
  const isAuditorEnabled = process.env[AUDITOR_CONSTANTS.ENV_VAR]?.toLowerCase() === 'true'
1871
2152
  || (process.env[AUDITOR_CONSTANTS.ENV_VAR] === undefined && AUDITOR_CONSTANTS.ENABLED_BY_DEFAULT);
1872
- const agentSessions = state.sessions.filter((s) => {
2153
+ const baselineSessions = state.sessions.filter((s) => {
1873
2154
  if (s.role === ORCHESTRATOR_ROLE)
1874
2155
  return false;
1875
2156
  if (!isAuditorEnabled && s.name === AUDITOR_SCHEDULER_CONSTANTS.AUDITOR_SESSION_NAME)
1876
2157
  return false;
1877
2158
  return true;
1878
2159
  });
2160
+ // 2026-05-17 — gate by task-pool work. Pre-fix the boot path
2161
+ // blindly resurrected every persisted session even when none had
2162
+ // pending work, defeating the wake-gate philosophy (PR #574/#585)
2163
+ // and bloating RAM until IdleDetection eventually drained them
2164
+ // back. Now: only restore a session if the pool has at least one
2165
+ // non-terminal WorkItem with `target === sessionName`. Idle
2166
+ // agents stay dead until orc dispatches new work, at which point
2167
+ // the dispatcher / wake path raises them on demand.
2168
+ //
2169
+ // Safety valve: if the pool lookup throws (e.g. SQLite not yet
2170
+ // open during early boot), preserve the legacy behaviour rather
2171
+ // than block all restores — better to over-restore than to
2172
+ // silently strand work.
2173
+ let agentSessions = baselineSessions;
2174
+ try {
2175
+ const pool = TaskPoolService.getInstance();
2176
+ const allItems = await pool.getAllItems();
2177
+ const targetedSessions = new Set();
2178
+ for (const wi of allItems) {
2179
+ if (wi.status === 'done' || wi.status === 'cancelled')
2180
+ continue;
2181
+ const t = wi.target;
2182
+ if (typeof t === 'string' && t.length > 0)
2183
+ targetedSessions.add(t);
2184
+ }
2185
+ const filtered = baselineSessions.filter((s) => targetedSessions.has(s.name));
2186
+ const skipped = baselineSessions
2187
+ .filter((s) => !targetedSessions.has(s.name))
2188
+ .map((s) => s.name);
2189
+ if (skipped.length > 0) {
2190
+ this.logger.info('Skipping auto-restore for sessions with no pending WorkItem (idle agents stay dead until dispatched work arrives)', {
2191
+ skippedCount: skipped.length,
2192
+ skipped: skipped.slice(0, 20),
2193
+ truncated: skipped.length > 20,
2194
+ });
2195
+ }
2196
+ agentSessions = filtered;
2197
+ }
2198
+ catch (poolErr) {
2199
+ this.logger.warn('Auto-restore could not query task pool; falling back to restoring every persisted session', { error: poolErr instanceof Error ? poolErr.message : String(poolErr) });
2200
+ }
1879
2201
  if (agentSessions.length === 0) {
1880
- this.logger.debug('No non-orchestrator sessions to restore');
2202
+ this.logger.info('No persisted agent sessions to restore (all idle, no pending WorkItems)');
1881
2203
  return;
1882
2204
  }
1883
2205
  this.logger.info('Auto-restoring agent sessions from persisted state', {
@@ -2009,6 +2331,49 @@ export class CrewlyServer {
2009
2331
  websocketUrl: `ws://localhost:${this.config.webPort}`,
2010
2332
  home: this.config.crewlyHome
2011
2333
  });
2334
+ // B0 (interim) per `.crewly/specs/2026-05-05-trigger-persistence-bug.md`:
2335
+ // Broadcast `system:backend_restarted` exactly once per boot. The
2336
+ // trigger engine (`backend/src/services/v3/trigger-engine.service.ts`)
2337
+ // stores all `schedule-followup` / `watch-for-event` triggers in an
2338
+ // in-memory `Map<string, Trigger>` that is wiped on every restart.
2339
+ // Subscribers (e.g. self-watch-scribe, any TL using §3.0 universal
2340
+ // delegator-rule) listen for this event as a freshness signal and
2341
+ // re-arm their watchdogs. Re-arm latency drops from "manual cycle"
2342
+ // to "next event tick" — closes the wipe-coverage-gap to seconds.
2343
+ // B1 (full fix) is disk-backed declarative trigger config per the
2344
+ // spec Path A; B0 is the unblock-first interim until B1 lands.
2345
+ try {
2346
+ // AgentEvent shape (`backend/src/types/event-bus.types.ts:198`)
2347
+ // requires a fixed set of string fields. For system-scoped
2348
+ // events we use 'system' for member/session and leave team
2349
+ // fields empty — subscribers MUST gate on `type` rather than
2350
+ // team/member identity. Boot diagnostics (port, duration) are
2351
+ // already in the preceding `Crewly server started` log;
2352
+ // callers needing them can correlate by `timestamp`.
2353
+ this.eventBusService.publish({
2354
+ id: `system-backend-restarted-${Date.now()}`,
2355
+ type: 'system:backend_restarted',
2356
+ timestamp: new Date().toISOString(),
2357
+ teamId: '',
2358
+ teamName: '',
2359
+ memberId: '',
2360
+ memberName: 'system',
2361
+ sessionName: 'system',
2362
+ previousValue: 'stopped',
2363
+ newValue: 'started',
2364
+ changedField: 'agentStatus'
2365
+ });
2366
+ this.logger.info('Broadcast system:backend_restarted event', {
2367
+ port: this.config.webPort,
2368
+ bootDurationMs: duration
2369
+ });
2370
+ }
2371
+ catch (emitError) {
2372
+ // Failure isolation — never block boot on this telemetry.
2373
+ this.logger.warn('Failed to broadcast system:backend_restarted (non-fatal)', {
2374
+ error: emitError instanceof Error ? emitError.message : String(emitError)
2375
+ });
2376
+ }
2012
2377
  resolve();
2013
2378
  });
2014
2379
  this.httpServer.on('error', (error) => {
@@ -2260,14 +2625,13 @@ export class CrewlyServer {
2260
2625
  if (req.sourceConversationItemId.startsWith('slack-')) {
2261
2626
  try {
2262
2627
  const { ThreadStatusQueueService } = await import('./services/messaging/thread-status-queue.service.js');
2628
+ const { extractSlackChannelId, extractSlackThreadTs } = await import('./services/v3/request-sla.subscriber.js');
2263
2629
  const tsq = ThreadStatusQueueService.getInstance();
2264
- // sourceConversationItemId format: "slack-{channelId}-{messageTs}"
2265
- // messageTs format in the ID uses hyphens: "1775935980-197679"
2266
- // Slack threadTs uses dots: "1775935980.197679"
2267
- const match = req.sourceConversationItemId.match(/^slack-(.+)-(\d+)[.-](\d+)$/);
2268
- if (match) {
2269
- const channelId = match[1];
2270
- const threadTs = `${match[2]}.${match[3]}`;
2630
+ // Use the canonical parser (handles both `slack-{ch}-{ts}` and
2631
+ // the thread-reply `slack-{ch}-{root}-msg-{msgTs}` shapes).
2632
+ const channelId = extractSlackChannelId(req.sourceConversationItemId);
2633
+ const threadTs = extractSlackThreadTs(req.sourceConversationItemId);
2634
+ if (channelId && threadTs) {
2271
2635
  const threadKey = `${channelId}:${threadTs}`;
2272
2636
  // Create entry if not tracked, then mark terminal
2273
2637
  if (!tsq.get(threadKey)) {
@@ -2464,6 +2828,11 @@ export class CrewlyServer {
2464
2828
  this.autoLearningSubscriber.stop();
2465
2829
  this.autoLearningSubscriber = null;
2466
2830
  }
2831
+ // DF-1 #438: same shutdown window as auto-learning above.
2832
+ if (this.milestoneNotificationSubscriber) {
2833
+ this.milestoneNotificationSubscriber.stop();
2834
+ this.milestoneNotificationSubscriber = null;
2835
+ }
2467
2836
  // INBOUND-1: stop the SLA subscriber and unset the module-level
2468
2837
  // references so a follow-up start() doesn't see stale singletons.
2469
2838
  if (this.requestSlaSubscriber) {
@@ -2471,6 +2840,13 @@ export class CrewlyServer {
2471
2840
  this.requestSlaSubscriber = null;
2472
2841
  }
2473
2842
  setRequestSlaSubscriber(null);
2843
+ // Pipeline-#4 follow-up: stop the decompose subscriber and clear
2844
+ // its module-level reference on the same shutdown window as SLA.
2845
+ if (this.requestDecomposeSubscriber) {
2846
+ this.requestDecomposeSubscriber.stop();
2847
+ this.requestDecomposeSubscriber = null;
2848
+ }
2849
+ setRequestDecomposeSubscriber(null);
2474
2850
  setRequestServiceEventBus(null);
2475
2851
  // Clean up event bus service
2476
2852
  this.eventBusService.cleanup();