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,758 @@
1
+ import { promises as fsPromises } from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { RuntimeAgentService } from './runtime-agent.service.abstract.js';
5
+ import { CREWLY_CONSTANTS, RUNTIME_TYPES, GEMINI_FAILURE_PATTERNS } from '../../constants.js';
6
+ import { delay } from '../../utils/async.utils.js';
7
+ import { addGeminiTrustedFolders } from '../../utils/gemini-trusted-folders.js';
8
+ import { getSettingsService } from '../settings/settings.service.js';
9
+ /**
10
+ * Gemini CLI specific runtime service implementation.
11
+ * Handles Gemini CLI initialization, detection, and interaction patterns.
12
+ */
13
+ export class GeminiRuntimeService extends RuntimeAgentService {
14
+ constructor(sessionHelper, projectRoot) {
15
+ super(sessionHelper, projectRoot);
16
+ }
17
+ /**
18
+ * Gemini CLI can show an interactive trust gate on first launch:
19
+ * "Do you trust this folder?".
20
+ * Auto-accept the default "Trust folder" option so startup does not stall.
21
+ */
22
+ async waitForRuntimeReady(sessionName, timeout, checkInterval = 2000) {
23
+ const startTime = Date.now();
24
+ let trustPromptAttempts = 0;
25
+ this.logger.info('Waiting for runtime to be ready', {
26
+ sessionName,
27
+ runtimeType: this.getRuntimeType(),
28
+ timeout,
29
+ checkInterval,
30
+ });
31
+ while (Date.now() - startTime < timeout) {
32
+ try {
33
+ const output = this.sessionHelper.capturePane(sessionName);
34
+ if (this.isGeminiTrustPrompt(output)) {
35
+ trustPromptAttempts++;
36
+ this.logger.info('Gemini trust prompt detected during startup, auto-confirming', {
37
+ sessionName,
38
+ attempt: trustPromptAttempts,
39
+ });
40
+ // Always use Enter to accept the currently selected default option.
41
+ // Typing "1" can leak into the normal input box after Gemini restarts.
42
+ await this.sessionHelper.sendEnter(sessionName);
43
+ await delay(1000);
44
+ continue;
45
+ }
46
+ const readyPatterns = this.getRuntimeReadyPatterns();
47
+ const hasReadySignal = readyPatterns.some((pattern) => output.includes(pattern));
48
+ if (hasReadySignal) {
49
+ const detectedPattern = readyPatterns.find((p) => output.includes(p));
50
+ this.logger.info('Runtime ready pattern detected', {
51
+ sessionName,
52
+ runtimeType: this.getRuntimeType(),
53
+ detectedPattern,
54
+ totalElapsed: Date.now() - startTime,
55
+ });
56
+ return true;
57
+ }
58
+ const errorPatterns = this.getRuntimeErrorPatterns();
59
+ const hasError = errorPatterns.some((pattern) => output.includes(pattern));
60
+ if (hasError) {
61
+ const detectedError = errorPatterns.find((p) => output.includes(p));
62
+ this.logger.error('Runtime error pattern detected during startup', {
63
+ sessionName,
64
+ runtimeType: this.getRuntimeType(),
65
+ detectedError,
66
+ totalElapsed: Date.now() - startTime,
67
+ });
68
+ return false;
69
+ }
70
+ }
71
+ catch (error) {
72
+ this.logger.warn('Error while checking runtime ready signal', {
73
+ sessionName,
74
+ runtimeType: this.getRuntimeType(),
75
+ error: String(error),
76
+ });
77
+ }
78
+ await delay(checkInterval);
79
+ }
80
+ try {
81
+ const lastOutput = this.sessionHelper.capturePane(sessionName);
82
+ const lastLines = lastOutput.split('\n').slice(-10).join('\n');
83
+ this.logger.warn('Timeout waiting for runtime ready signal', {
84
+ sessionName,
85
+ runtimeType: this.getRuntimeType(),
86
+ timeout,
87
+ checkInterval,
88
+ totalElapsed: Date.now() - startTime,
89
+ lastTerminalLines: lastLines,
90
+ });
91
+ }
92
+ catch {
93
+ this.logger.warn('Timeout waiting for runtime ready signal', {
94
+ sessionName,
95
+ runtimeType: this.getRuntimeType(),
96
+ timeout,
97
+ checkInterval,
98
+ totalElapsed: Date.now() - startTime,
99
+ });
100
+ }
101
+ return false;
102
+ }
103
+ getRuntimeType() {
104
+ return RUNTIME_TYPES.GEMINI_CLI;
105
+ }
106
+ /**
107
+ * Gemini CLI specific detection using '/' command
108
+ */
109
+ async detectRuntimeSpecific(sessionName) {
110
+ // Send a simple command to test if Gemini CLI is running.
111
+ // Do NOT use clearCurrentCommandLine — it sends Ctrl+C which triggers
112
+ // /quit at an empty Gemini CLI prompt, and Ctrl+U which is ignored.
113
+ // Do NOT send Escape — it defocuses the Ink TUI input box permanently.
114
+ // Capture the output before checking
115
+ const beforeOutput = this.sessionHelper.capturePane(sessionName, 20);
116
+ // Send the '/' key to detect changes (triggers command palette)
117
+ await this.sessionHelper.sendKey(sessionName, '/');
118
+ await delay(2000);
119
+ // Capture the output after sending '/'
120
+ const afterOutput = this.sessionHelper.capturePane(sessionName, 20);
121
+ // Clear the '/' by sending Backspace (safe in TUI — just deletes the character)
122
+ await this.sessionHelper.sendKey(sessionName, 'Backspace');
123
+ await delay(500);
124
+ const hasOutputChange = afterOutput.length - beforeOutput.length > 5;
125
+ this.logger.debug('Gemini detection completed', {
126
+ sessionName,
127
+ hasOutputChange,
128
+ beforeLength: beforeOutput.length,
129
+ afterLength: afterOutput.length,
130
+ });
131
+ return hasOutputChange;
132
+ }
133
+ /**
134
+ * Gemini CLI specific ready patterns
135
+ */
136
+ getRuntimeReadyPatterns() {
137
+ return [
138
+ 'Type your message',
139
+ 'shell mode',
140
+ 'gemini>',
141
+ 'Ready for input',
142
+ 'Model loaded',
143
+ 'context left)',
144
+ ];
145
+ }
146
+ isGeminiTrustPrompt(output) {
147
+ return /Do you trust this folder\?/i.test(output)
148
+ && /Trust folder/i.test(output);
149
+ }
150
+ /**
151
+ * Gemini CLI specific exit patterns for runtime exit detection.
152
+ *
153
+ * Includes both clean exit patterns (e.g. "Agent powering down") and
154
+ * failure patterns that indicate the CLI is stuck or crashed and needs
155
+ * recovery (e.g. API quota exhaustion, network errors).
156
+ *
157
+ * @returns Array of RegExp patterns that match runtime exit or failure output
158
+ */
159
+ getRuntimeExitPatterns() {
160
+ return [
161
+ // Clean exit patterns
162
+ /Agent powering down/i,
163
+ /Interaction Summary/,
164
+ // Gemini CLI failure/stuck patterns — CLI may crash or become
165
+ // unresponsive when these errors occur, requiring a restart
166
+ ...GEMINI_FAILURE_PATTERNS,
167
+ ];
168
+ }
169
+ /**
170
+ * Gemini CLI specific error patterns
171
+ */
172
+ getRuntimeErrorPatterns() {
173
+ const commonErrors = ['Permission denied', 'No such file or directory'];
174
+ return [
175
+ ...commonErrors,
176
+ 'command not found: gemini',
177
+ 'API key not found',
178
+ 'Authentication failed',
179
+ 'Invalid API key',
180
+ 'Rate limit exceeded',
181
+ ];
182
+ }
183
+ /**
184
+ * Post-initialization hook for Gemini CLI.
185
+ * Adds ~/.crewly to the directory allowlist and ensures MCP server
186
+ * configuration (e.g., playwright) is present in the project directory.
187
+ *
188
+ * @param sessionName - PTY session name
189
+ * @param targetProjectPath - Optional target project path for MCP config.
190
+ * Falls back to this.projectRoot if not provided.
191
+ */
192
+ async postInitialize(sessionName, targetProjectPath, additionalAllowlistPaths) {
193
+ const effectiveProjectPath = targetProjectPath || this.projectRoot;
194
+ const crewlyHome = path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME);
195
+ this.logger.info('Gemini CLI post-init: adding paths to directory allowlist', {
196
+ sessionName,
197
+ crewlyHome,
198
+ projectRoot: this.projectRoot,
199
+ targetProjectPath: effectiveProjectPath,
200
+ additionalPaths: additionalAllowlistPaths?.length ?? 0,
201
+ });
202
+ // Ensure MCP servers (e.g., playwright) are configured before the agent starts.
203
+ // This is done before the allowlist step because it's a filesystem operation
204
+ // that doesn't depend on the CLI being ready for interactive commands.
205
+ await this.ensureGeminiMcpConfig(effectiveProjectPath);
206
+ // Ensure GEMINI_API_KEY is in the project .env file
207
+ await this.ensureGeminiEnvFile(effectiveProjectPath);
208
+ // Ensure required paths are trusted by Gemini CLI before /directory add.
209
+ // Include the system temp directory so agents can read temp files
210
+ // (e.g. screenshots saved to /tmp by skills like rednote-reader).
211
+ const tempDir = os.tmpdir();
212
+ const pathsToAdd = [crewlyHome, this.projectRoot, tempDir];
213
+ if (effectiveProjectPath !== this.projectRoot) {
214
+ pathsToAdd.push(effectiveProjectPath);
215
+ }
216
+ // Merge additional paths (e.g. orchestrator's existing project paths)
217
+ // so ALL /directory add commands run before the registration prompt.
218
+ if (additionalAllowlistPaths?.length) {
219
+ for (const p of additionalAllowlistPaths) {
220
+ if (!pathsToAdd.includes(p)) {
221
+ pathsToAdd.push(p);
222
+ }
223
+ }
224
+ }
225
+ await this.ensureGeminiTrustedFolders(pathsToAdd);
226
+ // Wait for Gemini CLI's async auto-update check to complete before
227
+ // sending commands. The auto-update notification (e.g., "Automatic
228
+ // update failed") appears shortly after startup and can interfere
229
+ // with slash command processing if we send /directory add too early.
230
+ await delay(3000);
231
+ const result = await this.addMultipleProjectsToAllowlist(sessionName, pathsToAdd);
232
+ if (!result.success) {
233
+ this.logger.warn('Failed to add paths to Gemini CLI allowlist (non-fatal)', {
234
+ sessionName,
235
+ results: result.results,
236
+ });
237
+ }
238
+ // Do not return to caller until Gemini is back at a clean prompt.
239
+ // Otherwise the immediate "Read the file ..." instruction can race with
240
+ // an in-flight slash command and get concatenated in the input box.
241
+ await this.waitForSlashQueueToDrain(sessionName);
242
+ }
243
+ /**
244
+ * Ensure Gemini CLI MCP server configuration exists in the project directory.
245
+ *
246
+ * Creates or merges `.gemini/settings.json` with required MCP servers.
247
+ * Delegates to the shared `ensureMcpConfig` in the base class.
248
+ *
249
+ * @param projectPath - Project directory where `.gemini/settings.json` will be created
250
+ */
251
+ async ensureGeminiMcpConfig(projectPath) {
252
+ const settingsPath = path.join(projectPath, '.gemini', 'settings.json');
253
+ await this.ensureMcpConfig(settingsPath, projectPath);
254
+ // Suppress Gemini CLI auto-update (#128). Auto-update attempts can fail
255
+ // due to npm permission issues (EACCES), corrupting the session state
256
+ // and causing persistent API connectivity failures.
257
+ try {
258
+ const settingsDir = path.dirname(settingsPath);
259
+ await fsPromises.mkdir(settingsDir, { recursive: true });
260
+ let existing = {};
261
+ try {
262
+ const content = await fsPromises.readFile(settingsPath, 'utf8');
263
+ existing = JSON.parse(content);
264
+ }
265
+ catch {
266
+ // File doesn't exist yet or invalid JSON
267
+ }
268
+ if (existing['disableAutoUpdate'] !== true) {
269
+ existing['disableAutoUpdate'] = true;
270
+ await fsPromises.writeFile(settingsPath, JSON.stringify(existing, null, 2) + '\n');
271
+ this.logger.info('Set disableAutoUpdate=true in Gemini CLI settings (#128)', { projectPath });
272
+ }
273
+ }
274
+ catch (error) {
275
+ this.logger.warn('Failed to set disableAutoUpdate in Gemini CLI settings (non-fatal)', {
276
+ projectPath,
277
+ error: error instanceof Error ? error.message : String(error),
278
+ });
279
+ }
280
+ }
281
+ /**
282
+ * Ensure the project root `.env` file contains GEMINI_API_KEY.
283
+ * Gemini CLI reads this key from `.env` in the working directory.
284
+ * If the key exists in the process environment but not in `.env`, append it.
285
+ * Also ensures `.gitignore` includes `.env` to prevent accidental commits.
286
+ *
287
+ * @param projectPath - Project directory where `.env` will be created/updated
288
+ */
289
+ async ensureGeminiEnvFile(projectPath) {
290
+ // Resolve API key through settings override chain → process.env fallback
291
+ const settingsService = getSettingsService();
292
+ const apiKey = await settingsService.getApiKey('gemini', { runtime: RUNTIME_TYPES.GEMINI_CLI });
293
+ if (!apiKey) {
294
+ this.logger.debug('Gemini API key not found in settings or process environment, skipping .env setup');
295
+ return;
296
+ }
297
+ const envPath = path.join(projectPath, '.env');
298
+ const envLine = `GEMINI_API_KEY="${apiKey}"`;
299
+ try {
300
+ let existingContent = null;
301
+ try {
302
+ existingContent = await fsPromises.readFile(envPath, 'utf8');
303
+ }
304
+ catch {
305
+ // File doesn't exist yet
306
+ }
307
+ if (existingContent !== null) {
308
+ // Check if key already matches
309
+ const existingMatch = existingContent.match(/GEMINI_API_KEY="?([^"\n]*)"?/);
310
+ if (existingMatch && existingMatch[1] === apiKey) {
311
+ this.logger.debug('GEMINI_API_KEY already up-to-date in .env', { projectPath });
312
+ return;
313
+ }
314
+ if (existingContent.includes('GEMINI_API_KEY=')) {
315
+ // Update existing key to match settings value
316
+ const updated = existingContent.replace(/GEMINI_API_KEY="?[^"\n]*"?/, envLine);
317
+ await fsPromises.writeFile(envPath, updated);
318
+ this.logger.info('Updated GEMINI_API_KEY in .env from settings', { projectPath });
319
+ }
320
+ else {
321
+ // Append to existing .env
322
+ const separator = existingContent.endsWith('\n') ? '' : '\n';
323
+ await fsPromises.appendFile(envPath, `${separator}${envLine}\n`);
324
+ this.logger.info('Added GEMINI_API_KEY to .env from settings', { projectPath });
325
+ }
326
+ }
327
+ else {
328
+ // Create new .env
329
+ await fsPromises.writeFile(envPath, `${envLine}\n`);
330
+ this.logger.info('Created .env with GEMINI_API_KEY from settings', { projectPath });
331
+ }
332
+ }
333
+ catch (error) {
334
+ this.logger.warn('Failed to write GEMINI_API_KEY to .env (non-fatal)', {
335
+ projectPath,
336
+ error: error instanceof Error ? error.message : String(error),
337
+ });
338
+ return;
339
+ }
340
+ // Ensure .gitignore includes .env
341
+ try {
342
+ const gitignorePath = path.join(projectPath, '.gitignore');
343
+ let gitignoreContent = null;
344
+ try {
345
+ gitignoreContent = await fsPromises.readFile(gitignorePath, 'utf8');
346
+ }
347
+ catch {
348
+ // File doesn't exist yet
349
+ }
350
+ if (gitignoreContent !== null) {
351
+ if (!gitignoreContent.split('\n').some(line => line.trim() === '.env')) {
352
+ const separator = gitignoreContent.endsWith('\n') ? '' : '\n';
353
+ await fsPromises.appendFile(gitignorePath, `${separator}.env\n`);
354
+ this.logger.info('Added .env to .gitignore', { projectPath });
355
+ }
356
+ }
357
+ else {
358
+ await fsPromises.writeFile(gitignorePath, '.env\n');
359
+ this.logger.info('Created .gitignore with .env entry', { projectPath });
360
+ }
361
+ }
362
+ catch (error) {
363
+ this.logger.warn('Failed to update .gitignore (non-fatal)', {
364
+ projectPath,
365
+ error: error instanceof Error ? error.message : String(error),
366
+ });
367
+ }
368
+ }
369
+ /**
370
+ * Ensure Gemini trusted folders contain the required paths.
371
+ * Gemini blocks `/directory add` for paths that are not pre-trusted.
372
+ * Delegates to the shared addGeminiTrustedFolders utility.
373
+ */
374
+ async ensureGeminiTrustedFolders(paths) {
375
+ await addGeminiTrustedFolders(paths, this.logger);
376
+ }
377
+ /**
378
+ * Check if Gemini CLI is installed and configured
379
+ */
380
+ async checkGeminiInstallation() {
381
+ try {
382
+ // This would check if Gemini CLI is available
383
+ // Could run: gemini --version or similar
384
+ return {
385
+ isInstalled: true,
386
+ message: 'Gemini CLI is available',
387
+ };
388
+ }
389
+ catch (error) {
390
+ return {
391
+ isInstalled: false,
392
+ message: 'Gemini CLI not found or not configured',
393
+ };
394
+ }
395
+ }
396
+ /**
397
+ * Initialize Gemini in an existing session
398
+ */
399
+ async initializeGeminiInSession(sessionName) {
400
+ try {
401
+ await this.executeRuntimeInitScript(sessionName);
402
+ return {
403
+ success: true,
404
+ message: 'Gemini CLI initialized successfully',
405
+ };
406
+ }
407
+ catch (error) {
408
+ return {
409
+ success: false,
410
+ message: error instanceof Error ? error.message : 'Failed to initialize Gemini CLI',
411
+ };
412
+ }
413
+ }
414
+ /**
415
+ * Add a single project path to Gemini CLI allowlist
416
+ * Uses '/directory add' command after Gemini CLI is running
417
+ */
418
+ async addProjectToAllowlist(sessionName, projectPath) {
419
+ const maxAttempts = 3;
420
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
421
+ try {
422
+ this.logger.info('Adding project to Gemini CLI allowlist', {
423
+ sessionName,
424
+ projectPath,
425
+ attempt,
426
+ });
427
+ // Send Enter to dismiss any pending notification (e.g., "Automatic
428
+ // update failed") that may overlay the TUI input and swallow the
429
+ // slash command. Enter on an empty `> ` prompt is a safe no-op.
430
+ // Do NOT send Escape (defocuses TUI permanently) or Ctrl+C
431
+ // (triggers /quit on empty prompt).
432
+ await this.sessionHelper.sendEnter(sessionName);
433
+ await delay(1000);
434
+ // Capture output before sending to verify the command was processed.
435
+ // Use 100 lines (not 20) because Gemini CLI TUI has a fixed layout:
436
+ // messages area at top, input box + status at bottom (~15-20 lines).
437
+ // The "/directory add" success message appears in the upper messages
438
+ // area via addItem(), so 20 lines only captures the unchanging bottom.
439
+ const beforeOutput = this.sessionHelper.capturePane(sessionName, 100);
440
+ const alreadyAllowlistedBeforeSend = this.isPathAlreadyAllowlisted(beforeOutput, projectPath);
441
+ if (alreadyAllowlistedBeforeSend) {
442
+ this.logger.info('Project already in Gemini CLI workspace, skipping /directory add', {
443
+ sessionName,
444
+ projectPath,
445
+ attempt,
446
+ });
447
+ return {
448
+ success: true,
449
+ message: `Project path ${projectPath} is already in Gemini CLI workspace`,
450
+ };
451
+ }
452
+ // Send the directory add command
453
+ // Add a trailing space as sometimes Gemini CLI needs it to delimit the path properly
454
+ const addCommand = `/directory add ${projectPath} `;
455
+ await this.sessionHelper.sendMessage(sessionName, addCommand);
456
+ // Wait for command to complete
457
+ await delay(2000);
458
+ // Verify: check if output changed (slash commands produce confirmation)
459
+ const afterOutput = this.sessionHelper.capturePane(sessionName, 100);
460
+ const outputChanged = beforeOutput !== afterOutput;
461
+ // Do not treat the literal "/directory add ..." input text as confirmation.
462
+ // "directory" alone is too broad and causes false positives when the
463
+ // command is still stuck in the prompt.
464
+ const hasConfirmation = /added|✓|success/i.test(afterOutput);
465
+ const alreadyAllowlistedAfterSend = this.isPathAlreadyAllowlisted(afterOutput, projectPath);
466
+ const slashQueueBlocked = /slash commands cannot be queued/i.test(afterOutput);
467
+ const stuckAtPrompt = this.isTextLikelyStuckAtPrompt(afterOutput, addCommand);
468
+ // Gemini CLI can drop Enter while still accepting typed text, which causes
469
+ // subsequent commands to concatenate in the same input box. If we detect
470
+ // that the command text is still at the prompt, press Enter again before
471
+ // retrying so we do not append the next command to the same line.
472
+ if (stuckAtPrompt) {
473
+ this.logger.warn('Directory add command appears stuck at prompt, re-pressing Enter', {
474
+ sessionName,
475
+ projectPath,
476
+ attempt,
477
+ });
478
+ await this.sessionHelper.sendEnter(sessionName);
479
+ await delay(500);
480
+ await this.sessionHelper.sendEnter(sessionName);
481
+ await delay(1500);
482
+ const recoveredOutput = this.sessionHelper.capturePane(sessionName, 100);
483
+ const recoveredHasConfirmation = /added|✓|success/i.test(recoveredOutput);
484
+ const recoveredAlreadyAllowlisted = this.isPathAlreadyAllowlisted(recoveredOutput, projectPath);
485
+ const stillStuck = this.isTextLikelyStuckAtPrompt(recoveredOutput, addCommand);
486
+ if (recoveredHasConfirmation || recoveredAlreadyAllowlisted || !stillStuck) {
487
+ this.logger.info('Project added to Gemini CLI allowlist after Enter recovery', {
488
+ sessionName,
489
+ projectPath,
490
+ attempt,
491
+ recoveredHasConfirmation,
492
+ recoveredAlreadyAllowlisted,
493
+ });
494
+ return {
495
+ success: true,
496
+ message: `Project path ${projectPath} added to Gemini CLI allowlist`,
497
+ };
498
+ }
499
+ }
500
+ // Gemini can report queue contention when commands are fired too quickly.
501
+ // Treat this as a hard retry signal and do not mark success.
502
+ if (slashQueueBlocked) {
503
+ this.logger.warn('Gemini CLI slash command queue is busy, retrying /directory add', {
504
+ sessionName,
505
+ projectPath,
506
+ attempt,
507
+ });
508
+ await delay(2000);
509
+ continue;
510
+ }
511
+ // Only accept explicit confirmation signals. Generic output changes
512
+ // are too noisy in Gemini's TUI and can produce false positives.
513
+ if ((hasConfirmation || alreadyAllowlistedAfterSend) && !stuckAtPrompt) {
514
+ this.logger.info('Project added to Gemini CLI allowlist (verified)', {
515
+ sessionName,
516
+ projectPath,
517
+ attempt,
518
+ hasConfirmation,
519
+ alreadyAllowlistedAfterSend,
520
+ });
521
+ return {
522
+ success: true,
523
+ message: `Project path ${projectPath} added to Gemini CLI allowlist`,
524
+ };
525
+ }
526
+ this.logger.warn('Directory add command may not have been processed, retrying', {
527
+ sessionName,
528
+ projectPath,
529
+ attempt,
530
+ outputChanged,
531
+ });
532
+ // Wait before retry to let any notification/overlay clear
533
+ await delay(2000);
534
+ }
535
+ catch (error) {
536
+ this.logger.error('Failed to add project to Gemini CLI allowlist', {
537
+ sessionName,
538
+ projectPath,
539
+ attempt,
540
+ error: error instanceof Error ? error.message : String(error),
541
+ });
542
+ if (attempt === maxAttempts) {
543
+ return {
544
+ success: false,
545
+ message: `Failed to add project path to allowlist: ${error instanceof Error ? error.message : String(error)}`,
546
+ };
547
+ }
548
+ }
549
+ }
550
+ return {
551
+ success: false,
552
+ message: `Failed to add project path to allowlist after ${maxAttempts} attempts`,
553
+ };
554
+ }
555
+ /**
556
+ * Heuristic to detect text that is still sitting in Gemini's input box.
557
+ * This indicates the message was typed but Enter was not processed.
558
+ */
559
+ isTextLikelyStuckAtPrompt(terminalOutput, message) {
560
+ if (!terminalOutput || !message)
561
+ return false;
562
+ const snippet = message.replace(/\s+/g, ' ').trim();
563
+ if (!snippet)
564
+ return false;
565
+ const bottomText = terminalOutput
566
+ .split('\n')
567
+ .slice(-15)
568
+ .join(' ')
569
+ .replace(/\s+/g, ' ')
570
+ .trim();
571
+ return bottomText.includes(snippet);
572
+ }
573
+ /**
574
+ * Detect whether Gemini CLI output indicates a path is already allowlisted.
575
+ */
576
+ isPathAlreadyAllowlisted(terminalOutput, projectPath) {
577
+ if (!terminalOutput || !projectPath)
578
+ return false;
579
+ const normalizedOutput = terminalOutput.replace(/\s+/g, ' ');
580
+ const normalizedPath = projectPath.replace(/\s+/g, ' ');
581
+ const hasAlreadyMarker = /already in (the )?workspace|already added|already allowed/i.test(normalizedOutput);
582
+ return hasAlreadyMarker && normalizedOutput.includes(normalizedPath);
583
+ }
584
+ /**
585
+ * Add multiple project paths to Gemini CLI allowlist
586
+ * Attempts a single batched slash command first, then falls back to
587
+ * per-path commands for resiliency.
588
+ */
589
+ async addMultipleProjectsToAllowlist(sessionName, projectPaths) {
590
+ const uniqueProjectPaths = [...new Set(projectPaths)];
591
+ const results = [];
592
+ let successCount = 0;
593
+ this.logger.info('Adding multiple projects to Gemini CLI allowlist', {
594
+ sessionName,
595
+ projectCount: uniqueProjectPaths.length,
596
+ projectPaths: uniqueProjectPaths,
597
+ });
598
+ // Fast path: Gemini CLI supports `/directory add path1,path2,...`.
599
+ // Use this first to avoid queueing many slash commands back-to-back.
600
+ if (uniqueProjectPaths.length > 1) {
601
+ const batchResult = await this.addProjectsToAllowlistBatch(sessionName, uniqueProjectPaths);
602
+ if (batchResult.success) {
603
+ for (const projectPath of uniqueProjectPaths) {
604
+ results.push({ path: projectPath, success: true });
605
+ }
606
+ successCount = uniqueProjectPaths.length;
607
+ this.logger.info('Completed adding multiple projects via batch command', {
608
+ sessionName,
609
+ totalProjects: uniqueProjectPaths.length,
610
+ });
611
+ return {
612
+ success: true,
613
+ message: `Added ${successCount}/${uniqueProjectPaths.length} projects to Gemini CLI allowlist`,
614
+ results,
615
+ };
616
+ }
617
+ this.logger.warn('Batch /directory add failed, falling back to per-path commands', {
618
+ sessionName,
619
+ reason: batchResult.message,
620
+ });
621
+ }
622
+ for (const projectPath of uniqueProjectPaths) {
623
+ try {
624
+ const result = await this.addProjectToAllowlist(sessionName, projectPath);
625
+ if (result.success) {
626
+ successCount++;
627
+ results.push({ path: projectPath, success: true });
628
+ }
629
+ else {
630
+ results.push({
631
+ path: projectPath,
632
+ success: false,
633
+ error: result.message,
634
+ });
635
+ }
636
+ }
637
+ catch (error) {
638
+ const errorMessage = error instanceof Error ? error.message : String(error);
639
+ results.push({
640
+ path: projectPath,
641
+ success: false,
642
+ error: errorMessage,
643
+ });
644
+ }
645
+ // Keep spacing between slash commands to reduce queue contention in Gemini CLI.
646
+ await delay(1500);
647
+ }
648
+ const message = `Added ${successCount}/${uniqueProjectPaths.length} projects to Gemini CLI allowlist`;
649
+ this.logger.info('Completed adding multiple projects to Gemini CLI allowlist', {
650
+ sessionName,
651
+ totalProjects: uniqueProjectPaths.length,
652
+ successCount,
653
+ failureCount: uniqueProjectPaths.length - successCount,
654
+ });
655
+ return {
656
+ success: successCount > 0,
657
+ message,
658
+ results,
659
+ };
660
+ }
661
+ /**
662
+ * Send a single batched `/directory add` command with comma-separated paths.
663
+ */
664
+ async addProjectsToAllowlistBatch(sessionName, projectPaths) {
665
+ const maxAttempts = 2;
666
+ const commandPayload = projectPaths.join(',');
667
+ const batchCommand = `/directory add ${commandPayload} `;
668
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
669
+ try {
670
+ await this.sessionHelper.sendEnter(sessionName);
671
+ await delay(1000);
672
+ const beforeOutput = this.sessionHelper.capturePane(sessionName, 120);
673
+ const allAlreadyPresent = projectPaths.every((p) => this.isPathAlreadyAllowlisted(beforeOutput, p));
674
+ if (allAlreadyPresent) {
675
+ return {
676
+ success: true,
677
+ message: 'All paths are already in Gemini CLI workspace',
678
+ };
679
+ }
680
+ await this.sessionHelper.sendMessage(sessionName, batchCommand);
681
+ await delay(2500);
682
+ const afterOutput = this.sessionHelper.capturePane(sessionName, 120);
683
+ const hasQueueWarning = /slash commands cannot be queued/i.test(afterOutput);
684
+ const stuckAtPrompt = this.isTextLikelyStuckAtPrompt(afterOutput, batchCommand);
685
+ const hasConfirmation = /added|✓|success/i.test(afterOutput);
686
+ const allPresentAfter = projectPaths.every((p) => this.isPathAlreadyAllowlisted(afterOutput, p));
687
+ if (hasQueueWarning) {
688
+ await delay(2000);
689
+ continue;
690
+ }
691
+ if (stuckAtPrompt) {
692
+ await this.sessionHelper.sendEnter(sessionName);
693
+ await delay(500);
694
+ await this.sessionHelper.sendEnter(sessionName);
695
+ await delay(1500);
696
+ const recoveredOutput = this.sessionHelper.capturePane(sessionName, 120);
697
+ const recoveredConfirmation = /added|✓|success/i.test(recoveredOutput);
698
+ const recoveredAllPresent = projectPaths.every((p) => this.isPathAlreadyAllowlisted(recoveredOutput, p));
699
+ const stillStuck = this.isTextLikelyStuckAtPrompt(recoveredOutput, batchCommand);
700
+ if ((recoveredConfirmation || recoveredAllPresent) && !stillStuck) {
701
+ return { success: true, message: 'Batch directory add command succeeded' };
702
+ }
703
+ }
704
+ if ((hasConfirmation || allPresentAfter) && !stuckAtPrompt) {
705
+ return { success: true, message: 'Batch directory add command succeeded' };
706
+ }
707
+ }
708
+ catch (error) {
709
+ if (attempt === maxAttempts) {
710
+ return {
711
+ success: false,
712
+ message: error instanceof Error ? error.message : String(error),
713
+ };
714
+ }
715
+ }
716
+ }
717
+ return {
718
+ success: false,
719
+ message: 'Batch directory add command not confirmed',
720
+ };
721
+ }
722
+ /**
723
+ * Wait until Gemini's slash-command queue is idle and the prompt is ready
724
+ * for normal text input.
725
+ */
726
+ async waitForSlashQueueToDrain(sessionName) {
727
+ const maxChecks = 8;
728
+ for (let check = 1; check <= maxChecks; check++) {
729
+ const output = this.sessionHelper.capturePane(sessionName, 120);
730
+ const hasQueueWarning = /slash commands cannot be queued/i.test(output);
731
+ const hasReadyPrompt = this.getRuntimeReadyPatterns().some((pattern) => output.includes(pattern));
732
+ const addCommandStuck = this.isTextLikelyStuckAtPrompt(output, '/directory add');
733
+ if (hasReadyPrompt && !hasQueueWarning && !addCommandStuck) {
734
+ this.logger.debug('Gemini slash command queue appears idle', {
735
+ sessionName,
736
+ check,
737
+ });
738
+ return;
739
+ }
740
+ // If command text still sits in the input box, submit/clear it so the
741
+ // next non-slash instruction is not appended to the same line.
742
+ if (addCommandStuck || hasQueueWarning) {
743
+ this.logger.debug('Gemini slash queue not idle yet, nudging prompt with Enter', {
744
+ sessionName,
745
+ check,
746
+ hasQueueWarning,
747
+ addCommandStuck,
748
+ });
749
+ await this.sessionHelper.sendEnter(sessionName);
750
+ }
751
+ await delay(1000);
752
+ }
753
+ this.logger.warn('Timed out waiting for Gemini slash queue to drain (continuing anyway)', {
754
+ sessionName,
755
+ });
756
+ }
757
+ }
758
+ //# sourceMappingURL=gemini-runtime.service.js.map