crewly 1.12.1 → 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 (625) 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/chat/chat.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/chat/chat.controller.js +29 -7
  28. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +1 -1
  31. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  33. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  34. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  37. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  39. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  41. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  42. package/dist/backend/backend/src/index.d.ts.map +1 -1
  43. package/dist/backend/backend/src/index.js +20 -0
  44. package/dist/backend/backend/src/index.js.map +1 -1
  45. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  46. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  47. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  48. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  49. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/agent/agent-registration.service.js +33 -1
  51. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +78 -2
  53. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +248 -44
  55. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +51 -3
  57. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +31 -1
  59. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  60. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  61. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +7 -0
  63. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  65. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  67. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  68. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +26 -0
  70. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  71. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js +19 -3
  73. package/dist/backend/backend/src/services/orchestrator/onboarding/materialize-team.js.map +1 -1
  74. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  75. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  77. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  79. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  81. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  82. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  83. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  85. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  86. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  87. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  89. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  90. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  91. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  93. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  94. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  95. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  98. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  99. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +3 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +21 -10
  102. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  103. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  104. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  105. package/dist/backend/backend/src/types/v2/index.js +1 -1
  106. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  107. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  108. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  109. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  110. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  111. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  112. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  113. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  114. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  115. package/dist/backend/backend/src/websocket/chat.gateway.d.ts.map +1 -1
  116. package/dist/backend/backend/src/websocket/chat.gateway.js +7 -1
  117. package/dist/backend/backend/src/websocket/chat.gateway.js.map +1 -1
  118. package/dist/backend/build-info.json +4 -0
  119. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  120. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  121. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  122. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  124. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  126. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  128. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  130. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  132. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  134. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  136. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  138. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  140. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  142. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  144. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  146. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  148. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  150. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  152. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  154. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  156. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  158. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  160. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  162. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  164. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  166. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  168. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  170. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  172. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  174. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  175. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  176. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  178. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  180. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  182. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  183. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  184. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  186. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  187. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  188. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  190. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  191. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  192. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  194. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  195. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  196. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  198. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  200. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  202. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  284. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  286. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  287. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  288. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  290. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  291. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  292. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  294. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  295. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  296. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  298. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  299. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  300. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  302. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  303. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  304. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  306. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  307. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  308. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  310. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  312. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  314. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  316. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  318. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  319. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  320. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  322. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  323. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  324. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  326. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  327. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  328. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  330. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  331. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  332. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  334. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  335. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  336. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  338. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  339. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  340. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  342. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  343. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts +5 -0
  344. package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  345. package/dist/cli/backend/src/services/cloud/cloud-client.service.js +7 -0
  346. package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  347. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  348. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  350. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  351. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  352. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  354. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  355. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  356. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  358. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  359. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  360. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  362. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  364. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  366. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  367. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  368. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  370. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  371. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  372. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  374. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  375. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  376. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  378. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  380. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  382. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  383. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  384. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  386. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  388. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  390. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  392. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  394. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  395. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  396. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  398. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  399. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  400. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  402. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  403. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  404. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  406. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  408. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  410. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  411. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  412. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  414. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  416. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  418. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  420. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  422. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  424. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  426. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  427. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  428. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  430. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  431. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  432. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  434. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  436. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  438. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  439. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  440. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  442. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  443. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  444. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  446. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  447. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  448. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  450. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  451. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  452. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  454. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  456. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/index.js +50 -0
  458. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  460. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  462. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  464. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  466. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  468. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  470. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  472. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  474. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  475. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  476. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  478. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  479. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  480. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  482. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  484. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  486. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  487. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  488. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  490. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  491. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  492. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  494. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  495. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  496. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  498. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  500. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  501. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  502. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  503. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  504. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  506. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  508. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  510. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  512. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  514. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  516. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  518. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  519. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  520. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  522. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  524. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  526. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  528. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  529. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  530. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  531. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  532. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  533. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  534. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  535. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  536. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  537. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  538. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  539. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  540. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  541. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  542. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  543. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  544. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  545. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  546. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  547. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  548. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  549. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  550. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  551. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  552. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  553. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  554. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  555. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  556. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  557. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  558. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  559. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  560. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  562. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  564. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  565. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  566. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  567. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  568. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  570. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  571. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  572. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  573. package/dist/cli/backend/src/types/v2/index.js +22 -0
  574. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  575. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  576. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  577. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  578. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  579. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  580. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  581. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  582. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  583. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  584. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  585. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  586. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  587. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  588. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  589. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  590. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  591. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  592. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  593. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  594. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  595. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  596. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  597. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  598. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  599. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  600. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  601. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  602. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  603. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  604. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  605. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  606. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  607. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  608. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  609. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  610. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  611. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  612. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  613. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  614. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  615. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  616. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  617. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  618. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  619. package/package.json +2 -2
  620. package/packages/crewly-agent/src/cli.ts +16 -6
  621. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +311 -33
  622. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +221 -12
  623. package/packages/crewly-agent/src/runtime/tool-registry.test.ts +19 -0
  624. package/packages/crewly-agent/src/runtime/tool-registry.ts +4 -1
  625. package/packages/crewly-agent/src/runtime/types.ts +65 -5
@@ -0,0 +1,728 @@
1
+ /**
2
+ * Role Management Service
3
+ *
4
+ * Handles CRUD operations for AI agent roles, loading from configuration
5
+ * directories, and managing role-to-skill assignments.
6
+ *
7
+ * @module services/settings/role.service
8
+ */
9
+ import { promises as fs } from 'fs';
10
+ import path from 'path';
11
+ import { randomUUID } from 'crypto';
12
+ import { roleToSummary, validateCreateRoleInput, validateUpdateRoleInput, matchesRoleFilter, roleToStorageFormat, storageFormatToRole, } from '../../types/role.types.js';
13
+ import { LoggerService } from '../core/logger.service.js';
14
+ // ============================================================================
15
+ // Custom Error Classes
16
+ // ============================================================================
17
+ /**
18
+ * Error thrown when a role is not found
19
+ */
20
+ export class RoleNotFoundError extends Error {
21
+ constructor(id) {
22
+ super(`Role not found: ${id}`);
23
+ this.name = 'RoleNotFoundError';
24
+ }
25
+ }
26
+ /**
27
+ * Error thrown when role validation fails
28
+ */
29
+ export class RoleValidationError extends Error {
30
+ errors;
31
+ constructor(errors) {
32
+ super(`Role validation failed: ${errors.join(', ')}`);
33
+ this.name = 'RoleValidationError';
34
+ this.errors = errors;
35
+ }
36
+ }
37
+ /**
38
+ * Error thrown when attempting to modify a built-in role
39
+ */
40
+ export class BuiltinRoleModificationError extends Error {
41
+ constructor(action) {
42
+ super(`Cannot ${action} a built-in role`);
43
+ this.name = 'BuiltinRoleModificationError';
44
+ }
45
+ }
46
+ /**
47
+ * Error thrown when a role with the same name already exists
48
+ */
49
+ export class DuplicateRoleNameError extends Error {
50
+ constructor(name) {
51
+ super(`A role with name "${name}" already exists`);
52
+ this.name = 'DuplicateRoleNameError';
53
+ }
54
+ }
55
+ // ============================================================================
56
+ // RoleService Class
57
+ // ============================================================================
58
+ /**
59
+ * Service for managing AI agent roles
60
+ *
61
+ * Handles:
62
+ * - Loading built-in roles from config/roles/
63
+ * - Managing user-created roles in ~/.crewly/roles/
64
+ * - CRUD operations for roles
65
+ * - Role-to-skill assignment management
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const service = getRoleService();
70
+ * await service.initialize();
71
+ *
72
+ * // List all roles
73
+ * const roles = await service.listRoles();
74
+ *
75
+ * // Create a new role
76
+ * const newRole = await service.createRole({
77
+ * name: 'my-role',
78
+ * displayName: 'My Role',
79
+ * description: 'A custom role',
80
+ * category: 'development',
81
+ * systemPromptContent: 'You are a helpful assistant.',
82
+ * });
83
+ * ```
84
+ */
85
+ export class RoleService {
86
+ builtinRolesDir;
87
+ userRolesDir;
88
+ rolesCache = new Map();
89
+ promptCache = new Map();
90
+ initialized = false;
91
+ logger = LoggerService.getInstance().createComponentLogger('RoleService');
92
+ /**
93
+ * Create a new RoleService instance
94
+ *
95
+ * @param options - Configuration options
96
+ * @param options.builtinRolesDir - Directory for built-in roles
97
+ * @param options.userRolesDir - Directory for user-created roles
98
+ */
99
+ constructor(options) {
100
+ this.builtinRolesDir = options?.builtinRolesDir ??
101
+ path.join(process.cwd(), 'config', 'roles');
102
+ this.userRolesDir = options?.userRolesDir ??
103
+ path.join(process.env.HOME || '~', '.crewly', 'roles');
104
+ }
105
+ /**
106
+ * Initialize the service by loading all roles
107
+ * Must be called before using other methods
108
+ */
109
+ async initialize() {
110
+ if (this.initialized) {
111
+ return;
112
+ }
113
+ this.rolesCache.clear();
114
+ this.promptCache.clear();
115
+ // Load built-in roles
116
+ const builtinRoles = await this.loadBuiltinRoles();
117
+ for (const role of builtinRoles) {
118
+ this.rolesCache.set(role.id, role);
119
+ }
120
+ // Load user roles
121
+ const userRoles = await this.loadUserRoles();
122
+ for (const role of userRoles) {
123
+ this.rolesCache.set(role.id, role);
124
+ }
125
+ this.initialized = true;
126
+ }
127
+ /**
128
+ * Get all roles, optionally filtered
129
+ *
130
+ * @param filter - Optional filter criteria
131
+ * @param includeHidden - Whether to include hidden roles (default: false for UI)
132
+ * @returns Array of role summaries
133
+ */
134
+ async listRoles(filter, includeHidden = false) {
135
+ await this.ensureInitialized();
136
+ let roles = Array.from(this.rolesCache.values());
137
+ // Filter out hidden roles unless explicitly requested
138
+ if (!includeHidden) {
139
+ roles = roles.filter(role => !role.isHidden);
140
+ }
141
+ const filteredRoles = filter
142
+ ? roles.filter(role => matchesRoleFilter(role, filter))
143
+ : roles;
144
+ return filteredRoles.map(roleToSummary);
145
+ }
146
+ /**
147
+ * Get a role by ID with full prompt content
148
+ *
149
+ * @param id - The role ID
150
+ * @returns The role with prompt content, or null if not found
151
+ */
152
+ async getRole(id) {
153
+ await this.ensureInitialized();
154
+ const role = this.rolesCache.get(id);
155
+ if (!role) {
156
+ return null;
157
+ }
158
+ const promptContent = await this.loadPromptContent(role.systemPromptFile, role.isBuiltin, role.name);
159
+ return {
160
+ ...role,
161
+ systemPromptContent: promptContent,
162
+ };
163
+ }
164
+ /**
165
+ * Get a role by name (includes hidden roles)
166
+ *
167
+ * @param name - The role name
168
+ * @returns The role with prompt content, or null if not found
169
+ */
170
+ async getRoleByName(name) {
171
+ await this.ensureInitialized();
172
+ const role = Array.from(this.rolesCache.values()).find(r => r.name === name);
173
+ if (!role) {
174
+ return null;
175
+ }
176
+ return this.getRole(role.id);
177
+ }
178
+ /**
179
+ * Get the prompt file path for a role
180
+ * Used by PromptBuilderService and AgentRegistrationService
181
+ *
182
+ * @param roleName - The role name (e.g., 'orchestrator', 'tpm', 'developer')
183
+ * @returns The full path to the prompt file, or null if role not found
184
+ */
185
+ async getPromptFilePath(roleName) {
186
+ await this.ensureInitialized();
187
+ const role = Array.from(this.rolesCache.values()).find(r => r.name === roleName);
188
+ if (!role) {
189
+ return null;
190
+ }
191
+ // Built-in roles use subdirectory structure: config/roles/{role}/prompt.md
192
+ // User roles use flat structure: ~/.crewly/roles/{promptFile}
193
+ if (role.isBuiltin) {
194
+ return path.join(this.builtinRolesDir, role.name, role.systemPromptFile);
195
+ }
196
+ return path.join(this.userRolesDir, role.systemPromptFile);
197
+ }
198
+ /**
199
+ * Get the built-in roles directory path
200
+ *
201
+ * @returns The path to built-in roles directory
202
+ */
203
+ getBuiltinRolesDir() {
204
+ return this.builtinRolesDir;
205
+ }
206
+ /**
207
+ * Create a new user-defined role
208
+ *
209
+ * @param input - The role creation input
210
+ * @returns The created role
211
+ * @throws {RoleValidationError} If input validation fails
212
+ * @throws {DuplicateRoleNameError} If a role with the same name exists
213
+ */
214
+ async createRole(input) {
215
+ await this.ensureInitialized();
216
+ // Validate input
217
+ const errors = validateCreateRoleInput(input);
218
+ if (errors.length > 0) {
219
+ throw new RoleValidationError(errors);
220
+ }
221
+ // Check for duplicate name
222
+ const existingRole = await this.getRoleByName(input.name);
223
+ if (existingRole) {
224
+ throw new DuplicateRoleNameError(input.name);
225
+ }
226
+ // Ensure user roles directory exists
227
+ await this.ensureUserRolesDir();
228
+ // Generate ID and create role
229
+ const id = this.generateRoleId(input.name);
230
+ const now = new Date().toISOString();
231
+ const promptFileName = `${input.name}-prompt.md`;
232
+ const role = {
233
+ id,
234
+ name: input.name,
235
+ displayName: input.displayName,
236
+ description: input.description,
237
+ category: input.category,
238
+ systemPromptFile: promptFileName,
239
+ assignedSkills: input.assignedSkills ?? [],
240
+ isDefault: input.isDefault ?? false,
241
+ isHidden: false,
242
+ isBuiltin: false,
243
+ createdAt: now,
244
+ updatedAt: now,
245
+ };
246
+ // If this role is set as default, unset other defaults
247
+ if (role.isDefault) {
248
+ await this.unsetAllDefaults();
249
+ }
250
+ // Save role and prompt
251
+ await this.saveRole(role, input.systemPromptContent);
252
+ // Update cache
253
+ this.rolesCache.set(role.id, role);
254
+ this.promptCache.set(role.systemPromptFile, input.systemPromptContent);
255
+ return role;
256
+ }
257
+ /**
258
+ * Update an existing role
259
+ *
260
+ * For builtin roles: Creates an override in ~/.crewly/roles/ (original stays intact)
261
+ * For user roles: Updates the role directly
262
+ *
263
+ * @param id - The role ID
264
+ * @param input - The update input
265
+ * @returns The updated role
266
+ * @throws {RoleNotFoundError} If the role is not found
267
+ * @throws {RoleValidationError} If input validation fails
268
+ */
269
+ async updateRole(id, input) {
270
+ await this.ensureInitialized();
271
+ const role = this.rolesCache.get(id);
272
+ if (!role) {
273
+ throw new RoleNotFoundError(id);
274
+ }
275
+ // Validate input
276
+ const errors = validateUpdateRoleInput(input);
277
+ if (errors.length > 0) {
278
+ throw new RoleValidationError(errors);
279
+ }
280
+ // Build updated role
281
+ const now = new Date().toISOString();
282
+ const updatedRole = {
283
+ ...role,
284
+ displayName: input.displayName ?? role.displayName,
285
+ description: input.description ?? role.description,
286
+ category: input.category ?? role.category,
287
+ assignedSkills: input.assignedSkills ?? role.assignedSkills,
288
+ isDefault: input.isDefault ?? role.isDefault,
289
+ updatedAt: now,
290
+ };
291
+ // If this role is being set as default, unset other defaults
292
+ if (input.isDefault === true && !role.isDefault) {
293
+ await this.unsetAllDefaults();
294
+ }
295
+ // Get prompt content (use new or existing)
296
+ const existingPromptContent = role.isBuiltin
297
+ ? await this.loadPromptContent(role.systemPromptFile, true, role.name)
298
+ : await this.loadPromptContent(role.systemPromptFile, false);
299
+ const promptContent = input.systemPromptContent ?? existingPromptContent;
300
+ // Save to user directory (creates override for builtin roles)
301
+ await this.saveRoleOverride(updatedRole, promptContent);
302
+ // Update cache
303
+ this.rolesCache.set(id, updatedRole);
304
+ if (input.systemPromptContent) {
305
+ const cacheKey = role.isBuiltin ? `override:${role.name}` : role.systemPromptFile;
306
+ this.promptCache.set(cacheKey, input.systemPromptContent);
307
+ }
308
+ return updatedRole;
309
+ }
310
+ /**
311
+ * Check if a builtin role has a user override
312
+ *
313
+ * @param id - The role ID
314
+ * @returns True if the role has a user override
315
+ */
316
+ async hasOverride(id) {
317
+ await this.ensureInitialized();
318
+ const role = this.rolesCache.get(id);
319
+ if (!role || !role.isBuiltin) {
320
+ return false;
321
+ }
322
+ const overridePath = path.join(this.userRolesDir, role.name, 'role.json');
323
+ try {
324
+ await fs.access(overridePath);
325
+ return true;
326
+ }
327
+ catch {
328
+ return false;
329
+ }
330
+ }
331
+ /**
332
+ * Reset a builtin role to its default (removes user override)
333
+ *
334
+ * @param id - The role ID
335
+ * @returns The reset role (original builtin values)
336
+ * @throws {RoleNotFoundError} If the role is not found
337
+ */
338
+ async resetToDefault(id) {
339
+ await this.ensureInitialized();
340
+ const role = this.rolesCache.get(id);
341
+ if (!role) {
342
+ throw new RoleNotFoundError(id);
343
+ }
344
+ if (!role.isBuiltin) {
345
+ // Non-builtin roles can't be "reset" - they have no default
346
+ return role;
347
+ }
348
+ // Delete the override directory
349
+ const overrideDir = path.join(this.userRolesDir, role.name);
350
+ try {
351
+ await fs.rm(overrideDir, { recursive: true, force: true });
352
+ }
353
+ catch {
354
+ // Override doesn't exist, that's fine
355
+ }
356
+ // Clear override from cache
357
+ const cacheKey = `override:${role.name}`;
358
+ this.promptCache.delete(cacheKey);
359
+ // Reload the original builtin role
360
+ const roleJsonPath = path.join(this.builtinRolesDir, role.name, 'role.json');
361
+ const content = await fs.readFile(roleJsonPath, 'utf-8');
362
+ const stored = JSON.parse(content);
363
+ const originalRole = storageFormatToRole(stored, true);
364
+ // Update cache with original
365
+ this.rolesCache.set(id, originalRole);
366
+ return originalRole;
367
+ }
368
+ /**
369
+ * Delete a user-created role (built-in roles cannot be deleted)
370
+ *
371
+ * @param id - The role ID
372
+ * @throws {RoleNotFoundError} If the role is not found
373
+ * @throws {BuiltinRoleModificationError} If attempting to delete a built-in role
374
+ */
375
+ async deleteRole(id) {
376
+ await this.ensureInitialized();
377
+ const role = this.rolesCache.get(id);
378
+ if (!role) {
379
+ throw new RoleNotFoundError(id);
380
+ }
381
+ if (role.isBuiltin) {
382
+ throw new BuiltinRoleModificationError('delete');
383
+ }
384
+ // Delete files
385
+ const jsonPath = path.join(this.userRolesDir, `${role.name}.json`);
386
+ const promptPath = path.join(this.userRolesDir, role.systemPromptFile);
387
+ try {
388
+ await fs.unlink(jsonPath);
389
+ }
390
+ catch {
391
+ // Ignore if file doesn't exist
392
+ }
393
+ try {
394
+ await fs.unlink(promptPath);
395
+ }
396
+ catch {
397
+ // Ignore if file doesn't exist
398
+ }
399
+ // Update cache
400
+ this.rolesCache.delete(id);
401
+ this.promptCache.delete(role.systemPromptFile);
402
+ }
403
+ /**
404
+ * Assign skills to a role
405
+ *
406
+ * @param roleId - The role ID
407
+ * @param skillIds - Array of skill IDs to assign
408
+ * @returns The updated role
409
+ * @throws {RoleNotFoundError} If the role is not found
410
+ * @throws {BuiltinRoleModificationError} If attempting to modify a built-in role
411
+ */
412
+ async assignSkills(roleId, skillIds) {
413
+ await this.ensureInitialized();
414
+ const role = this.rolesCache.get(roleId);
415
+ if (!role) {
416
+ throw new RoleNotFoundError(roleId);
417
+ }
418
+ if (role.isBuiltin) {
419
+ throw new BuiltinRoleModificationError('modify skills for');
420
+ }
421
+ // Merge skills without duplicates
422
+ const newSkills = [...new Set([...role.assignedSkills, ...skillIds])];
423
+ return this.updateRole(roleId, { assignedSkills: newSkills });
424
+ }
425
+ /**
426
+ * Remove skills from a role
427
+ *
428
+ * @param roleId - The role ID
429
+ * @param skillIds - Array of skill IDs to remove
430
+ * @returns The updated role
431
+ * @throws {RoleNotFoundError} If the role is not found
432
+ * @throws {BuiltinRoleModificationError} If attempting to modify a built-in role
433
+ */
434
+ async removeSkills(roleId, skillIds) {
435
+ await this.ensureInitialized();
436
+ const role = this.rolesCache.get(roleId);
437
+ if (!role) {
438
+ throw new RoleNotFoundError(roleId);
439
+ }
440
+ if (role.isBuiltin) {
441
+ throw new BuiltinRoleModificationError('modify skills for');
442
+ }
443
+ // Filter out removed skills
444
+ const newSkills = role.assignedSkills.filter(s => !skillIds.includes(s));
445
+ return this.updateRole(roleId, { assignedSkills: newSkills });
446
+ }
447
+ /**
448
+ * Set the default role
449
+ *
450
+ * @param roleId - The role ID to set as default
451
+ * @returns The updated role
452
+ * @throws {RoleNotFoundError} If the role is not found
453
+ */
454
+ async setDefaultRole(roleId) {
455
+ await this.ensureInitialized();
456
+ const role = this.rolesCache.get(roleId);
457
+ if (!role) {
458
+ throw new RoleNotFoundError(roleId);
459
+ }
460
+ // Unset all existing defaults
461
+ await this.unsetAllDefaults();
462
+ // Set the new default
463
+ const now = new Date().toISOString();
464
+ const updatedRole = {
465
+ ...role,
466
+ isDefault: true,
467
+ updatedAt: now,
468
+ };
469
+ // Save if user role
470
+ if (!role.isBuiltin) {
471
+ const promptContent = await this.loadPromptContent(role.systemPromptFile, false);
472
+ await this.saveRole(updatedRole, promptContent);
473
+ }
474
+ // Update cache
475
+ this.rolesCache.set(roleId, updatedRole);
476
+ return updatedRole;
477
+ }
478
+ /**
479
+ * Get the current default role
480
+ *
481
+ * @returns The default role, or null if none is set
482
+ */
483
+ async getDefaultRole() {
484
+ await this.ensureInitialized();
485
+ const roles = Array.from(this.rolesCache.values());
486
+ return roles.find(role => role.isDefault) ?? null;
487
+ }
488
+ /**
489
+ * Refresh the roles cache by reloading from disk
490
+ */
491
+ async refresh() {
492
+ this.initialized = false;
493
+ await this.initialize();
494
+ }
495
+ // ============================================================================
496
+ // Private Methods
497
+ // ============================================================================
498
+ /**
499
+ * Ensure the service is initialized.
500
+ * Auto-initializes if not already done.
501
+ */
502
+ async ensureInitialized() {
503
+ if (!this.initialized) {
504
+ await this.initialize();
505
+ }
506
+ }
507
+ /**
508
+ * Load built-in roles from the config directory
509
+ * Loads from subdirectories (config/roles/{role}/role.json)
510
+ */
511
+ async loadBuiltinRoles() {
512
+ const roles = [];
513
+ try {
514
+ const entries = await fs.readdir(this.builtinRolesDir, { withFileTypes: true });
515
+ for (const entry of entries) {
516
+ // Load from subdirectories containing role.json
517
+ if (entry.isDirectory()) {
518
+ try {
519
+ // Check for user override first
520
+ const overridePath = path.join(this.userRolesDir, entry.name, 'role.json');
521
+ let roleJsonPath;
522
+ let hasOverride = false;
523
+ try {
524
+ await fs.access(overridePath);
525
+ roleJsonPath = overridePath;
526
+ hasOverride = true;
527
+ }
528
+ catch {
529
+ // No override, use builtin
530
+ roleJsonPath = path.join(this.builtinRolesDir, entry.name, 'role.json');
531
+ }
532
+ const content = await fs.readFile(roleJsonPath, 'utf-8');
533
+ const stored = JSON.parse(content);
534
+ const role = storageFormatToRole(stored, true);
535
+ // Mark if this role has a user override
536
+ if (hasOverride) {
537
+ role.hasOverride = true;
538
+ }
539
+ roles.push(role);
540
+ }
541
+ catch {
542
+ // Skip directories without role.json
543
+ }
544
+ }
545
+ }
546
+ }
547
+ catch {
548
+ // Directory doesn't exist - no builtin roles
549
+ }
550
+ return roles;
551
+ }
552
+ /**
553
+ * Load user-created roles from the user directory
554
+ */
555
+ async loadUserRoles() {
556
+ const roles = [];
557
+ try {
558
+ const files = await fs.readdir(this.userRolesDir);
559
+ const jsonFiles = files.filter(f => f.endsWith('.json'));
560
+ for (const file of jsonFiles) {
561
+ try {
562
+ const filePath = path.join(this.userRolesDir, file);
563
+ const content = await fs.readFile(filePath, 'utf-8');
564
+ const stored = JSON.parse(content);
565
+ const role = storageFormatToRole(stored, false);
566
+ roles.push(role);
567
+ }
568
+ catch (err) {
569
+ this.logger.warn('Failed to load user role', { file, error: err instanceof Error ? err.message : String(err) });
570
+ }
571
+ }
572
+ }
573
+ catch {
574
+ // Directory doesn't exist - no user roles
575
+ }
576
+ return roles;
577
+ }
578
+ /**
579
+ * Save a role and its prompt content to disk
580
+ *
581
+ * @param role - The role to save
582
+ * @param promptContent - The prompt content to save
583
+ */
584
+ async saveRole(role, promptContent) {
585
+ await this.ensureUserRolesDir();
586
+ // Save JSON file
587
+ const jsonPath = path.join(this.userRolesDir, `${role.name}.json`);
588
+ const storageFormat = roleToStorageFormat(role);
589
+ await fs.writeFile(jsonPath, JSON.stringify(storageFormat, null, 2), 'utf-8');
590
+ // Save prompt file
591
+ const promptPath = path.join(this.userRolesDir, role.systemPromptFile);
592
+ await fs.writeFile(promptPath, promptContent, 'utf-8');
593
+ }
594
+ /**
595
+ * Save a role override to user directory
596
+ * Uses subdirectory structure: ~/.crewly/roles/{role-name}/role.json + prompt.md
597
+ *
598
+ * @param role - The role to save
599
+ * @param promptContent - The prompt content
600
+ */
601
+ async saveRoleOverride(role, promptContent) {
602
+ await this.ensureUserRolesDir();
603
+ // Create role subdirectory
604
+ const roleDir = path.join(this.userRolesDir, role.name);
605
+ await fs.mkdir(roleDir, { recursive: true });
606
+ // Save role.json
607
+ const jsonPath = path.join(roleDir, 'role.json');
608
+ const storageFormat = roleToStorageFormat(role);
609
+ // Override uses prompt.md in same directory
610
+ storageFormat.systemPromptFile = 'prompt.md';
611
+ await fs.writeFile(jsonPath, JSON.stringify(storageFormat, null, 2), 'utf-8');
612
+ // Save prompt.md
613
+ const promptPath = path.join(roleDir, 'prompt.md');
614
+ await fs.writeFile(promptPath, promptContent, 'utf-8');
615
+ }
616
+ /**
617
+ * Load prompt content from a file
618
+ * For built-in roles, checks for user override first, then falls back to builtin
619
+ * For user roles, loads from ~/.crewly/roles/
620
+ *
621
+ * @param promptFile - The prompt file name (e.g., "prompt.md")
622
+ * @param isBuiltin - Whether this is a built-in role
623
+ * @param roleName - The role name (directory name)
624
+ * @returns The prompt content
625
+ */
626
+ async loadPromptContent(promptFile, isBuiltin, roleName) {
627
+ // Check cache first
628
+ const cacheKey = `${isBuiltin ? 'builtin' : 'user'}:${roleName || 'unknown'}:${promptFile}`;
629
+ if (this.promptCache.has(cacheKey)) {
630
+ return this.promptCache.get(cacheKey);
631
+ }
632
+ // For builtin roles, check for user override first
633
+ if (isBuiltin && roleName) {
634
+ const overridePath = path.join(this.userRolesDir, roleName, 'prompt.md');
635
+ try {
636
+ const content = await fs.readFile(overridePath, 'utf-8');
637
+ this.promptCache.set(cacheKey, content);
638
+ return content;
639
+ }
640
+ catch {
641
+ // No override, continue to load builtin
642
+ }
643
+ }
644
+ const dir = isBuiltin ? this.builtinRolesDir : this.userRolesDir;
645
+ // For built-in roles, load from subdirectory; for user roles, use subdirectory too
646
+ const promptPath = roleName
647
+ ? path.join(dir, roleName, promptFile)
648
+ : path.join(dir, promptFile);
649
+ try {
650
+ const content = await fs.readFile(promptPath, 'utf-8');
651
+ this.promptCache.set(cacheKey, content);
652
+ return content;
653
+ }
654
+ catch {
655
+ return '';
656
+ }
657
+ }
658
+ /**
659
+ * Ensure the user roles directory exists
660
+ */
661
+ async ensureUserRolesDir() {
662
+ try {
663
+ await fs.mkdir(this.userRolesDir, { recursive: true });
664
+ }
665
+ catch {
666
+ // Ignore if already exists
667
+ }
668
+ }
669
+ /**
670
+ * Generate a unique role ID
671
+ *
672
+ * @param name - The role name
673
+ * @returns A unique ID
674
+ */
675
+ generateRoleId(name) {
676
+ return `${this.sanitizeRoleName(name)}-${randomUUID().slice(0, 8)}`;
677
+ }
678
+ /**
679
+ * Sanitize a role name for use in file names
680
+ *
681
+ * @param name - The role name
682
+ * @returns The sanitized name
683
+ */
684
+ sanitizeRoleName(name) {
685
+ return name
686
+ .toLowerCase()
687
+ .replace(/[^a-z0-9-]/g, '-')
688
+ .replace(/-+/g, '-')
689
+ .replace(/^-|-$/g, '');
690
+ }
691
+ /**
692
+ * Unset isDefault on all roles
693
+ */
694
+ async unsetAllDefaults() {
695
+ for (const [id, role] of this.rolesCache.entries()) {
696
+ if (role.isDefault) {
697
+ const updatedRole = { ...role, isDefault: false, updatedAt: new Date().toISOString() };
698
+ this.rolesCache.set(id, updatedRole);
699
+ if (!role.isBuiltin) {
700
+ const promptContent = await this.loadPromptContent(role.systemPromptFile, false);
701
+ await this.saveRole(updatedRole, promptContent);
702
+ }
703
+ }
704
+ }
705
+ }
706
+ }
707
+ // ============================================================================
708
+ // Singleton Instance
709
+ // ============================================================================
710
+ let roleServiceInstance = null;
711
+ /**
712
+ * Get the singleton RoleService instance
713
+ *
714
+ * @returns The RoleService instance
715
+ */
716
+ export function getRoleService() {
717
+ if (!roleServiceInstance) {
718
+ roleServiceInstance = new RoleService();
719
+ }
720
+ return roleServiceInstance;
721
+ }
722
+ /**
723
+ * Reset the singleton instance (for testing)
724
+ */
725
+ export function resetRoleService() {
726
+ roleServiceInstance = null;
727
+ }
728
+ //# sourceMappingURL=role.service.js.map