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,933 @@
1
+ /**
2
+ * Terminal Gateway Module
3
+ *
4
+ * Provides WebSocket-based real-time terminal streaming for PTY and in-process sessions.
5
+ * Uses event-based streaming instead of polling for better performance.
6
+ *
7
+ * In-process sessions (Crewly Agent runtime) are streamed via InProcessLogBuffer
8
+ * EventEmitter events, while PTY sessions use native onData events.
9
+ *
10
+ * @module terminal-gateway
11
+ */
12
+ import { LoggerService } from '../services/core/logger.service.js';
13
+ import { getSessionBackendSync, } from '../services/session/index.js';
14
+ import { TERMINAL_GATEWAY_CONSTANTS } from '../constants.js';
15
+ import { InProcessLogBuffer } from '../services/agent/crewly-agent/in-process-log-buffer.js';
16
+ /**
17
+ * Terminal Gateway class for WebSocket-based terminal streaming.
18
+ *
19
+ * Provides:
20
+ * - Real-time terminal output streaming via PTY onData events
21
+ * - Terminal input forwarding to PTY sessions
22
+ * - Terminal resize handling
23
+ * - Session subscription management
24
+ */
25
+ export class TerminalGateway {
26
+ io;
27
+ logger;
28
+ /** Map of session name to set of subscribed socket IDs */
29
+ connectedClients = new Map();
30
+ /** Map of session name to unsubscribe function for PTY onData */
31
+ sessionSubscriptions = new Map();
32
+ /** Set of sessions with persistent monitoring (not stopped on client disconnect) */
33
+ persistentMonitoringSessions = new Set();
34
+ /**
35
+ * Pending retry timers for eager monitoring attempts that fired before the
36
+ * PTY session was registered in the SessionBackend.
37
+ *
38
+ * Keyed by session name. Cleared on first successful attach, on stop, and
39
+ * on destroy so a backoff schedule never leaks a timer past the gateway.
40
+ */
41
+ pendingMonitoringRetries = new Map();
42
+ /** Current active chat conversation ID for orchestrator responses */
43
+ activeConversationId = null;
44
+ /**
45
+ * Sessions in read-only mode for security auditing.
46
+ * Terminal output is streamed normally, but all input is blocked.
47
+ * Used for compliance auditing and observing agent behavior safely.
48
+ */
49
+ readOnlySessions = new Set();
50
+ /**
51
+ * Set of in-process sessions currently being streamed via InProcessLogBuffer.
52
+ * These sessions are automatically read-only (no PTY to write to).
53
+ */
54
+ inProcessStreamingSessions = new Set();
55
+ /**
56
+ * Bound handler for InProcessLogBuffer 'data' events.
57
+ * Stored so it can be removed on destroy.
58
+ */
59
+ inProcessDataHandler = null;
60
+ /**
61
+ * Create a new TerminalGateway.
62
+ *
63
+ * @param io - Socket.IO server instance
64
+ */
65
+ constructor(io) {
66
+ this.io = io;
67
+ this.logger = LoggerService.getInstance().createComponentLogger('TerminalGateway');
68
+ this.setupEventHandlers();
69
+ this.setupInProcessLogStreaming();
70
+ }
71
+ /**
72
+ * Set up WebSocket event handlers.
73
+ */
74
+ setupEventHandlers() {
75
+ this.io.on('connection', (socket) => {
76
+ this.logger.info('WebSocket client connected', { socketId: socket.id });
77
+ // Handle subscription to terminal sessions
78
+ socket.on('subscribe_to_session', (sessionName) => {
79
+ this.logger.debug('Received subscribe_to_session event', {
80
+ sessionName,
81
+ socketId: socket.id,
82
+ });
83
+ this.subscribeToSession(sessionName, socket);
84
+ });
85
+ // Handle unsubscription from terminal sessions
86
+ socket.on('unsubscribe_from_session', (sessionName) => {
87
+ this.unsubscribeFromSession(sessionName, socket);
88
+ });
89
+ // Handle sending input to terminal sessions
90
+ socket.on('send_input', async (data) => {
91
+ await this.sendInput(data.sessionName, data.input, socket);
92
+ });
93
+ // Handle terminal resize events
94
+ socket.on('terminal_resize', (data) => {
95
+ this.handleTerminalResize(data.sessionName, data.cols, data.rows);
96
+ });
97
+ // Handle request for fresh terminal state (e.g. after resize)
98
+ socket.on('request_terminal_state', (sessionName) => {
99
+ this.sendCurrentTerminalState(sessionName, socket);
100
+ });
101
+ // Handle client disconnection
102
+ socket.on('disconnect', () => {
103
+ this.handleClientDisconnect(socket);
104
+ });
105
+ // Send initial connection confirmation
106
+ socket.emit('connected', {
107
+ type: 'connection_established',
108
+ payload: { socketId: socket.id },
109
+ timestamp: new Date().toISOString(),
110
+ });
111
+ });
112
+ }
113
+ /**
114
+ * Set up real-time log streaming from InProcessLogBuffer.
115
+ *
116
+ * Listens for 'data' events emitted when InProcessLogBuffer.append() is called,
117
+ * and broadcasts the formatted log line to all WebSocket subscribers of that session.
118
+ */
119
+ setupInProcessLogStreaming() {
120
+ const logBuffer = InProcessLogBuffer.getInstance();
121
+ this.inProcessDataHandler = (sessionName, formattedLine) => {
122
+ // Only broadcast if someone is subscribed to this in-process session
123
+ if (!this.inProcessStreamingSessions.has(sessionName)) {
124
+ return;
125
+ }
126
+ const terminalOutput = {
127
+ sessionName,
128
+ content: formattedLine + '\r\n',
129
+ timestamp: new Date().toISOString(),
130
+ type: 'stdout',
131
+ };
132
+ const message = {
133
+ type: 'terminal_output',
134
+ payload: terminalOutput,
135
+ timestamp: new Date().toISOString(),
136
+ };
137
+ this.io.to(`terminal_${sessionName}`).emit('terminal_output', message);
138
+ };
139
+ logBuffer.on('data', this.inProcessDataHandler);
140
+ this.logger.info('In-process log streaming listener registered');
141
+ }
142
+ /**
143
+ * Check if a session is an in-process Crewly Agent session.
144
+ *
145
+ * @param sessionName - The session to check
146
+ * @returns True if the session exists in InProcessLogBuffer
147
+ */
148
+ isInProcessSession(sessionName) {
149
+ return InProcessLogBuffer.getInstance().hasSession(sessionName);
150
+ }
151
+ /**
152
+ * Subscribe a client to a specific terminal session.
153
+ *
154
+ * @param sessionName - The session to subscribe to
155
+ * @param socket - The client socket
156
+ */
157
+ subscribeToSession(sessionName, socket) {
158
+ this.logger.info('Subscribing client to session', {
159
+ socketId: socket.id,
160
+ sessionName,
161
+ });
162
+ // Initialize client set for this session if not exists
163
+ if (!this.connectedClients.has(sessionName)) {
164
+ this.connectedClients.set(sessionName, new Set());
165
+ }
166
+ // Add client to subscription list
167
+ this.connectedClients.get(sessionName).add(socket.id);
168
+ // Join socket.io room for this session
169
+ socket.join(`terminal_${sessionName}`);
170
+ // Try PTY streaming first, then fall back to in-process streaming
171
+ let streamingStarted = this.startPtyStreaming(sessionName);
172
+ if (!streamingStarted) {
173
+ // Check if this is an in-process Crewly Agent session
174
+ streamingStarted = this.startInProcessStreaming(sessionName);
175
+ }
176
+ // Send current terminal state to new subscriber
177
+ this.sendCurrentTerminalState(sessionName, socket);
178
+ // Confirm subscription (even if session doesn't exist yet - client will get updates when it's created)
179
+ socket.emit('subscription_confirmed', {
180
+ type: 'subscription_confirmed',
181
+ payload: { sessionName, sessionExists: streamingStarted },
182
+ timestamp: new Date().toISOString(),
183
+ });
184
+ // If session doesn't exist, also emit a session_not_found so client knows to wait
185
+ if (!streamingStarted) {
186
+ this.logger.info('Session does not exist yet, client will wait for creation', {
187
+ sessionName,
188
+ socketId: socket.id,
189
+ });
190
+ socket.emit('session_pending', {
191
+ type: 'session_pending',
192
+ payload: { sessionName, message: 'Session is being created, please wait...' },
193
+ timestamp: new Date().toISOString(),
194
+ });
195
+ }
196
+ }
197
+ /**
198
+ * Start streaming logs from an in-process Crewly Agent session.
199
+ *
200
+ * In-process sessions are automatically read-only (no PTY to write to).
201
+ * Real-time streaming is handled by the InProcessLogBuffer 'data' event
202
+ * listener set up in setupInProcessLogStreaming().
203
+ *
204
+ * @param sessionName - The session to stream from
205
+ * @returns True if the session is an in-process session and streaming started
206
+ */
207
+ startInProcessStreaming(sessionName) {
208
+ const logBuffer = InProcessLogBuffer.getInstance();
209
+ if (!logBuffer.hasSession(sessionName)) {
210
+ return false;
211
+ }
212
+ // Mark as in-process streaming session (enables data event broadcasting)
213
+ this.inProcessStreamingSessions.add(sessionName);
214
+ // In-process sessions are always read-only (no PTY to write to)
215
+ this.readOnlySessions.add(sessionName);
216
+ this.logger.info('Started in-process log streaming for session', {
217
+ sessionName,
218
+ isReadOnly: true,
219
+ });
220
+ return true;
221
+ }
222
+ /**
223
+ * Start streaming output from a PTY session.
224
+ * Uses event-based onData instead of polling.
225
+ *
226
+ * @param sessionName - The session to stream from
227
+ * @returns True if streaming started successfully, false otherwise
228
+ */
229
+ startPtyStreaming(sessionName) {
230
+ // Don't duplicate subscriptions
231
+ if (this.sessionSubscriptions.has(sessionName)) {
232
+ this.logger.debug('Session already has streaming subscription', { sessionName });
233
+ return true;
234
+ }
235
+ const backend = getSessionBackendSync();
236
+ if (!backend) {
237
+ this.logger.warn('Session backend not initialized, cannot start streaming', {
238
+ sessionName,
239
+ });
240
+ return false;
241
+ }
242
+ // List all available sessions for debugging
243
+ const availableSessions = backend.listSessions();
244
+ this.logger.debug('Looking for session in backend', {
245
+ sessionName,
246
+ availableSessions,
247
+ sessionCount: availableSessions.length,
248
+ });
249
+ const session = backend.getSession(sessionName);
250
+ if (!session) {
251
+ this.logger.warn('Session not found for streaming', {
252
+ sessionName,
253
+ availableSessions,
254
+ });
255
+ return false;
256
+ }
257
+ // Subscribe to PTY onData events - real-time streaming
258
+ const unsubscribeData = session.onData((data) => {
259
+ const terminalOutput = {
260
+ sessionName,
261
+ content: data,
262
+ timestamp: new Date().toISOString(),
263
+ type: 'stdout',
264
+ };
265
+ this.broadcastOutput(sessionName, terminalOutput);
266
+ });
267
+ // Subscribe to exit events
268
+ const unsubscribeExit = session.onExit((exitCode) => {
269
+ const lastOutput = backend.captureOutput(sessionName, 50);
270
+ this.logger.info('Session exited', {
271
+ sessionName,
272
+ exitCode,
273
+ lastOutput: lastOutput?.slice(-500),
274
+ });
275
+ this.broadcastSessionStatus(sessionName, 'terminated');
276
+ this.cleanupSessionSubscription(sessionName);
277
+ });
278
+ // Store combined cleanup function to prevent memory leaks
279
+ this.sessionSubscriptions.set(sessionName, () => {
280
+ unsubscribeData();
281
+ unsubscribeExit();
282
+ });
283
+ this.logger.info('Started PTY streaming for session', { sessionName });
284
+ return true;
285
+ }
286
+ /**
287
+ * Stop streaming output from a PTY session.
288
+ * Does not stop sessions with persistent monitoring enabled.
289
+ *
290
+ * @param sessionName - The session to stop streaming from
291
+ * @param force - Force stop even for persistent monitoring sessions
292
+ */
293
+ stopPtyStreaming(sessionName, force = false) {
294
+ // Don't stop persistent monitoring sessions unless forced
295
+ if (!force && this.persistentMonitoringSessions.has(sessionName)) {
296
+ this.logger.debug('Skipping stop for persistent monitoring session', { sessionName });
297
+ return;
298
+ }
299
+ const unsubscribe = this.sessionSubscriptions.get(sessionName);
300
+ if (unsubscribe) {
301
+ unsubscribe();
302
+ this.sessionSubscriptions.delete(sessionName);
303
+ this.persistentMonitoringSessions.delete(sessionName);
304
+ this.logger.info('Stopped PTY streaming for session', { sessionName });
305
+ }
306
+ }
307
+ /**
308
+ * Start persistent monitoring for the orchestrator session.
309
+ *
310
+ * Ensures chat responses are captured even when no WebSocket clients are
311
+ * viewing the terminal. If the PTY session is not yet registered in the
312
+ * SessionBackend (e.g. eager call from boot fires before
313
+ * createAgentSession's backend registration completes), schedules bounded
314
+ * retries on the {@link TERMINAL_GATEWAY_CONSTANTS.MONITORING_RETRY_BACKOFFS_MS}
315
+ * backoff schedule. Persistent flag stays set across retries so a parallel
316
+ * subscriber path doesn't bypass eventual attachment.
317
+ *
318
+ * @param sessionName - The orchestrator session name to monitor
319
+ * @returns True if monitoring started synchronously on first attempt; false
320
+ * if a retry was scheduled (caller-visible failure is reserved for
321
+ * terminal failure after all retries, surfaced via ERROR log only).
322
+ */
323
+ startOrchestratorChatMonitoring(sessionName) {
324
+ this.logger.info('Starting persistent orchestrator chat monitoring', { sessionName });
325
+ // Cancel any in-flight retry from a previous start call so we don't
326
+ // stack two backoff schedules on the same session.
327
+ this.clearPendingMonitoringRetry(sessionName);
328
+ // Force cleanup any stale subscription from a previous session.
329
+ // When the orchestrator is restarted, the old PTY session is destroyed but
330
+ // the subscription entry may still exist pointing to the dead session.
331
+ // We must remove it so startPtyStreaming creates a fresh subscription.
332
+ if (this.sessionSubscriptions.has(sessionName)) {
333
+ this.logger.info('Cleaning up existing subscription for orchestrator chat monitoring', { sessionName });
334
+ const unsubscribe = this.sessionSubscriptions.get(sessionName);
335
+ unsubscribe();
336
+ this.sessionSubscriptions.delete(sessionName);
337
+ }
338
+ // Mark session as persistent so it won't be stopped when clients disconnect
339
+ this.persistentMonitoringSessions.add(sessionName);
340
+ const started = this.startPtyStreaming(sessionName);
341
+ if (started) {
342
+ return true;
343
+ }
344
+ // Backend hasn't registered the session yet (race with createAgentSession).
345
+ // Keep persistentMonitoringSessions flagged and schedule bounded retries.
346
+ this.logger.warn('PTY not ready for orchestrator chat monitoring, scheduling retries', { sessionName, schedule: TERMINAL_GATEWAY_CONSTANTS.MONITORING_RETRY_BACKOFFS_MS });
347
+ this.scheduleMonitoringRetry(sessionName, 0);
348
+ return false;
349
+ }
350
+ /**
351
+ * Schedule the next bounded retry attempt to attach orchestrator monitoring.
352
+ *
353
+ * @param sessionName - Session name being monitored
354
+ * @param attemptIndex - 0-based index into MONITORING_RETRY_BACKOFFS_MS
355
+ */
356
+ scheduleMonitoringRetry(sessionName, attemptIndex) {
357
+ const schedule = TERMINAL_GATEWAY_CONSTANTS.MONITORING_RETRY_BACKOFFS_MS;
358
+ if (attemptIndex >= schedule.length) {
359
+ // Exhausted retries — log diagnostics and give up. Drop the
360
+ // persistent flag so a subsequent subscriber-driven attach can
361
+ // still proceed via the normal subscribeToSession path.
362
+ const backend = getSessionBackendSync();
363
+ this.logger.error('Orchestrator chat monitoring failed after all retries — orc output will not stream until a client subscribes', {
364
+ sessionName,
365
+ attempts: schedule.length,
366
+ availableSessions: backend?.listSessions() ?? [],
367
+ });
368
+ this.persistentMonitoringSessions.delete(sessionName);
369
+ this.pendingMonitoringRetries.delete(sessionName);
370
+ return;
371
+ }
372
+ const delayMs = schedule[attemptIndex];
373
+ const timer = setTimeout(() => {
374
+ this.pendingMonitoringRetries.delete(sessionName);
375
+ // Stop guard: the persistent flag is cleared by
376
+ // stopOrchestratorChatMonitoring. If it's gone, abandon retry.
377
+ if (!this.persistentMonitoringSessions.has(sessionName)) {
378
+ this.logger.debug('Monitoring retry abandoned — persistent flag cleared', {
379
+ sessionName,
380
+ attemptIndex,
381
+ });
382
+ return;
383
+ }
384
+ const started = this.startPtyStreaming(sessionName);
385
+ if (started) {
386
+ this.logger.info('Orchestrator chat monitoring attached on retry', {
387
+ sessionName,
388
+ attemptIndex: attemptIndex + 1,
389
+ delayMs,
390
+ });
391
+ return;
392
+ }
393
+ this.scheduleMonitoringRetry(sessionName, attemptIndex + 1);
394
+ }, delayMs);
395
+ // Allow the process to exit even if a retry is still pending.
396
+ // Without unref, lingering timers keep node alive past graceful shutdown.
397
+ if (typeof timer.unref === 'function') {
398
+ timer.unref();
399
+ }
400
+ this.pendingMonitoringRetries.set(sessionName, timer);
401
+ }
402
+ /**
403
+ * Clear any pending monitoring retry timer for a session.
404
+ *
405
+ * Idempotent — safe to call when no retry is queued.
406
+ *
407
+ * @param sessionName - Session name whose retry should be cleared
408
+ */
409
+ clearPendingMonitoringRetry(sessionName) {
410
+ const timer = this.pendingMonitoringRetries.get(sessionName);
411
+ if (timer) {
412
+ clearTimeout(timer);
413
+ this.pendingMonitoringRetries.delete(sessionName);
414
+ }
415
+ }
416
+ /**
417
+ * Stop persistent monitoring for the orchestrator session.
418
+ *
419
+ * Cancels any in-flight retry schedule so a stop mid-backoff doesn't leak
420
+ * a timer that later attaches to a session the caller already gave up on.
421
+ *
422
+ * @param sessionName - The orchestrator session name
423
+ */
424
+ stopOrchestratorChatMonitoring(sessionName) {
425
+ this.logger.info('Stopping persistent orchestrator chat monitoring', { sessionName });
426
+ this.clearPendingMonitoringRetry(sessionName);
427
+ this.stopPtyStreaming(sessionName, true);
428
+ }
429
+ /**
430
+ * Clean up session subscription when session ends.
431
+ *
432
+ * @param sessionName - The session to clean up
433
+ */
434
+ cleanupSessionSubscription(sessionName) {
435
+ this.stopPtyStreaming(sessionName);
436
+ this.connectedClients.delete(sessionName);
437
+ }
438
+ /**
439
+ * Unsubscribe a client from a terminal session.
440
+ *
441
+ * @param sessionName - The session to unsubscribe from
442
+ * @param socket - The client socket
443
+ */
444
+ unsubscribeFromSession(sessionName, socket) {
445
+ const clients = this.connectedClients.get(sessionName);
446
+ if (clients) {
447
+ clients.delete(socket.id);
448
+ // Stop streaming if no more clients watching
449
+ if (clients.size === 0) {
450
+ this.stopPtyStreaming(sessionName);
451
+ // Clean up in-process streaming tracking
452
+ this.inProcessStreamingSessions.delete(sessionName);
453
+ this.connectedClients.delete(sessionName);
454
+ }
455
+ }
456
+ // Leave socket.io room
457
+ socket.leave(`terminal_${sessionName}`);
458
+ this.logger.debug('Client unsubscribed from session', {
459
+ socketId: socket.id,
460
+ sessionName,
461
+ });
462
+ // Confirm unsubscription
463
+ socket.emit('unsubscription_confirmed', {
464
+ type: 'unsubscription_confirmed',
465
+ payload: { sessionName },
466
+ timestamp: new Date().toISOString(),
467
+ });
468
+ }
469
+ /**
470
+ * Send input to a terminal session.
471
+ *
472
+ * @param sessionName - The session to send input to
473
+ * @param input - The input string
474
+ * @param socket - The client socket
475
+ */
476
+ async sendInput(sessionName, input, socket) {
477
+ try {
478
+ // Block input for read-only sessions (audit mode)
479
+ if (this.readOnlySessions.has(sessionName)) {
480
+ this.logger.warn('Input blocked for read-only session', { sessionName, fromClient: socket.id });
481
+ socket.emit('error', {
482
+ type: 'read_only',
483
+ payload: { sessionName, error: 'Session is in read-only mode (audit mode). Input is blocked.' },
484
+ timestamp: new Date().toISOString(),
485
+ });
486
+ return;
487
+ }
488
+ const backend = getSessionBackendSync();
489
+ if (!backend) {
490
+ throw new Error('Session backend not initialized');
491
+ }
492
+ const session = backend.getSession(sessionName);
493
+ if (!session) {
494
+ socket.emit('error', {
495
+ type: 'session_not_found',
496
+ payload: { sessionName, error: 'Session does not exist' },
497
+ timestamp: new Date().toISOString(),
498
+ });
499
+ return;
500
+ }
501
+ // Write input directly to PTY
502
+ session.write(input);
503
+ this.logger.debug('Sent input to session', {
504
+ sessionName,
505
+ inputLength: input.length,
506
+ fromClient: socket.id,
507
+ });
508
+ // Broadcast input confirmation to all subscribers
509
+ this.broadcastMessage(sessionName, 'input_received', {
510
+ sessionName,
511
+ input,
512
+ fromClient: socket.id,
513
+ });
514
+ }
515
+ catch (error) {
516
+ this.logger.error('Error sending input to session', {
517
+ sessionName,
518
+ error: error instanceof Error ? error.message : String(error),
519
+ });
520
+ socket.emit('error', {
521
+ type: 'input_error',
522
+ payload: {
523
+ sessionName,
524
+ error: error instanceof Error ? error.message : 'Failed to send input',
525
+ },
526
+ timestamp: new Date().toISOString(),
527
+ });
528
+ }
529
+ }
530
+ /**
531
+ * Handle terminal resize events.
532
+ *
533
+ * @param sessionName - The session to resize
534
+ * @param cols - New column count
535
+ * @param rows - New row count
536
+ */
537
+ handleTerminalResize(sessionName, cols, rows) {
538
+ try {
539
+ const backend = getSessionBackendSync();
540
+ if (!backend) {
541
+ this.logger.warn('Cannot resize: session backend not initialized');
542
+ return;
543
+ }
544
+ // Use resizeSession if available (resizes both PTY and headless buffer).
545
+ // This prevents cursor movement corruption when the frontend xterm.js
546
+ // has different dimensions than the backend headless terminal buffer.
547
+ if (backend.resizeSession) {
548
+ backend.resizeSession(sessionName, cols, rows);
549
+ }
550
+ else {
551
+ const session = backend.getSession(sessionName);
552
+ if (!session) {
553
+ this.logger.debug('Cannot resize: session not found', { sessionName });
554
+ return;
555
+ }
556
+ session.resize(cols, rows);
557
+ }
558
+ this.logger.debug('Terminal resized', { sessionName, cols, rows });
559
+ // Broadcast resize event to other clients viewing the same session
560
+ this.broadcastMessage(sessionName, 'terminal_resized', {
561
+ sessionName,
562
+ cols,
563
+ rows,
564
+ });
565
+ }
566
+ catch (error) {
567
+ // Distinguish "session genuinely gone" (frontend reconnect
568
+ // race — common, expected, drop to debug) from other resize
569
+ // failures (PTY backend issue — keep at error). Steve
570
+ // 2026-05-15: 314 ERROR entries from `Session 'X' does not
571
+ // exist` across one day was overwhelming the log without
572
+ // indicating any actionable problem.
573
+ const msg = error instanceof Error ? error.message : String(error);
574
+ const isMissingSession = /does not exist/.test(msg);
575
+ this.logger[isMissingSession ? 'debug' : 'error']('Error resizing terminal', {
576
+ sessionName,
577
+ error: msg,
578
+ });
579
+ }
580
+ }
581
+ /**
582
+ * Handle client disconnection.
583
+ *
584
+ * @param socket - The disconnected client socket
585
+ */
586
+ handleClientDisconnect(socket) {
587
+ this.logger.info('Client disconnected', { socketId: socket.id });
588
+ // Remove client from all session subscriptions
589
+ for (const [sessionName, clients] of this.connectedClients.entries()) {
590
+ if (clients.has(socket.id)) {
591
+ clients.delete(socket.id);
592
+ // Stop streaming if no more clients watching
593
+ if (clients.size === 0) {
594
+ this.stopPtyStreaming(sessionName);
595
+ this.inProcessStreamingSessions.delete(sessionName);
596
+ this.connectedClients.delete(sessionName);
597
+ }
598
+ }
599
+ }
600
+ }
601
+ /**
602
+ * Broadcast terminal output to all subscribers of a session.
603
+ * Also processes orchestrator output for chat responses.
604
+ *
605
+ * @param sessionName - The session name
606
+ * @param output - The terminal output
607
+ */
608
+ broadcastOutput(sessionName, output) {
609
+ const message = {
610
+ type: 'terminal_output',
611
+ payload: output,
612
+ timestamp: new Date().toISOString(),
613
+ };
614
+ this.io.to(`terminal_${sessionName}`).emit('terminal_output', message);
615
+ }
616
+ /**
617
+ * Enable read-only mode for a session. Output streaming continues but
618
+ * all input is blocked. Used for security auditing and safe observation.
619
+ *
620
+ * @param sessionName - The session to set as read-only
621
+ */
622
+ setReadOnly(sessionName) {
623
+ this.readOnlySessions.add(sessionName);
624
+ this.logger.info('Session set to read-only mode', { sessionName });
625
+ }
626
+ /**
627
+ * Disable read-only mode for a session, restoring normal input capability.
628
+ *
629
+ * @param sessionName - The session to restore
630
+ */
631
+ clearReadOnly(sessionName) {
632
+ this.readOnlySessions.delete(sessionName);
633
+ this.logger.info('Session read-only mode cleared', { sessionName });
634
+ }
635
+ /**
636
+ * Check if a session is in read-only (audit) mode.
637
+ *
638
+ * @param sessionName - The session to check
639
+ * @returns True if the session is read-only
640
+ */
641
+ isReadOnly(sessionName) {
642
+ return this.readOnlySessions.has(sessionName);
643
+ }
644
+ /**
645
+ * Set the active conversation ID for orchestrator chat responses.
646
+ *
647
+ * @param conversationId - The conversation ID to set
648
+ */
649
+ setActiveConversationId(conversationId) {
650
+ this.activeConversationId = conversationId;
651
+ }
652
+ /**
653
+ * Get the active conversation ID.
654
+ *
655
+ * @returns The active conversation ID or null
656
+ */
657
+ getActiveConversationId() {
658
+ return this.activeConversationId;
659
+ }
660
+ /**
661
+ * Broadcast session status changes.
662
+ *
663
+ * @param sessionName - The session name
664
+ * @param status - The status string
665
+ */
666
+ broadcastSessionStatus(sessionName, status) {
667
+ const message = {
668
+ type: 'team_status',
669
+ payload: { sessionName, status },
670
+ timestamp: new Date().toISOString(),
671
+ };
672
+ this.io.to(`terminal_${sessionName}`).emit('session_status', message);
673
+ }
674
+ /**
675
+ * Broadcast general messages to session subscribers.
676
+ *
677
+ * @param sessionName - The session name
678
+ * @param type - Message type
679
+ * @param payload - Message payload
680
+ */
681
+ broadcastMessage(sessionName, type, payload) {
682
+ const message = {
683
+ type: type,
684
+ payload,
685
+ timestamp: new Date().toISOString(),
686
+ };
687
+ this.io.to(`terminal_${sessionName}`).emit(type, message);
688
+ }
689
+ /**
690
+ * Send current terminal state to a new subscriber.
691
+ *
692
+ * @param sessionName - The session name
693
+ * @param socket - The client socket
694
+ */
695
+ async sendCurrentTerminalState(sessionName, socket) {
696
+ try {
697
+ this.logger.debug('Sending current terminal state', {
698
+ sessionName,
699
+ socketId: socket.id,
700
+ });
701
+ // Check in-process sessions first (they don't have a PTY backend)
702
+ if (this.inProcessStreamingSessions.has(sessionName)) {
703
+ const logBuffer = InProcessLogBuffer.getInstance();
704
+ const output = logBuffer.capture(sessionName, 500);
705
+ const terminalState = {
706
+ sessionName,
707
+ content: output + '\r\n',
708
+ timestamp: new Date().toISOString(),
709
+ type: 'stdout',
710
+ };
711
+ this.logger.debug('Emitting initial in-process terminal state', {
712
+ sessionName,
713
+ contentLength: output.length,
714
+ });
715
+ socket.emit('initial_terminal_state', {
716
+ type: 'initial_terminal_state',
717
+ payload: terminalState,
718
+ timestamp: new Date().toISOString(),
719
+ });
720
+ return;
721
+ }
722
+ const backend = getSessionBackendSync();
723
+ if (!backend) {
724
+ socket.emit('error', {
725
+ type: 'terminal_state_error',
726
+ payload: { sessionName, error: 'Session backend not initialized' },
727
+ timestamp: new Date().toISOString(),
728
+ });
729
+ return;
730
+ }
731
+ if (!backend.sessionExists(sessionName)) {
732
+ this.logger.debug('Session does not exist', { sessionName });
733
+ socket.emit('session_not_found', {
734
+ type: 'session_not_found',
735
+ payload: { sessionName },
736
+ timestamp: new Date().toISOString(),
737
+ });
738
+ return;
739
+ }
740
+ // Get serialized terminal visual state (plain text, no cursor movements).
741
+ // The headless terminal processes all ANSI sequences and returns the
742
+ // rendered result — safe for replay at any terminal dimensions.
743
+ // Falls back to raw history if serialization is not available.
744
+ const output = backend.getSerializedState
745
+ ? await backend.getSerializedState(sessionName)
746
+ : backend.getRawHistory(sessionName);
747
+ const terminalState = {
748
+ sessionName,
749
+ content: output,
750
+ timestamp: new Date().toISOString(),
751
+ type: 'stdout',
752
+ };
753
+ this.logger.debug('Emitting initial terminal state', {
754
+ sessionName,
755
+ contentLength: output.length,
756
+ });
757
+ // Send initial terminal state
758
+ socket.emit('initial_terminal_state', {
759
+ type: 'initial_terminal_state',
760
+ payload: terminalState,
761
+ timestamp: new Date().toISOString(),
762
+ });
763
+ }
764
+ catch (error) {
765
+ this.logger.error('Error getting terminal state', {
766
+ sessionName,
767
+ error: error instanceof Error ? error.message : String(error),
768
+ });
769
+ socket.emit('error', {
770
+ type: 'terminal_state_error',
771
+ payload: {
772
+ sessionName,
773
+ error: error instanceof Error ? error.message : 'Failed to get terminal state',
774
+ },
775
+ timestamp: new Date().toISOString(),
776
+ });
777
+ }
778
+ }
779
+ /**
780
+ * Get statistics about connected clients.
781
+ *
782
+ * @returns Connection statistics
783
+ */
784
+ getConnectionStats() {
785
+ const sessionSubscriptions = {};
786
+ for (const [sessionName, clients] of this.connectedClients.entries()) {
787
+ sessionSubscriptions[sessionName] = clients.size;
788
+ }
789
+ return {
790
+ totalClients: this.io.sockets.sockets.size,
791
+ sessionSubscriptions,
792
+ totalSessions: this.connectedClients.size,
793
+ activeStreams: this.sessionSubscriptions.size,
794
+ };
795
+ }
796
+ /**
797
+ * Force disconnect all clients from a session.
798
+ *
799
+ * @param sessionName - The session name
800
+ */
801
+ disconnectSessionClients(sessionName) {
802
+ this.io.to(`terminal_${sessionName}`).disconnectSockets();
803
+ this.cleanupSessionSubscription(sessionName);
804
+ this.logger.info('Disconnected all clients from session', { sessionName });
805
+ }
806
+ /**
807
+ * Broadcast system-wide notifications.
808
+ *
809
+ * @param message - Notification message
810
+ * @param type - Notification type
811
+ */
812
+ broadcastSystemNotification(message, type = 'info') {
813
+ this.io.emit('system_notification', {
814
+ type: 'system_notification',
815
+ payload: { message, notificationType: type },
816
+ timestamp: new Date().toISOString(),
817
+ });
818
+ }
819
+ /**
820
+ * Broadcast orchestrator status changes.
821
+ *
822
+ * @param orchestratorData - Orchestrator data
823
+ */
824
+ broadcastOrchestratorStatus(orchestratorData) {
825
+ this.io.emit('orchestrator_status_changed', {
826
+ type: 'orchestrator_status_changed',
827
+ payload: orchestratorData,
828
+ timestamp: new Date().toISOString(),
829
+ });
830
+ }
831
+ /**
832
+ * Broadcast team member status changes.
833
+ *
834
+ * @param memberData - Team member data
835
+ */
836
+ broadcastTeamMemberStatus(memberData) {
837
+ this.io.emit('team_member_status_changed', {
838
+ type: 'team_member_status_changed',
839
+ payload: memberData,
840
+ timestamp: new Date().toISOString(),
841
+ });
842
+ }
843
+ /**
844
+ * Broadcast a system resource alert to all connected clients.
845
+ *
846
+ * @param alertData - Alert details including key, message, severity, and timestamp
847
+ */
848
+ broadcastSystemResourceAlert(alertData) {
849
+ this.io.emit('system_resource_alert', {
850
+ type: 'system_resource_alert',
851
+ payload: alertData,
852
+ timestamp: alertData.timestamp,
853
+ });
854
+ }
855
+ /**
856
+ * Broadcast context window status updates to all connected clients.
857
+ *
858
+ * @param contextData - Context window status data
859
+ */
860
+ broadcastContextWindowStatus(contextData) {
861
+ this.io.emit('context_window_status', {
862
+ type: 'context_window_status',
863
+ payload: contextData,
864
+ timestamp: contextData.timestamp,
865
+ });
866
+ }
867
+ /**
868
+ * Broadcast comprehensive team activity updates.
869
+ *
870
+ * @param activityData - Activity data
871
+ */
872
+ broadcastTeamActivity(activityData) {
873
+ this.io.emit('team_activity_updated', {
874
+ type: 'team_activity_updated',
875
+ payload: activityData,
876
+ timestamp: new Date().toISOString(),
877
+ });
878
+ }
879
+ /**
880
+ * Destroy the gateway and clean up all subscriptions.
881
+ */
882
+ destroy() {
883
+ // Cancel any pending monitoring retries before tearing down.
884
+ // Otherwise a queued retry could fire after destroy and attach
885
+ // a listener to a session whose owner has gone away.
886
+ for (const timer of this.pendingMonitoringRetries.values()) {
887
+ clearTimeout(timer);
888
+ }
889
+ this.pendingMonitoringRetries.clear();
890
+ // Unsubscribe from all PTY sessions
891
+ for (const unsubscribe of this.sessionSubscriptions.values()) {
892
+ unsubscribe();
893
+ }
894
+ this.sessionSubscriptions.clear();
895
+ this.connectedClients.clear();
896
+ this.persistentMonitoringSessions.clear();
897
+ // Clean up in-process log streaming
898
+ if (this.inProcessDataHandler) {
899
+ InProcessLogBuffer.getInstance().removeListener('data', this.inProcessDataHandler);
900
+ this.inProcessDataHandler = null;
901
+ }
902
+ this.inProcessStreamingSessions.clear();
903
+ this.logger.info('TerminalGateway destroyed');
904
+ }
905
+ }
906
+ // =============================================================================
907
+ // Singleton Instance
908
+ // =============================================================================
909
+ let terminalGatewayInstance = null;
910
+ /**
911
+ * Set the terminal gateway singleton instance.
912
+ * Called during server initialization.
913
+ *
914
+ * @param gateway - The TerminalGateway instance
915
+ */
916
+ export function setTerminalGateway(gateway) {
917
+ terminalGatewayInstance = gateway;
918
+ }
919
+ /**
920
+ * Get the terminal gateway singleton instance.
921
+ *
922
+ * @returns The TerminalGateway instance or null if not initialized
923
+ */
924
+ export function getTerminalGateway() {
925
+ return terminalGatewayInstance;
926
+ }
927
+ /**
928
+ * Reset the terminal gateway singleton instance (for testing).
929
+ */
930
+ export function resetTerminalGateway() {
931
+ terminalGatewayInstance = null;
932
+ }
933
+ //# sourceMappingURL=terminal.gateway.js.map