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,810 @@
1
+ /**
2
+ * Session Command Helper
3
+ *
4
+ * Provides high-level terminal command operations using the ISessionBackend abstraction.
5
+ * This helper bridges the gap between low-level PTY operations and the higher-level
6
+ * commands that services like AgentRegistrationService need.
7
+ *
8
+ * Key mappings from TmuxCommandService:
9
+ * - sendMessage → write(message + '\r')
10
+ * - sendKey → write(keyCode)
11
+ * - sendCtrlC → write('\x03')
12
+ * - sendEnter → write('\r')
13
+ * - clearCurrentCommandLine → write('\x03\x15') (Ctrl+C then Ctrl+U)
14
+ * - capturePane → captureOutput()
15
+ *
16
+ * @module session-command-helper
17
+ */
18
+ import { LoggerService } from '../core/logger.service.js';
19
+ import { SESSION_COMMAND_DELAYS, EVENT_DELIVERY_CONSTANTS, TERMINAL_PATTERNS, PLAN_MODE_DISMISS_PATTERNS } from '../../constants.js';
20
+ import { delay } from '../../utils/async.utils.js';
21
+ import { PtyActivityTrackerService } from '../agent/pty-activity-tracker.service.js';
22
+ /**
23
+ * Key code mappings for special keys
24
+ */
25
+ export const KEY_CODES = {
26
+ Enter: '\r',
27
+ 'C-c': '\x03', // Ctrl+C
28
+ 'C-u': '\x15', // Ctrl+U (clear line)
29
+ 'C-l': '\x0c', // Ctrl+L (clear screen)
30
+ 'C-d': '\x04', // Ctrl+D (EOF)
31
+ Escape: '\x1b',
32
+ Tab: '\t',
33
+ 'S-Tab': '\x1b[Z', // Shift+Tab (reverse tab / focus previous in TUI)
34
+ Backspace: '\x7f',
35
+ Delete: '\x1b[3~',
36
+ Up: '\x1b[A',
37
+ Down: '\x1b[B',
38
+ Right: '\x1b[C',
39
+ Left: '\x1b[D',
40
+ Home: '\x1b[H',
41
+ End: '\x1b[F',
42
+ PageUp: '\x1b[5~',
43
+ PageDown: '\x1b[6~',
44
+ // Function keys — F12 is used to toggle Gemini CLI's error details panel (#130)
45
+ F1: '\x1bOP',
46
+ F2: '\x1bOQ',
47
+ F3: '\x1bOR',
48
+ F4: '\x1bOS',
49
+ F5: '\x1b[15~',
50
+ F6: '\x1b[17~',
51
+ F7: '\x1b[18~',
52
+ F8: '\x1b[19~',
53
+ F9: '\x1b[20~',
54
+ F10: '\x1b[21~',
55
+ F11: '\x1b[23~',
56
+ F12: '\x1b[24~',
57
+ };
58
+ /**
59
+ * Session Command Helper class
60
+ *
61
+ * Provides a unified interface for terminal commands that works with both
62
+ * PTY and tmux backends through the ISessionBackend abstraction.
63
+ */
64
+ export class SessionCommandHelper {
65
+ logger;
66
+ backend;
67
+ constructor(backend) {
68
+ this.logger = LoggerService.getInstance().createComponentLogger('SessionCommandHelper');
69
+ this.backend = backend;
70
+ }
71
+ /**
72
+ * Get a session by name, throwing an error if it doesn't exist.
73
+ *
74
+ * @param sessionName - The name of the session to retrieve
75
+ * @returns The session instance
76
+ * @throws Error if the session does not exist
77
+ */
78
+ getSessionOrThrow(sessionName) {
79
+ const session = this.backend.getSession(sessionName);
80
+ if (!session) {
81
+ throw new Error(`Session '${sessionName}' does not exist`);
82
+ }
83
+ return session;
84
+ }
85
+ /**
86
+ * Check if a session exists
87
+ */
88
+ sessionExists(sessionName) {
89
+ return this.backend.sessionExists(sessionName);
90
+ }
91
+ /**
92
+ * Get a session by name
93
+ */
94
+ getSession(sessionName) {
95
+ return this.backend.getSession(sessionName);
96
+ }
97
+ /**
98
+ * Send a message to a session with Enter key.
99
+ * For multi-line messages, sends the text first then Enter separately
100
+ * to avoid bracketed paste mode issues where Enter is treated as part of the paste.
101
+ *
102
+ * @param sessionName - The session to send to
103
+ * @param message - The message to send
104
+ * @throws Error if session does not exist
105
+ */
106
+ async sendMessage(sessionName, message) {
107
+ const session = this.getSessionOrThrow(sessionName);
108
+ this.logger.debug('Sending message to session', {
109
+ sessionName,
110
+ messageLength: message.length,
111
+ isMultiLine: message.includes('\n'),
112
+ });
113
+ // Wrap message in bracketed paste mode markers (\x1b[200~ ... \x1b[201~).
114
+ // This tells TUI applications (Gemini CLI, Codex CLI, Claude Code) to treat
115
+ // the input as pasted text rather than typed keystrokes. Without this, special
116
+ // characters like (), $, `, and " can trigger shell mode or be interpreted as
117
+ // key sequences in Gemini CLI (#292, #293).
118
+ const bracketedMessage = `\x1b[200~${message}\x1b[201~`;
119
+ // Send text first (in bracketed paste), then Enter separately to ensure submission
120
+ session.write(bracketedMessage);
121
+ // Scale delay based on message size: large prompts (e.g. 409-line registration
122
+ // prompts) need more time for Claude Code to process the bracketed paste.
123
+ // Base delay + 1ms per 10 characters, capped at 5 seconds.
124
+ const scaledDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
125
+ await delay(scaledDelay);
126
+ // Send Enter explicitly as a separate keystroke
127
+ // Use \r (carriage return) which is the standard Enter key in terminals
128
+ session.write('\r');
129
+ // Additional delay for Enter to be processed
130
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
131
+ // Log that we finished sending
132
+ this.logger.debug('Message sent with Enter key', {
133
+ sessionName,
134
+ messageLength: message.length,
135
+ pasteDelay: scaledDelay,
136
+ });
137
+ }
138
+ /**
139
+ * Send a key to a session
140
+ *
141
+ * @param sessionName - The session to send to
142
+ * @param key - The key name (e.g., 'Enter', 'C-c', 'Escape')
143
+ * @throws Error if session does not exist or key is unknown
144
+ */
145
+ async sendKey(sessionName, key) {
146
+ const session = this.getSessionOrThrow(sessionName);
147
+ const keyCode = KEY_CODES[key];
148
+ if (!keyCode) {
149
+ // If not a special key, send as literal
150
+ session.write(key);
151
+ }
152
+ else {
153
+ session.write(keyCode);
154
+ }
155
+ this.logger.debug('Sent key to session', {
156
+ sessionName,
157
+ key,
158
+ isSpecialKey: !!keyCode,
159
+ });
160
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
161
+ }
162
+ /**
163
+ * Send Ctrl+C to a session
164
+ */
165
+ async sendCtrlC(sessionName) {
166
+ const session = this.getSessionOrThrow(sessionName);
167
+ session.write('\x03');
168
+ this.logger.debug('Sent Ctrl+C to session', { sessionName });
169
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
170
+ }
171
+ /**
172
+ * Send Enter key to a session
173
+ */
174
+ async sendEnter(sessionName) {
175
+ const session = this.getSessionOrThrow(sessionName);
176
+ session.write('\r');
177
+ this.logger.debug('Sent Enter to session', { sessionName });
178
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
179
+ }
180
+ /**
181
+ * Send Escape key to a session
182
+ */
183
+ async sendEscape(sessionName) {
184
+ const session = this.getSessionOrThrow(sessionName);
185
+ session.write('\x1b');
186
+ this.logger.debug('Sent Escape to session', { sessionName });
187
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
188
+ }
189
+ /**
190
+ * Gemini-specific message delivery (#130).
191
+ *
192
+ * Handles Ink TUI quirks:
193
+ * 1. Sends Escape to exit sub-modes (shell mode, error overlay)
194
+ * 2. Writes the message text
195
+ * 3. Uses a longer delay before Enter (Ink TUI needs processing time)
196
+ * 4. Verifies the message text left the input area (accepted)
197
+ *
198
+ * @param sessionName - The session to send to
199
+ * @param message - The message to send
200
+ * @returns true if post-write verification shows message was accepted
201
+ */
202
+ async sendMessageGemini(sessionName, message) {
203
+ const session = this.getSessionOrThrow(sessionName);
204
+ this.logger.debug('Gemini-specific message delivery', {
205
+ sessionName,
206
+ messageLength: message.length,
207
+ });
208
+ // Step 1: Escape to ensure we're not in a sub-mode
209
+ session.write('\x1b');
210
+ await delay(200);
211
+ // Step 2: Write the message text wrapped in bracketed paste markers.
212
+ // This prevents special characters from triggering shell mode (#292, #293).
213
+ session.write(`\x1b[200~${message}\x1b[201~`);
214
+ // Step 3: Longer delay for Ink TUI to process the paste
215
+ const scaledDelay = Math.min(SESSION_COMMAND_DELAYS.MESSAGE_DELAY + Math.ceil(message.length / 10), 5000);
216
+ await delay(scaledDelay);
217
+ // Step 4: Send Enter with extra delay for Ink TUI
218
+ session.write('\r');
219
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY * 2);
220
+ // Step 5: Verify — check if message text disappeared from input area
221
+ try {
222
+ const postOutput = this.capturePane(sessionName, 10);
223
+ const msgSnippet = (message.length > 30
224
+ ? message.substring(0, 60)
225
+ : message).replace(/\s+/g, ' ').trim();
226
+ const bottomLines = postOutput.split('\n').slice(-5).join(' ').replace(/\s+/g, ' ');
227
+ const textStillPresent = bottomLines.includes(msgSnippet);
228
+ if (textStillPresent) {
229
+ this.logger.warn('Gemini message text still in input after send — Enter may have been dropped', {
230
+ sessionName,
231
+ });
232
+ return false;
233
+ }
234
+ this.logger.debug('Gemini message delivery verified — text accepted', {
235
+ sessionName,
236
+ });
237
+ return true;
238
+ }
239
+ catch {
240
+ // Verification failed, but message may have been delivered
241
+ return true;
242
+ }
243
+ }
244
+ /**
245
+ * Detect and dismiss interactive prompts (e.g., plan mode) before message delivery.
246
+ * Checks the last terminal output for plan mode patterns and sends Escape to exit
247
+ * if detected. This prevents agents from getting permanently stuck in plan mode.
248
+ *
249
+ * @param sessionName - The session to check
250
+ * @returns True if an interactive prompt was detected and dismissed
251
+ */
252
+ async dismissInteractivePromptIfNeeded(sessionName) {
253
+ const output = this.capturePane(sessionName);
254
+ // Guard: do NOT send ESC if the agent is actively processing.
255
+ // ESC during processing triggers Claude Code's Rewind mode, which
256
+ // permanently blocks input. Two ESCs = unrecoverable Rewind UI takeover.
257
+ // Use PTY idle time for robust cross-runtime detection instead of regex.
258
+ const idleMs = PtyActivityTrackerService.getInstance().getIdleTimeMs(sessionName);
259
+ const isBusy = idleMs < SESSION_COMMAND_DELAYS.AGENT_BUSY_IDLE_THRESHOLD_MS;
260
+ if (isBusy) {
261
+ this.logger.debug('Skipping plan mode dismissal — agent is busy', {
262
+ sessionName,
263
+ });
264
+ return false;
265
+ }
266
+ // Restrict plan mode detection to the last 500 chars to avoid
267
+ // false-positives from historical output further up the buffer.
268
+ const recentOutput = output.slice(-500);
269
+ const isPlanMode = PLAN_MODE_DISMISS_PATTERNS.some(pattern => pattern.test(recentOutput));
270
+ if (isPlanMode) {
271
+ this.logger.warn('Plan mode detected in session, sending Escape to dismiss', {
272
+ sessionName,
273
+ });
274
+ await this.sendEscape(sessionName);
275
+ await delay(SESSION_COMMAND_DELAYS.CLAUDE_RECOVERY_DELAY);
276
+ return true;
277
+ }
278
+ return false;
279
+ }
280
+ /**
281
+ * Clear the current command line in a session
282
+ * Sends Ctrl+C followed by Ctrl+U to cancel any input and clear the line
283
+ */
284
+ async clearCurrentCommandLine(sessionName) {
285
+ const session = this.getSessionOrThrow(sessionName);
286
+ // Ctrl+C to cancel any running command
287
+ session.write('\x03');
288
+ await delay(SESSION_COMMAND_DELAYS.CLEAR_COMMAND_DELAY);
289
+ // Ctrl+U to clear the current line
290
+ session.write('\x15');
291
+ this.logger.debug('Cleared command line', { sessionName });
292
+ await delay(SESSION_COMMAND_DELAYS.KEY_DELAY);
293
+ }
294
+ /**
295
+ * Capture terminal output from a session.
296
+ *
297
+ * Strips trailing empty lines that result from empty terminal rows below
298
+ * the actual content. Large terminals (e.g., maximized browser windows)
299
+ * can have 50+ empty rows below the prompt, which would cause prompt
300
+ * detection to fail if the capture window is too small.
301
+ *
302
+ * @param sessionName - The session to capture from
303
+ * @param lines - Number of lines to capture (default: 200)
304
+ * @returns The captured terminal content with trailing empty lines removed
305
+ */
306
+ capturePane(sessionName, lines = 200) {
307
+ const output = this.backend.captureOutput(sessionName, lines);
308
+ // Strip trailing empty/whitespace-only lines from terminal buffer.
309
+ // xterm.js returns empty rows for unused terminal space below content.
310
+ // NOTE: The previous regex /(\n\s*)+$/ caused catastrophic backtracking
311
+ // (ReDoS) because \s* includes \n, creating exponential backtracking on
312
+ // long terminal output with many trailing blank lines. This iterative
313
+ // approach is O(n) and immune to ReDoS.
314
+ const outputLines = output.split('\n');
315
+ let lastContentLine = outputLines.length - 1;
316
+ while (lastContentLine >= 0 && outputLines[lastContentLine].trim() === '') {
317
+ lastContentLine--;
318
+ }
319
+ if (lastContentLine < 0)
320
+ return '\n';
321
+ return outputLines.slice(0, lastContentLine + 1).join('\n') + '\n';
322
+ }
323
+ /**
324
+ * Get raw output history with ANSI escape codes preserved.
325
+ *
326
+ * @param sessionName - The session to get history from
327
+ * @returns Raw output history with ANSI codes
328
+ */
329
+ getRawHistory(sessionName) {
330
+ return this.backend.getRawHistory(sessionName);
331
+ }
332
+ /**
333
+ * List all active sessions
334
+ */
335
+ listSessions() {
336
+ return this.backend.listSessions();
337
+ }
338
+ /**
339
+ * Kill a session
340
+ */
341
+ async killSession(sessionName) {
342
+ await this.backend.killSession(sessionName);
343
+ this.logger.info('Session killed', { sessionName });
344
+ }
345
+ /**
346
+ * Create a new session
347
+ *
348
+ * @param sessionName - Unique name for the session
349
+ * @param cwd - Working directory for the session
350
+ * @param options - Additional session options
351
+ * @returns The created session
352
+ */
353
+ async createSession(sessionName, cwd, options) {
354
+ this.logger.info('Creating session', { sessionName, cwd });
355
+ // Default to shell if no command specified
356
+ const command = options?.command || process.env.SHELL || '/bin/bash';
357
+ const session = await this.backend.createSession(sessionName, {
358
+ cwd,
359
+ command,
360
+ args: options?.args,
361
+ env: options?.env,
362
+ cols: options?.cols,
363
+ rows: options?.rows,
364
+ });
365
+ this.logger.info('Session created', { sessionName, pid: session.pid });
366
+ return session;
367
+ }
368
+ /**
369
+ * Set an environment variable in a session by executing export command
370
+ * Note: This only affects new commands run in the session
371
+ */
372
+ async setEnvironmentVariable(sessionName, key, value) {
373
+ const session = this.getSessionOrThrow(sessionName);
374
+ // Export the variable
375
+ session.write(`export ${key}="${value}"\r`);
376
+ this.logger.debug('Set environment variable', { sessionName, key });
377
+ await delay(SESSION_COMMAND_DELAYS.ENV_VAR_DELAY);
378
+ }
379
+ /**
380
+ * Resize a session's terminal
381
+ */
382
+ resizeSession(sessionName, cols, rows) {
383
+ const session = this.getSessionOrThrow(sessionName);
384
+ session.resize(cols, rows);
385
+ this.logger.debug('Session resized', { sessionName, cols, rows });
386
+ }
387
+ /**
388
+ * Get the underlying backend
389
+ */
390
+ getBackend() {
391
+ return this.backend;
392
+ }
393
+ /**
394
+ * Subscribe to session output events.
395
+ *
396
+ * This method provides direct access to the terminal output stream,
397
+ * enabling event-driven processing instead of polling.
398
+ *
399
+ * @param sessionName - The session to subscribe to
400
+ * @param callback - Function called on each data event
401
+ * @returns Unsubscribe function to stop receiving events
402
+ * @throws Error if session does not exist
403
+ *
404
+ * @example
405
+ * ```typescript
406
+ * const unsubscribe = helper.subscribeToOutput('my-session', (data) => {
407
+ * console.log('Received:', data);
408
+ * });
409
+ * // Later: unsubscribe();
410
+ * ```
411
+ */
412
+ subscribeToOutput(sessionName, callback) {
413
+ const session = this.getSessionOrThrow(sessionName);
414
+ this.logger.debug('Subscribing to session output', { sessionName });
415
+ return session.onData(callback);
416
+ }
417
+ /**
418
+ * Subscribe to session exit events.
419
+ *
420
+ * @param sessionName - The session to subscribe to
421
+ * @param callback - Function called when session exits with exit code
422
+ * @returns Unsubscribe function to stop receiving events
423
+ * @throws Error if session does not exist
424
+ *
425
+ * @example
426
+ * ```typescript
427
+ * const unsubscribe = helper.subscribeToExit('my-session', (code) => {
428
+ * console.log('Session exited with code:', code);
429
+ * });
430
+ * ```
431
+ */
432
+ subscribeToExit(sessionName, callback) {
433
+ const session = this.getSessionOrThrow(sessionName);
434
+ this.logger.debug('Subscribing to session exit', { sessionName });
435
+ return session.onExit(callback);
436
+ }
437
+ /**
438
+ * Wait for a pattern to appear in session output.
439
+ *
440
+ * Subscribes to the output stream and resolves when the pattern is found.
441
+ * Useful for waiting for specific prompts or indicators.
442
+ *
443
+ * @param sessionName - The session to monitor
444
+ * @param pattern - RegExp or string to match against output
445
+ * @param timeoutMs - Maximum time to wait (default: 30 seconds)
446
+ * @returns Promise resolving to the accumulated buffer when pattern matches
447
+ * @throws Error if timeout or session does not exist
448
+ *
449
+ * @example
450
+ * ```typescript
451
+ * // Wait for Claude prompt
452
+ * const output = await helper.waitForPattern('agent-1', />\s*$/, 10000);
453
+ * console.log('Claude is ready:', output);
454
+ * ```
455
+ */
456
+ async waitForPattern(sessionName, pattern, timeoutMs = EVENT_DELIVERY_CONSTANTS.DEFAULT_PATTERN_TIMEOUT) {
457
+ const session = this.getSessionOrThrow(sessionName);
458
+ return new Promise((resolve, reject) => {
459
+ let buffer = '';
460
+ let resolved = false;
461
+ const cleanup = () => {
462
+ if (!resolved) {
463
+ resolved = true;
464
+ clearTimeout(timeoutId);
465
+ unsubscribe();
466
+ }
467
+ };
468
+ const timeoutId = setTimeout(() => {
469
+ cleanup();
470
+ this.logger.debug('waitForPattern timed out', {
471
+ sessionName,
472
+ pattern: pattern.toString(),
473
+ bufferLength: buffer.length,
474
+ });
475
+ reject(new Error(`Timeout waiting for pattern: ${pattern}`));
476
+ }, timeoutMs);
477
+ const unsubscribe = session.onData((data) => {
478
+ if (resolved)
479
+ return;
480
+ buffer += data;
481
+ const match = typeof pattern === 'string' ? buffer.includes(pattern) : pattern.test(buffer);
482
+ if (match) {
483
+ this.logger.debug('Pattern matched in output', {
484
+ sessionName,
485
+ pattern: pattern.toString(),
486
+ bufferLength: buffer.length,
487
+ });
488
+ cleanup();
489
+ resolve(buffer);
490
+ }
491
+ });
492
+ });
493
+ }
494
+ /**
495
+ * Wait for any of multiple patterns to appear in session output.
496
+ *
497
+ * Useful when multiple outcomes are possible (e.g., success or error).
498
+ *
499
+ * @param sessionName - The session to monitor
500
+ * @param patterns - Array of patterns with identifiers
501
+ * @param timeoutMs - Maximum time to wait
502
+ * @returns Promise resolving to which pattern matched and the buffer
503
+ *
504
+ * @example
505
+ * ```typescript
506
+ * const result = await helper.waitForAnyPattern('agent-1', [
507
+ * { id: 'prompt', pattern: />\s*$/ },
508
+ * { id: 'error', pattern: /error:/i },
509
+ * ], 10000);
510
+ *
511
+ * if (result.matchedId === 'error') {
512
+ * console.log('Error occurred:', result.buffer);
513
+ * }
514
+ * ```
515
+ */
516
+ async waitForAnyPattern(sessionName, patterns, timeoutMs = EVENT_DELIVERY_CONSTANTS.DEFAULT_PATTERN_TIMEOUT) {
517
+ const session = this.getSessionOrThrow(sessionName);
518
+ return new Promise((resolve, reject) => {
519
+ let buffer = '';
520
+ let resolved = false;
521
+ const cleanup = () => {
522
+ if (!resolved) {
523
+ resolved = true;
524
+ clearTimeout(timeoutId);
525
+ unsubscribe();
526
+ }
527
+ };
528
+ const timeoutId = setTimeout(() => {
529
+ cleanup();
530
+ this.logger.debug('waitForAnyPattern timed out', {
531
+ sessionName,
532
+ patternCount: patterns.length,
533
+ bufferLength: buffer.length,
534
+ });
535
+ reject(new Error(`Timeout waiting for any pattern`));
536
+ }, timeoutMs);
537
+ const unsubscribe = session.onData((data) => {
538
+ if (resolved)
539
+ return;
540
+ buffer += data;
541
+ for (const { id, pattern } of patterns) {
542
+ const match = typeof pattern === 'string' ? buffer.includes(pattern) : pattern.test(buffer);
543
+ if (match) {
544
+ this.logger.debug('Pattern matched in waitForAnyPattern', {
545
+ sessionName,
546
+ matchedId: id,
547
+ pattern: pattern.toString(),
548
+ });
549
+ cleanup();
550
+ resolve({ matchedId: id, buffer });
551
+ return;
552
+ }
553
+ }
554
+ });
555
+ });
556
+ }
557
+ /**
558
+ * Send message and wait for delivery confirmation via events.
559
+ *
560
+ * This is the core event-driven message delivery method. It:
561
+ * 1. Sends the message to the terminal
562
+ * 2. Subscribes to output to detect confirmation patterns
563
+ * 3. Resolves when confirmation is detected or timeout occurs
564
+ *
565
+ * @param sessionName - The session to send to
566
+ * @param message - The message to send
567
+ * @param confirmationPattern - Pattern indicating successful delivery
568
+ * @param timeoutMs - Maximum time to wait for confirmation
569
+ * @returns Promise resolving to true if confirmed, false if timeout
570
+ *
571
+ * @example
572
+ * ```typescript
573
+ * // Send message and wait for processing indicator
574
+ * const confirmed = await helper.sendMessageWithConfirmation(
575
+ * 'agent-1',
576
+ * 'Hello Claude',
577
+ * /⠋|⠙|⠹|Thinking/,
578
+ * 5000
579
+ * );
580
+ * ```
581
+ */
582
+ async sendMessageWithConfirmation(sessionName, message, confirmationPattern, timeoutMs = EVENT_DELIVERY_CONSTANTS.DELIVERY_CONFIRMATION_TIMEOUT) {
583
+ const session = this.getSessionOrThrow(sessionName);
584
+ return new Promise((resolve) => {
585
+ let confirmed = false;
586
+ let resolved = false;
587
+ const cleanup = () => {
588
+ if (!resolved) {
589
+ resolved = true;
590
+ clearTimeout(timeoutId);
591
+ unsubscribe();
592
+ }
593
+ };
594
+ const timeoutId = setTimeout(() => {
595
+ this.logger.debug('sendMessageWithConfirmation timed out', {
596
+ sessionName,
597
+ messageLength: message.length,
598
+ confirmed,
599
+ });
600
+ cleanup();
601
+ resolve(confirmed);
602
+ }, timeoutMs);
603
+ const unsubscribe = session.onData((data) => {
604
+ if (resolved)
605
+ return;
606
+ const match = typeof confirmationPattern === 'string'
607
+ ? data.includes(confirmationPattern)
608
+ : confirmationPattern.test(data);
609
+ if (match) {
610
+ this.logger.debug('Message delivery confirmed', {
611
+ sessionName,
612
+ pattern: confirmationPattern.toString(),
613
+ });
614
+ confirmed = true;
615
+ cleanup();
616
+ resolve(true);
617
+ }
618
+ });
619
+ // Send the message
620
+ this.logger.debug('Sending message with confirmation tracking', {
621
+ sessionName,
622
+ messageLength: message.length,
623
+ });
624
+ session.write(message);
625
+ // Send Enter after a brief delay (for bracketed paste mode)
626
+ setTimeout(() => {
627
+ if (!resolved) {
628
+ session.write('\r');
629
+ }
630
+ }, SESSION_COMMAND_DELAYS.MESSAGE_DELAY);
631
+ });
632
+ }
633
+ /**
634
+ * Smart message sending with event-driven paste detection.
635
+ *
636
+ * This method intelligently handles bracketed paste mode by:
637
+ * 1. Sending the message text
638
+ * 2. Waiting for "[Pasted text" indicator (paste received)
639
+ * 3. Sending Enter key only after paste is confirmed
640
+ * 4. Optionally waiting for processing indicators
641
+ *
642
+ * This is much more reliable than fixed delays because it detects
643
+ * the actual terminal state rather than guessing timing.
644
+ *
645
+ * @param sessionName - The session to send to
646
+ * @param message - The message to send
647
+ * @param options - Configuration options
648
+ * @returns Promise with delivery result
649
+ *
650
+ * @example
651
+ * ```typescript
652
+ * const result = await helper.sendMessageSmart('agent-1', 'Hello', {
653
+ * waitForProcessing: true,
654
+ * pasteTimeout: 3000,
655
+ * });
656
+ * if (result.pasteDetected && result.processingStarted) {
657
+ * console.log('Message delivered and being processed');
658
+ * }
659
+ * ```
660
+ */
661
+ async sendMessageSmart(sessionName, message, options = {}) {
662
+ const session = this.getSessionOrThrow(sessionName);
663
+ const { pasteTimeout = 3000, processingTimeout = 5000, waitForProcessing = false, pastePattern = TERMINAL_PATTERNS.PASTE_INDICATOR, processingPattern = TERMINAL_PATTERNS.PROCESSING, fallbackDelay = 1500, } = options;
664
+ const result = {
665
+ pasteDetected: false,
666
+ enterSent: false,
667
+ processingStarted: false,
668
+ usedFallback: false,
669
+ };
670
+ this.logger.debug('Smart message send starting', {
671
+ sessionName,
672
+ messageLength: message.length,
673
+ isMultiLine: message.includes('\n'),
674
+ });
675
+ // Step 1: Send the message text (without Enter)
676
+ session.write(message);
677
+ // Step 2: Wait for paste detection or fallback
678
+ try {
679
+ await this.waitForPattern(sessionName, pastePattern, pasteTimeout);
680
+ result.pasteDetected = true;
681
+ this.logger.debug('Paste detected via pattern', { sessionName });
682
+ }
683
+ catch {
684
+ // Paste pattern not detected within timeout - use fallback delay
685
+ this.logger.debug('Paste pattern not detected, using fallback delay', {
686
+ sessionName,
687
+ fallbackDelay,
688
+ });
689
+ await delay(fallbackDelay);
690
+ result.usedFallback = true;
691
+ }
692
+ // Step 3: Send Enter key
693
+ session.write('\r');
694
+ result.enterSent = true;
695
+ this.logger.debug('Enter key sent', { sessionName });
696
+ // Step 4: Optionally wait for processing indicators
697
+ if (waitForProcessing) {
698
+ try {
699
+ await this.waitForPattern(sessionName, processingPattern, processingTimeout);
700
+ result.processingStarted = true;
701
+ this.logger.debug('Processing started', { sessionName });
702
+ }
703
+ catch {
704
+ this.logger.debug('Processing pattern not detected within timeout', {
705
+ sessionName,
706
+ });
707
+ }
708
+ }
709
+ this.logger.debug('Smart message send complete', {
710
+ sessionName,
711
+ result,
712
+ });
713
+ return result;
714
+ }
715
+ /**
716
+ * Send message with retry logic using smart detection.
717
+ *
718
+ * Attempts to deliver a message with intelligent retry behavior:
719
+ * - Uses event-driven paste detection
720
+ * - Retries with Enter key if message appears stuck
721
+ * - Detects common failure modes (prompt still visible, no response)
722
+ *
723
+ * @param sessionName - The session to send to
724
+ * @param message - The message to send
725
+ * @param maxRetries - Maximum number of retry attempts
726
+ * @returns Promise resolving to true if message was successfully processed
727
+ */
728
+ async sendMessageWithSmartRetry(sessionName, message, maxRetries = 3) {
729
+ const session = this.getSessionOrThrow(sessionName);
730
+ // Dismiss plan mode if detected before attempting message delivery
731
+ await this.dismissInteractivePromptIfNeeded(sessionName);
732
+ // Use centralized patterns for consistency
733
+ const stuckPattern = TERMINAL_PATTERNS.PASTE_STUCK;
734
+ const processingPattern = TERMINAL_PATTERNS.PROCESSING;
735
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
736
+ this.logger.debug('Smart retry attempt', { sessionName, attempt, maxRetries });
737
+ if (attempt === 1) {
738
+ // First attempt: use smart send
739
+ const result = await this.sendMessageSmart(sessionName, message, {
740
+ waitForProcessing: true,
741
+ pasteTimeout: 3000,
742
+ processingTimeout: 5000,
743
+ });
744
+ if (result.processingStarted) {
745
+ this.logger.debug('Message delivered on first attempt', { sessionName });
746
+ return true;
747
+ }
748
+ }
749
+ else {
750
+ // Retry attempts: just send Enter and check
751
+ this.logger.debug('Sending retry Enter', { sessionName, attempt });
752
+ session.write('\r');
753
+ }
754
+ // Wait a moment and check terminal state
755
+ await delay(1000);
756
+ // Capture current output to check state
757
+ const output = this.backend.captureOutput(sessionName, 10);
758
+ // Check if stuck (paste indicator still visible)
759
+ if (stuckPattern.test(output)) {
760
+ this.logger.debug('Message appears stuck, will retry with Enter', {
761
+ sessionName,
762
+ attempt,
763
+ });
764
+ continue;
765
+ }
766
+ // Check if processing started
767
+ if (processingPattern.test(output)) {
768
+ this.logger.debug('Processing detected after retry', { sessionName, attempt });
769
+ return true;
770
+ }
771
+ // Check if prompt appeared (message may have been processed already)
772
+ if (output.includes('❯') && !output.includes('[Pasted text')) {
773
+ this.logger.debug('Prompt visible without paste indicator - likely processed', {
774
+ sessionName,
775
+ attempt,
776
+ });
777
+ return true;
778
+ }
779
+ }
780
+ this.logger.warn('Message delivery failed after all retries', {
781
+ sessionName,
782
+ maxRetries,
783
+ });
784
+ return false;
785
+ }
786
+ /**
787
+ * Write raw data to session without Enter key.
788
+ *
789
+ * Useful for sending partial input or special key sequences.
790
+ *
791
+ * @param sessionName - The session to write to
792
+ * @param data - Data to write
793
+ * @throws Error if session does not exist
794
+ */
795
+ writeRaw(sessionName, data) {
796
+ const session = this.getSessionOrThrow(sessionName);
797
+ session.write(data);
798
+ this.logger.debug('Wrote raw data to session', {
799
+ sessionName,
800
+ dataLength: data.length,
801
+ });
802
+ }
803
+ }
804
+ /**
805
+ * Create a SessionCommandHelper instance
806
+ */
807
+ export function createSessionCommandHelper(backend) {
808
+ return new SessionCommandHelper(backend);
809
+ }
810
+ //# sourceMappingURL=session-command-helper.js.map