crewly 1.13.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/config/skills/_common/complete-body-shape.test.sh +113 -0
  2. package/config/skills/_common/no-dangling-symlinks.test.sh +63 -0
  3. package/config/skills/_common/task-pool-body-shape.test.sh +471 -0
  4. package/config/skills/agent/core/accept-task/execute.sh +30 -5
  5. package/config/skills/agent/core/block-task/execute.sh +59 -6
  6. package/config/skills/agent/core/complete-task/SKILL.md +37 -5
  7. package/config/skills/agent/core/complete-task/execute.sh +40 -9
  8. package/config/skills/agent/core/complete-task/execute.test.sh +213 -0
  9. package/config/skills/agent/core/create-task/SKILL.md +33 -0
  10. package/config/skills/agent/core/create-task/execute.sh +82 -23
  11. package/config/skills/agent/core/delegate-task/execute.sh +46 -0
  12. package/config/skills/agent/core/get-team-norms/SKILL.md +1 -1
  13. package/config/skills/agent/core/get-team-norms/execute.sh +73 -2
  14. package/config/skills/agent/core/handoff-task/execute.sh +8 -1
  15. package/config/skills/agent/core/report-status/SKILL.md +26 -0
  16. package/config/skills/agent/core/report-status/execute.sh +40 -5
  17. package/config/skills/orchestrator/delegate-task/SKILL.md +1 -1
  18. package/config/skills/orchestrator/delegate-task/execute.sh +45 -11
  19. package/config/skills/orchestrator/delegate-task/execute.test.sh +153 -1
  20. package/config/skills/team-leader/aggregate-results/SKILL.md +1 -1
  21. package/config/skills/team-leader/decompose-goal/execute.sh +11 -16
  22. package/config/skills/team-leader/delegate-task/SKILL.md +14 -1
  23. package/config/skills/team-leader/delegate-task/execute.sh +132 -43
  24. package/config/skills/team-leader/delegate-task/execute.test.sh +180 -27
  25. package/config/vitest-exclude.constants.ts +56 -0
  26. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +18 -3
  28. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js +18 -15
  31. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  32. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  33. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  34. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +19 -10
  35. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  36. package/dist/backend/backend/src/index.d.ts.map +1 -1
  37. package/dist/backend/backend/src/index.js +20 -0
  38. package/dist/backend/backend/src/index.js.map +1 -1
  39. package/dist/backend/backend/src/scripts/stamp-build.d.ts +25 -0
  40. package/dist/backend/backend/src/scripts/stamp-build.d.ts.map +1 -0
  41. package/dist/backend/backend/src/scripts/stamp-build.js +48 -0
  42. package/dist/backend/backend/src/scripts/stamp-build.js.map +1 -0
  43. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  45. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +9 -1
  48. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +42 -3
  50. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +22 -1
  52. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  53. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +15 -0
  54. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +40 -0
  56. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts +28 -3
  58. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +65 -8
  60. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +214 -4
  62. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  63. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +330 -48
  64. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  65. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +13 -1
  66. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +84 -5
  68. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  69. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +14 -0
  70. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +77 -3
  72. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  74. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +268 -36
  76. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/v3/escalation-router.service.js +2 -2
  78. package/dist/backend/backend/src/services/v3/escalation-router.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +39 -2
  81. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  82. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  83. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  84. package/dist/backend/backend/src/types/v2/index.js +1 -1
  85. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  86. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +181 -1
  87. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  88. package/dist/backend/backend/src/types/v2/work-item.types.js +104 -17
  89. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  90. package/dist/backend/backend/src/utils/build-provenance.d.ts +150 -0
  91. package/dist/backend/backend/src/utils/build-provenance.d.ts.map +1 -0
  92. package/dist/backend/backend/src/utils/build-provenance.js +211 -0
  93. package/dist/backend/backend/src/utils/build-provenance.js.map +1 -0
  94. package/dist/backend/build-info.json +4 -0
  95. package/dist/backend/config/vitest-exclude.constants.d.ts +53 -0
  96. package/dist/backend/config/vitest-exclude.constants.d.ts.map +1 -0
  97. package/dist/backend/config/vitest-exclude.constants.js +55 -0
  98. package/dist/backend/config/vitest-exclude.constants.js.map +1 -0
  99. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +538 -0
  100. package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  101. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +802 -0
  102. package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  103. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts +240 -0
  104. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -0
  105. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js +524 -0
  106. package/dist/cli/backend/src/services/agent/agent-heartbeat.service.js.map +1 -0
  107. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +629 -0
  108. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4548 -0
  110. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -0
  111. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts +118 -0
  112. package/dist/cli/backend/src/services/agent/agent-suspend.service.d.ts.map +1 -0
  113. package/dist/cli/backend/src/services/agent/agent-suspend.service.js +304 -0
  114. package/dist/cli/backend/src/services/agent/agent-suspend.service.js.map +1 -0
  115. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts +196 -0
  116. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +504 -0
  118. package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  119. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +97 -0
  120. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -0
  121. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +334 -0
  122. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -0
  123. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +47 -0
  124. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -0
  125. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +112 -0
  126. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -0
  127. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts +323 -0
  128. package/dist/cli/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  129. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js +1056 -0
  130. package/dist/cli/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  131. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +198 -0
  132. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +816 -0
  134. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +155 -0
  136. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +272 -0
  138. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  139. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts +91 -0
  140. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js +120 -0
  142. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-runtime-registry.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts +536 -0
  144. package/dist/cli/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/crewly-agent/types.js +282 -0
  146. package/dist/cli/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  147. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts +100 -0
  148. package/dist/cli/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js +149 -0
  150. package/dist/cli/backend/src/services/agent/disk-cleanup.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +130 -0
  152. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +758 -0
  154. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +216 -0
  156. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +508 -0
  158. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -0
  159. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts +113 -0
  160. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js +161 -0
  162. package/dist/cli/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +156 -0
  164. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +641 -0
  166. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -0
  167. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +295 -0
  168. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +1166 -0
  170. package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -0
  171. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts +71 -0
  172. package/dist/cli/backend/src/services/agent/runtime-service.factory.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/agent/runtime-service.factory.js +174 -0
  174. package/dist/cli/backend/src/services/agent/runtime-service.factory.js.map +1 -0
  175. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts +435 -0
  176. package/dist/cli/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/ai/prompt-builder.service.js +1331 -0
  178. package/dist/cli/backend/src/services/ai/prompt-builder.service.js.map +1 -0
  179. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  180. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  182. package/dist/cli/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  183. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +100 -0
  184. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +296 -0
  186. package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -0
  187. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts +59 -0
  188. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.d.ts.map +1 -0
  189. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js +87 -0
  190. package/dist/cli/backend/src/services/ai/prompt-modules/decision-rights.module.js.map +1 -0
  191. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts +67 -0
  192. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.d.ts.map +1 -0
  193. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js +84 -0
  194. package/dist/cli/backend/src/services/ai/prompt-modules/default-execution-loop.module.js.map +1 -0
  195. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  196. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  197. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  198. package/dist/cli/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  199. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts +41 -0
  200. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.d.ts.map +1 -0
  201. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js +95 -0
  202. package/dist/cli/backend/src/services/ai/prompt-modules/expert-profile.module.js.map +1 -0
  203. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts +28 -0
  204. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.d.ts.map +1 -0
  205. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js +47 -0
  206. package/dist/cli/backend/src/services/ai/prompt-modules/identity.module.js.map +1 -0
  207. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts +65 -0
  208. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.d.ts.map +1 -0
  209. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +79 -0
  210. package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -0
  211. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts +28 -0
  212. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.d.ts.map +1 -0
  213. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js +55 -0
  214. package/dist/cli/backend/src/services/ai/prompt-modules/learning-reference.module.js.map +1 -0
  215. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts +44 -0
  216. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.d.ts.map +1 -0
  217. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js +120 -0
  218. package/dist/cli/backend/src/services/ai/prompt-modules/lifecycle.module.js.map +1 -0
  219. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  220. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  221. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  222. package/dist/cli/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  223. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts +28 -0
  224. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.d.ts.map +1 -0
  225. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js +46 -0
  226. package/dist/cli/backend/src/services/ai/prompt-modules/memory-reference.module.js.map +1 -0
  227. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts +60 -0
  228. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.d.ts.map +1 -0
  229. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js +104 -0
  230. package/dist/cli/backend/src/services/ai/prompt-modules/mission-context.module.js.map +1 -0
  231. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts +29 -0
  232. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.d.ts.map +1 -0
  233. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js +50 -0
  234. package/dist/cli/backend/src/services/ai/prompt-modules/project-reference.module.js.map +1 -0
  235. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +103 -0
  236. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +383 -0
  238. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -0
  239. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts +34 -0
  240. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -0
  241. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +96 -0
  242. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -0
  243. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts +106 -0
  244. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.d.ts.map +1 -0
  245. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js +167 -0
  246. package/dist/cli/backend/src/services/ai/prompt-modules/request-contract.module.js.map +1 -0
  247. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  248. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  249. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  250. package/dist/cli/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  251. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +91 -0
  252. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  253. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js +411 -0
  254. package/dist/cli/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  255. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts +62 -0
  256. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -0
  257. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +199 -0
  258. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -0
  259. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  260. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  261. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  262. package/dist/cli/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  263. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts +102 -0
  264. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.d.ts.map +1 -0
  265. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js +229 -0
  266. package/dist/cli/backend/src/services/ai/prompt-modules/soul.module.js.map +1 -0
  267. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +61 -0
  268. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -0
  269. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js +197 -0
  270. package/dist/cli/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -0
  271. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts +54 -0
  272. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.d.ts.map +1 -0
  273. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js +149 -0
  274. package/dist/cli/backend/src/services/ai/prompt-modules/team-reference.module.js.map +1 -0
  275. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +32 -0
  276. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -0
  277. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +69 -0
  278. package/dist/cli/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -0
  279. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts +91 -0
  280. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.d.ts.map +1 -0
  281. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js +136 -0
  282. package/dist/cli/backend/src/services/ai/prompt-modules/working-memory.module.js.map +1 -0
  283. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts +81 -0
  284. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.d.ts.map +1 -0
  285. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js +135 -0
  286. package/dist/cli/backend/src/services/ai/self-improvement/growth-areas.service.js.map +1 -0
  287. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +737 -0
  288. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  289. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +1213 -0
  290. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  291. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  292. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  293. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  294. package/dist/cli/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  295. package/dist/cli/backend/src/services/chat-v2/config.d.ts +100 -0
  296. package/dist/cli/backend/src/services/chat-v2/config.d.ts.map +1 -0
  297. package/dist/cli/backend/src/services/chat-v2/config.js +174 -0
  298. package/dist/cli/backend/src/services/chat-v2/config.js.map +1 -0
  299. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts +118 -0
  300. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -0
  301. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js +171 -0
  302. package/dist/cli/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -0
  303. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts +188 -0
  304. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  305. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js +317 -0
  306. package/dist/cli/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  307. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts +119 -0
  308. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  309. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js +551 -0
  310. package/dist/cli/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  311. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +208 -0
  312. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  313. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +405 -0
  314. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  315. package/dist/cli/backend/src/services/chat-v2/types.d.ts +341 -0
  316. package/dist/cli/backend/src/services/chat-v2/types.d.ts.map +1 -0
  317. package/dist/cli/backend/src/services/chat-v2/types.js +61 -0
  318. package/dist/cli/backend/src/services/chat-v2/types.js.map +1 -0
  319. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts +37 -0
  320. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.d.ts.map +1 -0
  321. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js +63 -0
  322. package/dist/cli/backend/src/services/continuation/patterns/idle-patterns.js.map +1 -0
  323. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts +335 -0
  324. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.d.ts.map +1 -0
  325. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js +421 -0
  326. package/dist/cli/backend/src/services/intent-task/intent-classifier.rules.js.map +1 -0
  327. package/dist/cli/backend/src/services/mcp-client.d.ts +233 -0
  328. package/dist/cli/backend/src/services/mcp-client.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/mcp-client.js +302 -0
  330. package/dist/cli/backend/src/services/mcp-client.js.map +1 -0
  331. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts +168 -0
  332. package/dist/cli/backend/src/services/memory/mission-context.service.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/memory/mission-context.service.js +365 -0
  334. package/dist/cli/backend/src/services/memory/mission-context.service.js.map +1 -0
  335. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts +197 -0
  336. package/dist/cli/backend/src/services/memory/session-memory.service.d.ts.map +1 -0
  337. package/dist/cli/backend/src/services/memory/session-memory.service.js +369 -0
  338. package/dist/cli/backend/src/services/memory/session-memory.service.js.map +1 -0
  339. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts +77 -0
  340. package/dist/cli/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  341. package/dist/cli/backend/src/services/memory/user-profile.service.js +171 -0
  342. package/dist/cli/backend/src/services/memory/user-profile.service.js.map +1 -0
  343. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts +232 -0
  344. package/dist/cli/backend/src/services/memory/working-memory.service.d.ts.map +1 -0
  345. package/dist/cli/backend/src/services/memory/working-memory.service.js +417 -0
  346. package/dist/cli/backend/src/services/memory/working-memory.service.js.map +1 -0
  347. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +84 -0
  348. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -0
  349. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +136 -0
  350. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -0
  351. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts +358 -0
  352. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -0
  353. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js +755 -0
  354. package/dist/cli/backend/src/services/messaging/thread-status-queue.service.js.map +1 -0
  355. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +269 -0
  356. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -0
  357. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +391 -0
  358. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -0
  359. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts +132 -0
  360. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.d.ts.map +1 -0
  361. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js +284 -0
  362. package/dist/cli/backend/src/services/observability/agent-behavior-log.service.js.map +1 -0
  363. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts +70 -0
  364. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.d.ts.map +1 -0
  365. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js +121 -0
  366. package/dist/cli/backend/src/services/observability/agent-behavior-log.singleton.js.map +1 -0
  367. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts +130 -0
  368. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.d.ts.map +1 -0
  369. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js +48 -0
  370. package/dist/cli/backend/src/services/observability/agent-behavior-log.types.js.map +1 -0
  371. package/dist/cli/backend/src/services/observability/observability-db.d.ts +84 -0
  372. package/dist/cli/backend/src/services/observability/observability-db.d.ts.map +1 -0
  373. package/dist/cli/backend/src/services/observability/observability-db.js +165 -0
  374. package/dist/cli/backend/src/services/observability/observability-db.js.map +1 -0
  375. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts +124 -0
  376. package/dist/cli/backend/src/services/onboarding/content-approval.service.d.ts.map +1 -0
  377. package/dist/cli/backend/src/services/onboarding/content-approval.service.js +256 -0
  378. package/dist/cli/backend/src/services/onboarding/content-approval.service.js.map +1 -0
  379. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts +80 -0
  380. package/dist/cli/backend/src/services/onboarding/content-approval.types.d.ts.map +1 -0
  381. package/dist/cli/backend/src/services/onboarding/content-approval.types.js +16 -0
  382. package/dist/cli/backend/src/services/onboarding/content-approval.types.js.map +1 -0
  383. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  384. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  385. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  386. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  387. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts +231 -0
  388. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.d.ts.map +1 -0
  389. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js +353 -0
  390. package/dist/cli/backend/src/services/orchestrator/improvement-marker.service.js.map +1 -0
  391. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts +157 -0
  392. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.d.ts.map +1 -0
  393. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js +483 -0
  394. package/dist/cli/backend/src/services/orchestrator/improvement-startup.service.js.map +1 -0
  395. package/dist/cli/backend/src/services/orchestrator/index.d.ts +16 -0
  396. package/dist/cli/backend/src/services/orchestrator/index.d.ts.map +1 -0
  397. package/dist/cli/backend/src/services/orchestrator/index.js +16 -0
  398. package/dist/cli/backend/src/services/orchestrator/index.js.map +1 -0
  399. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts +117 -0
  400. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -0
  401. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js +300 -0
  402. package/dist/cli/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -0
  403. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts +114 -0
  404. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.d.ts.map +1 -0
  405. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js +195 -0
  406. package/dist/cli/backend/src/services/orchestrator/orchestrator-setup.service.js.map +1 -0
  407. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts +94 -0
  408. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -0
  409. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js +279 -0
  410. package/dist/cli/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -0
  411. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts +192 -0
  412. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.d.ts.map +1 -0
  413. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js +395 -0
  414. package/dist/cli/backend/src/services/orchestrator/safe-restart.service.js.map +1 -0
  415. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts +201 -0
  416. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.d.ts.map +1 -0
  417. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js +396 -0
  418. package/dist/cli/backend/src/services/orchestrator/self-improvement.service.js.map +1 -0
  419. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts +17 -0
  420. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.d.ts.map +1 -0
  421. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js +30 -0
  422. package/dist/cli/backend/src/services/orchestrator/slack-bridge-lazy.js.map +1 -0
  423. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts +249 -0
  424. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.d.ts.map +1 -0
  425. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js +569 -0
  426. package/dist/cli/backend/src/services/orchestrator/state-persistence.service.js.map +1 -0
  427. package/dist/cli/backend/src/services/session/index.d.ts +47 -0
  428. package/dist/cli/backend/src/services/session/index.d.ts.map +1 -0
  429. package/dist/cli/backend/src/services/session/index.js +50 -0
  430. package/dist/cli/backend/src/services/session/index.js.map +1 -0
  431. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts +163 -0
  432. package/dist/cli/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  433. package/dist/cli/backend/src/services/session/log-rotation.service.js +362 -0
  434. package/dist/cli/backend/src/services/session/log-rotation.service.js.map +1 -0
  435. package/dist/cli/backend/src/services/session/pty/index.d.ts +11 -0
  436. package/dist/cli/backend/src/services/session/pty/index.d.ts.map +1 -0
  437. package/dist/cli/backend/src/services/session/pty/index.js +11 -0
  438. package/dist/cli/backend/src/services/session/pty/index.js.map +1 -0
  439. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +445 -0
  440. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -0
  441. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +804 -0
  442. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -0
  443. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +252 -0
  444. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -0
  445. package/dist/cli/backend/src/services/session/pty/pty-session.js +611 -0
  446. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -0
  447. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts +275 -0
  448. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.d.ts.map +1 -0
  449. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js +403 -0
  450. package/dist/cli/backend/src/services/session/pty/pty-terminal-buffer.js.map +1 -0
  451. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  452. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  453. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  454. package/dist/cli/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  455. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts +127 -0
  456. package/dist/cli/backend/src/services/session/session-backend.factory.d.ts.map +1 -0
  457. package/dist/cli/backend/src/services/session/session-backend.factory.js +226 -0
  458. package/dist/cli/backend/src/services/session/session-backend.factory.js.map +1 -0
  459. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts +390 -0
  460. package/dist/cli/backend/src/services/session/session-backend.interface.d.ts.map +1 -0
  461. package/dist/cli/backend/src/services/session/session-backend.interface.js +19 -0
  462. package/dist/cli/backend/src/services/session/session-backend.interface.js.map +1 -0
  463. package/dist/cli/backend/src/services/session/session-command-helper.d.ts +350 -0
  464. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -0
  465. package/dist/cli/backend/src/services/session/session-command-helper.js +810 -0
  466. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -0
  467. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +307 -0
  468. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -0
  469. package/dist/cli/backend/src/services/session/session-handoff.service.js +742 -0
  470. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -0
  471. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +231 -0
  472. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -0
  473. package/dist/cli/backend/src/services/session/session-state-persistence.js +407 -0
  474. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -0
  475. package/dist/cli/backend/src/services/settings/role.service.d.ts +277 -0
  476. package/dist/cli/backend/src/services/settings/role.service.d.ts.map +1 -0
  477. package/dist/cli/backend/src/services/settings/role.service.js +728 -0
  478. package/dist/cli/backend/src/services/settings/role.service.js.map +1 -0
  479. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts +152 -0
  480. package/dist/cli/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -0
  481. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js +354 -0
  482. package/dist/cli/backend/src/services/slack/cross-machine-message.service.js.map +1 -0
  483. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts +114 -0
  484. package/dist/cli/backend/src/services/slack/slack-image.service.d.ts.map +1 -0
  485. package/dist/cli/backend/src/services/slack/slack-image.service.js +331 -0
  486. package/dist/cli/backend/src/services/slack/slack-image.service.js.map +1 -0
  487. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +499 -0
  488. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -0
  489. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +1928 -0
  490. package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -0
  491. package/dist/cli/backend/src/services/slack/slack.service.d.ts +315 -0
  492. package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -0
  493. package/dist/cli/backend/src/services/slack/slack.service.js +1094 -0
  494. package/dist/cli/backend/src/services/slack/slack.service.js.map +1 -0
  495. package/dist/cli/backend/src/services/sop/sop.service.d.ts +364 -0
  496. package/dist/cli/backend/src/services/sop/sop.service.d.ts.map +1 -0
  497. package/dist/cli/backend/src/services/sop/sop.service.js +734 -0
  498. package/dist/cli/backend/src/services/sop/sop.service.js.map +1 -0
  499. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +152 -7
  500. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  501. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +268 -36
  502. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  503. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts +178 -0
  504. package/dist/cli/backend/src/services/v3/escalation-router.service.d.ts.map +1 -0
  505. package/dist/cli/backend/src/services/v3/escalation-router.service.js +692 -0
  506. package/dist/cli/backend/src/services/v3/escalation-router.service.js.map +1 -0
  507. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts +200 -0
  508. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -0
  509. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +482 -0
  510. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -0
  511. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +117 -0
  512. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -0
  513. package/dist/cli/backend/src/services/v3/mission-executor.service.js +321 -0
  514. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -0
  515. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts +610 -0
  516. package/dist/cli/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  517. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js +1529 -0
  518. package/dist/cli/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  519. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts +78 -0
  520. package/dist/cli/backend/src/services/v3/request-tracker.service.d.ts.map +1 -0
  521. package/dist/cli/backend/src/services/v3/request-tracker.service.js +108 -0
  522. package/dist/cli/backend/src/services/v3/request-tracker.service.js.map +1 -0
  523. package/dist/cli/backend/src/services/v3/request.service.d.ts +295 -0
  524. package/dist/cli/backend/src/services/v3/request.service.d.ts.map +1 -0
  525. package/dist/cli/backend/src/services/v3/request.service.js +534 -0
  526. package/dist/cli/backend/src/services/v3/request.service.js.map +1 -0
  527. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +340 -0
  528. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -0
  529. package/dist/cli/backend/src/services/v3/v3-data.service.js +1113 -0
  530. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -0
  531. package/dist/cli/backend/src/types/cross-machine.types.d.ts +103 -0
  532. package/dist/cli/backend/src/types/cross-machine.types.d.ts.map +1 -0
  533. package/dist/cli/backend/src/types/cross-machine.types.js +47 -0
  534. package/dist/cli/backend/src/types/cross-machine.types.js.map +1 -0
  535. package/dist/cli/backend/src/types/intent-task.types.d.ts +402 -0
  536. package/dist/cli/backend/src/types/intent-task.types.d.ts.map +1 -0
  537. package/dist/cli/backend/src/types/intent-task.types.js +403 -0
  538. package/dist/cli/backend/src/types/intent-task.types.js.map +1 -0
  539. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts +531 -0
  540. package/dist/cli/backend/src/types/orchestrator-state.types.d.ts.map +1 -0
  541. package/dist/cli/backend/src/types/orchestrator-state.types.js +110 -0
  542. package/dist/cli/backend/src/types/orchestrator-state.types.js.map +1 -0
  543. package/dist/cli/backend/src/types/v2/index.d.ts +30 -0
  544. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -0
  545. package/dist/cli/backend/src/types/v2/index.js +22 -0
  546. package/dist/cli/backend/src/types/v2/index.js.map +1 -0
  547. package/dist/cli/backend/src/types/v2/key-result.types.d.ts +279 -0
  548. package/dist/cli/backend/src/types/v2/key-result.types.d.ts.map +1 -0
  549. package/dist/cli/backend/src/types/v2/key-result.types.js +264 -0
  550. package/dist/cli/backend/src/types/v2/key-result.types.js.map +1 -0
  551. package/dist/cli/backend/src/types/v2/mission.types.d.ts +661 -0
  552. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -0
  553. package/dist/cli/backend/src/types/v2/mission.types.js +713 -0
  554. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -0
  555. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +204 -0
  556. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -0
  557. package/dist/cli/backend/src/types/v2/reconcile.types.js +121 -0
  558. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -0
  559. package/dist/cli/backend/src/types/v2/request.types.d.ts +192 -0
  560. package/dist/cli/backend/src/types/v2/request.types.d.ts.map +1 -0
  561. package/dist/cli/backend/src/types/v2/request.types.js +179 -0
  562. package/dist/cli/backend/src/types/v2/request.types.js.map +1 -0
  563. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +181 -1
  564. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  565. package/dist/cli/backend/src/types/v2/work-item.types.js +104 -17
  566. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  567. package/dist/cli/backend/src/types/v2/workspace.types.d.ts +157 -0
  568. package/dist/cli/backend/src/types/v2/workspace.types.d.ts.map +1 -0
  569. package/dist/cli/backend/src/types/v2/workspace.types.js +173 -0
  570. package/dist/cli/backend/src/types/v2/workspace.types.js.map +1 -0
  571. package/dist/cli/backend/src/utils/async.utils.d.ts +68 -0
  572. package/dist/cli/backend/src/utils/async.utils.d.ts.map +1 -0
  573. package/dist/cli/backend/src/utils/async.utils.js +80 -0
  574. package/dist/cli/backend/src/utils/async.utils.js.map +1 -0
  575. package/dist/cli/backend/src/utils/native-binding.utils.d.ts +128 -0
  576. package/dist/cli/backend/src/utils/native-binding.utils.d.ts.map +1 -0
  577. package/dist/cli/backend/src/utils/native-binding.utils.js +206 -0
  578. package/dist/cli/backend/src/utils/native-binding.utils.js.map +1 -0
  579. package/dist/cli/backend/src/websocket/chat.gateway.d.ts +142 -0
  580. package/dist/cli/backend/src/websocket/chat.gateway.d.ts.map +1 -0
  581. package/dist/cli/backend/src/websocket/chat.gateway.js +327 -0
  582. package/dist/cli/backend/src/websocket/chat.gateway.js.map +1 -0
  583. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts +341 -0
  584. package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -0
  585. package/dist/cli/backend/src/websocket/terminal.gateway.js +933 -0
  586. package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -0
  587. package/dist/cli/config/vitest-exclude.constants.d.ts +53 -0
  588. package/dist/cli/config/vitest-exclude.constants.d.ts.map +1 -0
  589. package/dist/cli/config/vitest-exclude.constants.js +55 -0
  590. package/dist/cli/config/vitest-exclude.constants.js.map +1 -0
  591. package/frontend/dist/assets/index-890d3f9d.js +4961 -0
  592. package/frontend/dist/index.html +1 -1
  593. package/package.json +2 -2
  594. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +174 -30
  595. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +121 -6
  596. package/packages/crewly-agent/src/runtime/types.ts +56 -5
  597. package/frontend/dist/assets/index-aa737fd3.js +0 -5254
@@ -0,0 +1,804 @@
1
+ /**
2
+ * PTY Session Backend Module
3
+ *
4
+ * Implements the ISessionBackend interface using node-pty and @xterm/headless.
5
+ * Provides a full terminal emulation backend with memory-bounded output buffers.
6
+ *
7
+ * @module pty-session-backend
8
+ */
9
+ import { DEFAULT_TERMINAL_COLS, DEFAULT_TERMINAL_ROWS, } from '../session-backend.interface.js';
10
+ import { PtySession } from './pty-session.js';
11
+ import { PtyTerminalBuffer } from './pty-terminal-buffer.js';
12
+ import { LoggerService } from '../../core/logger.service.js';
13
+ import { PTY_CONSTANTS, CREWLY_CONSTANTS } from '../../../constants.js';
14
+ import { PtyActivityTrackerService } from '../../agent/pty-activity-tracker.service.js';
15
+ import { RuntimePidRegistry } from '../runtime-pid-registry.service.js';
16
+ import { execSync } from 'child_process';
17
+ import * as fs from 'fs';
18
+ import * as path from 'path';
19
+ import * as os from 'os';
20
+ /**
21
+ * PTY Session Backend implementation.
22
+ *
23
+ * Manages terminal sessions using node-pty for process spawning and
24
+ * @xterm/headless for terminal emulation and output buffering.
25
+ *
26
+ * Features:
27
+ * - In-memory session management via Map
28
+ * - Terminal emulation with xterm.js headless
29
+ * - Memory-bounded output buffers (max 10MB)
30
+ * - Proper cleanup on session termination
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const backend = new PtySessionBackend();
35
+ *
36
+ * // Create a session
37
+ * const session = await backend.createSession('dev', {
38
+ * cwd: '/home/user/project',
39
+ * command: '/bin/bash',
40
+ * });
41
+ *
42
+ * // Capture output
43
+ * const output = backend.captureOutput('dev', 50);
44
+ *
45
+ * // Cleanup
46
+ * await backend.destroy();
47
+ * ```
48
+ */
49
+ export class PtySessionBackend {
50
+ /**
51
+ * Map of session names to PtySession instances
52
+ */
53
+ sessions = new Map();
54
+ /**
55
+ * Map of session names to PtyTerminalBuffer instances
56
+ */
57
+ terminalBuffers = new Map();
58
+ /**
59
+ * Map of session names to cumulative output bytes since last compact
60
+ */
61
+ cumulativeOutputBytes = new Map();
62
+ /**
63
+ * Map of session names to writable file streams for persistent session logs
64
+ */
65
+ sessionLogStreams = new Map();
66
+ /**
67
+ * Directory for persistent session log files
68
+ */
69
+ sessionLogsDir;
70
+ /**
71
+ * Logger for this backend
72
+ */
73
+ logger;
74
+ /**
75
+ * Interval handle for the orphan-PTY reaper sweep. Started in the constructor,
76
+ * cleared on destroy()/forceDestroyAll(). The sweep tears down any registry
77
+ * PTY whose owning session is no longer active (defensive FD-leak backstop).
78
+ */
79
+ orphanReaperTimer = null;
80
+ /**
81
+ * Regex patterns for stripping ANSI escape codes from terminal output
82
+ */
83
+ static ANSI_STRIP_PATTERNS = [
84
+ /\x1B\[[0-9;]*[a-zA-Z]/g, // CSI sequences (colors, cursor, etc.)
85
+ /\x1B\][^\x07]*\x07/g, // OSC sequences (title, etc.)
86
+ /\x1B\[\?[0-9;]*[hl]/g, // Private mode set/reset
87
+ /\x1B[()][AB012]/g, // Character set selection
88
+ /\x1B\[?[0-9;]*[JKH]/g, // Erase and cursor positioning
89
+ ];
90
+ /**
91
+ * Create a new PTY session backend.
92
+ */
93
+ constructor() {
94
+ this.logger = LoggerService.getInstance().createComponentLogger('PtySessionBackend');
95
+ this.sessionLogsDir = path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME, CREWLY_CONSTANTS.PATHS.LOGS_DIR, CREWLY_CONSTANTS.PATHS.SESSION_LOGS_DIR);
96
+ // Ensure session logs directory exists
97
+ try {
98
+ fs.mkdirSync(this.sessionLogsDir, { recursive: true });
99
+ }
100
+ catch {
101
+ // Non-fatal: logging will be skipped if dir can't be created
102
+ }
103
+ this.startOrphanReaper();
104
+ this.logger.info('PTY session backend initialized');
105
+ }
106
+ /**
107
+ * Start the periodic orphan-PTY reaper sweep.
108
+ *
109
+ * The interval cadence comes from PTY_CONSTANTS.ORPHAN_REAPER_INTERVAL_MS
110
+ * (never hardcoded). The timer is `unref()`'d so it never keeps the Node
111
+ * event loop alive on its own. Safe to call repeatedly (no-op if running).
112
+ */
113
+ startOrphanReaper() {
114
+ if (this.orphanReaperTimer) {
115
+ return;
116
+ }
117
+ this.orphanReaperTimer = setInterval(() => {
118
+ void this.reapOrphanPtys();
119
+ }, PTY_CONSTANTS.ORPHAN_REAPER_INTERVAL_MS);
120
+ // Don't let the reaper interval hold the process open during shutdown.
121
+ this.orphanReaperTimer.unref?.();
122
+ }
123
+ /**
124
+ * Stop the periodic orphan-PTY reaper sweep (idempotent).
125
+ */
126
+ stopOrphanReaper() {
127
+ if (this.orphanReaperTimer) {
128
+ clearInterval(this.orphanReaperTimer);
129
+ this.orphanReaperTimer = null;
130
+ }
131
+ }
132
+ /**
133
+ * Defensive backstop sweep: tear down any registry PTY whose owning session
134
+ * is no longer active so its `/dev/ptmx` master + `/dev/ttysNNN` slave FDs are
135
+ * released even if some end path forgot to route through teardownSession.
136
+ *
137
+ * A session is considered orphaned when its PtySession reports `isKilled()`
138
+ * (the shell exited / crashed / was killed) yet it is still present in the
139
+ * registry. Such an entry only lingers if normal teardown was skipped — the
140
+ * exact failure mode that accumulated 319 orphaned master FDs over 6 days.
141
+ * Active, living sessions are left untouched.
142
+ *
143
+ * @returns Promise resolving to the number of orphaned PTYs reaped.
144
+ *
145
+ * @example
146
+ * ```typescript
147
+ * const reaped = await backend.reapOrphanPtys();
148
+ * ```
149
+ */
150
+ async reapOrphanPtys() {
151
+ // Snapshot names first — teardownSession mutates the registry mid-iteration.
152
+ const names = Array.from(this.sessions.keys());
153
+ const orphanNames = names.filter((name) => {
154
+ const session = this.sessions.get(name);
155
+ return session !== undefined && session.isKilled();
156
+ });
157
+ if (orphanNames.length === 0) {
158
+ return 0;
159
+ }
160
+ this.logger.warn('Orphan-PTY reaper found dead sessions still in registry', {
161
+ orphanCount: orphanNames.length,
162
+ orphanNames,
163
+ });
164
+ for (const name of orphanNames) {
165
+ // force:false — the shell is already dead, we only release the FDs.
166
+ await this.teardownSession(name, { force: false });
167
+ }
168
+ this.logger.warn('Orphan-PTY reaper finished', {
169
+ reaped: orphanNames.length,
170
+ remainingSessions: this.sessions.size,
171
+ });
172
+ return orphanNames.length;
173
+ }
174
+ /**
175
+ * Create a new terminal session.
176
+ *
177
+ * @param name - Unique name for the session
178
+ * @param options - Session configuration options
179
+ * @returns Promise resolving to the created session
180
+ * @throws Error if session name already exists
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * const session = await backend.createSession('my-session', {
185
+ * cwd: '/home/user',
186
+ * command: '/bin/bash',
187
+ * args: ['--login'],
188
+ * env: { NODE_ENV: 'development' },
189
+ * cols: 120,
190
+ * rows: 40,
191
+ * });
192
+ * ```
193
+ */
194
+ async createSession(name, options) {
195
+ if (this.sessions.has(name)) {
196
+ this.logger.warn('Session already exists, killing before recreation', { name });
197
+ await this.killSession(name);
198
+ }
199
+ this.logger.info('Creating PTY session', {
200
+ name,
201
+ command: options.command,
202
+ cwd: options.cwd,
203
+ });
204
+ // Create the PTY session
205
+ const session = new PtySession(name, options.cwd, options);
206
+ // Create terminal buffer for output buffering and history
207
+ const cols = options.cols ?? DEFAULT_TERMINAL_COLS;
208
+ const rows = options.rows ?? DEFAULT_TERMINAL_ROWS;
209
+ const terminalBuffer = new PtyTerminalBuffer(cols, rows);
210
+ // Open persistent session log file stream (append mode with restart separator)
211
+ this.openSessionLogStream(name);
212
+ // Pipe session output to terminal buffer and record activity for idle detection.
213
+ // Recording here (at session creation) ensures activity is tracked even when
214
+ // no WebSocket client is viewing the terminal UI.
215
+ session.onData((data) => {
216
+ terminalBuffer.write(data);
217
+ PtyActivityTrackerService.getInstance().recordFilteredActivity(name, data);
218
+ // Track cumulative output for proactive compact triggering
219
+ const current = this.cumulativeOutputBytes.get(name) ?? 0;
220
+ this.cumulativeOutputBytes.set(name, current + data.length);
221
+ // Write ANSI-stripped output to persistent session log file
222
+ this.writeToSessionLog(name, data);
223
+ });
224
+ // Clean up on session exit
225
+ session.onExit((code) => {
226
+ this.logger.info('Session exited', { name, exitCode: code });
227
+ // Don't delete here - let the session remain accessible until explicitly killed
228
+ });
229
+ // Store session and terminal buffer
230
+ this.sessions.set(name, session);
231
+ this.terminalBuffers.set(name, terminalBuffer);
232
+ // Record the spawned PID so a non-graceful backend death can be cleaned
233
+ // up at the next boot (issue #715). Removed again on clean teardown.
234
+ RuntimePidRegistry.getInstance().record(session.pid, name, options.command, options.args ?? []);
235
+ this.logger.info('PTY session created', {
236
+ name,
237
+ pid: session.pid,
238
+ cols,
239
+ rows,
240
+ });
241
+ return session;
242
+ }
243
+ /**
244
+ * Get an existing session by name.
245
+ *
246
+ * @param name - Name of the session to retrieve
247
+ * @returns The session if found, undefined otherwise
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * const session = backend.getSession('my-session');
252
+ * if (session) {
253
+ * session.write('echo hello\n');
254
+ * }
255
+ * ```
256
+ */
257
+ getSession(name) {
258
+ return this.sessions.get(name);
259
+ }
260
+ /**
261
+ * Kill a session by name.
262
+ *
263
+ * @param name - Name of the session to kill
264
+ * @returns Promise that resolves when the session is killed
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * await backend.killSession('my-session');
269
+ * ```
270
+ */
271
+ async killSession(name) {
272
+ await this.teardownSession(name, { force: true });
273
+ }
274
+ /**
275
+ * Centralized PTY teardown — the SINGLE path every session-end route funnels
276
+ * through (explicit stop/terminate, idle-exit, dropout, crash, natural exit,
277
+ * and the orphan reaper). Given a session name it:
278
+ * 1. looks the PtySession up in the registry (the always-present reference
279
+ * that prevents the "orphan with no reference" leak),
280
+ * 2. force-kills the child shell AND closes the node-pty master/slave FDs
281
+ * (via PtySession.forceKill → closePty, or closePty directly for an
282
+ * already-dead session),
283
+ * 3. deletes it from every per-session Map (registry, buffers, byte
284
+ * counters, log streams),
285
+ * 4. drops it from the cross-boot orphan PID registry.
286
+ *
287
+ * Idempotent and safe to call twice: a missing session simply cleans up any
288
+ * residual per-session resources and returns. This is the function whose
289
+ * absence caused 319 orphaned /dev/ptmx FDs to accumulate.
290
+ *
291
+ * @param name - Name of the session to tear down.
292
+ * @param options - `force: true` escalates SIGTERM→SIGKILL (default true);
293
+ * `force: false` performs an FD-only close for a session already known dead.
294
+ * @returns Promise that resolves when teardown + cleanup completes.
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * await backend.teardownSession('agent-leo'); // stop/terminate/idle-exit/crash
299
+ * await backend.teardownSession('agent-leo'); // calling again is a safe no-op
300
+ * ```
301
+ */
302
+ async teardownSession(name, options = {}) {
303
+ const force = options.force ?? true;
304
+ const session = this.sessions.get(name);
305
+ const terminalBuffer = this.terminalBuffers.get(name);
306
+ if (session) {
307
+ if (force && !session.isKilled()) {
308
+ this.logger.info('Tearing down session with forceKill (SIGTERM → SIGKILL)', { name });
309
+ await session.forceKill();
310
+ }
311
+ else {
312
+ // Session already dead (exit/crash) or non-force reaper sweep: we
313
+ // only need to release the lingering PTY master/slave FDs.
314
+ this.logger.info('Tearing down session — releasing PTY file descriptors', { name });
315
+ session.closePty();
316
+ }
317
+ this.sessions.delete(name);
318
+ }
319
+ if (terminalBuffer) {
320
+ terminalBuffer.dispose();
321
+ this.terminalBuffers.delete(name);
322
+ }
323
+ // We reaped this process ourselves — drop it from the orphan registry.
324
+ RuntimePidRegistry.getInstance().remove(name);
325
+ this.cumulativeOutputBytes.delete(name);
326
+ this.closeSessionLogStream(name);
327
+ this.logger.debug('Session resources cleaned up', { name });
328
+ }
329
+ /**
330
+ * List all active session names.
331
+ *
332
+ * @returns Array of session names
333
+ *
334
+ * @example
335
+ * ```typescript
336
+ * const sessions = backend.listSessions();
337
+ * console.log('Active sessions:', sessions);
338
+ * ```
339
+ */
340
+ listSessions() {
341
+ return Array.from(this.sessions.keys());
342
+ }
343
+ /**
344
+ * Check if a session exists by name.
345
+ *
346
+ * @param name - Name of the session to check
347
+ * @returns true if the session exists, false otherwise
348
+ *
349
+ * @example
350
+ * ```typescript
351
+ * if (backend.sessionExists('my-session')) {
352
+ * console.log('Session is running');
353
+ * }
354
+ * ```
355
+ */
356
+ sessionExists(name) {
357
+ return this.sessions.has(name);
358
+ }
359
+ /**
360
+ * Get the cumulative output bytes for a session since last reset.
361
+ * Used by ContextWindowMonitorService for proactive compaction.
362
+ *
363
+ * @param name - Name of the session
364
+ * @returns Cumulative output bytes, or 0 if session not tracked
365
+ */
366
+ getCumulativeOutputBytes(name) {
367
+ return this.cumulativeOutputBytes.get(name) ?? 0;
368
+ }
369
+ /**
370
+ * Reset the cumulative output byte counter for a session.
371
+ * Called after a proactive compact is triggered.
372
+ *
373
+ * @param name - Name of the session
374
+ */
375
+ resetCumulativeOutput(name) {
376
+ this.cumulativeOutputBytes.set(name, 0);
377
+ }
378
+ /**
379
+ * Capture recent output from a session.
380
+ *
381
+ * @param name - Name of the session
382
+ * @param lines - Number of lines to capture (default: 100)
383
+ * @returns Captured output as a string
384
+ *
385
+ * @example
386
+ * ```typescript
387
+ * const output = backend.captureOutput('my-session', 50);
388
+ * console.log('Recent output:', output);
389
+ * ```
390
+ */
391
+ captureOutput(name, lines = 100) {
392
+ const terminalBuffer = this.terminalBuffers.get(name);
393
+ if (!terminalBuffer) {
394
+ return '';
395
+ }
396
+ return terminalBuffer.getContent(lines);
397
+ }
398
+ /**
399
+ * Get the full terminal buffer content for a session.
400
+ *
401
+ * @param name - Name of the session
402
+ * @returns Full buffer content as a string
403
+ *
404
+ * @example
405
+ * ```typescript
406
+ * const buffer = backend.getTerminalBuffer('my-session');
407
+ * console.log('Full buffer:', buffer);
408
+ * ```
409
+ */
410
+ getTerminalBuffer(name) {
411
+ const terminalBuffer = this.terminalBuffers.get(name);
412
+ if (!terminalBuffer) {
413
+ return '';
414
+ }
415
+ return terminalBuffer.getAllContent();
416
+ }
417
+ /**
418
+ * Get raw output history with ANSI escape codes preserved.
419
+ *
420
+ * @param name - Name of the session
421
+ * @returns Raw output history as a string with ANSI codes
422
+ *
423
+ * @example
424
+ * ```typescript
425
+ * const rawHistory = backend.getRawHistory('my-session');
426
+ * terminal.write(rawHistory);
427
+ * ```
428
+ */
429
+ getRawHistory(name) {
430
+ const terminalBuffer = this.terminalBuffers.get(name);
431
+ if (!terminalBuffer) {
432
+ return '';
433
+ }
434
+ return terminalBuffer.getHistoryAsString();
435
+ }
436
+ /**
437
+ * Get the serialized visual state of the terminal as plain text.
438
+ *
439
+ * Unlike getRawHistory() which returns raw bytes including cursor movement
440
+ * sequences that cause corruption when replayed at different terminal
441
+ * dimensions, this returns the rendered visual state — the final text after
442
+ * all cursor movements and erases have been processed by the headless terminal.
443
+ *
444
+ * Flushes pending terminal writes before reading to ensure completeness.
445
+ *
446
+ * @param name - Name of the session
447
+ * @returns Promise resolving to serialized terminal state safe for any dimensions
448
+ */
449
+ async getSerializedState(name) {
450
+ const terminalBuffer = this.terminalBuffers.get(name);
451
+ if (!terminalBuffer) {
452
+ return '';
453
+ }
454
+ return terminalBuffer.serializeAsync();
455
+ }
456
+ /**
457
+ * Get the PIDs of all active sessions.
458
+ *
459
+ * @returns Array of process IDs for all active sessions
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * const pids = backend.getAllSessionPids();
464
+ * console.log('Active PIDs:', pids);
465
+ * ```
466
+ */
467
+ getAllSessionPids() {
468
+ const pids = [];
469
+ for (const session of this.sessions.values()) {
470
+ if (!session.isKilled()) {
471
+ try {
472
+ pids.push(session.pid);
473
+ }
474
+ catch {
475
+ // PID may not be accessible if process already exited
476
+ }
477
+ }
478
+ }
479
+ return pids;
480
+ }
481
+ /**
482
+ * Destroy the backend and clean up all resources.
483
+ *
484
+ * @returns Promise that resolves when cleanup is complete
485
+ *
486
+ * @example
487
+ * ```typescript
488
+ * await backend.destroy();
489
+ * ```
490
+ */
491
+ async destroy() {
492
+ this.logger.info('Destroying PTY session backend', {
493
+ sessionCount: this.sessions.size,
494
+ });
495
+ // Stop the reaper first so it can't race with the teardown loop below.
496
+ this.stopOrphanReaper();
497
+ // Kill all sessions
498
+ const sessionNames = Array.from(this.sessions.keys());
499
+ for (const name of sessionNames) {
500
+ await this.killSession(name);
501
+ }
502
+ this.logger.info('PTY session backend destroyed');
503
+ }
504
+ /**
505
+ * Forcefully destroy all sessions with SIGTERM → SIGKILL escalation.
506
+ *
507
+ * This method is designed for shutdown scenarios where child processes
508
+ * (Claude Code, Gemini CLI) may catch or ignore SIGHUP/SIGTERM.
509
+ * It collects all PIDs upfront, sends SIGTERM, waits, then SIGKILLs
510
+ * each process and its process group.
511
+ *
512
+ * @returns Promise that resolves after the force-kill sequence completes
513
+ *
514
+ * @example
515
+ * ```typescript
516
+ * await backend.forceDestroyAll();
517
+ * ```
518
+ */
519
+ async forceDestroyAll() {
520
+ const sessionCount = this.sessions.size;
521
+ if (sessionCount === 0) {
522
+ this.logger.debug('No sessions to force-destroy');
523
+ return;
524
+ }
525
+ this.logger.info('Force-destroying all PTY sessions', { sessionCount });
526
+ // Stop the reaper so it can't race with the clear() below.
527
+ this.stopOrphanReaper();
528
+ // Step 1: Collect all PIDs before sending any signals
529
+ const pids = this.getAllSessionPids();
530
+ this.logger.info('Collected PIDs for force-kill', { pids });
531
+ // Step 2: Send SIGTERM to each session via node-pty
532
+ for (const session of this.sessions.values()) {
533
+ try {
534
+ if (!session.isKilled()) {
535
+ session.kill('SIGTERM');
536
+ }
537
+ }
538
+ catch (err) {
539
+ this.logger.debug('Error sending SIGTERM to session', {
540
+ name: session.name,
541
+ error: err instanceof Error ? err.message : String(err),
542
+ });
543
+ }
544
+ }
545
+ // Step 3: Wait for processes to exit gracefully
546
+ await new Promise((resolve) => setTimeout(resolve, PTY_CONSTANTS.FORCE_DESTROY_ESCALATION_DELAY));
547
+ // Step 4: SIGKILL each PID and its process group
548
+ for (const pid of pids) {
549
+ try {
550
+ process.kill(pid, 'SIGKILL');
551
+ this.logger.debug('Sent SIGKILL to process', { pid });
552
+ }
553
+ catch {
554
+ // ESRCH = process already gone
555
+ }
556
+ try {
557
+ process.kill(-pid, 'SIGKILL');
558
+ this.logger.debug('Sent SIGKILL to process group', { pgid: -pid });
559
+ }
560
+ catch {
561
+ // ESRCH = process group already gone
562
+ }
563
+ }
564
+ // Step 5: Release every session's PTY master/slave FDs before dropping the
565
+ // references. SIGKILL above bypassed node-pty's own exit handling, so the
566
+ // master fd sockets would otherwise leak; closePty() is idempotent so the
567
+ // sessions whose SIGTERM in Step 2 already closed them are unaffected.
568
+ for (const session of this.sessions.values()) {
569
+ session.closePty();
570
+ }
571
+ // Clean up internal maps
572
+ for (const terminalBuffer of this.terminalBuffers.values()) {
573
+ terminalBuffer.dispose();
574
+ }
575
+ const logStreamNames = Array.from(this.sessionLogStreams.keys());
576
+ for (const name of logStreamNames) {
577
+ this.closeSessionLogStream(name);
578
+ }
579
+ this.sessions.clear();
580
+ this.terminalBuffers.clear();
581
+ this.cumulativeOutputBytes.clear();
582
+ // We just reaped every tracked process + group — clear the orphan
583
+ // registry so the next boot doesn't try to re-reap these PIDs.
584
+ RuntimePidRegistry.getInstance().clear();
585
+ this.logger.info('Force-destroyed all PTY sessions');
586
+ }
587
+ /**
588
+ * Check if a child process is alive inside a session's PTY shell.
589
+ *
590
+ * Delegates to PtySession.isChildProcessAlive() to detect whether
591
+ * the runtime (e.g. Claude Code) is still running inside the shell.
592
+ *
593
+ * @param name - Name of the session to check
594
+ * @returns true if the session exists and has a living child process
595
+ */
596
+ isChildProcessAlive(name) {
597
+ const session = this.sessions.get(name);
598
+ if (!session) {
599
+ return false;
600
+ }
601
+ return session.isChildProcessAlive();
602
+ }
603
+ /**
604
+ * Get the number of active sessions.
605
+ *
606
+ * @returns Number of active sessions
607
+ */
608
+ getSessionCount() {
609
+ return this.sessions.size;
610
+ }
611
+ /**
612
+ * Read the open file descriptor count for THIS backend process.
613
+ *
614
+ * Uses `lsof -p <pid> | wc -l` on POSIX. Bounded by a short timeout and
615
+ * exception-safe — returns null rather than throwing when lsof is missing or
616
+ * the platform is unsupported, so callers can always include it in a
617
+ * diagnostics payload without guarding.
618
+ *
619
+ * @returns The open-fd count, or null when it cannot be measured.
620
+ */
621
+ readOpenFileCount() {
622
+ if (process.platform !== 'linux' && process.platform !== 'darwin') {
623
+ return null;
624
+ }
625
+ try {
626
+ const out = execSync(`lsof -p ${process.pid} 2>/dev/null | wc -l`, {
627
+ encoding: 'utf8',
628
+ timeout: 1500,
629
+ });
630
+ const n = parseInt(out.trim(), 10);
631
+ return Number.isFinite(n) ? n : null;
632
+ }
633
+ catch {
634
+ return null;
635
+ }
636
+ }
637
+ /**
638
+ * Produce a PTY/FD health snapshot for observability (registry occupancy +
639
+ * process open-fd count). Intended for the diagnostics/health surface so PTY
640
+ * file-descriptor accumulation is VISIBLE next time instead of only manifesting
641
+ * as a `posix_spawnp failed` spawn error near the open-file ceiling.
642
+ *
643
+ * @returns A {@link PtyDiagnostics} snapshot.
644
+ *
645
+ * @example
646
+ * ```typescript
647
+ * const d = backend.getPtyDiagnostics();
648
+ * logger.info('PTY health', d);
649
+ * // { registrySize: 1, activeSessions: 1, deadSessions: 0, openFileCount: 142 }
650
+ * ```
651
+ */
652
+ getPtyDiagnostics() {
653
+ let activeSessions = 0;
654
+ let deadSessions = 0;
655
+ for (const session of this.sessions.values()) {
656
+ if (session.isKilled()) {
657
+ deadSessions++;
658
+ }
659
+ else {
660
+ activeSessions++;
661
+ }
662
+ }
663
+ return {
664
+ registrySize: this.sessions.size,
665
+ activeSessions,
666
+ deadSessions,
667
+ openFileCount: this.readOpenFileCount(),
668
+ };
669
+ }
670
+ /**
671
+ * Resize a session's terminal.
672
+ *
673
+ * @param name - Name of the session
674
+ * @param cols - Number of columns
675
+ * @param rows - Number of rows
676
+ * @throws Error if session does not exist
677
+ */
678
+ resizeSession(name, cols, rows) {
679
+ const session = this.sessions.get(name);
680
+ const terminalBuffer = this.terminalBuffers.get(name);
681
+ if (!session) {
682
+ throw new Error(`Session '${name}' does not exist`);
683
+ }
684
+ session.resize(cols, rows);
685
+ if (terminalBuffer) {
686
+ terminalBuffer.resize(cols, rows);
687
+ }
688
+ this.logger.debug('Session resized', { name, cols, rows });
689
+ }
690
+ /**
691
+ * Get the raw output history for a session.
692
+ *
693
+ * This returns the raw bytes written to the terminal, including ANSI
694
+ * sequences. Useful for replaying the session.
695
+ *
696
+ * @param name - Name of the session
697
+ * @returns Raw output history as a string
698
+ *
699
+ * @example
700
+ * ```typescript
701
+ * const history = backend.getSessionHistory('my-session');
702
+ * ```
703
+ */
704
+ getSessionHistory(name) {
705
+ const terminalBuffer = this.terminalBuffers.get(name);
706
+ if (!terminalBuffer) {
707
+ return '';
708
+ }
709
+ return terminalBuffer.getHistoryAsString();
710
+ }
711
+ /**
712
+ * Get the terminal buffer instance for a session.
713
+ *
714
+ * @param name - Name of the session
715
+ * @returns The PtyTerminalBuffer instance if found, undefined otherwise
716
+ */
717
+ getTerminalBufferInstance(name) {
718
+ return this.terminalBuffers.get(name);
719
+ }
720
+ /**
721
+ * Get the file path for a session's persistent log file.
722
+ *
723
+ * @param sessionName - Name of the session
724
+ * @returns Absolute path to the session log file
725
+ */
726
+ getSessionLogPath(sessionName) {
727
+ return path.join(this.sessionLogsDir, `${sessionName}.log`);
728
+ }
729
+ /**
730
+ * Open a writable file stream for a session log.
731
+ * If a log file already exists (from a previous run), appends a restart separator.
732
+ *
733
+ * @param sessionName - Name of the session
734
+ */
735
+ openSessionLogStream(sessionName) {
736
+ try {
737
+ // Close any existing stream for this session
738
+ this.closeSessionLogStream(sessionName);
739
+ const logPath = this.getSessionLogPath(sessionName);
740
+ const fileExists = fs.existsSync(logPath);
741
+ const stream = fs.createWriteStream(logPath, { flags: 'a' });
742
+ stream.on('error', (err) => {
743
+ this.logger.warn('Session log stream error', {
744
+ sessionName,
745
+ error: err.message,
746
+ });
747
+ });
748
+ // Write restart separator if file already exists
749
+ if (fileExists) {
750
+ stream.write(`\n--- SESSION RESTARTED at ${new Date().toISOString()} ---\n\n`);
751
+ }
752
+ else {
753
+ stream.write(`--- SESSION STARTED at ${new Date().toISOString()} ---\n\n`);
754
+ }
755
+ this.sessionLogStreams.set(sessionName, stream);
756
+ }
757
+ catch (err) {
758
+ this.logger.warn('Failed to open session log stream', {
759
+ sessionName,
760
+ error: err instanceof Error ? err.message : String(err),
761
+ });
762
+ }
763
+ }
764
+ /**
765
+ * Write ANSI-stripped terminal data to a session's persistent log file.
766
+ *
767
+ * @param sessionName - Name of the session
768
+ * @param data - Raw terminal data (with ANSI codes)
769
+ */
770
+ writeToSessionLog(sessionName, data) {
771
+ const stream = this.sessionLogStreams.get(sessionName);
772
+ if (!stream || stream.destroyed)
773
+ return;
774
+ // Strip ANSI escape codes for readable log output
775
+ let stripped = data;
776
+ for (const pattern of PtySessionBackend.ANSI_STRIP_PATTERNS) {
777
+ stripped = stripped.replace(pattern, '');
778
+ }
779
+ // Only write if there's content after stripping
780
+ if (stripped.length > 0) {
781
+ stream.write(stripped);
782
+ }
783
+ }
784
+ /**
785
+ * Close and remove the file stream for a session log.
786
+ *
787
+ * @param sessionName - Name of the session
788
+ */
789
+ closeSessionLogStream(sessionName) {
790
+ const stream = this.sessionLogStreams.get(sessionName);
791
+ if (stream) {
792
+ try {
793
+ if (!stream.destroyed) {
794
+ stream.end();
795
+ }
796
+ }
797
+ catch {
798
+ // Ignore close errors
799
+ }
800
+ this.sessionLogStreams.delete(sessionName);
801
+ }
802
+ }
803
+ }
804
+ //# sourceMappingURL=pty-session-backend.js.map