crewly 1.13.0 → 1.14.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 (985) hide show
  1. package/config/constants.ts +8 -0
  2. package/config/roles/orchestrator/prompt.md +23 -0
  3. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  4. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  5. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  6. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  7. package/config/skills/agent/core/block-task/execute.sh +59 -6
  8. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  9. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  10. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  11. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  12. package/config/skills/agent/core/create-task/execute.sh +82 -23
  13. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  14. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  15. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  16. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  17. package/config/skills/agent/core/reply-channel/SKILL.md +6 -0
  18. package/config/skills/agent/core/reply-channel/execute.sh +14 -2
  19. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  20. package/config/skills/agent/core/report-status/execute.sh +40 -5
  21. package/config/skills/agent/core/slack-post/SKILL.md +126 -0
  22. package/config/skills/agent/core/slack-post/execute.sh +127 -0
  23. package/config/skills/agent/remote-browser/SKILL.md +178 -0
  24. package/config/skills/agent/xiaoyuzhoufm-transcript/SKILL.md +46 -22
  25. package/config/skills/agent/xiaoyuzhoufm-transcript/execute.sh +82 -214
  26. package/config/skills/agent/xiaoyuzhoufm-transcript/skill.json +3 -3
  27. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  28. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  29. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  30. package/config/skills/orchestrator/get-team-status/SKILL.md +5 -1
  31. package/config/skills/orchestrator/get-team-status/execute.sh +28 -2
  32. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  33. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  34. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  35. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  36. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  37. package/config/slack-app-manifest.json +7 -1
  38. package/config/vitest-exclude.constants.ts +56 -0
  39. package/dist/backend/backend/src/config/oauth.config.d.ts +93 -19
  40. package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -1
  41. package/dist/backend/backend/src/config/oauth.config.js +121 -19
  42. package/dist/backend/backend/src/config/oauth.config.js.map +1 -1
  43. package/dist/backend/backend/src/constants.d.ts +60 -0
  44. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  45. package/dist/backend/backend/src/constants.js +74 -0
  46. package/dist/backend/backend/src/constants.js.map +1 -1
  47. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  48. package/dist/backend/backend/src/controllers/chat/chat.controller.js +33 -4
  49. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  50. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -1
  51. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +27 -9
  52. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -1
  53. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  54. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  55. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  56. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  57. package/dist/backend/backend/src/controllers/slack/slack.controller.js +360 -15
  58. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  59. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  60. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  61. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  62. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  63. package/dist/backend/backend/src/index.d.ts.map +1 -1
  64. package/dist/backend/backend/src/index.js +43 -7
  65. package/dist/backend/backend/src/index.js.map +1 -1
  66. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  67. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  68. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  69. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  70. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  72. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
  75. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  76. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
  77. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
  79. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  80. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +10 -0
  81. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/agent/idle-detection.service.js +37 -0
  83. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  84. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +13 -11
  86. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  87. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +14 -0
  88. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +56 -0
  90. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  91. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts +63 -0
  92. package/dist/backend/backend/src/services/browser/browser-services.registry.d.ts.map +1 -0
  93. package/dist/backend/backend/src/services/browser/browser-services.registry.js +74 -0
  94. package/dist/backend/backend/src/services/browser/browser-services.registry.js.map +1 -0
  95. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +25 -1
  96. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +19 -7
  98. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  99. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +57 -0
  100. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +110 -1
  102. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  103. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  104. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +43 -0
  106. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  107. package/dist/backend/backend/src/services/core/storage.service.d.ts +6 -0
  108. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/core/storage.service.js +1 -1
  110. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  111. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  113. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  114. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  115. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +54 -0
  117. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  118. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +8 -0
  119. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +31 -3
  121. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  123. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  125. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  127. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  129. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  130. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +47 -1
  131. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +183 -15
  133. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  134. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  135. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  137. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  138. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  139. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  140. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  141. package/dist/backend/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  142. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +124 -0
  143. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +243 -0
  145. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -0
  146. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +11 -0
  147. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  148. package/dist/backend/backend/src/services/slack/slack-initializer.js +56 -0
  149. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  150. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  151. package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +197 -0
  153. package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  154. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +18 -0
  156. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  157. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  158. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  159. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +821 -0
  160. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  161. package/dist/backend/backend/src/services/slack/slack.service.d.ts +116 -1
  162. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  163. package/dist/backend/backend/src/services/slack/slack.service.js +297 -3
  164. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  165. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  166. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  168. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  169. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  170. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  171. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  172. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  173. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  174. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +22 -0
  175. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  176. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +71 -0
  177. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  178. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +20 -2
  179. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
  180. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +27 -2
  181. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
  182. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +15 -2
  183. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -1
  184. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +33 -7
  185. package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -1
  186. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +37 -0
  187. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  188. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +74 -8
  189. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  190. package/dist/backend/backend/src/types/slack.types.d.ts +87 -0
  191. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  192. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  193. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  194. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  195. package/dist/backend/backend/src/types/v2/index.js +1 -1
  196. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  197. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  198. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  199. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  200. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  201. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  202. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  203. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  204. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  205. package/dist/backend/build-info.json +4 -0
  206. package/dist/backend/config/constants.d.ts +8 -0
  207. package/dist/backend/config/constants.d.ts.map +1 -1
  208. package/dist/backend/config/constants.js +8 -0
  209. package/dist/backend/config/constants.js.map +1 -1
  210. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  211. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  212. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  213. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  214. package/dist/cli/backend/src/config/oauth.config.d.ts +93 -19
  215. package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -1
  216. package/dist/cli/backend/src/config/oauth.config.js +121 -19
  217. package/dist/cli/backend/src/config/oauth.config.js.map +1 -1
  218. package/dist/cli/backend/src/constants.d.ts +60 -0
  219. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  220. package/dist/cli/backend/src/constants.js +74 -0
  221. package/dist/cli/backend/src/constants.js.map +1 -1
  222. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  223. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  224. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  225. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  226. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  227. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  228. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  229. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  230. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  231. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  232. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  233. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  234. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  235. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  236. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  237. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  238. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  239. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  240. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  241. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  242. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  243. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  244. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  245. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  246. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  247. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  248. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  249. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  250. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  251. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  252. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  253. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  254. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  255. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  256. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  257. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  258. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  259. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  260. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  261. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  262. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  263. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  264. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  265. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  266. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  267. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  268. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  269. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  270. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  271. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  272. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  273. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  274. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  275. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  276. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  277. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  278. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  279. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  280. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  281. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  282. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  283. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  284. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  285. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  286. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  287. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  288. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  289. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  290. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  291. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  292. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  293. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  294. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  295. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  296. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  297. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  298. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  299. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  300. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  301. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  302. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  303. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  304. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  305. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  306. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  307. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  308. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  309. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  310. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  311. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  312. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  313. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  314. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  315. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  316. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  317. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  318. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  319. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  320. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  321. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  322. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  323. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  324. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  325. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  326. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  327. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  328. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  329. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  330. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  331. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  332. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  333. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  334. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  335. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  336. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  337. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  338. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  339. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  340. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  341. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  342. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  343. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  344. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  345. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  346. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  347. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  348. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  349. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  350. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  351. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  352. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  353. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  354. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  355. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  356. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  357. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  358. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  359. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  360. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  361. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  362. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  363. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  364. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  365. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  366. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  367. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  368. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  369. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  370. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  371. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  372. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  373. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  374. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  375. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  376. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  377. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  378. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  379. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  380. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  381. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  382. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  383. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  384. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  385. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  386. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  387. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  388. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  389. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  390. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  391. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  392. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  393. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  394. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  395. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  396. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  397. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  398. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  399. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  400. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  401. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  402. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  403. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  404. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  405. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  406. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  407. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  408. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  409. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  410. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +292 -0
  411. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
  412. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +420 -0
  413. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
  414. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
  415. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
  416. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
  417. package/dist/cli/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
  418. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +794 -0
  419. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  420. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1322 -0
  421. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  422. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  423. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  424. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  425. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  426. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  427. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  428. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  429. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  430. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  431. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  432. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  433. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  434. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  435. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  436. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  437. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  438. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  439. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  440. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  441. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  442. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +229 -0
  443. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  444. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +448 -0
  445. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  446. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  447. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  448. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  449. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  450. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  451. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  452. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  453. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  454. package/dist/cli/backend/src/services/core/storage.service.d.ts +6 -0
  455. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  456. package/dist/cli/backend/src/services/core/storage.service.js +1 -1
  457. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  458. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  459. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +6 -2
  460. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  461. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  462. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  463. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  464. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  465. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  466. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  467. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  468. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  469. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  470. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  471. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  472. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  473. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  474. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  475. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  476. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  477. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  478. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  479. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  480. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  481. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  482. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  483. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  484. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  485. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  486. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  487. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  488. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  489. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  490. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  491. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  492. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  493. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  494. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  495. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  496. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  497. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  498. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  499. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  500. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  501. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  502. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  503. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  504. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  505. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  506. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  507. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  508. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  509. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  510. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  511. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  512. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  513. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  514. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  515. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  516. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  517. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  518. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  519. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  520. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  521. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +150 -0
  522. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  523. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +293 -0
  524. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  525. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  526. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  527. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  528. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  529. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  530. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  531. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  532. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  533. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  534. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  535. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  536. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  537. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  538. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  539. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  540. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  541. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  542. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  543. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  544. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  545. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  546. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  547. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  548. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  549. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  550. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  551. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  552. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  553. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  554. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  555. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  556. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  557. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  558. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  559. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  560. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  561. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  562. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  563. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  564. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  565. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  566. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  567. package/dist/cli/backend/src/services/session/index.js +50 -0
  568. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  569. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  570. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  571. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  572. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  573. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  574. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  575. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  576. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  577. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  578. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  579. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  580. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  581. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  582. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  583. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  584. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  585. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  586. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  587. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  588. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  589. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  590. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  591. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  592. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  593. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  594. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  595. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  596. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  597. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  598. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  599. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  600. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  601. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  602. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  603. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  604. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  605. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  606. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  607. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  608. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  609. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  610. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  611. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  612. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  613. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  614. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  615. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  616. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  617. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  618. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  619. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  620. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  621. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts +209 -0
  622. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.d.ts.map +1 -0
  623. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js +416 -0
  624. package/dist/cli/backend/src/services/slack/slack-agent-identity.service.js.map +1 -0
  625. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  626. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  627. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  628. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  629. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +103 -0
  630. package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -0
  631. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +197 -0
  632. package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -0
  633. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  634. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  635. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1946 -0
  636. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  637. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +329 -0
  638. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -0
  639. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +821 -0
  640. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -0
  641. package/dist/cli/backend/src/services/slack/slack.service.d.ts +430 -0
  642. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  643. package/dist/cli/backend/src/services/slack/slack.service.js +1388 -0
  644. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  645. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  646. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  647. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  648. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  649. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  650. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  651. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  652. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  653. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  654. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  655. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  656. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  657. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  658. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  659. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  660. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  661. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  662. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  663. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  664. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  665. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  666. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  667. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  668. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  669. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  670. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  671. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  672. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  673. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  674. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  675. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  676. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  677. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  678. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  679. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  680. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  681. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  682. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  683. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  684. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  685. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  686. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  687. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  688. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  689. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  690. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  691. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  692. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  693. package/dist/cli/backend/src/types/slack.types.d.ts +87 -0
  694. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  695. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  696. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  697. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  698. package/dist/cli/backend/src/types/v2/index.js +22 -0
  699. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  700. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  701. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  702. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  703. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  704. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  705. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  706. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  707. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  708. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  709. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  710. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  711. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  712. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  713. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  714. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  715. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  716. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  717. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  718. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  719. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  720. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  721. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  722. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  723. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  724. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  725. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  726. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  727. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  728. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  729. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  730. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  731. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  732. package/dist/cli/backend/src/utils/team.utils.d.ts +40 -0
  733. package/dist/cli/backend/src/utils/team.utils.d.ts.map +1 -0
  734. package/dist/cli/backend/src/utils/team.utils.js +66 -0
  735. package/dist/cli/backend/src/utils/team.utils.js.map +1 -0
  736. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  737. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  738. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  739. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  740. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  741. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  742. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  743. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  744. package/dist/cli/cli/src/index.js +0 -0
  745. package/dist/cli/config/constants.d.ts +8 -0
  746. package/dist/cli/config/constants.d.ts.map +1 -1
  747. package/dist/cli/config/constants.js +8 -0
  748. package/dist/cli/config/constants.js.map +1 -1
  749. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  750. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  751. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  752. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  753. package/frontend/dist/assets/index-190a957f.js +4961 -0
  754. package/frontend/dist/assets/{index-8205ea5e.css → index-88feb412.css} +1 -1
  755. package/frontend/dist/index.html +2 -2
  756. package/package.json +2 -2
  757. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
  758. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
  759. package/packages/crewly-agent/src/runtime/types.ts +56 -5
  760. package/dist/backend/backend/src/controllers/knowledge/index.d.ts +0 -7
  761. package/dist/backend/backend/src/controllers/knowledge/index.d.ts.map +0 -1
  762. package/dist/backend/backend/src/controllers/knowledge/index.js +0 -7
  763. package/dist/backend/backend/src/controllers/knowledge/index.js.map +0 -1
  764. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts +0 -71
  765. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.d.ts.map +0 -1
  766. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js +0 -237
  767. package/dist/backend/backend/src/controllers/knowledge/knowledge.controller.js.map +0 -1
  768. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts +0 -24
  769. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.d.ts.map +0 -1
  770. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js +0 -34
  771. package/dist/backend/backend/src/controllers/knowledge/knowledge.routes.js.map +0 -1
  772. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts +0 -91
  773. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.d.ts.map +0 -1
  774. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js +0 -290
  775. package/dist/backend/backend/src/controllers/scheduler/unified-scheduler.controller.js.map +0 -1
  776. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +0 -169
  777. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +0 -1
  778. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +0 -1779
  779. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +0 -1
  780. package/dist/backend/backend/src/index.js.orc-bak-20260529 +0 -3130
  781. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts +0 -27
  782. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.d.ts.map +0 -1
  783. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js +0 -40
  784. package/dist/backend/backend/src/routes/modules/unified-scheduler.routes.js.map +0 -1
  785. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +0 -513
  786. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +0 -1
  787. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +0 -1568
  788. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +0 -1
  789. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +0 -86
  790. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +0 -1
  791. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +0 -147
  792. package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +0 -1
  793. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +0 -68
  794. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +0 -1
  795. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +0 -131
  796. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +0 -1
  797. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +0 -130
  798. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +0 -1
  799. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +0 -263
  800. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +0 -1
  801. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +0 -74
  802. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +0 -1
  803. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +0 -140
  804. package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +0 -1
  805. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +0 -29
  806. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +0 -1
  807. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +0 -279
  808. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +0 -1
  809. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +0 -340
  810. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +0 -1
  811. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +0 -1176
  812. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +0 -1
  813. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +0 -79
  814. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +0 -1
  815. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +0 -145
  816. package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +0 -1
  817. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +0 -79
  818. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +0 -1
  819. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +0 -218
  820. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +0 -1
  821. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +0 -16
  822. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +0 -1
  823. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +0 -16
  824. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +0 -1
  825. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +0 -135
  826. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +0 -1
  827. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +0 -185
  828. package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +0 -1
  829. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +0 -141
  830. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +0 -1
  831. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +0 -310
  832. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +0 -1
  833. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +0 -91
  834. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +0 -1
  835. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +0 -143
  836. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +0 -1
  837. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +0 -103
  838. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +0 -1
  839. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +0 -256
  840. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +0 -1
  841. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +0 -143
  842. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +0 -1
  843. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +0 -264
  844. package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +0 -1
  845. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +0 -13
  846. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +0 -1
  847. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +0 -91
  848. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +0 -1
  849. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +0 -135
  850. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +0 -1
  851. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +0 -1937
  852. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +0 -1
  853. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +0 -429
  854. package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +0 -1
  855. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +0 -852
  856. package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +0 -1
  857. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  858. package/dist/backend/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  859. package/dist/backend/backend/src/services/knowledge/embedding-provider.js +0 -179
  860. package/dist/backend/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  861. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  862. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  863. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +0 -241
  864. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  865. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  866. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  867. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  868. package/dist/backend/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  869. package/dist/backend/backend/src/services/knowledge/index.d.ts +0 -8
  870. package/dist/backend/backend/src/services/knowledge/index.d.ts.map +0 -1
  871. package/dist/backend/backend/src/services/knowledge/index.js +0 -8
  872. package/dist/backend/backend/src/services/knowledge/index.js.map +0 -1
  873. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  874. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  875. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  876. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  877. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  878. package/dist/backend/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  879. package/dist/backend/backend/src/services/knowledge/knowledge.service.js +0 -409
  880. package/dist/backend/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  881. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  882. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  883. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +0 -830
  884. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  885. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  886. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  887. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  888. package/dist/backend/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  889. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts +0 -78
  890. package/dist/backend/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  891. package/dist/backend/backend/src/services/memory/embedding-provider.js +0 -185
  892. package/dist/backend/backend/src/services/memory/embedding-provider.js.map +0 -1
  893. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts +0 -331
  894. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  895. package/dist/backend/backend/src/services/memory/vector-store.service.js +0 -825
  896. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +0 -1
  897. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +0 -171
  898. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  899. package/dist/backend/backend/src/services/project/task-tracking.service.js +0 -725
  900. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +0 -1
  901. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +0 -118
  902. package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +0 -1
  903. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +0 -326
  904. package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +0 -1
  905. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +0 -74
  906. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +0 -1
  907. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +0 -154
  908. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +0 -1
  909. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts +0 -234
  910. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.d.ts.map +0 -1
  911. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js +0 -636
  912. package/dist/backend/backend/src/services/workflow/unified-scheduler.service.js.map +0 -1
  913. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts +0 -156
  914. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.d.ts.map +0 -1
  915. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js +0 -81
  916. package/dist/backend/backend/src/services/workflow/unified-scheduler.types.js.map +0 -1
  917. package/dist/backend/backend/src/types/auto-assign.types.d.ts +0 -271
  918. package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +0 -1
  919. package/dist/backend/backend/src/types/auto-assign.types.js +0 -136
  920. package/dist/backend/backend/src/types/auto-assign.types.js.map +0 -1
  921. package/dist/backend/backend/src/types/knowledge.types.d.ts +0 -195
  922. package/dist/backend/backend/src/types/knowledge.types.d.ts.map +0 -1
  923. package/dist/backend/backend/src/types/knowledge.types.js +0 -38
  924. package/dist/backend/backend/src/types/knowledge.types.js.map +0 -1
  925. package/dist/backend/backend/src/utils/esm-require.utils.d.ts +0 -111
  926. package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +0 -1
  927. package/dist/backend/backend/src/utils/esm-require.utils.js +0 -124
  928. package/dist/backend/backend/src/utils/esm-require.utils.js.map +0 -1
  929. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts +0 -78
  930. package/dist/cli/backend/src/services/knowledge/embedding-provider.d.ts.map +0 -1
  931. package/dist/cli/backend/src/services/knowledge/embedding-provider.js +0 -179
  932. package/dist/cli/backend/src/services/knowledge/embedding-provider.js.map +0 -1
  933. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts +0 -118
  934. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +0 -1
  935. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +0 -241
  936. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +0 -1
  937. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts +0 -102
  938. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.d.ts.map +0 -1
  939. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js +0 -118
  940. package/dist/cli/backend/src/services/knowledge/fts5-query-sanitizer.js.map +0 -1
  941. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +0 -56
  942. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +0 -1
  943. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +0 -91
  944. package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +0 -1
  945. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +0 -241
  946. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +0 -1
  947. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +0 -590
  948. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +0 -1
  949. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +0 -153
  950. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +0 -1
  951. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +0 -409
  952. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +0 -1
  953. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +0 -159
  954. package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +0 -1
  955. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +0 -304
  956. package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +0 -1
  957. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts +0 -331
  958. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +0 -1
  959. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +0 -830
  960. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +0 -1
  961. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +0 -115
  962. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +0 -1
  963. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +0 -215
  964. package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +0 -1
  965. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +0 -78
  966. package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +0 -1
  967. package/dist/cli/backend/src/services/memory/embedding-provider.js +0 -179
  968. package/dist/cli/backend/src/services/memory/embedding-provider.js.map +0 -1
  969. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +0 -331
  970. package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +0 -1
  971. package/dist/cli/backend/src/services/memory/vector-store.service.js +0 -814
  972. package/dist/cli/backend/src/services/memory/vector-store.service.js.map +0 -1
  973. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +0 -171
  974. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +0 -1
  975. package/dist/cli/backend/src/services/project/task-tracking.service.js +0 -725
  976. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +0 -1
  977. package/dist/cli/backend/src/types/auto-assign.types.d.ts +0 -271
  978. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +0 -1
  979. package/dist/cli/backend/src/types/auto-assign.types.js +0 -136
  980. package/dist/cli/backend/src/types/auto-assign.types.js.map +0 -1
  981. package/dist/cli/backend/src/types/knowledge.types.d.ts +0 -195
  982. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +0 -1
  983. package/dist/cli/backend/src/types/knowledge.types.js +0 -38
  984. package/dist/cli/backend/src/types/knowledge.types.js.map +0 -1
  985. package/frontend/dist/assets/index-aa737fd3.js +0 -5254
@@ -0,0 +1,1113 @@
1
+ /**
2
+ * V3 Data Service — Automatic V3 entity creation via EventBus hooks
3
+ *
4
+ * Subscribes to existing backend events and automatically creates/updates
5
+ * V3 entities (WorkItem, Request, Mission). This service is fire-and-forget:
6
+ * errors are logged but never block the main flow.
7
+ *
8
+ * Design principle: Orchestrator has zero knowledge of V3 concepts.
9
+ * V3 data is produced as a side effect of normal operations.
10
+ *
11
+ * Events consumed:
12
+ * - task:delegated -> creates WorkItem in TaskPool
13
+ * - task:completed -> updates WorkItem status to 'done'
14
+ * - task:failed -> updates WorkItem status to 'failed'
15
+ * - goal:set -> creates Mission with conservative policy
16
+ * - message:user_work -> creates Request
17
+ *
18
+ * @module services/v3/v3-data.service
19
+ */
20
+ import { LoggerService } from '../core/logger.service.js';
21
+ import { StorageService } from '../core/storage.service.js';
22
+ import { TaskPoolService } from '../task-pool/task-pool.service.js';
23
+ import { RequestService } from './request.service.js';
24
+ import { RequestTracker } from './request-tracker.service.js';
25
+ import { createWorkItem } from '../../types/v2/work-item.types.js';
26
+ import { createMission } from '../../types/v2/mission.types.js';
27
+ import { isValidRequestTransition } from '../../types/v2/request.types.js';
28
+ // Bug A v0 (2026-05-06): canonical intent classification — both
29
+ // classifyIntentLevel + classifyIntentCategory consume the shared rule-set
30
+ // at `services/intent-task/intent-classifier.rules.ts`, so this delegation
31
+ // keeps the Request- and Mission-side classifiers in lock-step.
32
+ import { classifyIntentLevel, classifyIntentCategory, } from '../../types/intent-task.types.js';
33
+ import { ensureDir, atomicWriteJson } from '../../utils/file-io.utils.js';
34
+ import { TokenUsageService } from '../monitoring/token-usage.service.js';
35
+ import * as path from 'path';
36
+ // ---------------------------------------------------------------------------
37
+ // Constants
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Minimum content length for a user message to create a Request.
41
+ * P2-1: Relaxed from 5 → 2 to stop dropping legitimate short commands
42
+ * like "fix", "help", "go", "OK". Only truly empty or single-char
43
+ * messages (e.g., ".", "k") are filtered out.
44
+ */
45
+ export const MIN_REQUEST_CONTENT_LENGTH = 2;
46
+ /**
47
+ * Grace period (in ms) before an open Request with no WorkItems is
48
+ * auto-closed as dangling. P2-1: Added to prevent premature closure —
49
+ * the orchestrator may need time to process the request and delegate.
50
+ * Default: 5 minutes.
51
+ */
52
+ export const DANGLING_REQUEST_GRACE_MS = 5 * 60 * 1000;
53
+ // ---------------------------------------------------------------------------
54
+ // Service
55
+ // ---------------------------------------------------------------------------
56
+ /**
57
+ * V3DataService automatically creates V3 data entities by subscribing to
58
+ * backend EventBus events. It wraps every handler in try-catch to ensure
59
+ * failures never impact the main workflow.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const v3Data = new V3DataService(eventBus, '/path/to/project');
64
+ * // That's it — events are now being listened to.
65
+ * ```
66
+ */
67
+ export class V3DataService {
68
+ eventBus;
69
+ logger = LoggerService.getInstance().createComponentLogger('V3DataService');
70
+ storageService = StorageService.getInstance();
71
+ projectPath;
72
+ missionsDir;
73
+ /**
74
+ * Creates and initializes the V3DataService.
75
+ *
76
+ * Subscribes to EventBus domain events. (Legacy ProjectTask file watcher
77
+ * was retired with the V3↔.md bridge deprecation per
78
+ * `specs/2026-05-06-projecttask-md-deprecation.md`.)
79
+ *
80
+ * @param eventBus - The EventEmitter that publishes domain events
81
+ * @param projectPath - Absolute path to the project root
82
+ */
83
+ constructor(eventBus, projectPath) {
84
+ this.eventBus = eventBus;
85
+ this.projectPath = projectPath;
86
+ this.missionsDir = path.join(projectPath, '.crewly', 'missions');
87
+ // Subscribe to events — all handlers are fire-and-forget
88
+ this.eventBus.on('v3:task_delegated', this.onTaskDelegated.bind(this));
89
+ this.eventBus.on('v3:task_completed', this.onTaskCompleted.bind(this));
90
+ this.eventBus.on('v3:task_failed', this.onTaskFailed.bind(this));
91
+ this.eventBus.on('v3:task_blocked', this.onTaskBlocked.bind(this));
92
+ this.eventBus.on('v3:goal_set', this.onGoalSet.bind(this));
93
+ this.eventBus.on('v3:user_work_message', this.onUserWorkMessage.bind(this));
94
+ this.logger.info('V3DataService initialized — listening for domain events');
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // WorkItem Matching (shared by completed/failed/blocked handlers)
98
+ // ---------------------------------------------------------------------------
99
+ /**
100
+ * Finds the WorkItem matching a task event using a two-tier strategy:
101
+ * 1. Match by projectTaskId (most precise)
102
+ * 2. Fall back to sessionName + status (running first, then queued)
103
+ *
104
+ * If the matched WorkItem is 'queued', it is transitioned to 'running'
105
+ * since completeItem/failItem require 'running' status.
106
+ *
107
+ * @param taskId - The project task ID (may be undefined)
108
+ * @param sessionName - The agent session name
109
+ * @param logContext - Context string for debug logging
110
+ * @returns The matched WorkItem (with status fix applied), or null
111
+ */
112
+ async findMatchingWorkItem(taskId, sessionName, logContext) {
113
+ const taskPool = TaskPoolService.getInstance();
114
+ const items = await taskPool.getAllItems();
115
+ // Tier 1: precise match by projectTaskId
116
+ let match = taskId
117
+ ? items.find((wi) => wi.projectTaskId === taskId && wi.status !== 'done' && wi.status !== 'failed')
118
+ : undefined;
119
+ // Tier 2: match by sessionName + active status (running first, then queued)
120
+ if (!match) {
121
+ match = items.find((wi) => wi.target === sessionName && wi.status === 'running');
122
+ }
123
+ if (!match) {
124
+ match = items.find((wi) => wi.target === sessionName && wi.status === 'queued');
125
+ }
126
+ if (!match) {
127
+ this.logger.debug(`No matching WorkItem found for ${logContext}`, { sessionName, taskId });
128
+ return null;
129
+ }
130
+ // Bug 1 fix: completeItem/failItem require status === 'running', but WorkItems
131
+ // created via delegation start as 'queued' and may never be claimed.
132
+ if (match.status === 'queued') {
133
+ await taskPool.updateItemStatus(match.id, 'running');
134
+ }
135
+ return match;
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Event Handlers (all fire-and-forget)
139
+ // ---------------------------------------------------------------------------
140
+ /**
141
+ * Handles task:delegated — creates a WorkItem in the TaskPool.
142
+ *
143
+ * @param event - Task delegation event payload
144
+ */
145
+ async onTaskDelegated(event) {
146
+ try {
147
+ const taskPool = TaskPoolService.getInstance();
148
+ // Dedup: check if a WorkItem with this projectTaskId already exists
149
+ const existing = await taskPool.getAllItems();
150
+ if (existing.some((wi) => wi.projectTaskId === event.taskId)) {
151
+ this.logger.debug('WorkItem already exists for task, skipping', { taskId: event.taskId });
152
+ return;
153
+ }
154
+ // Resolve requestId: explicit value from the event payload only.
155
+ // Removed (P2-2): RequestTracker time-window correlation. Orchestrator
156
+ // skills that need to associate a delegation with a Request must pass
157
+ // requestId explicitly via --request-id; the time-window fallback was
158
+ // a global-singleton race vector that produced cross-conversation
159
+ // mislinks (see v3-data.service.test.ts "should NOT use greedy
160
+ // fallback" + "should NOT resolve requestId from RequestTracker").
161
+ const resolvedRequestId = event.requestId || undefined;
162
+ const workItem = createWorkItem({
163
+ type: 'delegate',
164
+ owner: 'orchestrator',
165
+ target: event.assignedTo,
166
+ title: event.title,
167
+ description: event.description,
168
+ projectTaskId: event.taskId,
169
+ requestId: resolvedRequestId,
170
+ maxRetries: 2,
171
+ });
172
+ // Add to pool (createWorkItem already sets status to 'queued')
173
+ await taskPool.addToPool(workItem);
174
+ this.logger.info('WorkItem auto-created from task delegation', {
175
+ workItemId: workItem.id,
176
+ taskId: event.taskId,
177
+ target: event.assignedTo,
178
+ requestId: resolvedRequestId,
179
+ });
180
+ // Hygiene #5 + #3 — DO NOT auto-claim here.
181
+ //
182
+ // The previous block did `taskPool.claimFromPool(event.assignedTo,
183
+ // { types: ['delegate'] })` inline, which transitioned the WI to
184
+ // `running` synchronously. Two compounding failures fell out of
185
+ // that:
186
+ //
187
+ // Hygiene #5 (poll-tasks race): the targeted agent's first
188
+ // `poll-tasks` call returned `available: 0` because the WI was
189
+ // already running. Workers had to fall back to direct curl
190
+ // against /task-pool/complete to make progress. Steve, Sam,
191
+ // Quinn, Max each hit this in the 5/9 wave.
192
+ //
193
+ // Hygiene #3 (target rotation): `claimFromPool` was passed only
194
+ // `{ types: ['delegate'] }` — no target filter. It then
195
+ // FIFO-picked the oldest queued+unclaimed delegate WI in the
196
+ // pool, which was often a DIFFERENT agent's targeted WI
197
+ // (queued because that agent had not claimed yet). The mutator
198
+ // unconditionally rewrote `wi.target = event.assignedTo`, so
199
+ // a Quinn-targeted WI got rotated to Sam, etc. Pool target
200
+ // rotated through 3-4 sessions during the wave (WI 6e532a8b,
201
+ // 598c91da, c443c2cd).
202
+ //
203
+ // Fix: leave the WI queued. Notification is the
204
+ // {@link WorkItemDispatchSubscriber}'s job — it pushes a
205
+ // [CREWLY-DISPATCH] message to `target` and the agent's own
206
+ // `poll-tasks` invocation transitions the WI to running with the
207
+ // target-respect gate added in the same change to claimFromPool.
208
+ // No race, no rotation. See spec /tmp/sam-brief-max-hygiene-5-and-3-2026-05-09.md
209
+ // and the regression tests in v3-data.service.test.ts +
210
+ // task-pool.service.test.ts (describe 'target-respect' blocks).
211
+ // Link WorkItem to Request for bidirectional tracking
212
+ if (resolvedRequestId) {
213
+ try {
214
+ const requestService = RequestService.getInstance(this.projectPath);
215
+ await requestService.linkWorkItem(resolvedRequestId, workItem.id);
216
+ // Transition Request: open → running (first WorkItem assigned)
217
+ const request = await requestService.getById(resolvedRequestId);
218
+ if (request && request.status === 'open') {
219
+ await requestService.update(resolvedRequestId, { status: 'running' });
220
+ }
221
+ }
222
+ catch (linkErr) {
223
+ this.logger.debug('Failed to link WorkItem to Request (non-fatal)', {
224
+ requestId: resolvedRequestId,
225
+ workItemId: workItem.id,
226
+ error: linkErr instanceof Error ? linkErr.message : String(linkErr),
227
+ });
228
+ }
229
+ }
230
+ }
231
+ catch (err) {
232
+ this.logger.warn('V3DataService.onTaskDelegated failed (non-fatal)', {
233
+ taskId: event.taskId,
234
+ error: err instanceof Error ? err.message : String(err),
235
+ });
236
+ }
237
+ }
238
+ /**
239
+ * Handles task:completed — updates the matching WorkItem to 'done'.
240
+ *
241
+ * Uses a two-tier matching strategy:
242
+ * 1. Match by projectTaskId (most precise — correlates to the .crewly/tasks/ file ID)
243
+ * 2. Fall back to sessionName + status (running or queued, since WorkItems
244
+ * created via delegation start as 'queued' and may never be claimed)
245
+ *
246
+ * @param event - Task completion event payload
247
+ */
248
+ async onTaskCompleted(event) {
249
+ try {
250
+ const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'completed task');
251
+ if (!match)
252
+ return;
253
+ const taskPool = TaskPoolService.getInstance();
254
+ await taskPool.completeItem(match.id);
255
+ // Look up token usage for this work item
256
+ try {
257
+ const tokenUsageService = TokenUsageService.getInstance();
258
+ const sessionUsage = tokenUsageService.getUsageBySessions();
259
+ // Find usage for the agent session that completed this task
260
+ const sessionSummary = sessionUsage.find(s => s.sessionName === event.sessionName);
261
+ if (sessionSummary) {
262
+ const totalInput = sessionSummary.totalInput || 0;
263
+ const totalOutput = sessionSummary.totalOutput || 0;
264
+ const totalCost = sessionSummary.cost || 0;
265
+ if (totalInput > 0 || totalOutput > 0) {
266
+ await taskPool.updateTokenUsage(match.id, totalInput, totalOutput, totalCost);
267
+ this.logger.debug('Updated WorkItem token usage', {
268
+ workItemId: match.id,
269
+ inputTokens: totalInput,
270
+ outputTokens: totalOutput,
271
+ cost: totalCost,
272
+ });
273
+ }
274
+ }
275
+ }
276
+ catch (tokenErr) {
277
+ // Token usage update is non-fatal
278
+ this.logger.debug('Failed to update WorkItem token usage (non-fatal)', {
279
+ error: tokenErr instanceof Error ? tokenErr.message : String(tokenErr),
280
+ });
281
+ }
282
+ this.logger.info('WorkItem auto-completed', {
283
+ workItemId: match.id,
284
+ sessionName: event.sessionName,
285
+ taskId: event.taskId,
286
+ });
287
+ // Growth: extract growth areas from the task title/description (keyword-based, no LLM)
288
+ try {
289
+ const { GrowthAreasService } = await import('../ai/self-improvement/growth-areas.service.js');
290
+ const growthService = new GrowthAreasService();
291
+ const text = match.title + ' ' + (match.description || '');
292
+ const newAreas = await growthService.extractFromText(event.sessionName, text);
293
+ if (newAreas.length > 0) {
294
+ this.logger.info('Growth areas extracted from completed task', {
295
+ sessionName: event.sessionName,
296
+ areas: newAreas.map(a => a.area),
297
+ });
298
+ }
299
+ }
300
+ catch (err) {
301
+ this.logger.debug('Growth area extraction failed (non-fatal)', {
302
+ sessionName: event.sessionName,
303
+ error: err instanceof Error ? err.message : String(err),
304
+ });
305
+ }
306
+ // Cascade: update parent Request status
307
+ await this.cascadeRequestStatus(match.requestId);
308
+ // Dependency unlock now lives in the V3 task-pool itself —
309
+ // `TaskPoolService.resolveBlockedDependents` runs inside the
310
+ // `completeItem` / `transitionStatus` lifecycle and reads the
311
+ // canonical `WorkItem.dependsOn` field. The previous
312
+ // `unlockDependentWorkItems` helper here read a parallel
313
+ // `metadata._blockedBy` key that mission-executor wrote — that
314
+ // mismatch was the silent freeze for mission decomposition with
315
+ // dependencies. Removed in spec/2026-05-06-task-management-v1-deprecation.md
316
+ // follow-up.
317
+ }
318
+ catch (err) {
319
+ this.logger.warn('V3DataService.onTaskCompleted failed (non-fatal)', {
320
+ sessionName: event.sessionName,
321
+ error: err instanceof Error ? err.message : String(err),
322
+ });
323
+ }
324
+ }
325
+ /**
326
+ * Handles task:failed — first failure triggers `failItem`, then we
327
+ * decide retry-vs-escalate based on the WI's own `retryCount` budget.
328
+ *
329
+ * Two-stage flow:
330
+ * 1. Always flip running → failed via taskPool.failItem (records the
331
+ * error, releases the claim). This is the ground truth state.
332
+ * 2. If `retryCount < maxRetries` → requeueAfterFailure (failed →
333
+ * queued, retryCount++). The original target keeps the WI.
334
+ * 3. Otherwise → leave it in failed AND escalate to ORC so it can
335
+ * surface the failure to the user and ask for a new plan.
336
+ *
337
+ * Cascade-to-parent-Request happens ONLY on the terminal path
338
+ * (exhausted retries). A retry-eligible WI doesn't cascade, since
339
+ * the Request might still complete on the next attempt.
340
+ *
341
+ * Steve 2026-05-22: prior to this fix the system treated every
342
+ * `task:failed` as terminal — retryCount/maxRetries were dead fields,
343
+ * Mission/Request would cascade-fail on a single transient failure,
344
+ * and the user only learned about it by digging in the Work Items
345
+ * UI. New behaviour: retry up to `maxRetries`, then escalate.
346
+ *
347
+ * @param event - Task failure event payload
348
+ */
349
+ async onTaskFailed(event) {
350
+ try {
351
+ const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'failed task');
352
+ if (!match)
353
+ return;
354
+ const taskPool = TaskPoolService.getInstance();
355
+ const reason = `Task failed for session ${event.sessionName}`;
356
+ // Step 1 — flip to failed (ground truth, releases claim).
357
+ await taskPool.failItem(match.id, reason);
358
+ // Step 2 — decide retry vs escalate based on the freshly-failed
359
+ // WI's retry budget (we re-fetch to get the canonical record).
360
+ const failed = await taskPool.findWorkItem(match.id);
361
+ if (!failed) {
362
+ this.logger.warn('Failed WorkItem disappeared after failItem', {
363
+ workItemId: match.id,
364
+ });
365
+ return;
366
+ }
367
+ if (failed.retryCount < failed.maxRetries) {
368
+ await taskPool.requeueAfterFailure(failed.id, reason);
369
+ this.logger.info('WorkItem auto-retry scheduled', {
370
+ workItemId: failed.id,
371
+ retryCount: failed.retryCount + 1,
372
+ maxRetries: failed.maxRetries,
373
+ sessionName: event.sessionName,
374
+ });
375
+ // Don't cascade — the WI is back in queued; the Request stays
376
+ // alive in the hope the retry succeeds.
377
+ return;
378
+ }
379
+ // Retry budget exhausted → terminal failure path.
380
+ this.logger.info('WorkItem failed after retries exhausted, escalating', {
381
+ workItemId: failed.id,
382
+ retryCount: failed.retryCount,
383
+ maxRetries: failed.maxRetries,
384
+ sessionName: event.sessionName,
385
+ });
386
+ try {
387
+ // Lazy-import to avoid a hard dep cycle: v3-data is loaded very
388
+ // early during bootstrap; escalation-router has its own init
389
+ // dependencies (filesystem dirs, etc).
390
+ const { EscalationRouterService } = await import('./escalation-router.service.js');
391
+ await EscalationRouterService.getInstance().escalateFailedWorkItem(failed, reason);
392
+ }
393
+ catch (err) {
394
+ // Escalation is best-effort — a routing failure mustn't strand
395
+ // the original failure handler; the cascade below still runs.
396
+ this.logger.warn('escalateFailedWorkItem threw (non-fatal)', {
397
+ workItemId: failed.id,
398
+ error: err instanceof Error ? err.message : String(err),
399
+ });
400
+ }
401
+ // Cascade only on terminal failure — Request reflects final state.
402
+ await this.cascadeRequestStatus(match.requestId);
403
+ }
404
+ catch (err) {
405
+ this.logger.warn('V3DataService.onTaskFailed failed (non-fatal)', {
406
+ sessionName: event.sessionName,
407
+ error: err instanceof Error ? err.message : String(err),
408
+ });
409
+ }
410
+ }
411
+ /**
412
+ * Handles goal:set — creates a Mission with conservative policy.
413
+ *
414
+ * @param event - Goal set event payload
415
+ */
416
+ async onGoalSet(event) {
417
+ try {
418
+ // Dedup: check if an active Mission with the same objective already exists
419
+ const existingMissions = await this.listMissions();
420
+ const duplicate = existingMissions.find((m) => m.objective === event.goal &&
421
+ m.status !== 'completed' &&
422
+ m.status !== 'cancelled');
423
+ if (duplicate) {
424
+ this.logger.debug('Active Mission with same objective already exists, skipping', {
425
+ missionId: duplicate.id,
426
+ objective: event.goal,
427
+ });
428
+ return;
429
+ }
430
+ // Resolve ownerId from event.setBy (which is usually a session name or member name)
431
+ let ownerId;
432
+ try {
433
+ const memberInfo = await this.storageService.findMemberBySessionName(event.setBy);
434
+ if (memberInfo) {
435
+ ownerId = memberInfo.member.id;
436
+ }
437
+ }
438
+ catch (e) {
439
+ this.logger.debug('Could not resolve ownerId for Mission', { setBy: event.setBy });
440
+ }
441
+ const mission = createMission({
442
+ objective: event.goal,
443
+ ownerTeamId: 'default',
444
+ ownerId,
445
+ successCriteria: [],
446
+ currentStrategy: '',
447
+ cadence: '0 9 * * 1', // Default: weekly Monday review
448
+ });
449
+ // Decompose the mission objective into initial ProjectTasks
450
+ const taskIds = await V3DataService.decomposeMissionToTasks(mission.id, event.goal, event.projectPath);
451
+ mission.activeProjectTaskIds = taskIds;
452
+ await ensureDir(this.missionsDir);
453
+ await atomicWriteJson(path.join(this.missionsDir, `${mission.id}.json`), mission);
454
+ this.logger.info('Mission auto-created from goal with tasks', {
455
+ missionId: mission.id,
456
+ objective: event.goal,
457
+ setBy: event.setBy,
458
+ taskCount: taskIds.length,
459
+ });
460
+ }
461
+ catch (err) {
462
+ this.logger.warn('V3DataService.onGoalSet failed (non-fatal)', {
463
+ goal: event.goal,
464
+ error: err instanceof Error ? err.message : String(err),
465
+ });
466
+ }
467
+ }
468
+ /**
469
+ * Handles message:user_work — creates a Request from a user message.
470
+ *
471
+ * @param event - User work message event payload
472
+ */
473
+ async onUserWorkMessage(event) {
474
+ try {
475
+ // Signal new user turn — clear stale request correlation
476
+ RequestTracker.getInstance().clearOnNewMessage();
477
+ const requestService = RequestService.getInstance(this.projectPath);
478
+ // Bug 3 fix: auto-close dangling Requests (open, no workItems).
479
+ // When a new user message arrives, any previous Request that is still
480
+ // 'open' with empty workItemIds was never delegated — the orchestrator
481
+ // handled it directly. Close these as 'done' so they don't linger.
482
+ //
483
+ // P2-1 improvement: only auto-close Requests older than DANGLING_GRACE_MS
484
+ // to avoid prematurely closing Requests before the orchestrator has time
485
+ // to process them and create WorkItems.
486
+ try {
487
+ const allRequests = await requestService.listAll();
488
+ const now = Date.now();
489
+ const danglingRequests = allRequests.filter((r) => {
490
+ if (r.status !== 'open' || r.workItemIds.length > 0)
491
+ return false;
492
+ // Grace period: only close if the Request has been open long enough
493
+ const age = now - new Date(r.createdAt).getTime();
494
+ return age > DANGLING_REQUEST_GRACE_MS;
495
+ });
496
+ for (const dangling of danglingRequests) {
497
+ await requestService.update(dangling.id, { status: 'done' });
498
+ this.logger.debug('Auto-closed dangling Request (no workItems, past grace period)', {
499
+ requestId: dangling.id,
500
+ });
501
+ }
502
+ }
503
+ catch (cleanupErr) {
504
+ this.logger.debug('Dangling Request cleanup failed (non-fatal)', {
505
+ error: cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr),
506
+ });
507
+ }
508
+ // Dedup: check if a Request with this messageId already exists.
509
+ // Previous: used conversationId (Slack thread), which blocked all
510
+ // subsequent messages in the same thread. Now uses messageId so each
511
+ // user message can independently create a Request.
512
+ const existing = await requestService.findBySourceConversationItemId(event.messageId);
513
+ if (existing) {
514
+ this.logger.debug('Request already exists for this message, skipping', {
515
+ messageId: event.messageId,
516
+ existingRequestId: existing.id,
517
+ });
518
+ return;
519
+ }
520
+ // Simple filter: skip empty/whitespace-only messages.
521
+ const content = event.content.trim();
522
+ if (content.length < MIN_REQUEST_CONTENT_LENGTH) {
523
+ this.logger.debug('Message too short to create Request', {
524
+ messageId: event.messageId,
525
+ contentLength: content.length,
526
+ minRequired: MIN_REQUEST_CONTENT_LENGTH,
527
+ });
528
+ return;
529
+ }
530
+ // -----------------------------------------------------------------------
531
+ // V3 Pipeline change: Semantic understanding moved to orchestrator skills.
532
+ // The orchestrator (which has Claude LLM) will decide when to create
533
+ // Requests via the 'create-request' skill and decompose them via the
534
+ // 'break-down-request' skill. This removes mechanical keyword-based
535
+ // intent classification from the data service.
536
+ //
537
+ // The helper functions (classifyIntent, isNonActionableMessage, etc.)
538
+ // are preserved at the bottom of this file as potential fallback.
539
+ // -----------------------------------------------------------------------
540
+ this.logger.info('User work message received — awaiting orchestrator classification via skills', {
541
+ messageId: event.messageId,
542
+ source: event.source,
543
+ contentLength: content.length,
544
+ });
545
+ }
546
+ catch (err) {
547
+ this.logger.warn('V3DataService.onUserWorkMessage failed (non-fatal)', {
548
+ messageId: event.messageId,
549
+ error: err instanceof Error ? err.message : String(err),
550
+ });
551
+ }
552
+ }
553
+ /**
554
+ * Handles task:blocked — updates the matching WorkItem to 'blocked'.
555
+ *
556
+ * Uses the same two-tier matching strategy as onTaskCompleted.
557
+ *
558
+ * @param event - Task blocked event payload
559
+ */
560
+ async onTaskBlocked(event) {
561
+ try {
562
+ const match = await this.findMatchingWorkItem(event.taskId, event.sessionName, 'blocked task');
563
+ if (!match)
564
+ return;
565
+ const taskPool = TaskPoolService.getInstance();
566
+ await taskPool.updateItemStatus(match.id, 'blocked');
567
+ this.logger.info('WorkItem auto-blocked', {
568
+ workItemId: match.id,
569
+ sessionName: event.sessionName,
570
+ reason: event.reason,
571
+ });
572
+ // Cascade: update parent Request status
573
+ await this.cascadeRequestStatus(match.requestId);
574
+ }
575
+ catch (err) {
576
+ this.logger.warn('V3DataService.onTaskBlocked failed (non-fatal)', {
577
+ sessionName: event.sessionName,
578
+ error: err instanceof Error ? err.message : String(err),
579
+ });
580
+ }
581
+ }
582
+ /**
583
+ * Recomputes Request.status from the aggregate state of its child WorkItems.
584
+ *
585
+ * Rules:
586
+ * - All WorkItems done → Request = done
587
+ * - Any WorkItem running → Request = running
588
+ * - All WorkItems queued → no change (work delegated but not started)
589
+ * - Any WorkItem blocked, none running → Request = blocked
590
+ * - All WorkItems failed/cancelled → Request = cancelled
591
+ * - Some done + some queued (no running) → Request = running
592
+ *
593
+ * @param requestId - The parent Request ID (may be undefined for unlinked WorkItems)
594
+ */
595
+ async cascadeRequestStatus(requestId) {
596
+ if (!requestId)
597
+ return;
598
+ try {
599
+ const requestService = RequestService.getInstance(this.projectPath);
600
+ const request = await requestService.getById(requestId);
601
+ if (!request || request.status === 'done' || request.status === 'cancelled')
602
+ return;
603
+ const taskPool = TaskPoolService.getInstance();
604
+ const allItems = await taskPool.getAllItems();
605
+ const childItems = allItems.filter((wi) => wi.requestId === requestId);
606
+ if (childItems.length === 0)
607
+ return;
608
+ const statuses = childItems.map((wi) => wi.status);
609
+ let newStatus;
610
+ const allQueued = statuses.every((s) => s === 'queued' || s === 'scheduled');
611
+ if (statuses.every((s) => s === 'done')) {
612
+ newStatus = 'done';
613
+ }
614
+ else if (statuses.some((s) => s === 'running')) {
615
+ newStatus = 'running';
616
+ }
617
+ else if (allQueued) {
618
+ // All WorkItems still queued — work delegated but not started.
619
+ // Keep Request in its current status (no change needed).
620
+ return;
621
+ }
622
+ else if (statuses.some((s) => s === 'blocked') && !statuses.some((s) => s === 'running')) {
623
+ newStatus = 'blocked';
624
+ }
625
+ else if (statuses.every((s) => s === 'failed' || s === 'cancelled')) {
626
+ newStatus = 'cancelled';
627
+ }
628
+ else if (statuses.some((s) => s === 'done')) {
629
+ // Some work completed, some still queued — progress is being made
630
+ newStatus = 'running';
631
+ }
632
+ else {
633
+ // Mixed state — keep current status
634
+ return;
635
+ }
636
+ if (newStatus !== request.status && isValidRequestTransition(request.status, newStatus)) {
637
+ await requestService.update(requestId, { status: newStatus });
638
+ this.logger.info('Request status cascaded from WorkItems', {
639
+ requestId,
640
+ previousStatus: request.status,
641
+ newStatus,
642
+ childStatuses: statuses,
643
+ });
644
+ // Emit update event for notification services
645
+ this.eventBus.emit('v3:request_updated', {
646
+ requestId,
647
+ status: newStatus,
648
+ previousStatus: request.status,
649
+ });
650
+ }
651
+ }
652
+ catch (err) {
653
+ this.logger.debug('cascadeRequestStatus failed (non-fatal)', {
654
+ requestId,
655
+ error: err instanceof Error ? err.message : String(err),
656
+ });
657
+ }
658
+ }
659
+ // ---------------------------------------------------------------------------
660
+ // Mission → Task Decomposition
661
+ // ---------------------------------------------------------------------------
662
+ /**
663
+ * Decomposes a mission objective into V3 WorkItems.
664
+ *
665
+ * Per `specs/2026-05-06-task-management-v1-deprecation.md`, the legacy
666
+ * `.crewly/tasks/delegated/open/*.md` filesystem write has been removed —
667
+ * V3 task-pool is the sole source of truth for delegated work. Each
668
+ * planned sub-task lands as a queued WorkItem with the long-form brief
669
+ * carried in `briefMarkdown` (the same content that previously lived in
670
+ * the .md body).
671
+ *
672
+ * @param missionId - The parent mission ID (stored on each WI and in the
673
+ * brief's Context section)
674
+ * @param objective - The mission objective text
675
+ * @param projectPath - Reserved for future use (e.g. resolving relative
676
+ * skill paths in the brief). Currently unused but
677
+ * kept in the signature so existing callers don't
678
+ * have to be updated in lockstep.
679
+ * @returns Array of created WorkItem IDs in plan order
680
+ */
681
+ static async decomposeMissionToTasks(missionId, objective, _projectPath) {
682
+ const planned = planTasksFromObjective(objective);
683
+ const workItemIds = [];
684
+ const now = new Date().toISOString();
685
+ // Lazy-import to avoid a static cycle through TaskPoolService.
686
+ const { TaskPoolService } = await import('../task-pool/task-pool.service.js');
687
+ const taskPool = TaskPoolService.getInstance();
688
+ for (const task of planned) {
689
+ const briefMarkdown = [
690
+ `# ${task.title}`,
691
+ '',
692
+ task.description,
693
+ '',
694
+ '## Acceptance Criteria',
695
+ ...task.acceptanceCriteria.map((c) => `- ${c}`),
696
+ '',
697
+ '## Context',
698
+ `Parent mission: ${missionId}`,
699
+ `Mission objective: ${objective}`,
700
+ `Required role: developer`,
701
+ '',
702
+ '## Task Information',
703
+ `- **Priority**: ${task.priority}`,
704
+ `- **Created at**: ${now}`,
705
+ `- **Mission ID**: ${missionId}`,
706
+ ].join('\n');
707
+ const workItem = createWorkItem({
708
+ type: 'project_task',
709
+ owner: 'orchestrator',
710
+ title: task.title,
711
+ description: task.description.substring(0, 500),
712
+ briefMarkdown,
713
+ missionId,
714
+ maxRetries: 2,
715
+ });
716
+ await taskPool.addToPool(workItem);
717
+ workItemIds.push(workItem.id);
718
+ }
719
+ LoggerService.getInstance().createComponentLogger('V3DataService').debug('Decomposed mission into WorkItems', {
720
+ missionId,
721
+ taskCount: workItemIds.length,
722
+ workItemIds,
723
+ });
724
+ return workItemIds;
725
+ }
726
+ // ---------------------------------------------------------------------------
727
+ // Helpers
728
+ // ---------------------------------------------------------------------------
729
+ /**
730
+ * Lists all missions from disk.
731
+ *
732
+ * @returns Array of Mission objects
733
+ */
734
+ async listMissions() {
735
+ try {
736
+ await ensureDir(this.missionsDir);
737
+ const files = await import('fs/promises').then((fs) => fs.readdir(this.missionsDir));
738
+ const missions = [];
739
+ for (const file of files) {
740
+ if (!file.endsWith('.json'))
741
+ continue;
742
+ try {
743
+ const filePath = path.join(this.missionsDir, file);
744
+ const { safeReadJson: readJson } = await import('../../utils/file-io.utils.js');
745
+ const data = await readJson(filePath, null);
746
+ if (data && data.id && data.objective) {
747
+ missions.push(data);
748
+ }
749
+ }
750
+ catch {
751
+ // Skip malformed files
752
+ }
753
+ }
754
+ return missions;
755
+ }
756
+ catch {
757
+ return [];
758
+ }
759
+ }
760
+ /**
761
+ * Stops listening to events. Used for cleanup/testing.
762
+ */
763
+ dispose() {
764
+ this.eventBus.removeAllListeners('v3:task_delegated');
765
+ this.eventBus.removeAllListeners('v3:task_completed');
766
+ this.eventBus.removeAllListeners('v3:task_failed');
767
+ this.eventBus.removeAllListeners('v3:task_blocked');
768
+ this.eventBus.removeAllListeners('v3:goal_set');
769
+ this.eventBus.removeAllListeners('v3:user_work_message');
770
+ this.logger.info('V3DataService disposed');
771
+ }
772
+ }
773
+ // ---------------------------------------------------------------------------
774
+ // Intent Classification (keyword-based, no AI)
775
+ // ---------------------------------------------------------------------------
776
+ /**
777
+ * Patterns that identify non-actionable messages (confirmations, chit-chat,
778
+ * acknowledgements). These messages should NOT create Requests.
779
+ */
780
+ const NON_ACTIONABLE_PATTERNS = [
781
+ // Acknowledgements / confirmations (Chinese + English)
782
+ /^(好的|好|嗯|嗯嗯|行|行的|可以|没问题|收到|了解|知道了|明白|ok|okay|sure|yes|yep|yeah|yup|got it|sounds good|lgtm|ack|roger|copy|noted|thanks|thank you|thx|ty|np|no problem|alright|understood|fine|cool|nice|great|perfect|awesome|good|done|right|exactly|absolutely|definitely|indeed|correct|agreed|approved|confirmed|approve|accept|安排|好的安排|辛苦了|谢谢|不错|可以的|没事|随便|都行|好吧|对|对的|是的|嗯好|好嘞|好哒|okie|oki|kk|k)\s*[!.。!~~]*$/i,
783
+ // Greetings
784
+ /^(hi|hello|hey|yo|sup|morning|afternoon|evening|你好|早|早上好|下午好|晚上好|嗨|哈喽)\s*[!.。!~~]*$/i,
785
+ // Emoji-only messages
786
+ /^[\p{Emoji}\s]+$/u,
787
+ // Filler / single-word non-work
788
+ /^(hmm+|huh|ah|oh|lol|haha|hehe|wow|omg|idk|brb|ttyl|tbd|wip)\s*[!.。!~~]*$/i,
789
+ ];
790
+ /**
791
+ * Maximum word count for a message to be eligible for non-actionable check.
792
+ * Longer messages are unlikely to be simple acknowledgements.
793
+ */
794
+ const MAX_NON_ACTIONABLE_WORDS = 6;
795
+ /**
796
+ * Checks if a message is non-actionable (confirmation, chit-chat, greeting).
797
+ * These messages should not create Requests or WorkItems.
798
+ *
799
+ * @param content - The user message text (trimmed)
800
+ * @returns True if the message is non-actionable
801
+ */
802
+ export function isNonActionableMessage(content) {
803
+ // Long messages are likely actionable
804
+ const words = content.split(/\s+/).filter(Boolean);
805
+ if (words.length > MAX_NON_ACTIONABLE_WORDS)
806
+ return false;
807
+ return NON_ACTIONABLE_PATTERNS.some((pattern) => pattern.test(content.trim()));
808
+ }
809
+ /**
810
+ * Auto-classify request intent from message content.
811
+ * Runs synchronously — no AI call, just keyword matching.
812
+ *
813
+ * Bug A v0 (2026-05-06): delegates to the canonical
814
+ * `classifyIntentLevel` + `classifyIntentCategory` from
815
+ * `backend/src/types/intent-task.types.ts` (which read from the
816
+ * code-of-record rules at
817
+ * `backend/src/services/intent-task/intent-classifier.rules.ts`).
818
+ *
819
+ * Why delegation rather than maintaining a parallel rule-set: prior to
820
+ * this PR, the two classifyIntent paths drifted. The Mission-side classifier
821
+ * had ~40 patterns + length floor; the Request-side classifier had ~7 patterns
822
+ * with no length floor. This caused classification skew across surfaces.
823
+ *
824
+ * The local pre-filter `isNonActionableMessage` is preserved because it's
825
+ * scoped to v3-data.service callers (Request creation flow) and short-
826
+ * circuits L0 for chit-chat without invoking the heavier classifier.
827
+ *
828
+ * @param content - The user message text
829
+ * @returns Object with intentCategory and intentLevel
830
+ */
831
+ export function classifyIntent(content) {
832
+ // Non-actionable messages: acknowledgements, chit-chat, greetings.
833
+ // Pre-filter at the Request boundary — short-circuit before invoking
834
+ // the canonical classifier so non-actionable input never lands as a
835
+ // Request-shaped row.
836
+ if (isNonActionableMessage(content)) {
837
+ return { intentCategory: 'other', intentLevel: 'L0' };
838
+ }
839
+ // Delegate to the canonical L0/L1/L2/L3 classifier + ZH-parity category
840
+ // matcher. Both functions read from the shared rule-set at
841
+ // `intent-classifier.rules.ts`, so any future tuning lands in exactly
842
+ // one place.
843
+ return {
844
+ intentLevel: classifyIntentLevel(content),
845
+ intentCategory: classifyIntentCategory(content),
846
+ };
847
+ }
848
+ /**
849
+ * Threshold for "complex" objectives that warrant multi-step decomposition.
850
+ * Below this word count, a single task is sufficient.
851
+ */
852
+ const COMPLEX_OBJECTIVE_WORD_THRESHOLD = 15;
853
+ /**
854
+ * Determines whether an objective is complex enough for multi-step decomposition.
855
+ * Complexity heuristics: word count, presence of conjunctions/lists, multiple
856
+ * action verbs, or explicit multi-step indicators.
857
+ *
858
+ * @param objective - The objective text
859
+ * @returns True if the objective warrants multiple tasks
860
+ */
861
+ export function isComplexObjective(objective) {
862
+ const words = objective.split(/\s+/).filter(Boolean);
863
+ if (words.length >= COMPLEX_OBJECTIVE_WORD_THRESHOLD)
864
+ return true;
865
+ // Chinese: character count heuristic (Chinese text has fewer spaces)
866
+ const cjkChars = objective.match(/[\u4e00-\u9fff]/g);
867
+ if (cjkChars && cjkChars.length >= 20)
868
+ return true;
869
+ const lower = objective.toLowerCase();
870
+ // Multiple action verbs suggest multi-step work (English)
871
+ const actionVerbs = lower.match(/\b(build|create|implement|add|fix|deploy|test|review|design|write|migrate|refactor|setup|configure|integrate)\b/g);
872
+ if (actionVerbs && actionVerbs.length >= 2)
873
+ return true;
874
+ // Chinese action verbs
875
+ const cnActionVerbs = objective.match(/创建|实现|添加|修复|部署|测试|审查|设计|编写|迁移|重构|配置|集成|评估|分析|检查|搭建|开发/g);
876
+ if (cnActionVerbs && cnActionVerbs.length >= 2)
877
+ return true;
878
+ // Conjunctions or list indicators (English)
879
+ if (/\b(and then|then|also|plus|as well as|followed by|after that)\b/.test(lower))
880
+ return true;
881
+ if (/[;,]\s*(and\s+)?(then\s+)?/.test(objective) && words.length > 8)
882
+ return true;
883
+ // Chinese list/compound indicators: "包括...方面", enumeration with 、or ,
884
+ if (/包括|以及|同时|另外|还有|并且|然后/.test(objective))
885
+ return true;
886
+ // Chinese comma-separated list (3+ items with 、)
887
+ const cnListItems = objective.split(/[、,]/).filter((s) => s.trim().length > 1);
888
+ if (cnListItems.length >= 3)
889
+ return true;
890
+ return false;
891
+ }
892
+ /**
893
+ * Decomposes a mission objective into actionable tasks using keyword matching.
894
+ *
895
+ * P0-1 fix: Uses intelligent decomposition instead of always producing 3 tasks.
896
+ * - Simple/direct objectives → 1 task
897
+ * - Complex/multi-step objectives → 2-3 tasks
898
+ *
899
+ * Recognises three broad categories:
900
+ * - **Build** (create/implement/build/add/feature) → single task or design+implement+test
901
+ * - **Fix** (fix/debug/resolve/repair/patch) → single task or investigate+fix+verify
902
+ * - **Default** (anything else) → single task or plan+execute+review
903
+ *
904
+ * @param objective - The mission objective text
905
+ * @returns Array of PlannedTask objects (1-3 items)
906
+ */
907
+ export function planTasksFromObjective(objective) {
908
+ const lower = objective.toLowerCase();
909
+ const complex = isComplexObjective(objective);
910
+ // Category: Build / Feature work (English + Chinese)
911
+ if (/\b(build|create|implement|add|feature|develop|write|ship)\b/.test(lower) || /创建|实现|添加|开发|编写|搭建|新增/.test(objective)) {
912
+ if (!complex) {
913
+ return [{
914
+ title: truncate(objective, 80),
915
+ description: `Implement: ${objective}. Follow project conventions, write tests, ensure build passes.`,
916
+ acceptanceCriteria: [
917
+ 'Functionality implemented and working',
918
+ 'Tests written and passing',
919
+ 'Build passes clean',
920
+ ],
921
+ priority: 'high',
922
+ }];
923
+ }
924
+ return [
925
+ {
926
+ title: `Design approach for: ${truncate(objective, 60)}`,
927
+ description: `Analyse requirements and design the technical approach for: ${objective}. Identify key components, interfaces, and dependencies.`,
928
+ acceptanceCriteria: [
929
+ 'Technical approach documented',
930
+ 'Key components and interfaces identified',
931
+ 'Dependencies and risks listed',
932
+ ],
933
+ priority: 'high',
934
+ },
935
+ {
936
+ title: `Implement: ${truncate(objective, 60)}`,
937
+ description: `Implement the core functionality described in: ${objective}. Follow the design approach from the previous task.`,
938
+ acceptanceCriteria: [
939
+ 'Core functionality implemented',
940
+ 'Code follows project conventions',
941
+ 'TypeScript compiles without errors',
942
+ ],
943
+ priority: 'high',
944
+ },
945
+ {
946
+ title: `Test and verify: ${truncate(objective, 60)}`,
947
+ description: `Write unit tests for the implementation of: ${objective}. Ensure minimum 80% coverage for new code.`,
948
+ acceptanceCriteria: [
949
+ 'Unit tests written and passing',
950
+ 'Edge cases covered',
951
+ 'Build passes clean',
952
+ ],
953
+ priority: 'medium',
954
+ },
955
+ ];
956
+ }
957
+ // Category: Bug fix / Debugging (English + Chinese)
958
+ if (/\b(fix|debug|resolve|repair|patch|broken|bug|error|crash)\b/.test(lower) || /修复|修|调试|解决|修补|bug|报错|崩溃/.test(objective)) {
959
+ if (!complex) {
960
+ return [{
961
+ title: truncate(objective, 80),
962
+ description: `Investigate and fix: ${objective}. Identify root cause, apply fix, verify with tests.`,
963
+ acceptanceCriteria: [
964
+ 'Root cause identified and fixed',
965
+ 'Tests pass, no regressions',
966
+ 'Build passes clean',
967
+ ],
968
+ priority: 'high',
969
+ }];
970
+ }
971
+ return [
972
+ {
973
+ title: `Investigate: ${truncate(objective, 60)}`,
974
+ description: `Investigate the root cause of: ${objective}. Reproduce the issue and identify the failing code path.`,
975
+ acceptanceCriteria: [
976
+ 'Root cause identified',
977
+ 'Issue reproduced reliably',
978
+ 'Affected code paths documented',
979
+ ],
980
+ priority: 'high',
981
+ },
982
+ {
983
+ title: `Fix: ${truncate(objective, 60)}`,
984
+ description: `Apply a fix for: ${objective}. Ensure the fix addresses the root cause, not just the symptoms.`,
985
+ acceptanceCriteria: [
986
+ 'Fix applied and tested locally',
987
+ 'Root cause addressed',
988
+ 'No regressions introduced',
989
+ ],
990
+ priority: 'high',
991
+ },
992
+ {
993
+ title: `Verify fix: ${truncate(objective, 60)}`,
994
+ description: `Verify the fix for: ${objective}. Run full test suite and confirm the issue no longer reproduces.`,
995
+ acceptanceCriteria: [
996
+ 'All existing tests pass',
997
+ 'Regression test added',
998
+ 'Issue confirmed resolved',
999
+ ],
1000
+ priority: 'medium',
1001
+ },
1002
+ ];
1003
+ }
1004
+ // Default category
1005
+ if (!complex) {
1006
+ return [{
1007
+ title: truncate(objective, 80),
1008
+ description: `Execute: ${objective}. Complete the work and verify results.`,
1009
+ acceptanceCriteria: [
1010
+ 'Objective completed',
1011
+ 'Deliverables produced',
1012
+ 'Build passes',
1013
+ ],
1014
+ priority: 'high',
1015
+ }];
1016
+ }
1017
+ // Generic Plan → Execute → Review chain. Strict sequential dependency
1018
+ // is encoded via `dependsOnTitles` so the fan-out subscriber writes
1019
+ // `WorkItem.dependsOn` correctly: Execute waits for Plan, Review waits
1020
+ // for Execute. Without these, all three queue concurrently and a
1021
+ // worker can claim Review before Execute completes — observed in the
1022
+ // 2026-05-08 dogfood (Sam claimed Review with empty output while Plan
1023
+ // and Execute were still blocked).
1024
+ const planTitle = `Plan: ${truncate(objective, 60)}`;
1025
+ const executeTitle = `Execute: ${truncate(objective, 60)}`;
1026
+ const reviewTitle = `Review: ${truncate(objective, 60)}`;
1027
+ return [
1028
+ {
1029
+ title: planTitle,
1030
+ description: `Create an execution plan for: ${objective}. Break down the work into concrete steps.`,
1031
+ acceptanceCriteria: [
1032
+ 'Execution plan created',
1033
+ 'Steps are concrete and actionable',
1034
+ 'Dependencies identified',
1035
+ ],
1036
+ priority: 'high',
1037
+ },
1038
+ {
1039
+ title: executeTitle,
1040
+ description: `Execute the plan for: ${objective}. Complete all steps identified in the planning phase.`,
1041
+ acceptanceCriteria: [
1042
+ 'All planned steps completed',
1043
+ 'Deliverables produced',
1044
+ 'Build passes',
1045
+ ],
1046
+ priority: 'high',
1047
+ dependsOnTitles: [planTitle],
1048
+ },
1049
+ {
1050
+ title: reviewTitle,
1051
+ description: `Review the completed work for: ${objective}. Verify quality, completeness, and alignment with the original objective.`,
1052
+ acceptanceCriteria: [
1053
+ 'Work reviewed for quality',
1054
+ 'Objective fully addressed',
1055
+ 'Documentation updated if needed',
1056
+ ],
1057
+ priority: 'low',
1058
+ dependsOnTitles: [executeTitle],
1059
+ },
1060
+ ];
1061
+ }
1062
+ /**
1063
+ * Truncates a string to a maximum length, appending ellipsis if needed.
1064
+ *
1065
+ * @param str - The string to truncate
1066
+ * @param maxLen - Maximum length
1067
+ * @returns Truncated string
1068
+ */
1069
+ function truncate(str, maxLen) {
1070
+ if (str.length <= maxLen)
1071
+ return str;
1072
+ return str.slice(0, maxLen - 3) + '...';
1073
+ }
1074
+ /**
1075
+ * Intent category labels for title prefixes.
1076
+ */
1077
+ const INTENT_TITLE_PREFIXES = {
1078
+ debugging: 'Fix',
1079
+ deployment: 'Deploy',
1080
+ review: 'Review',
1081
+ planning: 'Plan',
1082
+ research: 'Research',
1083
+ code_change: 'Implement',
1084
+ communication: 'Message',
1085
+ };
1086
+ /**
1087
+ * Generates a summarized title for a Request instead of copying raw content.
1088
+ *
1089
+ * For short messages (under 60 chars), uses the content directly with an
1090
+ * intent prefix. For longer messages, extracts the first sentence or clause
1091
+ * and prepends the intent prefix.
1092
+ *
1093
+ * @param content - The trimmed user message
1094
+ * @param intentCategory - The classified intent category
1095
+ * @returns A concise, informative title (max 80 chars)
1096
+ */
1097
+ export function generateRequestTitle(content, intentCategory) {
1098
+ const prefix = INTENT_TITLE_PREFIXES[intentCategory];
1099
+ // For short messages (under 60 chars), always add a prefix.
1100
+ // If no category-specific prefix, use a generic "Request" prefix
1101
+ // to ensure title ≠ description.
1102
+ if (content.length <= 60) {
1103
+ const label = prefix || 'Request';
1104
+ return truncate(`[${label}] ${content}`, 80);
1105
+ }
1106
+ // For longer messages, extract the first sentence or clause
1107
+ // and split on Chinese sentence-ending punctuation as well.
1108
+ const firstSentence = content.match(/^[^.!?\n。!?]+[.!?。!?]?/)?.[0] || content;
1109
+ const core = firstSentence.trim();
1110
+ const label = prefix || 'Request';
1111
+ return truncate(`[${label}] ${core}`, 80);
1112
+ }
1113
+ //# sourceMappingURL=v3-data.service.js.map