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,734 @@
1
+ /**
2
+ * SOP Service
3
+ *
4
+ * Manages Standard Operating Procedures (SOPs) including loading,
5
+ * indexing, matching, and creating custom SOPs.
6
+ *
7
+ * @module services/sop/sop.service
8
+ */
9
+ import * as path from 'path';
10
+ import * as fs from 'fs/promises';
11
+ import { existsSync } from 'fs';
12
+ import { parse as parseYAML, stringify as stringifyYAML } from 'yaml';
13
+ import { LoggerService } from '../core/logger.service.js';
14
+ import { SOP_CONSTANTS, } from '../../types/sop.types.js';
15
+ import { v4 as uuidv4 } from 'uuid';
16
+ /**
17
+ * Service for managing Standard Operating Procedures
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const service = SOPService.getInstance();
22
+ * await service.initialize();
23
+ *
24
+ * const sops = await service.findRelevantSOPs({
25
+ * role: 'developer',
26
+ * taskContext: 'implementing a new API endpoint',
27
+ * });
28
+ * ```
29
+ */
30
+ export class SOPService {
31
+ static instance = null;
32
+ logger;
33
+ basePath;
34
+ systemPath;
35
+ customPath;
36
+ indexPath;
37
+ index = null;
38
+ sopCache = new Map();
39
+ initialized = false;
40
+ lastFallbackReason = null;
41
+ /**
42
+ * Sentinel reason emitted when the canonical index is missing/unparseable
43
+ * and we synthesise an empty in-memory index so callers can degrade
44
+ * cleanly instead of receiving a 500.
45
+ *
46
+ * Surfaced via `getLastFallbackReason()` and propagated by the API
47
+ * controller to clients in the response envelope.
48
+ */
49
+ static FALLBACK_REASON_INDEX_MISSING = 'index-missing-graceful-fallback';
50
+ /**
51
+ * Private constructor for singleton pattern
52
+ *
53
+ * @param basePath - Optional custom base path for SOPs
54
+ */
55
+ constructor(basePath) {
56
+ this.logger = LoggerService.getInstance().createComponentLogger('SOPService');
57
+ this.basePath = basePath || path.join(this.getCrewlyHome(), SOP_CONSTANTS.PATHS.SOP_DIR);
58
+ this.systemPath = path.join(this.basePath, SOP_CONSTANTS.PATHS.SYSTEM_SOP_DIR);
59
+ this.customPath = path.join(this.basePath, SOP_CONSTANTS.PATHS.CUSTOM_SOP_DIR);
60
+ this.indexPath = path.join(this.basePath, SOP_CONSTANTS.PATHS.INDEX_FILE);
61
+ }
62
+ /**
63
+ * Gets the singleton instance
64
+ *
65
+ * @returns The SOPService instance
66
+ */
67
+ static getInstance() {
68
+ if (!SOPService.instance) {
69
+ SOPService.instance = new SOPService();
70
+ }
71
+ return SOPService.instance;
72
+ }
73
+ /**
74
+ * Clears the singleton instance (for testing)
75
+ */
76
+ static clearInstance() {
77
+ SOPService.instance = null;
78
+ }
79
+ /**
80
+ * Create an instance with a custom base path (for testing)
81
+ *
82
+ * @param basePath - Custom base path
83
+ * @returns SOPService instance
84
+ */
85
+ static createWithPath(basePath) {
86
+ return new SOPService(basePath);
87
+ }
88
+ /**
89
+ * Get the Crewly home directory
90
+ *
91
+ * @returns Home directory path
92
+ */
93
+ getCrewlyHome() {
94
+ return process.env.CREWLY_HOME || path.join(process.env.HOME || '', '.crewly');
95
+ }
96
+ /**
97
+ * Initialize the service
98
+ */
99
+ async initialize() {
100
+ if (this.initialized) {
101
+ return;
102
+ }
103
+ // Ensure directories exist
104
+ await fs.mkdir(this.systemPath, { recursive: true });
105
+ await fs.mkdir(this.customPath, { recursive: true });
106
+ // Build index if not exists or outdated
107
+ await this.ensureIndex();
108
+ this.initialized = true;
109
+ this.logger.info('SOPService initialized', { basePath: this.basePath });
110
+ }
111
+ /**
112
+ * Rebuild the SOP index from filesystem.
113
+ *
114
+ * Resilience contract (F8 — get-sops graceful fallback):
115
+ * - Walks `systemPath` and `customPath` to collect entries (each walker
116
+ * silently no-ops when its directory is absent).
117
+ * - Populates `this.index` with the collected entries (possibly empty)
118
+ * BEFORE attempting any disk write, so callers reading the index
119
+ * in-memory always see a valid object even if persistence fails.
120
+ * - Persists by ensuring `basePath` exists (`mkdir -p`) and then
121
+ * writing the index file. Persistence failure is logged-warn and
122
+ * swallowed — the in-memory index remains canonical for this process.
123
+ *
124
+ * Should not throw under normal failure modes (missing dir, ENOSPC,
125
+ * permission to write index). Pathological errors in helpers are
126
+ * logged inside them; this method returns successfully with an
127
+ * in-memory index regardless.
128
+ */
129
+ async rebuildIndex() {
130
+ const entries = [];
131
+ // Index system SOPs
132
+ await this.indexDirectory(this.systemPath, entries, true);
133
+ // Index custom SOPs
134
+ await this.indexDirectory(this.customPath, entries, false);
135
+ // Always populate in-memory index FIRST so callers can read even if
136
+ // persistence below fails (e.g. read-only FS, ENOSPC).
137
+ this.index = {
138
+ version: SOP_CONSTANTS.INDEX_VERSION,
139
+ lastUpdated: new Date().toISOString(),
140
+ sops: entries,
141
+ };
142
+ // Persist — failures are logged but never thrown to the caller.
143
+ try {
144
+ await this.ensureBasePathExists();
145
+ await this.saveIndex();
146
+ }
147
+ catch (error) {
148
+ this.logger.warn('SOP index regenerated in memory but persistence failed', {
149
+ indexPath: this.indexPath,
150
+ error: error instanceof Error ? error.message : String(error),
151
+ });
152
+ }
153
+ this.sopCache.clear();
154
+ this.logger.info('SOP index rebuilt', { count: entries.length });
155
+ }
156
+ /**
157
+ * Ensure the SOP base directory exists before writing the index.
158
+ *
159
+ * Idempotent. Created with `recursive: true` so any missing parent
160
+ * (e.g. a fresh `~/.crewly` install where `sops/` was never created)
161
+ * is materialised in one call.
162
+ */
163
+ async ensureBasePathExists() {
164
+ await fs.mkdir(this.basePath, { recursive: true });
165
+ }
166
+ /**
167
+ * Index a directory recursively
168
+ *
169
+ * @param dirPath - Directory path to index
170
+ * @param entries - Array to add entries to
171
+ * @param isSystem - Whether these are system SOPs
172
+ */
173
+ async indexDirectory(dirPath, entries, isSystem) {
174
+ if (!existsSync(dirPath)) {
175
+ return;
176
+ }
177
+ try {
178
+ const items = await fs.readdir(dirPath, { withFileTypes: true });
179
+ for (const item of items) {
180
+ const itemPath = path.join(dirPath, item.name);
181
+ if (item.isDirectory()) {
182
+ await this.indexDirectory(itemPath, entries, isSystem);
183
+ }
184
+ else if (item.name.endsWith('.md')) {
185
+ const parsed = await this.parseSOPFile(itemPath);
186
+ if (parsed) {
187
+ entries.push({
188
+ id: parsed.frontmatter.id,
189
+ path: path.relative(this.basePath, itemPath),
190
+ role: parsed.frontmatter.role,
191
+ category: parsed.frontmatter.category,
192
+ priority: parsed.frontmatter.priority,
193
+ triggers: parsed.frontmatter.triggers,
194
+ title: parsed.frontmatter.title,
195
+ isSystem,
196
+ });
197
+ }
198
+ }
199
+ }
200
+ }
201
+ catch (error) {
202
+ this.logger.warn('Error indexing directory', { dirPath, error });
203
+ }
204
+ }
205
+ /**
206
+ * Parse an SOP file from disk
207
+ *
208
+ * @param filePath - Path to the SOP file
209
+ * @returns Parsed SOP or null on error
210
+ */
211
+ async parseSOPFile(filePath) {
212
+ try {
213
+ const content = await fs.readFile(filePath, 'utf-8');
214
+ return this.parseSOPContent(content);
215
+ }
216
+ catch (error) {
217
+ this.logger.warn('Failed to parse SOP file', { filePath, error });
218
+ return null;
219
+ }
220
+ }
221
+ /**
222
+ * Parse SOP content (frontmatter + body)
223
+ *
224
+ * @param content - Raw file content
225
+ * @returns Parsed SOP or null on error
226
+ */
227
+ parseSOPContent(content) {
228
+ // Match frontmatter (YAML between ---)
229
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
230
+ if (!frontmatterMatch) {
231
+ return null;
232
+ }
233
+ const [, frontmatterStr, body] = frontmatterMatch;
234
+ try {
235
+ const frontmatter = parseYAML(frontmatterStr);
236
+ // Validate required fields
237
+ if (!frontmatter.id || !frontmatter.role || !frontmatter.category) {
238
+ return null;
239
+ }
240
+ return {
241
+ frontmatter: {
242
+ id: frontmatter.id,
243
+ version: frontmatter.version || 1,
244
+ createdAt: frontmatter.createdAt || new Date().toISOString(),
245
+ updatedAt: frontmatter.updatedAt || new Date().toISOString(),
246
+ createdBy: frontmatter.createdBy || 'system',
247
+ role: frontmatter.role,
248
+ category: frontmatter.category,
249
+ priority: frontmatter.priority ?? SOP_CONSTANTS.MATCHING.DEFAULT_PRIORITY,
250
+ title: frontmatter.title || frontmatter.id,
251
+ description: frontmatter.description || '',
252
+ triggers: frontmatter.triggers || [],
253
+ conditions: frontmatter.conditions,
254
+ tags: frontmatter.tags || [],
255
+ relatedSOPs: frontmatter.relatedSOPs,
256
+ },
257
+ content: body.trim(),
258
+ };
259
+ }
260
+ catch {
261
+ return null;
262
+ }
263
+ }
264
+ /**
265
+ * Convert parsed SOP to full SOP object
266
+ *
267
+ * @param parsed - Parsed SOP
268
+ * @returns Full SOP object
269
+ */
270
+ parsedToSOP(parsed) {
271
+ return {
272
+ ...parsed.frontmatter,
273
+ content: parsed.content,
274
+ examples: parsed.examples,
275
+ };
276
+ }
277
+ /**
278
+ * Get an SOP by ID
279
+ *
280
+ * @param id - SOP identifier
281
+ * @returns SOP or null if not found
282
+ */
283
+ async getSOP(id) {
284
+ // Check cache
285
+ if (this.sopCache.has(id)) {
286
+ return this.sopCache.get(id);
287
+ }
288
+ // Find in index
289
+ const index = await this.getIndex();
290
+ const entry = index.sops.find((e) => e.id === id);
291
+ if (!entry) {
292
+ return null;
293
+ }
294
+ // Load file
295
+ const filePath = path.join(this.basePath, entry.path);
296
+ const parsed = await this.parseSOPFile(filePath);
297
+ if (parsed) {
298
+ const sop = this.parsedToSOP(parsed);
299
+ this.sopCache.set(id, sop);
300
+ return sop;
301
+ }
302
+ return null;
303
+ }
304
+ /**
305
+ * Get all SOPs for a specific role
306
+ *
307
+ * @param role - Role to filter by
308
+ * @returns Array of SOPs
309
+ */
310
+ async getSOPsByRole(role) {
311
+ const index = await this.getIndex();
312
+ const entries = index.sops.filter((e) => e.role === role || e.role === 'all' || role === 'all');
313
+ const sops = [];
314
+ for (const entry of entries) {
315
+ const sop = await this.getSOP(entry.id);
316
+ if (sop) {
317
+ sops.push(sop);
318
+ }
319
+ }
320
+ return sops;
321
+ }
322
+ /**
323
+ * Get all SOPs in a category
324
+ *
325
+ * @param category - Category to filter by
326
+ * @returns Array of SOPs
327
+ */
328
+ async getSOPsByCategory(category) {
329
+ const index = await this.getIndex();
330
+ const entries = index.sops.filter((e) => e.category === category);
331
+ const sops = [];
332
+ for (const entry of entries) {
333
+ const sop = await this.getSOP(entry.id);
334
+ if (sop) {
335
+ sops.push(sop);
336
+ }
337
+ }
338
+ return sops;
339
+ }
340
+ /**
341
+ * Find SOPs relevant to the given context
342
+ *
343
+ * @param params - Match parameters
344
+ * @returns Array of matching SOPs
345
+ */
346
+ async findRelevantSOPs(params) {
347
+ const index = await this.getIndex();
348
+ const { role, taskContext, taskType, limit = SOP_CONSTANTS.LIMITS.MAX_SOPS_IN_PROMPT } = params;
349
+ // Filter and score entries
350
+ const scored = index.sops
351
+ .filter((entry) => this.matchesRole(entry, role))
352
+ .map((entry) => ({
353
+ entry,
354
+ score: this.scoreRelevance(entry, taskContext || '', taskType),
355
+ }))
356
+ .filter((s) => s.score >= SOP_CONSTANTS.MATCHING.MIN_TRIGGER_MATCH_SCORE)
357
+ .sort((a, b) => {
358
+ // Sort by score, then priority
359
+ if (b.score !== a.score) {
360
+ return b.score - a.score;
361
+ }
362
+ return b.entry.priority - a.entry.priority;
363
+ })
364
+ .slice(0, limit);
365
+ // Load full SOPs
366
+ const sops = [];
367
+ for (const { entry } of scored) {
368
+ const sop = await this.getSOP(entry.id);
369
+ if (sop) {
370
+ sops.push(sop);
371
+ }
372
+ }
373
+ return sops;
374
+ }
375
+ /**
376
+ * Check if an SOP matches a role
377
+ *
378
+ * @param entry - SOP index entry
379
+ * @param role - Role to check
380
+ * @returns True if matches
381
+ */
382
+ matchesRole(entry, role) {
383
+ if (entry.role === 'all') {
384
+ return true;
385
+ }
386
+ if (entry.role === role) {
387
+ return true;
388
+ }
389
+ // Handle role hierarchies
390
+ const roleHierarchy = {
391
+ 'frontend-developer': ['developer'],
392
+ 'backend-developer': ['developer'],
393
+ developer: [],
394
+ pm: [],
395
+ tpm: [],
396
+ pgm: [],
397
+ qa: [],
398
+ tester: [],
399
+ orchestrator: [],
400
+ designer: [],
401
+ devops: [],
402
+ };
403
+ const parentRoles = roleHierarchy[role] || [];
404
+ return parentRoles.includes(entry.role);
405
+ }
406
+ /**
407
+ * Score how relevant an SOP is to the given context
408
+ *
409
+ * @param entry - SOP index entry
410
+ * @param context - Context string
411
+ * @param taskType - Optional task type
412
+ * @returns Relevance score (0-1)
413
+ */
414
+ scoreRelevance(entry, context, taskType) {
415
+ let score = 0;
416
+ const contextLower = context.toLowerCase();
417
+ const words = contextLower.split(/\s+/);
418
+ // Score trigger matches
419
+ for (const trigger of entry.triggers) {
420
+ const triggerLower = trigger.toLowerCase();
421
+ if (contextLower.includes(triggerLower)) {
422
+ score += 0.3;
423
+ }
424
+ if (words.includes(triggerLower)) {
425
+ score += 0.2;
426
+ }
427
+ }
428
+ // Score category match
429
+ if (taskType && entry.category === taskType) {
430
+ score += SOP_CONSTANTS.MATCHING.CATEGORY_MATCH_BOOST;
431
+ }
432
+ // Normalize score
433
+ return Math.min(score, 1.0);
434
+ }
435
+ /**
436
+ * Generate SOP context string for prompts
437
+ *
438
+ * @param params - Match parameters
439
+ * @returns Formatted SOP context string
440
+ */
441
+ async generateSOPContext(params) {
442
+ const sops = await this.findRelevantSOPs(params);
443
+ // Surface the team's own installed/custom SOPs (written to the team library
444
+ // by the wiki editor / update-sop skill) — the read path historically only
445
+ // read the global store, so team SOPs were invisible to get-sops.
446
+ const teamSops = params.teamId ? await this.readTeamSOPs(params.teamId) : [];
447
+ if (sops.length === 0 && teamSops.length === 0) {
448
+ return '';
449
+ }
450
+ const render = (title, category, priority, raw) => {
451
+ const content = raw.length > SOP_CONSTANTS.LIMITS.MAX_SOP_CONTENT_LENGTH
452
+ ? raw.substring(0, SOP_CONSTANTS.LIMITS.MAX_SOP_CONTENT_LENGTH) + '\n\n*[Content truncated]*'
453
+ : raw;
454
+ return `### ${title}\n\n*Category: ${category} | Priority: ${priority}*\n\n${content}\n\n---\n\n`;
455
+ };
456
+ let context = '## Relevant Standard Operating Procedures\n\n';
457
+ context += 'Follow these procedures for your current work:\n\n';
458
+ for (const sop of sops) {
459
+ context += render(sop.title, sop.category, sop.priority, sop.content);
460
+ }
461
+ if (teamSops.length > 0) {
462
+ context += '## Team SOPs\n\n';
463
+ context += "Your team's own SOPs:\n\n";
464
+ for (const sop of teamSops) {
465
+ context += render(sop.title, sop.category, 'team', sop.content);
466
+ }
467
+ }
468
+ return context;
469
+ }
470
+ /**
471
+ * Read a team's installed/custom SOP library from
472
+ * `~/.crewly/teams/<teamId>/sops/` (recursively). Each `.md` file becomes a
473
+ * SOP entry with its frontmatter `title`/`category` (falling back to the
474
+ * filename / parent folder). Read-only; tolerant of a missing directory.
475
+ *
476
+ * @param teamId - The team whose SOP library to read.
477
+ * @returns Team SOP entries (possibly empty).
478
+ */
479
+ async readTeamSOPs(teamId) {
480
+ const root = path.join(this.getCrewlyHome(), 'teams', teamId, 'sops');
481
+ const out = [];
482
+ const walk = async (dir, categoryHint) => {
483
+ let entries;
484
+ try {
485
+ entries = await fs.readdir(dir, { withFileTypes: true });
486
+ }
487
+ catch {
488
+ return;
489
+ }
490
+ for (const entry of entries) {
491
+ if (entry.name.startsWith('.'))
492
+ continue;
493
+ const abs = path.join(dir, entry.name);
494
+ if (entry.isDirectory()) {
495
+ await walk(abs, entry.name);
496
+ }
497
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
498
+ try {
499
+ const raw = await fs.readFile(abs, 'utf-8');
500
+ const titleMatch = raw.match(/^\s*title:\s*(.+?)\s*$/m);
501
+ const catMatch = raw.match(/^\s*category:\s*(.+?)\s*$/m);
502
+ const body = raw.replace(/^---\n[\s\S]*?\n---\n?/, '').trim();
503
+ out.push({
504
+ title: titleMatch ? titleMatch[1].replace(/^["']|["']$/g, '') : path.basename(entry.name, '.md'),
505
+ category: catMatch ? catMatch[1].trim() : categoryHint || 'team',
506
+ content: body || raw,
507
+ });
508
+ }
509
+ catch {
510
+ // skip unreadable file
511
+ }
512
+ }
513
+ }
514
+ };
515
+ await walk(root, '');
516
+ return out;
517
+ }
518
+ /**
519
+ * Create a custom SOP
520
+ *
521
+ * @param sopData - SOP data (without id, timestamps, version)
522
+ * @returns Created SOP ID
523
+ */
524
+ async createCustomSOP(sopData) {
525
+ const id = `custom-${uuidv4().substring(0, 8)}`;
526
+ const now = new Date().toISOString();
527
+ const sop = {
528
+ ...sopData,
529
+ id,
530
+ version: 1,
531
+ createdAt: now,
532
+ updatedAt: now,
533
+ };
534
+ // Create file
535
+ const filePath = path.join(this.customPath, `${id}.md`);
536
+ const content = this.sopToMarkdown(sop);
537
+ await fs.writeFile(filePath, content, 'utf-8');
538
+ // Update index
539
+ await this.rebuildIndex();
540
+ this.logger.info('Custom SOP created', { id, title: sop.title });
541
+ return id;
542
+ }
543
+ /**
544
+ * Update an existing SOP
545
+ *
546
+ * @param id - SOP identifier
547
+ * @param updates - Partial SOP updates
548
+ */
549
+ async updateSOP(id, updates) {
550
+ const index = await this.getIndex();
551
+ const entry = index.sops.find((e) => e.id === id);
552
+ if (!entry) {
553
+ throw new Error(`SOP not found: ${id}`);
554
+ }
555
+ if (entry.isSystem) {
556
+ throw new Error('Cannot update system SOPs');
557
+ }
558
+ const existingSOP = await this.getSOP(id);
559
+ if (!existingSOP) {
560
+ throw new Error(`SOP not found: ${id}`);
561
+ }
562
+ const updatedSOP = {
563
+ ...existingSOP,
564
+ ...updates,
565
+ id: existingSOP.id, // Prevent ID change
566
+ version: existingSOP.version + 1,
567
+ updatedAt: new Date().toISOString(),
568
+ };
569
+ // Update file
570
+ const filePath = path.join(this.basePath, entry.path);
571
+ const content = this.sopToMarkdown(updatedSOP);
572
+ await fs.writeFile(filePath, content, 'utf-8');
573
+ // Update cache and index
574
+ this.sopCache.set(id, updatedSOP);
575
+ await this.rebuildIndex();
576
+ this.logger.info('SOP updated', { id, version: updatedSOP.version });
577
+ }
578
+ /**
579
+ * Delete a custom SOP
580
+ *
581
+ * @param id - SOP identifier
582
+ */
583
+ async deleteSOP(id) {
584
+ const index = await this.getIndex();
585
+ const entry = index.sops.find((e) => e.id === id);
586
+ if (!entry) {
587
+ throw new Error(`SOP not found: ${id}`);
588
+ }
589
+ if (entry.isSystem) {
590
+ throw new Error('Cannot delete system SOPs');
591
+ }
592
+ // Delete file
593
+ const filePath = path.join(this.basePath, entry.path);
594
+ await fs.unlink(filePath);
595
+ // Update cache and index
596
+ this.sopCache.delete(id);
597
+ await this.rebuildIndex();
598
+ this.logger.info('SOP deleted', { id });
599
+ }
600
+ /**
601
+ * Get the current SOP index
602
+ *
603
+ * @returns SOP index
604
+ */
605
+ async getIndex() {
606
+ if (!this.index) {
607
+ await this.ensureIndex();
608
+ }
609
+ return this.index;
610
+ }
611
+ /**
612
+ * Search SOPs by query string
613
+ *
614
+ * @param query - Search query
615
+ * @returns Matching index entries
616
+ */
617
+ async searchSOPs(query) {
618
+ const index = await this.getIndex();
619
+ const queryLower = query.toLowerCase();
620
+ return index.sops.filter((entry) => {
621
+ // Search in title
622
+ if (entry.title.toLowerCase().includes(queryLower)) {
623
+ return true;
624
+ }
625
+ // Search in triggers
626
+ if (entry.triggers.some((t) => t.toLowerCase().includes(queryLower))) {
627
+ return true;
628
+ }
629
+ // Search in category
630
+ if (entry.category.toLowerCase().includes(queryLower)) {
631
+ return true;
632
+ }
633
+ return false;
634
+ });
635
+ }
636
+ /**
637
+ * Ensure the index exists (load from disk or rebuild from filesystem).
638
+ *
639
+ * Graceful-fallback contract (F8):
640
+ * - Happy path: read `index.json`, JSON.parse it, set `this.index`.
641
+ * `lastFallbackReason` is cleared.
642
+ * - Index missing/unparseable: invoke `rebuildIndex()`. If rebuild
643
+ * succeeded with N>=0 entries, mark fallback reason iff the index
644
+ * was rebuilt due to missing-on-disk (so the controller can surface
645
+ * `index-missing-graceful-fallback` to clients).
646
+ * - Catastrophic rebuild failure (extremely unlikely — rebuild itself
647
+ * swallows persistence errors): synthesise an empty in-memory index
648
+ * and stamp `lastFallbackReason`. The endpoint returns 200 with an
649
+ * empty payload rather than 500.
650
+ */
651
+ async ensureIndex() {
652
+ try {
653
+ const content = await fs.readFile(this.indexPath, 'utf-8');
654
+ this.index = JSON.parse(content);
655
+ this.lastFallbackReason = null;
656
+ return;
657
+ }
658
+ catch {
659
+ // fall through to rebuild
660
+ }
661
+ try {
662
+ await this.rebuildIndex();
663
+ // Index was missing/unparseable on disk; even after a successful
664
+ // rebuild we stamp the reason so the controller can advertise the
665
+ // degraded path to callers (telemetry / client-side back-off).
666
+ this.lastFallbackReason = SOPService.FALLBACK_REASON_INDEX_MISSING;
667
+ }
668
+ catch (error) {
669
+ this.logger.warn('SOP index rebuild failed catastrophically — serving empty fallback', { error: error instanceof Error ? error.message : String(error) });
670
+ this.index = {
671
+ version: SOP_CONSTANTS.INDEX_VERSION,
672
+ lastUpdated: new Date().toISOString(),
673
+ sops: [],
674
+ };
675
+ this.lastFallbackReason = SOPService.FALLBACK_REASON_INDEX_MISSING;
676
+ }
677
+ }
678
+ /**
679
+ * Get the reason for the last graceful fallback, if any.
680
+ *
681
+ * Returns the `FALLBACK_REASON_INDEX_MISSING` sentinel when the most
682
+ * recent index load fell back to a regenerated/synthesised in-memory
683
+ * index. Returns null when the cached index was loaded directly from
684
+ * a healthy `index.json` on disk.
685
+ *
686
+ * @returns Fallback reason string, or null.
687
+ */
688
+ getLastFallbackReason() {
689
+ return this.lastFallbackReason;
690
+ }
691
+ /**
692
+ * Save the index to disk
693
+ */
694
+ async saveIndex() {
695
+ // Ensure the store dir exists — on a fresh machine ~/.crewly/sops may not
696
+ // exist yet, and the first query rebuilds the index before initialize()
697
+ // has created it (otherwise saveIndex throws ENOENT → 500 on first call).
698
+ await fs.mkdir(path.dirname(this.indexPath), { recursive: true });
699
+ await fs.writeFile(this.indexPath, JSON.stringify(this.index, null, 2), 'utf-8');
700
+ }
701
+ /**
702
+ * Convert an SOP to Markdown format
703
+ *
704
+ * @param sop - SOP to convert
705
+ * @returns Markdown string
706
+ */
707
+ sopToMarkdown(sop) {
708
+ const frontmatter = {
709
+ id: sop.id,
710
+ version: sop.version,
711
+ createdAt: sop.createdAt,
712
+ updatedAt: sop.updatedAt,
713
+ createdBy: sop.createdBy,
714
+ role: sop.role,
715
+ category: sop.category,
716
+ priority: sop.priority,
717
+ title: sop.title,
718
+ description: sop.description,
719
+ triggers: sop.triggers,
720
+ conditions: sop.conditions,
721
+ tags: sop.tags,
722
+ relatedSOPs: sop.relatedSOPs,
723
+ };
724
+ return `---\n${stringifyYAML(frontmatter)}---\n\n${sop.content}`;
725
+ }
726
+ /**
727
+ * Clear the SOP cache
728
+ */
729
+ clearCache() {
730
+ this.sopCache.clear();
731
+ this.logger.debug('SOP cache cleared');
732
+ }
733
+ }
734
+ //# sourceMappingURL=sop.service.js.map