crewly 1.13.0 → 1.13.1

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 (597) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  28. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  31. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  36. package/dist/backend/backend/src/index.d.ts.map +1 -1
  37. package/dist/backend/backend/src/index.js +20 -0
  38. package/dist/backend/backend/src/index.js.map +1 -1
  39. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  40. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  41. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  42. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  43. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  45. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
  48. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
  50. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  53. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  54. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  56. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  58. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  60. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  62. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  64. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  65. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  66. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  68. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  70. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  72. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  74. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  76. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  78. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  81. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  82. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  83. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  84. package/dist/backend/backend/src/types/v2/index.js +1 -1
  85. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  86. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  87. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  88. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  89. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  90. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  91. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  92. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  93. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  94. package/dist/backend/build-info.json +4 -0
  95. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  96. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  97. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  98. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  99. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  100. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  101. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  102. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  103. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  104. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  105. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  106. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  107. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  108. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  110. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  111. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  112. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  113. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  114. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  115. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  116. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  118. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  119. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  120. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  122. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  124. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  126. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  128. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  130. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  132. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  134. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  136. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  138. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  140. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  142. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  144. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  146. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  148. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  150. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  152. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  154. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  156. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  158. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  160. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  162. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  164. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  166. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  168. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  170. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  172. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  174. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  175. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  176. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  178. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  180. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  182. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  183. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  184. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  186. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  187. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  188. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  190. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  191. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  192. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  194. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  195. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  196. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  198. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  200. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  202. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  284. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  286. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  287. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  288. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  290. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  291. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  292. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  294. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  295. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  296. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  298. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  299. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  300. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  302. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  303. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  304. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  306. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  307. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  308. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  310. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  312. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  314. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  316. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  318. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  319. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  320. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  322. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  323. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  324. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  326. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  327. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  328. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  330. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  331. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  332. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  334. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  335. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  336. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  338. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  339. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  340. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  342. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  343. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  344. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  345. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  346. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  347. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  348. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  350. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  351. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  352. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  354. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  355. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  356. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  358. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  359. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  360. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  362. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  364. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  366. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  367. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  368. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  370. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  371. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  372. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  374. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  375. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  376. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  378. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  380. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  382. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  383. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  384. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  386. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  388. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  390. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  392. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  394. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  395. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  396. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  398. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  399. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  400. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  402. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  403. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  404. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  406. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  408. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  410. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  411. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  412. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  414. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  416. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  418. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  420. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  422. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  424. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  426. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  427. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  428. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/session/index.js +50 -0
  430. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  431. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  432. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  434. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  436. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  438. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  439. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  440. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  442. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  443. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  444. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  446. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  447. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  448. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  450. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  451. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  452. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  454. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  456. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  458. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  460. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  462. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  464. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  466. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  468. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  470. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  472. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  474. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  475. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  476. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  478. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  479. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  480. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  482. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  484. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  486. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  487. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  488. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  490. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  492. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  494. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  495. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  496. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  498. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  500. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  502. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  503. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  504. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  506. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  508. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  510. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  512. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  514. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  516. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  518. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  519. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  520. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  522. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  524. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  526. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  528. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  529. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  530. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  531. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  532. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  533. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  534. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  535. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  536. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  537. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  538. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  539. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  540. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  541. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  542. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  543. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  544. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  545. package/dist/cli/backend/src/types/v2/index.js +22 -0
  546. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  547. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  548. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  549. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  550. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  551. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  552. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  553. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  554. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  555. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  556. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  557. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  558. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  559. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  560. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  562. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  564. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  565. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  566. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  567. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  568. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  570. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  571. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  572. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  573. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  574. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  575. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  576. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  577. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  578. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  579. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  580. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  581. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  582. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  583. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  584. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  585. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  586. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  587. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  588. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  589. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  590. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  591. package/frontend/dist/assets/index-890d3f9d.js +4961 -0
  592. package/frontend/dist/index.html +1 -1
  593. package/package.json +2 -2
  594. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
  595. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
  596. package/packages/crewly-agent/src/runtime/types.ts +56 -5
  597. package/frontend/dist/assets/index-aa737fd3.js +0 -5254
@@ -0,0 +1,692 @@
1
+ /**
2
+ * Escalation Router Service
3
+ *
4
+ * Routes escalations to the appropriate target:
5
+ * - target === 'team_lead' → Send message to TL agent via MessageQueue
6
+ * - target === 'human' → Send Slack notification to user + pause task + create pending record
7
+ *
8
+ * Also handles MissionPolicy escalation rules (cost_exceeded, failure_count, etc.)
9
+ * by routing `escalateTo: 'user'` to human and `escalateTo: 'orchestrator'` to agent.
10
+ *
11
+ * Pending human escalations are stored in `.crewly/escalations/` and resolved
12
+ * via POST /api/escalations/:id/resolve.
13
+ *
14
+ * @module services/v3/escalation-router.service
15
+ */
16
+ import * as path from 'path';
17
+ import { v4 as uuidv4 } from 'uuid';
18
+ import { LoggerService } from '../core/logger.service.js';
19
+ import { ensureDir, atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
20
+ import { getAgentBehaviorLogService } from '../observability/agent-behavior-log.singleton.js';
21
+ // ---------------------------------------------------------------------------
22
+ // Service
23
+ // ---------------------------------------------------------------------------
24
+ export class EscalationRouterService {
25
+ static instance = null;
26
+ logger;
27
+ escalationsDir;
28
+ constructor(projectPath) {
29
+ this.logger = LoggerService.getInstance().createComponentLogger('EscalationRouter');
30
+ this.escalationsDir = path.join(projectPath, '.crewly', 'escalations');
31
+ }
32
+ static getInstance(projectPath) {
33
+ if (!EscalationRouterService.instance) {
34
+ const p = projectPath || process.cwd();
35
+ EscalationRouterService.instance = new EscalationRouterService(p);
36
+ }
37
+ return EscalationRouterService.instance;
38
+ }
39
+ static resetInstance() {
40
+ EscalationRouterService.instance = null;
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Route: AlignmentRequest from Worker
44
+ // ---------------------------------------------------------------------------
45
+ /**
46
+ * Route a worker's AlignmentRequest to the correct target.
47
+ *
48
+ * @param request - The structured alignment request from the worker
49
+ * @param workItemId - The WorkItem being escalated
50
+ * @param workerSession - Worker's session name
51
+ * @returns The escalation ID if routed to human, null if handled by agent
52
+ */
53
+ async routeAlignmentRequest(request, workItemId, workerSession) {
54
+ // F14: record `agent.escalation` at the canonical worker→{TL,human}
55
+ // entry point. Best-effort — never blocks the escalation flow. Why
56
+ // this site: it is the single chokepoint every structured worker
57
+ // alignment request flows through (target='team_lead' or 'human').
58
+ // The `escalate` skill / send-message-with-action paths converge
59
+ // here. Recording earlier (e.g. inside the skill bash) loses the
60
+ // structured `target`/`reason` shape; recording later (inside
61
+ // notifyHuman / notifyAgent) misses the handled-by-agent branch
62
+ // when target='team_lead' returns null.
63
+ try {
64
+ getAgentBehaviorLogService()?.record({
65
+ type: 'agent.escalation',
66
+ escalatingAgent: workerSession,
67
+ escalatedTo: request.target,
68
+ reason: request.reason,
69
+ taskId: workItemId,
70
+ details: {
71
+ discoveredIssue: request.discoveredIssue,
72
+ decisionNeeded: request.decisionNeeded,
73
+ },
74
+ });
75
+ // F14 ask_human boundary: when an agent escalates to a human
76
+ // (Steve), this IS an `agent.action` with actionType='ask_human'.
77
+ // We record both events so digests can compute (a) raw escalation
78
+ // counts and (b) per-agent ask_human rates as a subset.
79
+ if (request.target === 'human') {
80
+ getAgentBehaviorLogService()?.record({
81
+ type: 'agent.action',
82
+ agent: workerSession,
83
+ actionType: 'ask_human',
84
+ taskId: workItemId,
85
+ details: {
86
+ reason: request.reason,
87
+ workItemId,
88
+ },
89
+ });
90
+ }
91
+ }
92
+ catch {
93
+ /* observability is best-effort */
94
+ }
95
+ if (request.target === 'human') {
96
+ // Create persistent record + notify human
97
+ const escalation = await this.createPendingEscalation({
98
+ source: 'alignment_request',
99
+ target: 'human',
100
+ summary: `Worker ${workerSession} escalated: ${request.discoveredIssue}`,
101
+ details: {
102
+ currentTask: request.currentTask,
103
+ reason: request.reason,
104
+ whyCannotExecute: request.whyCannotExecute,
105
+ options: request.options,
106
+ recommendation: request.recommendation,
107
+ decisionNeeded: request.decisionNeeded,
108
+ },
109
+ workItemId,
110
+ raisedBy: workerSession,
111
+ });
112
+ // Notify via Slack
113
+ await this.notifyHuman(escalation);
114
+ // Pause the work item
115
+ await this.pauseWorkItem(workItemId);
116
+ this.logger.info('Escalation routed to human', {
117
+ escalationId: escalation.id,
118
+ workItemId,
119
+ reason: request.reason,
120
+ });
121
+ return escalation.id;
122
+ }
123
+ // target === 'team_lead' → route to TL agent
124
+ await this.notifyAgent(request, workItemId, workerSession);
125
+ this.logger.info('Escalation routed to team lead agent', {
126
+ workItemId,
127
+ reason: request.reason,
128
+ });
129
+ return null;
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Route: MissionPolicy EscalationRule
133
+ // ---------------------------------------------------------------------------
134
+ /**
135
+ * Route a MissionPolicy escalation rule trigger.
136
+ *
137
+ * @param mission - The Mission that triggered the rule
138
+ * @param rule - The escalation rule that fired
139
+ * @param context - Current context values (cost, time, failures)
140
+ */
141
+ async routePolicyEscalation(mission, rule, context) {
142
+ if (rule.escalateTo === 'user') {
143
+ const escalation = await this.createPendingEscalation({
144
+ source: 'policy_rule',
145
+ target: 'human',
146
+ summary: `Mission "${mission.objective}" triggered ${rule.condition} (threshold: ${rule.threshold})`,
147
+ details: {
148
+ condition: rule.condition,
149
+ threshold: rule.threshold,
150
+ currentValue: context[rule.condition] ?? 0,
151
+ action: rule.action,
152
+ },
153
+ missionId: mission.id,
154
+ raisedBy: 'system',
155
+ });
156
+ await this.notifyHuman(escalation);
157
+ // Execute the escalation action
158
+ if (rule.action === 'pause' || rule.action === 'block') {
159
+ try {
160
+ const { MissionExecutorService } = await import('./mission-executor.service.js');
161
+ await MissionExecutorService.getInstance().pauseMission(mission.id);
162
+ }
163
+ catch {
164
+ // Non-fatal
165
+ }
166
+ }
167
+ return escalation.id;
168
+ }
169
+ // escalateTo === 'orchestrator' or 'team_lead' → route to agent
170
+ this.logger.info('Policy escalation routed to agent', {
171
+ missionId: mission.id,
172
+ escalateTo: rule.escalateTo,
173
+ condition: rule.condition,
174
+ });
175
+ return null;
176
+ }
177
+ // ---------------------------------------------------------------------------
178
+ // Resolution
179
+ // ---------------------------------------------------------------------------
180
+ /**
181
+ * Resolve a pending human escalation.
182
+ *
183
+ * @param escalationId - The escalation to resolve
184
+ * @param resolution - What the human decided
185
+ * @param resolvedBy - Who resolved it (user ID or name)
186
+ * @returns The updated escalation, or null if not found
187
+ */
188
+ async resolve(escalationId, resolution, resolvedBy) {
189
+ const escalation = await this.loadEscalation(escalationId);
190
+ if (!escalation)
191
+ return null;
192
+ escalation.status = 'resolved';
193
+ escalation.resolvedAt = new Date().toISOString();
194
+ escalation.resolvedBy = resolvedBy;
195
+ escalation.resolution = resolution;
196
+ await this.saveEscalation(escalation);
197
+ // Resume paused work item if applicable
198
+ if (escalation.workItemId) {
199
+ await this.resumeWorkItem(escalation.workItemId);
200
+ }
201
+ this.logger.info('Escalation resolved', {
202
+ escalationId,
203
+ resolvedBy,
204
+ workItemId: escalation.workItemId,
205
+ });
206
+ return escalation;
207
+ }
208
+ /**
209
+ * Escalate a WorkItem that exhausted its retry budget to the
210
+ * orchestrator. The orchestrator receives a structured message via
211
+ * the same MessageQueue used by `target='team_lead'` escalations,
212
+ * decides whether to (a) surface to the user, (b) replan, (c) hand
213
+ * off to a different agent. Also persists a `PendingEscalation`
214
+ * record for the dashboard / API.
215
+ *
216
+ * Called from `V3DataService.onTaskFailed` once `retryCount >=
217
+ * maxRetries`. Best-effort — exceptions are caught and logged so a
218
+ * messaging blip doesn't strand the upstream failure handler.
219
+ *
220
+ * @param wi - The failed WorkItem (post-`failItem`, with retryCount
221
+ * and maxRetries reflecting the exhausted budget)
222
+ * @param reason - Final failure reason (same string written to wi.error)
223
+ * @returns The persisted escalation id, or null on persistence failure
224
+ */
225
+ async escalateFailedWorkItem(wi, reason) {
226
+ const escalationId = uuidv4();
227
+ const escalation = {
228
+ id: escalationId,
229
+ status: 'pending',
230
+ source: 'workitem_failed',
231
+ target: 'orchestrator',
232
+ summary: `WorkItem "${wi.title}" failed after ${wi.retryCount} of ${wi.maxRetries} retries`,
233
+ details: {
234
+ workItemId: wi.id,
235
+ title: wi.title,
236
+ type: wi.type,
237
+ target: wi.target ?? null,
238
+ retryCount: wi.retryCount,
239
+ maxRetries: wi.maxRetries,
240
+ lastError: wi.error ?? reason,
241
+ requestId: wi.requestId ?? null,
242
+ missionId: wi.missionId ?? null,
243
+ priority: wi.priority ?? null,
244
+ },
245
+ workItemId: wi.id,
246
+ missionId: wi.missionId ?? undefined,
247
+ taskId: wi.parentWorkItemId ?? undefined,
248
+ raisedBy: wi.target ?? 'system',
249
+ raisedAt: new Date().toISOString(),
250
+ };
251
+ try {
252
+ await this.saveEscalation(escalation);
253
+ }
254
+ catch (err) {
255
+ this.logger.warn('Failed to persist workitem_failed escalation (non-fatal)', {
256
+ workItemId: wi.id,
257
+ error: err instanceof Error ? err.message : String(err),
258
+ });
259
+ // Continue — even if persistence fails the orc message below
260
+ // still has value (orc will surface to user).
261
+ }
262
+ // Build the orc-facing message. Designed to be self-contained so orc
263
+ // can act without going back to the activity log to reconstruct
264
+ // context. Sanitization is REQUIRED because `wi.title` flows from
265
+ // user-derived Slack/Request text and `wi.error` from worker output
266
+ // — both can contain newlines, ANSI escapes, or strings that would
267
+ // collide with the [CHAT:] / [NOTIFY:] markers ORC parses in its
268
+ // own outbound message protocol. We:
269
+ // - strip ANSI escape codes
270
+ // - flatten newlines so a multi-line error can't open a fake
271
+ // marker line
272
+ // - defuse the four ORC-recognized marker prefixes by inserting
273
+ // a zero-width space — visible to neither ORC nor humans, but
274
+ // prevents the marker from parsing
275
+ // - hard-cap each user-derived field so a giant stack trace
276
+ // can't blow past ORC's context budget
277
+ const sanitize = (raw, maxLen) => String(raw)
278
+ .replace(/\[[0-9;]*m/g, '') // strip ANSI color escapes
279
+ .replace(/[\r\n]+/g, ' ') // flatten newlines
280
+ .replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[​$1') // defuse markers
281
+ .slice(0, maxLen);
282
+ const safeTitle = sanitize(wi.title, 200);
283
+ const safeError = sanitize(wi.error ?? reason, 2_000);
284
+ const lines = [
285
+ `[ESCALATION] WorkItem failed after ${wi.retryCount} of ${wi.maxRetries} retries — your decision needed.`,
286
+ '',
287
+ `WorkItem: ${wi.id} "${safeTitle}"`,
288
+ `Type: ${wi.type}`,
289
+ `Target: ${wi.target ?? '(unassigned)'}`,
290
+ `Attempts: ${wi.retryCount} / ${wi.maxRetries}`,
291
+ '',
292
+ `Last error: ${safeError}`,
293
+ '',
294
+ `Parent Request: ${wi.requestId ?? '(none)'}`,
295
+ `Parent Mission: ${wi.missionId ?? '(none)'}`,
296
+ '',
297
+ 'Suggested actions (per Escalation SOP in your prompt):',
298
+ ' (a) Surface to the user with the failure reason + concrete options',
299
+ ' (b) Replan: break the task differently and re-delegate',
300
+ ' (c) Hand off to a different agent better suited to the task',
301
+ ' (d) Cancel with a "blocked — needs spec clarification" note',
302
+ '',
303
+ `Escalation id: ${escalationId}`,
304
+ ];
305
+ try {
306
+ const { MessageQueueService } = await import('../messaging/message-queue.service.js');
307
+ const mq = new MessageQueueService(process.cwd());
308
+ mq.enqueue({
309
+ content: lines.join('\n'),
310
+ conversationId: `escalation-${wi.id}-${Date.now()}`,
311
+ source: 'system_event',
312
+ sourceMetadata: {
313
+ type: 'escalation',
314
+ subtype: 'workitem_failed',
315
+ workItemId: wi.id,
316
+ escalationId,
317
+ },
318
+ });
319
+ this.logger.info('Routed workitem_failed escalation to ORC via MessageQueue', {
320
+ workItemId: wi.id,
321
+ escalationId,
322
+ });
323
+ }
324
+ catch (err) {
325
+ this.logger.warn('Failed to enqueue workitem_failed message for ORC (non-fatal)', {
326
+ workItemId: wi.id,
327
+ error: err instanceof Error ? err.message : String(err),
328
+ });
329
+ }
330
+ return escalationId;
331
+ }
332
+ /**
333
+ * Deliver the FINAL deliverable judgment to the orchestrator when a Request
334
+ * completes — every child WorkItem was verified (P2 acceptance gate), so the
335
+ * whole deliverable is assembled and per-piece accepted. Asks the orc (the
336
+ * top-level TL) to do the holistic check the per-piece verification cannot:
337
+ * does the ASSEMBLED result meet the original goal and is it actually usable?
338
+ * Accept to close, or reopen with concrete gaps (which re-delegates rework).
339
+ *
340
+ * Best-effort — enqueues a self-contained orc message; never throws.
341
+ *
342
+ * @param request - The completed Request (id + goal/title for the summary).
343
+ * @param childItems - Its child WorkItems (title + status, for the summary).
344
+ * @returns Resolves when the message is enqueued (or silently on failure).
345
+ */
346
+ async requestFinalDeliverableReview(request, childItems) {
347
+ const total = childItems.length;
348
+ const verified = childItems.filter((c) => c.status === 'verified' || c.status === 'done').length;
349
+ const sanitize = (raw, maxLen) => String(raw)
350
+ .replace(/\[[0-9;]*m/g, '')
351
+ .replace(/[\r\n]+/g, ' ')
352
+ .replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[​$1')
353
+ .slice(0, maxLen);
354
+ const goal = sanitize(request.objective ?? request.title ?? request.description ?? '(unspecified)', 300);
355
+ const itemLines = childItems.slice(0, 20).map((c) => ` • [${c.status}] ${sanitize(c.title, 120)}`);
356
+ const lines = [
357
+ '[ESCALATION] Deliverable complete — your final verdict needed.',
358
+ '',
359
+ `Request: ${request.id}`,
360
+ `Goal: ${goal}`,
361
+ `Pieces: ${verified}/${total} work items verified`,
362
+ '',
363
+ 'Completed work items:',
364
+ ...itemLines,
365
+ ...(total > 20 ? [` … and ${total - 20} more`] : []),
366
+ '',
367
+ 'Every piece passed TL verification. Now do the FINAL holistic check the',
368
+ 'per-piece checks cannot: does the ASSEMBLED deliverable meet the original',
369
+ 'goal and is it actually usable end-to-end?',
370
+ ' (a) If yes → accept and close; report the result to the user.',
371
+ ' (b) If it falls short → reopen with the specific gaps; the team reworks.',
372
+ ];
373
+ try {
374
+ const { MessageQueueService } = await import('../messaging/message-queue.service.js');
375
+ const mq = new MessageQueueService(process.cwd());
376
+ mq.enqueue({
377
+ content: lines.join('\n'),
378
+ conversationId: `final-review-${request.id}-${Date.now()}`,
379
+ source: 'system_event',
380
+ sourceMetadata: {
381
+ type: 'escalation',
382
+ subtype: 'final_deliverable_review',
383
+ requestId: request.id,
384
+ },
385
+ });
386
+ this.logger.info('Routed final deliverable review to ORC via MessageQueue', {
387
+ requestId: request.id,
388
+ verified,
389
+ total,
390
+ });
391
+ }
392
+ catch (err) {
393
+ this.logger.warn('Failed to enqueue final deliverable review for ORC (non-fatal)', {
394
+ requestId: request.id,
395
+ error: err instanceof Error ? err.message : String(err),
396
+ });
397
+ }
398
+ }
399
+ /**
400
+ * Escalate a WorkItem whose worker reported done but whose Team Leader has
401
+ * NOT verified it within the deadline (verification-enforcement, P1).
402
+ *
403
+ * Asks the orchestrator to render an EXPLICIT verdict — verify/accept
404
+ * (→ verified) or reject (→ rejected → the existing rework loop) — so
405
+ * unverified work is never silently auto-accepted by the 24h TTL fallback
406
+ * (`pickTTLExpiryTarget('done_by_worker') → 'verified'`). Mirrors
407
+ * {@link escalateFailedWorkItem}: persists a `tl_verification` escalation
408
+ * targeted at the orchestrator and enqueues a self-contained orc-facing
409
+ * message. Best-effort — persistence/message failures are logged, not
410
+ * thrown, so the reconciler pass never strands on it.
411
+ *
412
+ * @param wi - The unverified WorkItem (only read).
413
+ * @param awaitingMs - How long it has awaited verification (for the message).
414
+ * @returns The escalation id, or null on a hard failure.
415
+ */
416
+ async escalateUnverifiedWorkItem(wi, awaitingMs) {
417
+ const escalationId = uuidv4();
418
+ const awaitingH = Math.max(1, Math.round(awaitingMs / 3_600_000));
419
+ const escalation = {
420
+ id: escalationId,
421
+ status: 'pending',
422
+ source: 'tl_verification',
423
+ target: 'orchestrator',
424
+ summary: `WorkItem "${wi.title}" awaiting TL verification for ~${awaitingH}h — your verdict needed`,
425
+ details: {
426
+ workItemId: wi.id,
427
+ title: wi.title,
428
+ type: wi.type,
429
+ target: wi.target ?? null,
430
+ awaitingMs,
431
+ requestId: wi.requestId ?? null,
432
+ missionId: wi.missionId ?? null,
433
+ },
434
+ workItemId: wi.id,
435
+ missionId: wi.missionId ?? undefined,
436
+ taskId: wi.parentWorkItemId ?? undefined,
437
+ raisedBy: 'reconciler',
438
+ raisedAt: new Date().toISOString(),
439
+ };
440
+ try {
441
+ await this.saveEscalation(escalation);
442
+ }
443
+ catch (err) {
444
+ this.logger.warn('Failed to persist tl_verification escalation (non-fatal)', {
445
+ workItemId: wi.id,
446
+ error: err instanceof Error ? err.message : String(err),
447
+ });
448
+ }
449
+ const sanitize = (raw, maxLen) => String(raw)
450
+ .replace(/\[[0-9;]*m/g, '')
451
+ .replace(/[\r\n]+/g, ' ')
452
+ .replace(/\[(CHAT|NOTIFY|EVENT|ESCALATION)/gi, '[​$1')
453
+ .slice(0, maxLen);
454
+ const safeTitle = sanitize(wi.title, 200);
455
+ const lines = [
456
+ `[ESCALATION] WorkItem awaiting verification for ~${awaitingH}h — your verdict needed.`,
457
+ '',
458
+ 'The worker reported this done, but the Team Leader has not verified it.',
459
+ 'Do NOT let it pass unverified — render an explicit verdict:',
460
+ '',
461
+ `WorkItem: ${wi.id} "${safeTitle}"`,
462
+ `Type: ${wi.type}`,
463
+ `Target: ${wi.target ?? '(unassigned)'}`,
464
+ '',
465
+ `Parent Request: ${wi.requestId ?? '(none)'}`,
466
+ `Parent Mission: ${wi.missionId ?? '(none)'}`,
467
+ '',
468
+ 'Actions:',
469
+ ' (a) Verify against the acceptance criteria (yourself or via the TL) → accept',
470
+ ' (b) If it falls short, reject with concrete fix instructions → the team reworks it',
471
+ '',
472
+ `Escalation id: ${escalationId}`,
473
+ ];
474
+ try {
475
+ const { MessageQueueService } = await import('../messaging/message-queue.service.js');
476
+ const mq = new MessageQueueService(process.cwd());
477
+ mq.enqueue({
478
+ content: lines.join('\n'),
479
+ conversationId: `verify-escalation-${wi.id}-${Date.now()}`,
480
+ source: 'system_event',
481
+ sourceMetadata: {
482
+ type: 'escalation',
483
+ subtype: 'tl_verification',
484
+ workItemId: wi.id,
485
+ escalationId,
486
+ },
487
+ });
488
+ this.logger.info('Routed tl_verification escalation to ORC via MessageQueue', {
489
+ workItemId: wi.id,
490
+ escalationId,
491
+ });
492
+ }
493
+ catch (err) {
494
+ this.logger.warn('Failed to enqueue tl_verification message for ORC (non-fatal)', {
495
+ workItemId: wi.id,
496
+ error: err instanceof Error ? err.message : String(err),
497
+ });
498
+ }
499
+ return escalationId;
500
+ }
501
+ /**
502
+ * List all pending escalations.
503
+ */
504
+ async listPending() {
505
+ try {
506
+ await ensureDir(this.escalationsDir);
507
+ const fs = await import('fs/promises');
508
+ const files = await fs.readdir(this.escalationsDir);
509
+ const escalations = [];
510
+ for (const f of files) {
511
+ if (!f.endsWith('.json'))
512
+ continue;
513
+ const data = await safeReadJson(path.join(this.escalationsDir, f), null);
514
+ if (data && data.status === 'pending') {
515
+ escalations.push(data);
516
+ }
517
+ }
518
+ return escalations.sort((a, b) => new Date(b.raisedAt).getTime() - new Date(a.raisedAt).getTime());
519
+ }
520
+ catch {
521
+ return [];
522
+ }
523
+ }
524
+ // ---------------------------------------------------------------------------
525
+ // Persistence
526
+ // ---------------------------------------------------------------------------
527
+ async createPendingEscalation(input) {
528
+ const escalation = {
529
+ id: uuidv4(),
530
+ status: 'pending',
531
+ ...input,
532
+ raisedAt: new Date().toISOString(),
533
+ };
534
+ await this.saveEscalation(escalation);
535
+ return escalation;
536
+ }
537
+ async saveEscalation(escalation) {
538
+ await ensureDir(this.escalationsDir);
539
+ await atomicWriteJson(path.join(this.escalationsDir, `${escalation.id}.json`), escalation);
540
+ }
541
+ async loadEscalation(id) {
542
+ return safeReadJson(path.join(this.escalationsDir, `${id}.json`), null);
543
+ }
544
+ // ---------------------------------------------------------------------------
545
+ // Notification
546
+ // ---------------------------------------------------------------------------
547
+ /**
548
+ * Notify human via the same channel the original request came from.
549
+ * Falls back to Slack → Chat UI if source channel can't be determined.
550
+ */
551
+ async notifyHuman(escalation) {
552
+ const message = [
553
+ escalation.summary,
554
+ '',
555
+ `Source: ${escalation.source}`,
556
+ escalation.missionId ? `Mission: ${escalation.missionId}` : '',
557
+ escalation.workItemId ? `WorkItem: ${escalation.workItemId}` : '',
558
+ '',
559
+ `Resolve via: POST /api/escalations/${escalation.id}/resolve`,
560
+ ].filter(Boolean).join('\n');
561
+ // Determine source channel from the escalation's associated WorkItem/Request
562
+ const sourceChannel = await this.resolveSourceChannel(escalation);
563
+ let notified = false;
564
+ // Route to the original channel
565
+ if (sourceChannel === 'slack' || !sourceChannel) {
566
+ try {
567
+ const { getSlackOrchestratorBridge } = await import('../slack/slack-orchestrator-bridge.js');
568
+ const bridge = getSlackOrchestratorBridge();
569
+ if (bridge) {
570
+ await bridge.sendNotification({
571
+ type: 'alert',
572
+ title: 'Human Decision Required',
573
+ message,
574
+ urgency: 'high',
575
+ timestamp: new Date().toISOString(),
576
+ });
577
+ notified = true;
578
+ }
579
+ }
580
+ catch {
581
+ // Slack not available
582
+ }
583
+ }
584
+ // Google Chat and Telegram: use the messaging adapter pattern
585
+ if (sourceChannel === 'google_chat' || sourceChannel === 'telegram') {
586
+ try {
587
+ // Route via the Slack bridge's sendNotification which handles multi-channel
588
+ // For now, fall through to Slack as the bridge handles routing
589
+ const { getSlackOrchestratorBridge } = await import('../slack/slack-orchestrator-bridge.js');
590
+ const bridge = getSlackOrchestratorBridge();
591
+ if (bridge) {
592
+ await bridge.sendNotification({
593
+ type: 'alert',
594
+ title: `Human Decision Required (via ${sourceChannel})`,
595
+ message,
596
+ urgency: 'high',
597
+ timestamp: new Date().toISOString(),
598
+ });
599
+ notified = true;
600
+ }
601
+ }
602
+ catch {
603
+ // Channel not available
604
+ }
605
+ }
606
+ if (!notified) {
607
+ this.logger.warn('Could not notify human via any channel', {
608
+ escalationId: escalation.id,
609
+ sourceChannel,
610
+ });
611
+ }
612
+ }
613
+ /**
614
+ * Resolve the source channel for an escalation by tracing back to the
615
+ * original Request/ChatMessage that started the work.
616
+ */
617
+ async resolveSourceChannel(escalation) {
618
+ if (!escalation.workItemId)
619
+ return null;
620
+ try {
621
+ const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
622
+ const allItems = await taskPool.getAllItems();
623
+ const wi = allItems.find((w) => w.id === escalation.workItemId);
624
+ if (!wi?.requestId)
625
+ return null;
626
+ // Load the Request to find its source conversation
627
+ const { RequestService } = await import('./request.service.js');
628
+ const request = await RequestService.getInstance().getById(wi.requestId);
629
+ if (!request?.sourceConversationItemId)
630
+ return null;
631
+ // Infer channel from conversation ID pattern
632
+ const { inferChannelTypeFromConversationId } = await import('../../types/chat.types.js');
633
+ return inferChannelTypeFromConversationId(request.sourceConversationItemId) ?? null;
634
+ }
635
+ catch {
636
+ return null; // Can't determine — will fallback to default
637
+ }
638
+ }
639
+ /**
640
+ * Notify TL agent via message queue (for team_lead-targeted escalations).
641
+ */
642
+ async notifyAgent(request, workItemId, workerSession) {
643
+ try {
644
+ const { MessageQueueService } = await import('../messaging/message-queue.service.js');
645
+ const mq = new MessageQueueService(process.cwd());
646
+ mq.enqueue({
647
+ content: [
648
+ `[ESCALATION] Worker ${workerSession} needs alignment on task.`,
649
+ '',
650
+ `Issue: ${request.discoveredIssue}`,
651
+ `Reason: ${request.reason}`,
652
+ `Decision needed: ${request.decisionNeeded}`,
653
+ '',
654
+ `Options:`,
655
+ ...request.options.map((o, i) => ` ${i + 1}. ${o.description} (impact: ${o.impact})`),
656
+ '',
657
+ `Worker recommends: ${request.recommendation}`,
658
+ ].join('\n'),
659
+ conversationId: `escalation-${workItemId}-${Date.now()}`,
660
+ source: 'system_event',
661
+ sourceMetadata: { type: 'escalation', workItemId, workerSession },
662
+ });
663
+ }
664
+ catch (err) {
665
+ this.logger.debug('Agent notification failed (non-fatal)', {
666
+ error: err instanceof Error ? err.message : String(err),
667
+ });
668
+ }
669
+ }
670
+ // ---------------------------------------------------------------------------
671
+ // WorkItem pause/resume helpers
672
+ // ---------------------------------------------------------------------------
673
+ async pauseWorkItem(workItemId) {
674
+ try {
675
+ const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
676
+ await taskPool.updateItemStatus(workItemId, 'blocked');
677
+ }
678
+ catch {
679
+ // Non-fatal
680
+ }
681
+ }
682
+ async resumeWorkItem(workItemId) {
683
+ try {
684
+ const taskPool = (await import('../task-pool/task-pool.service.js')).TaskPoolService.getInstance();
685
+ await taskPool.updateItemStatus(workItemId, 'queued');
686
+ }
687
+ catch {
688
+ // Non-fatal
689
+ }
690
+ }
691
+ }
692
+ //# sourceMappingURL=escalation-router.service.js.map