@lotagate/cli 0.1.24 → 0.1.26

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 (671) hide show
  1. package/README.md +75 -7
  2. package/SECURITY.md +2 -0
  3. package/bin/lotagate.mjs +50 -8
  4. package/dist/application/agent/agent-constants.d.ts +6 -0
  5. package/dist/application/agent/agent-constants.js +1 -0
  6. package/dist/application/agent/agent-history.d.ts +3 -0
  7. package/dist/application/agent/agent-history.js +5 -0
  8. package/dist/application/agent/agent-input-context.d.ts +12 -0
  9. package/dist/application/agent/agent-input-context.js +5 -0
  10. package/dist/application/agent/agent-limit.d.ts +3 -0
  11. package/dist/application/agent/agent-limit.js +1 -0
  12. package/dist/application/agent/agent-run-tracker.d.ts +30 -0
  13. package/dist/application/agent/agent-run-tracker.js +1 -0
  14. package/dist/application/agent/agent-runtime-context.d.ts +22 -0
  15. package/dist/application/agent/agent-runtime-context.js +1 -0
  16. package/dist/application/agent/agent-session-store-registry.d.ts +16 -0
  17. package/dist/application/agent/agent-session-store-registry.js +1 -0
  18. package/dist/application/agent/agent-session-store.d.ts +23 -0
  19. package/dist/application/agent/agent-session-store.js +6 -0
  20. package/dist/application/agent/capability-profile.d.ts +17 -0
  21. package/dist/application/agent/capability-profile.js +0 -0
  22. package/dist/application/agent/cli-agent-execution-service.d.ts +120 -0
  23. package/dist/application/agent/cli-agent-execution-service.js +1 -0
  24. package/dist/application/agent/cli-agent-preparation-cache.d.ts +39 -0
  25. package/dist/application/agent/cli-agent-preparation-cache.js +1 -0
  26. package/dist/application/agent/cli-agent-run-request.d.ts +12 -0
  27. package/dist/application/agent/cli-agent-run-request.js +0 -0
  28. package/dist/application/agent/context-compaction-persistence.d.ts +8 -0
  29. package/dist/application/agent/context-compaction-persistence.js +1 -0
  30. package/dist/application/agent/context-compaction.d.ts +22 -0
  31. package/dist/application/agent/context-compaction.js +8 -0
  32. package/dist/application/agent/context-token-cache.d.ts +21 -0
  33. package/dist/application/agent/context-token-cache.js +4 -0
  34. package/dist/application/agent/context-usage-service.d.ts +52 -0
  35. package/dist/application/agent/context-usage-service.js +1 -0
  36. package/dist/application/agent/continuation-checkpoint.d.ts +15 -0
  37. package/dist/application/agent/continuation-checkpoint.js +2 -0
  38. package/dist/application/agent/interactive-agent-guidance.d.ts +5 -0
  39. package/dist/application/agent/interactive-agent-guidance.js +2 -0
  40. package/dist/application/agent/prompt-data-safety.d.ts +14 -0
  41. package/dist/application/agent/prompt-data-safety.js +4 -0
  42. package/dist/application/agent/scoped-tool-executor.d.ts +13 -0
  43. package/dist/application/agent/scoped-tool-executor.js +1 -0
  44. package/dist/application/agent/tool-catalog.d.ts +14 -0
  45. package/dist/application/agent/tool-catalog.js +1 -0
  46. package/dist/application/agent/tool-display.d.ts +7 -0
  47. package/dist/application/agent/tool-display.js +1 -0
  48. package/dist/application/agent/tool-hook-lifecycle.d.ts +19 -0
  49. package/dist/application/agent/tool-hook-lifecycle.js +1 -0
  50. package/dist/application/auth/authentication-service.d.ts +20 -0
  51. package/dist/application/auth/authentication-service.js +1 -0
  52. package/dist/application/chat/chat-service.d.ts +12 -0
  53. package/dist/application/chat/chat-service.js +1 -0
  54. package/dist/application/chat/pending-attachment-store.d.ts +15 -0
  55. package/dist/application/chat/pending-attachment-store.js +1 -0
  56. package/dist/application/commands/application-command-executor.d.ts +23 -0
  57. package/dist/application/commands/application-command-executor.js +3 -0
  58. package/dist/application/commands/cli-args.d.ts +6 -0
  59. package/dist/application/commands/cli-args.js +1 -0
  60. package/dist/application/commands/cli-command-services.d.ts +17 -0
  61. package/dist/application/commands/cli-command-services.js +33 -0
  62. package/dist/application/commands/command-cancellation.d.ts +6 -0
  63. package/dist/application/commands/command-cancellation.js +1 -0
  64. package/dist/application/commands/command-catalog.d.ts +6 -0
  65. package/dist/application/commands/command-catalog.js +1 -0
  66. package/dist/application/commands/command-contract.d.ts +60 -0
  67. package/dist/application/commands/command-contract.js +0 -0
  68. package/dist/application/commands/command-hints.d.ts +9 -0
  69. package/dist/application/commands/command-hints.js +1 -0
  70. package/dist/application/commands/command-output.d.ts +4 -0
  71. package/dist/application/commands/command-output.js +0 -0
  72. package/dist/application/commands/command-parser.d.ts +10 -0
  73. package/dist/application/commands/command-parser.js +1 -0
  74. package/dist/application/commands/command-presentation.d.ts +7 -0
  75. package/dist/application/commands/command-presentation.js +3 -0
  76. package/dist/application/commands/command-registry.d.ts +11 -0
  77. package/dist/application/commands/command-registry.js +1 -0
  78. package/dist/application/commands/command-runtime.d.ts +2 -0
  79. package/dist/application/commands/command-runtime.js +1 -0
  80. package/dist/application/commands/goal-command-handlers.d.ts +3 -0
  81. package/dist/application/commands/goal-command-handlers.js +7 -0
  82. package/dist/application/commands/media-command-handlers.d.ts +9 -0
  83. package/dist/application/commands/media-command-handlers.js +9 -0
  84. package/dist/application/commands/media-command-output.d.ts +11 -0
  85. package/dist/application/commands/media-command-output.js +1 -0
  86. package/dist/application/commands/memory-command-handler.d.ts +29 -0
  87. package/dist/application/commands/memory-command-handler.js +12 -0
  88. package/dist/application/commands/runtime-command-handlers.d.ts +7 -0
  89. package/dist/application/commands/runtime-command-handlers.js +14 -0
  90. package/dist/application/commands/stream-output.d.ts +4 -0
  91. package/dist/application/commands/stream-output.js +1 -0
  92. package/dist/application/commands/utility-commands.d.ts +6 -0
  93. package/dist/application/commands/utility-commands.js +10 -0
  94. package/dist/application/config/execution-config.d.ts +4 -0
  95. package/dist/application/config/execution-config.js +1 -0
  96. package/dist/application/extensions/extension-list-contract.d.ts +18 -0
  97. package/dist/application/extensions/extension-list-contract.js +0 -0
  98. package/dist/application/extensions/extension-list-formatters.d.ts +38 -0
  99. package/dist/application/extensions/extension-list-formatters.js +1 -0
  100. package/dist/application/extensions/extension-list-output.d.ts +3 -0
  101. package/dist/application/extensions/extension-list-output.js +3 -0
  102. package/dist/application/extensions/plugin-contribution-registry.d.ts +31 -0
  103. package/dist/application/extensions/plugin-contribution-registry.js +1 -0
  104. package/dist/application/extensions/plugin-detail-contract.d.ts +25 -0
  105. package/dist/application/extensions/plugin-detail-contract.js +0 -0
  106. package/dist/application/extensions/plugin-detail-service.d.ts +3 -0
  107. package/dist/application/extensions/plugin-detail-service.js +1 -0
  108. package/dist/application/extensions/skill-scope-store.d.ts +23 -0
  109. package/dist/application/extensions/skill-scope-store.js +1 -0
  110. package/dist/application/formatting/compact-number.d.ts +2 -0
  111. package/dist/application/formatting/compact-number.js +1 -0
  112. package/dist/application/formatting/compact-table.d.ts +22 -0
  113. package/dist/application/formatting/compact-table.js +2 -0
  114. package/dist/application/intent/completion-gate.d.ts +3 -0
  115. package/dist/application/intent/completion-gate.js +1 -0
  116. package/dist/application/intent/evidence-ledger.d.ts +22 -0
  117. package/dist/application/intent/evidence-ledger.js +1 -0
  118. package/dist/application/intent/evidence-recording-tool-executor.d.ts +16 -0
  119. package/dist/application/intent/evidence-recording-tool-executor.js +1 -0
  120. package/dist/application/intent/intent-compiler.d.ts +11 -0
  121. package/dist/application/intent/intent-compiler.js +2 -0
  122. package/dist/application/intent/intent-execution-gate.d.ts +11 -0
  123. package/dist/application/intent/intent-execution-gate.js +1 -0
  124. package/dist/application/intent/intent-host-context.d.ts +6 -0
  125. package/dist/application/intent/intent-host-context.js +1 -0
  126. package/dist/application/intent/intent-run-controller.d.ts +56 -0
  127. package/dist/application/intent/intent-run-controller.js +3 -0
  128. package/dist/application/intent/project-policy.d.ts +16 -0
  129. package/dist/application/intent/project-policy.js +1 -0
  130. package/dist/application/media/video-operation-poller.d.ts +5 -0
  131. package/dist/application/media/video-operation-poller.js +1 -0
  132. package/dist/application/memory/memory-capture-policy.d.ts +10 -0
  133. package/dist/application/memory/memory-capture-policy.js +1 -0
  134. package/dist/application/memory/memory-consolidation-service.d.ts +12 -0
  135. package/dist/application/memory/memory-consolidation-service.js +1 -0
  136. package/dist/application/memory/memory-context-assembler.d.ts +24 -0
  137. package/dist/application/memory/memory-context-assembler.js +1 -0
  138. package/dist/application/memory/memory-extractor.d.ts +21 -0
  139. package/dist/application/memory/memory-extractor.js +2 -0
  140. package/dist/application/memory/memory-service.d.ts +34 -0
  141. package/dist/application/memory/memory-service.js +1 -0
  142. package/dist/application/model/cached-model-catalog.d.ts +19 -0
  143. package/dist/application/model/cached-model-catalog.js +1 -0
  144. package/dist/application/model/initial-model-selection.d.ts +10 -0
  145. package/dist/application/model/initial-model-selection.js +1 -0
  146. package/dist/application/model/model-catalog-service.d.ts +6 -0
  147. package/dist/application/model/model-catalog-service.js +1 -0
  148. package/dist/application/model/model-context-window.d.ts +3 -0
  149. package/dist/application/model/model-context-window.js +1 -0
  150. package/dist/application/model/model-response-retry.d.ts +15 -0
  151. package/dist/application/model/model-response-retry.js +1 -0
  152. package/dist/application/orchestration/abortable-wait.d.ts +2 -0
  153. package/dist/application/orchestration/abortable-wait.js +1 -0
  154. package/dist/application/orchestration/cli-subagent-service.d.ts +77 -0
  155. package/dist/application/orchestration/cli-subagent-service.js +13 -0
  156. package/dist/application/orchestration/cli-turn-event-projector.d.ts +15 -0
  157. package/dist/application/orchestration/cli-turn-event-projector.js +1 -0
  158. package/dist/application/orchestration/cli-turn-events.d.ts +76 -0
  159. package/dist/application/orchestration/cli-turn-events.js +1 -0
  160. package/dist/application/orchestration/cli-turn-persistence.d.ts +6 -0
  161. package/dist/application/orchestration/cli-turn-persistence.js +1 -0
  162. package/dist/application/orchestration/goal-evaluator.d.ts +18 -0
  163. package/dist/application/orchestration/goal-evaluator.js +3 -0
  164. package/dist/application/orchestration/goal-input.d.ts +3 -0
  165. package/dist/application/orchestration/goal-input.js +1 -0
  166. package/dist/application/orchestration/goal-output.d.ts +2 -0
  167. package/dist/application/orchestration/goal-output.js +2 -0
  168. package/dist/application/orchestration/goal-runner.d.ts +22 -0
  169. package/dist/application/orchestration/goal-runner.js +10 -0
  170. package/dist/application/orchestration/goal-usage.d.ts +9 -0
  171. package/dist/application/orchestration/goal-usage.js +1 -0
  172. package/dist/application/orchestration/headless-agent-turn.d.ts +36 -0
  173. package/dist/application/orchestration/headless-agent-turn.js +4 -0
  174. package/dist/application/orchestration/orchestration-constants.d.ts +3 -0
  175. package/dist/application/orchestration/orchestration-constants.js +1 -0
  176. package/dist/application/orchestration/subagent-coordinator.d.ts +41 -0
  177. package/dist/application/orchestration/subagent-coordinator.js +1 -0
  178. package/dist/application/orchestration/subagent-handoff.d.ts +3 -0
  179. package/dist/application/orchestration/subagent-handoff.js +3 -0
  180. package/dist/application/orchestration/subagent-tool-executor.d.ts +12 -0
  181. package/dist/application/orchestration/subagent-tool-executor.js +1 -0
  182. package/dist/application/orchestration/task-graph.d.ts +13 -0
  183. package/dist/application/orchestration/task-graph.js +1 -0
  184. package/dist/application/orchestration/task-scheduler.d.ts +18 -0
  185. package/dist/application/orchestration/task-scheduler.js +1 -0
  186. package/dist/application/project/project-trust-service.d.ts +13 -0
  187. package/dist/application/project/project-trust-service.js +1 -0
  188. package/dist/application/project-intelligence/project-intelligence-constants.d.ts +56 -0
  189. package/dist/application/project-intelligence/project-intelligence-constants.js +1 -0
  190. package/dist/application/project-intelligence/project-intelligence-service.d.ts +14 -0
  191. package/dist/application/project-intelligence/project-intelligence-service.js +1 -0
  192. package/dist/application/protocol/browser-host-tool-executor.d.ts +51 -0
  193. package/dist/application/protocol/browser-host-tool-executor.js +2 -0
  194. package/dist/application/protocol/computer-host-tool-executor.d.ts +45 -0
  195. package/dist/application/protocol/computer-host-tool-executor.js +2 -0
  196. package/dist/application/protocol/desktop-agent-command.d.ts +9 -0
  197. package/dist/application/protocol/desktop-agent-command.js +3 -0
  198. package/dist/application/protocol/desktop-agent-contracts.d.ts +34 -0
  199. package/dist/application/protocol/desktop-agent-contracts.js +1 -0
  200. package/dist/application/protocol/desktop-agent-helpers.d.ts +5 -0
  201. package/dist/application/protocol/desktop-agent-helpers.js +1 -0
  202. package/dist/application/protocol/desktop-agent-request-parser.d.ts +211 -0
  203. package/dist/application/protocol/desktop-agent-request-parser.js +1 -0
  204. package/dist/application/protocol/desktop-approval-broker.d.ts +26 -0
  205. package/dist/application/protocol/desktop-approval-broker.js +1 -0
  206. package/dist/application/protocol/desktop-attachment-store.d.ts +33 -0
  207. package/dist/application/protocol/desktop-attachment-store.js +1 -0
  208. package/dist/application/protocol/desktop-command-catalog.d.ts +2 -0
  209. package/dist/application/protocol/desktop-command-catalog.js +1 -0
  210. package/dist/application/protocol/desktop-command-contract.d.ts +26 -0
  211. package/dist/application/protocol/desktop-command-contract.js +1 -0
  212. package/dist/application/protocol/desktop-command-executor.d.ts +17 -0
  213. package/dist/application/protocol/desktop-command-executor.js +1 -0
  214. package/dist/application/protocol/desktop-command-output.d.ts +15 -0
  215. package/dist/application/protocol/desktop-command-output.js +1 -0
  216. package/dist/application/protocol/desktop-execution-policy.d.ts +19 -0
  217. package/dist/application/protocol/desktop-execution-policy.js +1 -0
  218. package/dist/application/protocol/desktop-extension-request-handler.d.ts +14 -0
  219. package/dist/application/protocol/desktop-extension-request-handler.js +1 -0
  220. package/dist/application/protocol/desktop-extension-service.d.ts +44 -0
  221. package/dist/application/protocol/desktop-extension-service.js +3 -0
  222. package/dist/application/protocol/desktop-host-bridge.d.ts +33 -0
  223. package/dist/application/protocol/desktop-host-bridge.js +1 -0
  224. package/dist/application/protocol/desktop-host-capabilities.d.ts +12 -0
  225. package/dist/application/protocol/desktop-host-capabilities.js +1 -0
  226. package/dist/application/protocol/desktop-host-tool-executor.d.ts +76 -0
  227. package/dist/application/protocol/desktop-host-tool-executor.js +2 -0
  228. package/dist/application/protocol/desktop-intent-event-writer.d.ts +20 -0
  229. package/dist/application/protocol/desktop-intent-event-writer.js +1 -0
  230. package/dist/application/protocol/desktop-mcp-events.d.ts +10 -0
  231. package/dist/application/protocol/desktop-mcp-events.js +1 -0
  232. package/dist/application/protocol/desktop-orchestration-events.d.ts +2 -0
  233. package/dist/application/protocol/desktop-orchestration-events.js +2 -0
  234. package/dist/application/protocol/desktop-protocol-helpers.d.ts +13 -0
  235. package/dist/application/protocol/desktop-protocol-helpers.js +1 -0
  236. package/dist/application/protocol/json-line-writer.d.ts +31 -0
  237. package/dist/application/protocol/json-line-writer.js +2 -0
  238. package/dist/application/protocol/jsonl-agent-command.d.ts +3 -0
  239. package/dist/application/protocol/jsonl-agent-command.js +3 -0
  240. package/dist/application/protocol/jsonl-protocol.d.ts +82 -0
  241. package/dist/application/protocol/jsonl-protocol.js +2 -0
  242. package/dist/application/protocol/tool-image-content.d.ts +4 -0
  243. package/dist/application/protocol/tool-image-content.js +1 -0
  244. package/dist/application/security/delegated-worker-policy.d.ts +3 -0
  245. package/dist/application/security/delegated-worker-policy.js +1 -0
  246. package/dist/application/security/desktop-tool-scope-policy.d.ts +4 -0
  247. package/dist/application/security/desktop-tool-scope-policy.js +1 -0
  248. package/dist/application/security/tool-action-risk-analyzer.d.ts +13 -0
  249. package/dist/application/security/tool-action-risk-analyzer.js +1 -0
  250. package/dist/application/security/tool-approval-service.d.ts +43 -0
  251. package/dist/application/security/tool-approval-service.js +1 -0
  252. package/dist/application/security/tool-policy-registry.d.ts +20 -0
  253. package/dist/application/security/tool-policy-registry.js +1 -0
  254. package/dist/application/security/tool-risk-classifier.d.ts +19 -0
  255. package/dist/application/security/tool-risk-classifier.js +1 -0
  256. package/dist/application/security/workspace-permission-policy.d.ts +10 -0
  257. package/dist/application/security/workspace-permission-policy.js +1 -0
  258. package/dist/application/session/project-session-access.d.ts +8 -0
  259. package/dist/application/session/project-session-access.js +1 -0
  260. package/dist/application/session/session-compaction-service.d.ts +10 -0
  261. package/dist/application/session/session-compaction-service.js +1 -0
  262. package/dist/application/session/session-turn-lifecycle.d.ts +5 -0
  263. package/dist/application/session/session-turn-lifecycle.js +1 -0
  264. package/dist/application/workspace/session-execution-workspace.d.ts +59 -0
  265. package/dist/application/workspace/session-execution-workspace.js +3 -0
  266. package/dist/application/workspace/workspace-constants.d.ts +17 -0
  267. package/dist/application/workspace/workspace-constants.js +1 -0
  268. package/dist/application/workspace/workspace-file-index.d.ts +14 -0
  269. package/dist/application/workspace/workspace-file-index.js +1 -0
  270. package/dist/application/workspace/workspace-file-reference-resolver.d.ts +20 -0
  271. package/dist/application/workspace/workspace-file-reference-resolver.js +17 -0
  272. package/dist/application/workspace/workspace-instruction-loader.d.ts +8 -0
  273. package/dist/application/workspace/workspace-instruction-loader.js +1 -0
  274. package/dist/bootstrap/composition-root.d.ts +7 -0
  275. package/dist/bootstrap/composition-root.js +1 -0
  276. package/dist/bootstrap/global-cli-options.d.ts +6 -0
  277. package/dist/bootstrap/global-cli-options.js +1 -0
  278. package/dist/bootstrap/native-devtools-stub.d.ts +10 -0
  279. package/dist/bootstrap/native-devtools-stub.js +1 -0
  280. package/dist/bootstrap/native-entry.d.ts +1 -0
  281. package/dist/bootstrap/native-entry.js +2 -0
  282. package/dist/bootstrap/native-tiktoken.d.ts +4 -0
  283. package/dist/bootstrap/native-tiktoken.js +1 -0
  284. package/dist/bootstrap/runtime-factory.d.ts +46 -0
  285. package/dist/bootstrap/runtime-factory.js +1 -0
  286. package/dist/bootstrap/shutdown-manager.d.ts +11 -0
  287. package/dist/bootstrap/shutdown-manager.js +1 -0
  288. package/dist/bootstrap/startup-sequence.d.ts +5 -0
  289. package/dist/bootstrap/startup-sequence.js +1 -0
  290. package/dist/domain/auth/auth-profile.d.ts +14 -0
  291. package/dist/domain/auth/auth-profile.js +1 -0
  292. package/dist/domain/config/config-schema.d.ts +24 -0
  293. package/dist/domain/config/config-schema.js +1 -0
  294. package/dist/domain/errors/cli-command-hint.d.ts +5 -0
  295. package/dist/domain/errors/cli-command-hint.js +0 -0
  296. package/dist/domain/errors/cli-error.d.ts +35 -0
  297. package/dist/domain/errors/cli-error.js +1 -0
  298. package/dist/domain/errors/error-codes.d.ts +51 -0
  299. package/dist/domain/errors/error-codes.js +1 -0
  300. package/dist/domain/extensions/extension-constants.d.ts +1 -0
  301. package/dist/domain/extensions/extension-constants.js +1 -0
  302. package/dist/domain/extensions/extension-scope.d.ts +3 -0
  303. package/dist/domain/extensions/extension-scope.js +1 -0
  304. package/dist/domain/extensions/extension-state.d.ts +5 -0
  305. package/dist/domain/extensions/extension-state.js +1 -0
  306. package/dist/domain/extensions/hook-manifest.d.ts +13 -0
  307. package/dist/domain/extensions/hook-manifest.js +1 -0
  308. package/dist/domain/extensions/host-tool-plugin-ids.d.ts +5 -0
  309. package/dist/domain/extensions/host-tool-plugin-ids.js +1 -0
  310. package/dist/domain/extensions/mcp-config.d.ts +35 -0
  311. package/dist/domain/extensions/mcp-config.js +1 -0
  312. package/dist/domain/extensions/plugin-agent-manifest.d.ts +8 -0
  313. package/dist/domain/extensions/plugin-agent-manifest.js +1 -0
  314. package/dist/domain/extensions/plugin-manifest.d.ts +23 -0
  315. package/dist/domain/extensions/plugin-manifest.js +1 -0
  316. package/dist/domain/extensions/skill-manifest.d.ts +10 -0
  317. package/dist/domain/extensions/skill-manifest.js +3 -0
  318. package/dist/domain/extensions/yaml-subset.d.ts +9 -0
  319. package/dist/domain/extensions/yaml-subset.js +2 -0
  320. package/dist/domain/filesystem/file-change-diff.d.ts +21 -0
  321. package/dist/domain/filesystem/file-change-diff.js +3 -0
  322. package/dist/domain/intent/intent-contract.d.ts +33 -0
  323. package/dist/domain/intent/intent-contract.js +1 -0
  324. package/dist/domain/media/gateway-media-contract.d.ts +23 -0
  325. package/dist/domain/media/gateway-media-contract.js +1 -0
  326. package/dist/domain/media/media-constants.d.ts +3 -0
  327. package/dist/domain/media/media-constants.js +1 -0
  328. package/dist/domain/media/media-contract.d.ts +28 -0
  329. package/dist/domain/media/media-contract.js +0 -0
  330. package/dist/domain/media/media-execution-policy.d.ts +9 -0
  331. package/dist/domain/media/media-execution-policy.js +1 -0
  332. package/dist/domain/memory/memory-constants.d.ts +3 -0
  333. package/dist/domain/memory/memory-constants.js +1 -0
  334. package/dist/domain/memory/memory-kinds.d.ts +15 -0
  335. package/dist/domain/memory/memory-kinds.js +1 -0
  336. package/dist/domain/memory/memory-retrieval-policy.d.ts +3 -0
  337. package/dist/domain/memory/memory-retrieval-policy.js +1 -0
  338. package/dist/domain/memory/memory-search.d.ts +33 -0
  339. package/dist/domain/memory/memory-search.js +2 -0
  340. package/dist/domain/memory/memory.d.ts +48 -0
  341. package/dist/domain/memory/memory.js +1 -0
  342. package/dist/domain/orchestration/goal.d.ts +57 -0
  343. package/dist/domain/orchestration/goal.js +1 -0
  344. package/dist/domain/orchestration/subagent-identity.d.ts +2 -0
  345. package/dist/domain/orchestration/subagent-identity.js +1 -0
  346. package/dist/domain/orchestration/subagent.d.ts +33 -0
  347. package/dist/domain/orchestration/subagent.js +0 -0
  348. package/dist/domain/orchestration/work-plan.d.ts +15 -0
  349. package/dist/domain/orchestration/work-plan.js +0 -0
  350. package/dist/domain/project/project-identity.d.ts +6 -0
  351. package/dist/domain/project/project-identity.js +1 -0
  352. package/dist/domain/runtime/assistant-delta-normalizer.d.ts +11 -0
  353. package/dist/domain/runtime/assistant-delta-normalizer.js +1 -0
  354. package/dist/domain/runtime/assistant-stream-text.d.ts +11 -0
  355. package/dist/domain/runtime/assistant-stream-text.js +1 -0
  356. package/dist/domain/runtime/gateway-request-budget.d.ts +19 -0
  357. package/dist/domain/runtime/gateway-request-budget.js +1 -0
  358. package/dist/domain/runtime/resource-limits.d.ts +92 -0
  359. package/dist/domain/runtime/resource-limits.js +1 -0
  360. package/dist/domain/session/attachment.d.ts +15 -0
  361. package/dist/domain/session/attachment.js +0 -0
  362. package/dist/domain/session/session-schema.d.ts +6 -0
  363. package/dist/domain/session/session-schema.js +1 -0
  364. package/dist/domain/session/session.d.ts +27 -0
  365. package/dist/domain/session/session.js +0 -0
  366. package/dist/domain/settings/settings-document.d.ts +8 -0
  367. package/dist/domain/settings/settings-document.js +1 -0
  368. package/dist/domain/validation/record-schema.d.ts +4 -0
  369. package/dist/domain/validation/record-schema.js +1 -0
  370. package/dist/domain/workspace/workspace-settings.d.ts +14 -0
  371. package/dist/domain/workspace/workspace-settings.js +1 -0
  372. package/dist/infrastructure/agent-sdk/agent-instance-factory.d.ts +22 -0
  373. package/dist/infrastructure/agent-sdk/agent-instance-factory.js +1 -0
  374. package/dist/infrastructure/agent-sdk/model-response-metrics.d.ts +7 -0
  375. package/dist/infrastructure/agent-sdk/model-response-metrics.js +1 -0
  376. package/dist/infrastructure/agent-sdk/model-tool-name-mapper.d.ts +13 -0
  377. package/dist/infrastructure/agent-sdk/model-tool-name-mapper.js +1 -0
  378. package/dist/infrastructure/agent-sdk/sdk-constants.d.ts +2 -0
  379. package/dist/infrastructure/agent-sdk/sdk-constants.js +1 -0
  380. package/dist/infrastructure/agent-sdk/tool-calling-completion-client.d.ts +4 -0
  381. package/dist/infrastructure/agent-sdk/tool-calling-completion-client.js +1 -0
  382. package/dist/infrastructure/agent-sdk/tool-calling-model-client.d.ts +11 -0
  383. package/dist/infrastructure/agent-sdk/tool-calling-model-client.js +1 -0
  384. package/dist/infrastructure/cache/cache-policy.d.ts +9 -0
  385. package/dist/infrastructure/cache/cache-policy.js +1 -0
  386. package/dist/infrastructure/cache/file-cache-store.d.ts +25 -0
  387. package/dist/infrastructure/cache/file-cache-store.js +2 -0
  388. package/dist/infrastructure/clipboard/clipboard-adapter-factory.d.ts +11 -0
  389. package/dist/infrastructure/clipboard/clipboard-adapter-factory.js +1 -0
  390. package/dist/infrastructure/clipboard/clipboard-constants.d.ts +1 -0
  391. package/dist/infrastructure/clipboard/clipboard-constants.js +1 -0
  392. package/dist/infrastructure/clipboard/clipboard-policy.d.ts +8 -0
  393. package/dist/infrastructure/clipboard/clipboard-policy.js +1 -0
  394. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.d.ts +10 -0
  395. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.js +1 -0
  396. package/dist/infrastructure/clipboard/image-normalizer.d.ts +12 -0
  397. package/dist/infrastructure/clipboard/image-normalizer.js +1 -0
  398. package/dist/infrastructure/clipboard/windows-clipboard-adapter.d.ts +7 -0
  399. package/dist/infrastructure/clipboard/windows-clipboard-adapter.js +1 -0
  400. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.d.ts +7 -0
  401. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.js +1 -0
  402. package/dist/infrastructure/config/config-loader.d.ts +19 -0
  403. package/dist/infrastructure/config/config-loader.js +2 -0
  404. package/dist/infrastructure/config/environment-values.d.ts +2 -0
  405. package/dist/infrastructure/config/environment-values.js +1 -0
  406. package/dist/infrastructure/credentials/composite-credential-store.d.ts +11 -0
  407. package/dist/infrastructure/credentials/composite-credential-store.js +1 -0
  408. package/dist/infrastructure/credentials/encrypted-file-credential-store.d.ts +17 -0
  409. package/dist/infrastructure/credentials/encrypted-file-credential-store.js +3 -0
  410. package/dist/infrastructure/credentials/environment-credential-store.d.ts +11 -0
  411. package/dist/infrastructure/credentials/environment-credential-store.js +1 -0
  412. package/dist/infrastructure/credentials/secret-input.d.ts +7 -0
  413. package/dist/infrastructure/credentials/secret-input.js +3 -0
  414. package/dist/infrastructure/extensions/composite-mcp-config-store.d.ts +9 -0
  415. package/dist/infrastructure/extensions/composite-mcp-config-store.js +1 -0
  416. package/dist/infrastructure/extensions/extension-directory-reader.d.ts +2 -0
  417. package/dist/infrastructure/extensions/extension-directory-reader.js +1 -0
  418. package/dist/infrastructure/extensions/extension-integrity.d.ts +7 -0
  419. package/dist/infrastructure/extensions/extension-integrity.js +1 -0
  420. package/dist/infrastructure/extensions/extension-source-resolver.d.ts +6 -0
  421. package/dist/infrastructure/extensions/extension-source-resolver.js +1 -0
  422. package/dist/infrastructure/extensions/extensions-constants.d.ts +6 -0
  423. package/dist/infrastructure/extensions/extensions-constants.js +1 -0
  424. package/dist/infrastructure/extensions/file-mcp-config-store.d.ts +15 -0
  425. package/dist/infrastructure/extensions/file-mcp-config-store.js +2 -0
  426. package/dist/infrastructure/extensions/hook-runtime.d.ts +18 -0
  427. package/dist/infrastructure/extensions/hook-runtime.js +1 -0
  428. package/dist/infrastructure/extensions/mcp-runtime.d.ts +58 -0
  429. package/dist/infrastructure/extensions/mcp-runtime.js +1 -0
  430. package/dist/infrastructure/extensions/plugin-agent-discovery.d.ts +4 -0
  431. package/dist/infrastructure/extensions/plugin-agent-discovery.js +1 -0
  432. package/dist/infrastructure/extensions/plugin-discovery.d.ts +5 -0
  433. package/dist/infrastructure/extensions/plugin-discovery.js +1 -0
  434. package/dist/infrastructure/extensions/plugin-manager.d.ts +23 -0
  435. package/dist/infrastructure/extensions/plugin-manager.js +2 -0
  436. package/dist/infrastructure/extensions/skill-discovery.d.ts +4 -0
  437. package/dist/infrastructure/extensions/skill-discovery.js +1 -0
  438. package/dist/infrastructure/extensions/skill-installer.d.ts +9 -0
  439. package/dist/infrastructure/extensions/skill-installer.js +1 -0
  440. package/dist/infrastructure/extensions/skill-manager.d.ts +22 -0
  441. package/dist/infrastructure/extensions/skill-manager.js +2 -0
  442. package/dist/infrastructure/extensions/skill-roots.d.ts +19 -0
  443. package/dist/infrastructure/extensions/skill-roots.js +1 -0
  444. package/dist/infrastructure/extensions/skill-tool-executor.d.ts +20 -0
  445. package/dist/infrastructure/extensions/skill-tool-executor.js +2 -0
  446. package/dist/infrastructure/filesystem/atomic-file-store.d.ts +28 -0
  447. package/dist/infrastructure/filesystem/atomic-file-store.js +1 -0
  448. package/dist/infrastructure/filesystem/bounded-file-reader.d.ts +6 -0
  449. package/dist/infrastructure/filesystem/bounded-file-reader.js +1 -0
  450. package/dist/infrastructure/filesystem/bounded-json-reader.d.ts +1 -0
  451. package/dist/infrastructure/filesystem/bounded-json-reader.js +1 -0
  452. package/dist/infrastructure/filesystem/filesystem-constants.d.ts +8 -0
  453. package/dist/infrastructure/filesystem/filesystem-constants.js +1 -0
  454. package/dist/infrastructure/filesystem/fs-errors.d.ts +2 -0
  455. package/dist/infrastructure/filesystem/fs-errors.js +1 -0
  456. package/dist/infrastructure/filesystem/gateway-media-input-reader.d.ts +12 -0
  457. package/dist/infrastructure/filesystem/gateway-media-input-reader.js +1 -0
  458. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.d.ts +25 -0
  459. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.js +3 -0
  460. package/dist/infrastructure/filesystem/path-resolver.d.ts +20 -0
  461. package/dist/infrastructure/filesystem/path-resolver.js +1 -0
  462. package/dist/infrastructure/filesystem/workspace-media-artifact-store.d.ts +13 -0
  463. package/dist/infrastructure/filesystem/workspace-media-artifact-store.js +1 -0
  464. package/dist/infrastructure/logging/daily-rotating-file-writer.d.ts +26 -0
  465. package/dist/infrastructure/logging/daily-rotating-file-writer.js +2 -0
  466. package/dist/infrastructure/logging/log-redactor.d.ts +2 -0
  467. package/dist/infrastructure/logging/log-redactor.js +1 -0
  468. package/dist/infrastructure/logging/logging-constants.d.ts +3 -0
  469. package/dist/infrastructure/logging/logging-constants.js +1 -0
  470. package/dist/infrastructure/logging/logging-policy.d.ts +6 -0
  471. package/dist/infrastructure/logging/logging-policy.js +1 -0
  472. package/dist/infrastructure/logging/structured-logger.d.ts +24 -0
  473. package/dist/infrastructure/logging/structured-logger.js +4 -0
  474. package/dist/infrastructure/memory/file-memory-store.d.ts +37 -0
  475. package/dist/infrastructure/memory/file-memory-store.js +11 -0
  476. package/dist/infrastructure/network/safe-media-downloader.d.ts +23 -0
  477. package/dist/infrastructure/network/safe-media-downloader.js +1 -0
  478. package/dist/infrastructure/observability/tool-execution-logger.d.ts +11 -0
  479. package/dist/infrastructure/observability/tool-execution-logger.js +1 -0
  480. package/dist/infrastructure/platform/host-platform.d.ts +16 -0
  481. package/dist/infrastructure/platform/host-platform.js +1 -0
  482. package/dist/infrastructure/platform/host-process.d.ts +31 -0
  483. package/dist/infrastructure/platform/host-process.js +1 -0
  484. package/dist/infrastructure/platform/platform-constants.d.ts +4 -0
  485. package/dist/infrastructure/platform/platform-constants.js +1 -0
  486. package/dist/infrastructure/platform/platform-paths.d.ts +25 -0
  487. package/dist/infrastructure/platform/platform-paths.js +1 -0
  488. package/dist/infrastructure/platform/process-identity.d.ts +8 -0
  489. package/dist/infrastructure/platform/process-identity.js +1 -0
  490. package/dist/infrastructure/platform/process-termination.d.ts +4 -0
  491. package/dist/infrastructure/platform/process-termination.js +1 -0
  492. package/dist/infrastructure/platform/read-only-executable.d.ts +4 -0
  493. package/dist/infrastructure/platform/read-only-executable.js +1 -0
  494. package/dist/infrastructure/project/file-project-trust-store.d.ts +12 -0
  495. package/dist/infrastructure/project/file-project-trust-store.js +2 -0
  496. package/dist/infrastructure/sdk/chat-completion-adapter.d.ts +8 -0
  497. package/dist/infrastructure/sdk/chat-completion-adapter.js +1 -0
  498. package/dist/infrastructure/sdk/lotagate-client-factory.d.ts +3 -0
  499. package/dist/infrastructure/sdk/lotagate-client-factory.js +1 -0
  500. package/dist/infrastructure/sdk/model-catalog-adapter.d.ts +19 -0
  501. package/dist/infrastructure/sdk/model-catalog-adapter.js +1 -0
  502. package/dist/infrastructure/sdk/sdk-media-gateway-client.d.ts +24 -0
  503. package/dist/infrastructure/sdk/sdk-media-gateway-client.js +1 -0
  504. package/dist/infrastructure/sessions/file-goal-store.d.ts +21 -0
  505. package/dist/infrastructure/sessions/file-goal-store.js +1 -0
  506. package/dist/infrastructure/sessions/file-session-store.d.ts +50 -0
  507. package/dist/infrastructure/sessions/file-session-store.js +4 -0
  508. package/dist/infrastructure/sessions/project-session-paths.d.ts +17 -0
  509. package/dist/infrastructure/sessions/project-session-paths.js +1 -0
  510. package/dist/infrastructure/sessions/session-constants.d.ts +3 -0
  511. package/dist/infrastructure/sessions/session-constants.js +1 -0
  512. package/dist/infrastructure/sessions/session-index.d.ts +16 -0
  513. package/dist/infrastructure/sessions/session-index.js +3 -0
  514. package/dist/infrastructure/sessions/session-journal-health.d.ts +7 -0
  515. package/dist/infrastructure/sessions/session-journal-health.js +1 -0
  516. package/dist/infrastructure/sessions/session-journal.d.ts +22 -0
  517. package/dist/infrastructure/sessions/session-journal.js +6 -0
  518. package/dist/infrastructure/sessions/subagent-journal-store.d.ts +28 -0
  519. package/dist/infrastructure/sessions/subagent-journal-store.js +2 -0
  520. package/dist/infrastructure/shell/shell-tool-executor.d.ts +21 -0
  521. package/dist/infrastructure/shell/shell-tool-executor.js +2 -0
  522. package/dist/infrastructure/tokens/tiktoken-token-estimator.d.ts +18 -0
  523. package/dist/infrastructure/tokens/tiktoken-token-estimator.js +1 -0
  524. package/dist/infrastructure/tokens/token-constants.d.ts +1 -0
  525. package/dist/infrastructure/tokens/token-constants.js +1 -0
  526. package/dist/infrastructure/workspace/workspace-settings-store.d.ts +10 -0
  527. package/dist/infrastructure/workspace/workspace-settings-store.js +4 -0
  528. package/dist/main.d.ts +7 -0
  529. package/dist/main.js +3 -0
  530. package/dist/ports/cache-store.d.ts +10 -0
  531. package/dist/ports/cache-store.js +0 -0
  532. package/dist/ports/chat-model.d.ts +30 -0
  533. package/dist/ports/chat-model.js +0 -0
  534. package/dist/ports/clipboard-adapter.d.ts +7 -0
  535. package/dist/ports/clipboard-adapter.js +0 -0
  536. package/dist/ports/clipboard-text-adapter.d.ts +3 -0
  537. package/dist/ports/clipboard-text-adapter.js +0 -0
  538. package/dist/ports/credential-store.d.ts +7 -0
  539. package/dist/ports/credential-store.js +0 -0
  540. package/dist/ports/goal-store.d.ts +12 -0
  541. package/dist/ports/goal-store.js +0 -0
  542. package/dist/ports/logger.d.ts +8 -0
  543. package/dist/ports/logger.js +0 -0
  544. package/dist/ports/media-gateway-client.d.ts +60 -0
  545. package/dist/ports/media-gateway-client.js +0 -0
  546. package/dist/ports/memory-store.d.ts +26 -0
  547. package/dist/ports/memory-store.js +0 -0
  548. package/dist/ports/model-completion-client.d.ts +8 -0
  549. package/dist/ports/model-completion-client.js +0 -0
  550. package/dist/ports/model-diagnostics.d.ts +17 -0
  551. package/dist/ports/model-diagnostics.js +0 -0
  552. package/dist/ports/project-trust-store.d.ts +12 -0
  553. package/dist/ports/project-trust-store.js +0 -0
  554. package/dist/ports/session-store.d.ts +59 -0
  555. package/dist/ports/session-store.js +0 -0
  556. package/dist/ports/subagent-lifecycle.d.ts +31 -0
  557. package/dist/ports/subagent-lifecycle.js +0 -0
  558. package/dist/ports/tool-activity.d.ts +13 -0
  559. package/dist/ports/tool-activity.js +0 -0
  560. package/dist/presentation/themes/theme.d.ts +19 -0
  561. package/dist/presentation/themes/theme.js +1 -0
  562. package/dist/presentation/tui/agent-initialization-renderer.d.ts +4 -0
  563. package/dist/presentation/tui/agent-initialization-renderer.js +1 -0
  564. package/dist/presentation/tui/context-display.d.ts +21 -0
  565. package/dist/presentation/tui/context-display.js +2 -0
  566. package/dist/presentation/tui/formatters.d.ts +6 -0
  567. package/dist/presentation/tui/formatters.js +1 -0
  568. package/dist/presentation/tui/ink/choice-window.d.ts +5 -0
  569. package/dist/presentation/tui/ink/choice-window.js +1 -0
  570. package/dist/presentation/tui/ink/components/activity-animation.d.ts +3 -0
  571. package/dist/presentation/tui/ink/components/activity-animation.js +1 -0
  572. package/dist/presentation/tui/ink/components/activity-entry.d.ts +6 -0
  573. package/dist/presentation/tui/ink/components/activity-entry.js +1 -0
  574. package/dist/presentation/tui/ink/components/activity-status.d.ts +10 -0
  575. package/dist/presentation/tui/ink/components/activity-status.js +1 -0
  576. package/dist/presentation/tui/ink/components/choice-modal.d.ts +11 -0
  577. package/dist/presentation/tui/ink/components/choice-modal.js +1 -0
  578. package/dist/presentation/tui/ink/components/composer.d.ts +40 -0
  579. package/dist/presentation/tui/ink/components/composer.js +8 -0
  580. package/dist/presentation/tui/ink/components/file-diff.d.ts +6 -0
  581. package/dist/presentation/tui/ink/components/file-diff.js +1 -0
  582. package/dist/presentation/tui/ink/components/modal.d.ts +8 -0
  583. package/dist/presentation/tui/ink/components/modal.js +2 -0
  584. package/dist/presentation/tui/ink/components/shimmer-text.d.ts +8 -0
  585. package/dist/presentation/tui/ink/components/shimmer-text.js +1 -0
  586. package/dist/presentation/tui/ink/components/subagent-activity.d.ts +11 -0
  587. package/dist/presentation/tui/ink/components/subagent-activity.js +1 -0
  588. package/dist/presentation/tui/ink/components/transcript.d.ts +40 -0
  589. package/dist/presentation/tui/ink/components/transcript.js +5 -0
  590. package/dist/presentation/tui/ink/components/welcome-panel.d.ts +6 -0
  591. package/dist/presentation/tui/ink/components/welcome-panel.js +1 -0
  592. package/dist/presentation/tui/ink/lotagate-tui.d.ts +6 -0
  593. package/dist/presentation/tui/ink/lotagate-tui.js +2 -0
  594. package/dist/presentation/tui/ink/markdown-inline-renderer.d.ts +4 -0
  595. package/dist/presentation/tui/ink/markdown-inline-renderer.js +1 -0
  596. package/dist/presentation/tui/ink/markdown-inline.d.ts +13 -0
  597. package/dist/presentation/tui/ink/markdown-inline.js +1 -0
  598. package/dist/presentation/tui/ink/markdown-message.d.ts +6 -0
  599. package/dist/presentation/tui/ink/markdown-message.js +2 -0
  600. package/dist/presentation/tui/ink/markdown-table.d.ts +16 -0
  601. package/dist/presentation/tui/ink/markdown-table.js +1 -0
  602. package/dist/presentation/tui/ink/tui-bridge.d.ts +193 -0
  603. package/dist/presentation/tui/ink/tui-bridge.js +1 -0
  604. package/dist/presentation/tui/terminal-capabilities.d.ts +15 -0
  605. package/dist/presentation/tui/terminal-capabilities.js +1 -0
  606. package/dist/presentation/tui/terminal-mouse.d.ts +5 -0
  607. package/dist/presentation/tui/terminal-mouse.js +1 -0
  608. package/dist/presentation/tui/terminal-screen.d.ts +10 -0
  609. package/dist/presentation/tui/terminal-screen.js +1 -0
  610. package/dist/presentation/tui/tui-agent-event-runner.d.ts +29 -0
  611. package/dist/presentation/tui/tui-agent-event-runner.js +1 -0
  612. package/dist/presentation/tui/tui-agent-turn-controller.d.ts +45 -0
  613. package/dist/presentation/tui/tui-agent-turn-controller.js +1 -0
  614. package/dist/presentation/tui/tui-application-contract.d.ts +11 -0
  615. package/dist/presentation/tui/tui-application-contract.js +1 -0
  616. package/dist/presentation/tui/tui-application.d.ts +61 -0
  617. package/dist/presentation/tui/tui-application.js +3 -0
  618. package/dist/presentation/tui/tui-clipboard-paste-handlers.d.ts +11 -0
  619. package/dist/presentation/tui/tui-clipboard-paste-handlers.js +1 -0
  620. package/dist/presentation/tui/tui-command-context.d.ts +3 -0
  621. package/dist/presentation/tui/tui-command-context.js +0 -0
  622. package/dist/presentation/tui/tui-command-executor.d.ts +38 -0
  623. package/dist/presentation/tui/tui-command-executor.js +4 -0
  624. package/dist/presentation/tui/tui-command-host-factory.d.ts +40 -0
  625. package/dist/presentation/tui/tui-command-host-factory.js +1 -0
  626. package/dist/presentation/tui/tui-context-compaction.d.ts +8 -0
  627. package/dist/presentation/tui/tui-context-compaction.js +1 -0
  628. package/dist/presentation/tui/tui-context-service.d.ts +2 -0
  629. package/dist/presentation/tui/tui-context-service.js +1 -0
  630. package/dist/presentation/tui/tui-extension-loader.d.ts +21 -0
  631. package/dist/presentation/tui/tui-extension-loader.js +1 -0
  632. package/dist/presentation/tui/tui-file-suggestions.d.ts +3 -0
  633. package/dist/presentation/tui/tui-file-suggestions.js +1 -0
  634. package/dist/presentation/tui/tui-goal-controller.d.ts +14 -0
  635. package/dist/presentation/tui/tui-goal-controller.js +1 -0
  636. package/dist/presentation/tui/tui-initial-model.d.ts +3 -0
  637. package/dist/presentation/tui/tui-initial-model.js +1 -0
  638. package/dist/presentation/tui/tui-lifecycle-actions.d.ts +13 -0
  639. package/dist/presentation/tui/tui-lifecycle-actions.js +1 -0
  640. package/dist/presentation/tui/tui-manual-compaction.d.ts +18 -0
  641. package/dist/presentation/tui/tui-manual-compaction.js +1 -0
  642. package/dist/presentation/tui/tui-media-model-selection.d.ts +12 -0
  643. package/dist/presentation/tui/tui-media-model-selection.js +1 -0
  644. package/dist/presentation/tui/tui-prompt-dispatcher.d.ts +16 -0
  645. package/dist/presentation/tui/tui-prompt-dispatcher.js +1 -0
  646. package/dist/presentation/tui/tui-skill-controller.d.ts +11 -0
  647. package/dist/presentation/tui/tui-skill-controller.js +3 -0
  648. package/dist/presentation/tui/tui-tool-approval.d.ts +22 -0
  649. package/dist/presentation/tui/tui-tool-approval.js +1 -0
  650. package/dist/version.d.ts +1 -0
  651. package/dist/version.js +1 -0
  652. package/native-targets.mjs +1 -1
  653. package/package.json +13 -12
  654. package/scripts/install-native.mjs +5 -13
  655. package/skills/architecture-review/SKILL.md +41 -14
  656. package/skills/code-review/SKILL.md +41 -12
  657. package/skills/debugging/SKILL.md +49 -12
  658. package/skills/documentation/SKILL.md +43 -9
  659. package/skills/feature-implementation/SKILL.md +58 -19
  660. package/bin/lotagate.exe +0 -1
  661. package/skills/api-contract-review/SKILL.md +0 -17
  662. package/skills/database-review/SKILL.md +0 -17
  663. package/skills/dependency-review/SKILL.md +0 -16
  664. package/skills/frontend-review/SKILL.md +0 -18
  665. package/skills/incident-response/SKILL.md +0 -18
  666. package/skills/performance-review/SKILL.md +0 -17
  667. package/skills/refactor/SKILL.md +0 -23
  668. package/skills/release-readiness/SKILL.md +0 -16
  669. package/skills/security-review/SKILL.md +0 -16
  670. package/skills/test-plan/SKILL.md +0 -22
  671. package/skills/verify/SKILL.md +0 -13
@@ -0,0 +1,8 @@
1
+ import{jsx as s,jsxs as R}from"react/jsx-runtime";import{useEffect as le,useLayoutEffect as U,useRef as S,useState as P}from"react";import{Box as g,Text as d,measureElement as de,useCursor as ae,useInput as fe,usePaste as me,useStdout as he}from"ink";import{formatContextUsage as pe,terminalTextWidth as H}from"../../formatters.js";import{DARK_THEME as r}from"../../../themes/theme.js";import{AttachmentChip as Ce}from"./transcript.js";import{isMouseSequence as ge}from"../../terminal-mouse.js";import{commandSuggestions as we}from"../../../../application/commands/command-presentation.js";import{parseCommandInvocation as xe,tokenizeCommandInput as Me}from"../../../../application/commands/command-parser.js";import{COMMAND_REGISTRY as k}from"../../../../application/commands/command-runtime.js";const q=4;function Ae({layout:o,value:c,cursor:i,terminalRows:u}){const a=c.slice(0,i).split(`
2
+ `),f=Math.max(1,o.width-(q+2)),w=a.slice(0,-1).reduce((W,l)=>W+Math.max(1,Math.ceil(H(l)/f)),0),p=H(a.at(-1)??""),E=o.y+1+w+Math.floor(p/f);if(!(u!==void 0&&(E<0||E>=u)))return{x:o.x+q+p%f,y:E}}function _e({bridge:o,enabled:c,activeRun:i,visible:u=!0,clearBlockedUntil:a,footerNotice:f,contextUsage:w,attachments:p,fileChoices:E,onLayoutRowsChange:W}){const[l,ee]=P(""),[N,L]=P(0),[$,M]=P(0),[_,F]=P(),m=S(void 0),D=S(!1),x=S(""),C=S(0),X=S(void 0),O=S(null),[A,V]=P({left:0,top:0,width:0,hasMeasured:!1}),{setCursorPosition:te}=ae(),{stdout:G}=he(),b=l.startsWith("/")&&!l.includes(`
3
+ `)&&X.current!==l?we(l,k,"tui").slice(0,8):[],I=Se(l,N),Z=I===void 0?[]:E.filter(e=>e.value.slice(1).toLowerCase().includes(I.query.toLowerCase())).slice(0,8),h=b.length>0?b:Z,j=()=>{D.current=!1,F(void 0),m.current!==void 0&&clearTimeout(m.current),m.current=void 0},T=(e,t)=>{x.current=e,C.current=t,ee(e),L(t)},v=()=>{X.current=void 0},K=e=>{T(e.value,e.value.length),X.current=e.value,M(0)},B=e=>{const t=e.replace(/\r\n?/gu,`
4
+ `);if(t.length===0)return;j(),v();const n=x.current,z=C.current;T(`${n.slice(0,z)}${t}${n.slice(z)}`,z+t.length)},Y=e=>{if(I===void 0)return;v();const t=x.current;T(`${t.slice(0,I.start)}${e.value} ${t.slice(C.current)}`,I.start+e.value.length+1),M(0)},ne=()=>{const e=C.current;if(e===0)return;j(),v();const t=x.current;T(`${t.slice(0,e-1)}${t.slice(e)}`,e-1)},y=()=>{const e=x.current.trim();e.length>0&&(j(),v(),T("",0),M(0),o.submit(e))},re=()=>{j(),T("",0),M(0),o.clearAttachments()},oe=()=>{D.current=!0,F("Press Esc again to clear text and references."),m.current!==void 0&&clearTimeout(m.current),m.current=setTimeout(()=>{D.current=!1,F(void 0),m.current=void 0},1500)};fe((e,t)=>{if(c&&!ge(e)){if(t.escape||e==="\x1B"){if(i||a!==void 0&&a>Date.now()||l.length===0&&p.length===0)return;D.current?re():oe();return}if(t.meta&&e.toLowerCase()==="v"){o.pasteImage(x.current).catch(()=>{});return}if(t.ctrl&&e.toLowerCase()==="v"){o.pasteText().then(n=>{n!==void 0&&B(n)}).catch(()=>{});return}if(t.return&&t.shift){B(`
5
+ `);return}if(t.return){const n=h[$];if(b.length>0&&n!==void 0&&n.value!==l){K(n);return}if(Te(l)){y();return}n!==void 0&&Z.length>0?Y(n):y();return}if(t.tab&&h[$]!==void 0){const n=h[$];n!==void 0&&(b.length>0?K(n):Y(n));return}if(t.upArrow&&h.length>0){M(n=>Math.max(0,n-1));return}if(t.downArrow&&h.length>0){M(n=>Math.min(h.length-1,n+1));return}if(t.leftArrow){v();const n=Math.max(0,C.current-1);C.current=n,L(n);return}if(t.rightArrow){v();const n=Math.min(x.current.length,C.current+1);C.current=n,L(n);return}if(t.backspace||t.delete){ne();return}!t.ctrl&&!t.meta&&e.length>0&&B(e)}},{isActive:c}),me(e=>{c&&B(e)},{isActive:c}),le(()=>()=>{m.current!==void 0&&clearTimeout(m.current)},[]);const J=l.split(`
6
+ `),ie=A.hasMeasured?A.width:Math.max(40,G.columns??80),se=Math.max(1,ie-(q+2)),ue=J.reduce((e,t)=>e+Math.max(1,Math.ceil(H(t)/se)),0),Q=ve({attachmentCount:p.length,inputRows:ue,hasClearHint:_!==void 0,hasFooterNotice:f!==void 0,choiceCount:h.length});U(()=>{W?.(Q+1)},[Q,W]),U(()=>{const e=O.current;if(e===null){V(n=>n.hasMeasured?{left:0,top:0,width:0,hasMeasured:!1}:n);return}const t=de(e);V(n=>n.left===t.x&&n.top===t.y&&n.width===t.width&&n.hasMeasured?n:{left:t.x,top:t.y,width:t.width,hasMeasured:!0})});const ce=c&&u&&A.hasMeasured?Ae({layout:{x:A.left,y:A.top,width:A.width},value:l,cursor:N,terminalRows:G.rows}):void 0;return te(ce),u?R(g,{width:"100%",flexDirection:"column",marginTop:1,children:[p.map(e=>s(Ce,{attachment:e},e.id)),s(g,{ref:O,width:"100%",borderStyle:"round",borderColor:c?r.accent:r.border,flexDirection:"column",paddingX:1,children:R(g,{children:[s(d,{color:r.accent,children:"\u203A "}),s(d,{wrap:"wrap",color:l.length===0?r.muted:r.text,children:l.length===0?"Ask LotaGate to work on this project\u2026":Re(J.join(`
7
+ `))})]})}),R(g,{paddingX:1,justifyContent:"space-between",children:[s(d,{color:r.muted,dimColor:!0,children:"Enter send \xB7 Shift+Enter newline \xB7 / commands \xB7 @ files \xB7 Ctrl+V text \xB7 Alt+V image"}),w!==void 0&&s(d,{color:r.muted,dimColor:!0,children:pe(w.usedTokens,w.contextWindow)})]}),_!==void 0&&s(g,{paddingX:1,children:s(d,{color:r.muted,dimColor:!0,children:_})}),f!==void 0&&s(g,{paddingX:1,children:s(d,{color:r.muted,dimColor:!0,children:f})}),h.length>0&&s(g,{borderStyle:"round",borderColor:r.border,flexDirection:"column",paddingX:1,children:h.map((e,t)=>R(g,{...t===$?{backgroundColor:r.selection}:{},children:[s(d,{color:t===$?r.accent:r.muted,children:"\u203A "}),R(d,{color:e.kind==="directory"?r.warning:r.text,children:[e.kind==="directory"?"\u25B8 ":"",e.label]}),R(d,{color:r.muted,children:[" ",e.description]})]},e.value))})]}):null}function Te(o){if(!o.startsWith("/")||o.includes(`
8
+ `))return!1;try{return xe(Me(o.trimStart().slice(1)),"tui",k),!0}catch{return!1}}function ve({attachmentCount:o,inputRows:c,hasClearHint:i,hasFooterNotice:u,choiceCount:a}){const f=o*2,w=Math.max(1,c)+2,p=a>0?a+2:0;return f+w+1+(i?1:0)+(u?1:0)+p}function Re(o){return o.split(/(@[^\s@]+|https?:\/\/[^\s]+|\/[A-Za-z][\w-]*)/gu).filter(i=>i.length>0).map((i,u)=>i.startsWith("@")?s(d,{color:r.accent,children:i},u):/^https?:\/\//u.test(i)?s(d,{color:r.link,underline:!0,children:i},u):/^\/[A-Za-z][\w-]*$/u.test(i)?s(d,{color:r.accent,children:i},u):s(d,{children:i},u))}function Se(o,c){const i=o.slice(0,c),u=/(?:^|\s)@([^\s@]*)$/u.exec(i);if(u===null)return;const a=u[1]??"";return{start:c-a.length-1,query:a}}export{_e as Composer,Se as atFileReference,Ae as calculateComposerCursorPosition};
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ import type { FileChangeDiff } from '../../../../domain/filesystem/file-change-diff.js';
3
+ export declare function FileDiff({ change }: {
4
+ change: FileChangeDiff;
5
+ }): JSX.Element;
6
+ export declare function fileDiffRowCount(change: FileChangeDiff, columns: number): number;
@@ -0,0 +1 @@
1
+ import{jsx as d,jsxs as c,Fragment as w}from"react/jsx-runtime";import{Box as u,Text as e,useStdout as D}from"ink";import{DARK_THEME as o}from"../../../themes/theme.js";import{truncateTerminalText as L,wrapTerminalText as x}from"../../formatters.js";function j({change:t}){const{stdout:n}=D(),l=Math.max(20,(n.columns??80)-4),r=p(t.lines);return c(u,{flexDirection:"column",marginBottom:1,borderStyle:"round",borderColor:o.border,paddingX:1,children:[c(e,{color:o.text,children:[d(e,{color:o.accent,children:"\u25A3"})," ",d(e,{bold:!0,children:"Updated"})," ",d(e,{color:o.muted,children:L(t.path,Math.max(1,l-30))})," ",d(e,{color:o.muted,children:" \xB7 "}),c(e,{color:o.success,children:["+",t.additions]}),d(e,{color:o.muted,children:" "}),c(e,{color:o.error,children:["-",t.deletions]})]}),d(e,{color:o.muted,children:" Workspace change"}),d(u,{flexDirection:"column",marginTop:1,children:t.lines.map((i,a)=>d(M,{line:i,lineNumberWidth:r,textWidth:Math.max(1,l-(r*2+8))},`${a}-${i.kind}`))}),t.truncated&&d(e,{color:o.muted,children:" \u2026 diff truncated for display"})]})}function A(t,n){const l=Math.max(20,n-4),r=p(t.lines),i=Math.max(1,l-(r*2+8));return t.lines.reduce((m,s)=>m+x(s.text.length===0?" ":s.text,i).length,0)+3+(t.truncated?1:0)}function M({line:t,lineNumberWidth:n,textWidth:l}){const r=t.kind==="addition",i=t.kind==="deletion",a=r?o.success:i?o.error:o.text,m=r?o.diffAdded:i?o.diffRemoved:void 0,s=t.kind==="addition"?"+":t.kind==="deletion"?"-":" ",g=t.oldLine===void 0?" ".repeat(n):String(t.oldLine).padStart(n," "),b=t.newLine===void 0?" ".repeat(n):String(t.newLine).padStart(n," "),k=x(t.text.length===0?" ":t.text,l);return d(u,{flexDirection:"column",backgroundColor:m,paddingX:1,children:k.map((h,f)=>c(u,{flexDirection:"row",children:[f===0?c(w,{children:[c(e,{color:o.muted,children:[g," ",b," "]}),c(e,{color:a,bold:r||i,children:[s," "]})]}):c(e,{color:o.muted,children:[" ".repeat(n*2+3)," "]}),d(e,{color:a,bold:f===0&&(r||i),children:h})]},`${f}-${h}`))})}function p(t){const n=t.reduce((l,r)=>Math.max(l,r.oldLine??0,r.newLine??0),0);return Math.max(2,String(n).length)}export{j as FileDiff,A as fileDiffRowCount};
@@ -0,0 +1,8 @@
1
+ import type { JSX } from 'react';
2
+ import type { InkTuiBridge, TuiModal } from '../tui-bridge.js';
3
+ export declare function Modal({ bridge, modal, onLayoutRowsChange }: {
4
+ bridge: InkTuiBridge;
5
+ modal?: TuiModal;
6
+ onLayoutRowsChange?: (rows: number) => void;
7
+ }): JSX.Element | null;
8
+ export declare function estimateModalRows(modal: TuiModal): number;
@@ -0,0 +1,2 @@
1
+ import{jsx as n,jsxs as s}from"react/jsx-runtime";import{useLayoutEffect as g,useRef as b,useState as v}from"react";import{Box as d,Text as o,useBoxMetrics as x,useInput as h,usePaste as w}from"ink";import{DARK_THEME as l}from"../../../themes/theme.js";import{ChoiceModal as m}from"./choice-modal.js";function V({bridge:t,modal:e,onLayoutRowsChange:r}){const c=b(null),i=x(c);if(g(()=>{i.hasMeasured&&r?.(i.height)},[i.height,i.hasMeasured,r]),e===void 0)return null;const a=e.kind==="choice"?n(m,{bridge:t,title:e.title,choices:e.choices,...e.currentValue===void 0?{}:{currentValue:e.currentValue},...e.detail===void 0?{}:{detail:e.detail}}):e.kind==="secret"?n(k,{bridge:t,label:e.label}):e.kind==="approval"?n(A,{bridge:t,toolName:e.toolName,...e.detail===void 0?{}:{detail:e.detail}}):e.kind==="subagent"?n(M,{bridge:t,subagent:e.subagent}):n(D,{bridge:t});return n(d,{ref:c,width:"100%",flexDirection:"column",children:a})}function F(t){return t.kind==="choice"?Math.min(8,t.choices.length)+(t.detail===void 0?5:6):t.kind==="approval"?8+(t.detail===void 0?0:1):t.kind==="secret"?6:t.kind==="subagent"?10:(t.kind==="trust",6)}function D({bridge:t}){return n($,{title:"Trust this workspace?",detail:"Local tools, MCP, and extensions remain disabled until you grant trust.",onDecision:c=>t.resolveActiveModal(c)})}function p({children:t,title:e="Action required"}){return s(d,{borderStyle:"double",borderColor:l.accent,flexDirection:"column",marginTop:1,paddingX:1,children:[n(o,{bold:!0,color:l.text,children:e}),t]})}function M({bridge:t,subagent:e}){h((c,i)=>{(i.return||i.escape||c==="\x1B"||c.toLowerCase()==="q")&&t.closeSubagentDetails()});const r=e.handoff;return s(p,{title:`Subagent handoff \xB7 ${e.displayName}`,children:[n(o,{color:l.text,children:e.task}),s(o,{color:l.muted,children:[e.mode," \xB7 ",e.status," \xB7 ",e.model]}),r===void 0?n(o,{color:l.muted,children:"Handoff is available when this subagent completes."}):s(d,{flexDirection:"column",children:[n(u,{label:"Summary",values:[r.summary]}),n(u,{label:"Files inspected",values:r.filesInspected}),n(u,{label:"Files changed",values:r.filesChanged}),n(u,{label:"Commands run",values:r.commandsRun}),n(u,{label:"Verification",values:r.verification}),n(u,{label:"Warnings",values:r.warnings})]}),n(o,{color:l.accent,children:"Enter / Esc / Q close"})]})}function u({label:t,values:e}){return s(d,{flexDirection:"column",marginTop:1,children:[n(o,{bold:!0,color:l.accent,children:t}),n(o,{color:l.muted,wrap:"wrap",children:e.length===0?"None":e.map(r=>`\u2022 ${E(r)}`).join(`
2
+ `)})]})}function E(t){const e=t.replace(/Bearer\s+[^\s]+/giu,"Bearer [REDACTED]").replace(/sk-[A-Za-z0-9_-]{8,}/gu,"[REDACTED]");return e.length<=500?e:`${e.slice(0,497)}...`}function $({title:t,detail:e,onDecision:r}){return h((c,i)=>{i.return||c.toLowerCase()==="y"?r(!0):(i.escape||c.toLowerCase()==="n")&&r(!1)}),s(p,{children:[n(o,{color:l.text,children:t}),n(o,{color:l.muted,children:e}),n(o,{color:l.accent,children:"Enter / Y approve \xB7 Esc / N cancel"})]})}function A({bridge:t,toolName:e,detail:r}){return n(m,{bridge:t,title:`Approval \xB7 ${C(e)}`,choices:[{value:"allow",label:"Allow",description:"Run this tool action"},{value:"deny",label:"Deny",description:"Block this tool action"}],...r===void 0?{}:{detail:T(r)},borderColor:l.warning})}function C(t){return t==="shell.exec"?"Shell command":t==="filesystem.write"?"File write":"Tool action"}function T(t){const e=t.trim();return e.startsWith("Write workspace file: ")?`write ${e.slice(22)}`:e.startsWith("Run command: ")?`run ${e.slice(13)}`:e.startsWith("This ")?e.replace(/^This /u,"").replace(/ operation may change workspace or external state\.$/u,""):e}function k({bridge:t,label:e}){const[r,c]=v("");return h((i,a)=>{a.return?t.resolveActiveModal(r.trim()||void 0):a.escape?t.resolveActiveModal(void 0):a.backspace||a.delete?c(f=>f.slice(0,-1)):!a.ctrl&&!a.meta&&i.length>0&&c(f=>`${f}${i}`)}),w(i=>c(a=>`${a}${i.replace(/[\r\n]/gu,"")}`)),s(p,{children:[n(o,{color:l.text,children:e}),n(o,{color:l.accent,children:`> ${"\u2022".repeat(r.length)}\u258C`}),n(o,{color:l.muted,children:"Enter save \xB7 Esc cancel"})]})}export{V as Modal,F as estimateModalRows};
@@ -0,0 +1,8 @@
1
+ import type { JSX } from 'react';
2
+ export declare function ShimmerText({ value, active, frame, color, highlightColor }: {
3
+ value: string;
4
+ active: boolean;
5
+ frame: number;
6
+ color?: string;
7
+ highlightColor?: string;
8
+ }): JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as m}from"react/jsx-runtime";import{Text as e}from"ink";import{DARK_THEME as h}from"../../../themes/theme.js";function c({value:t,active:i,frame:p,color:r=h.muted,highlightColor:f=h.text}){if(!i||t.length===0)return m(e,{color:i?r:h.text,children:t});const n=p%[...t].length;return m(e,{color:r,children:[...t].map((l,o)=>m(e,{color:o===n?f:r,bold:o===n,children:l},`${o}-${l}`))})}export{c as ShimmerText};
@@ -0,0 +1,11 @@
1
+ import type { JSX } from 'react';
2
+ import type { TuiSubagent } from '../tui-bridge.js';
3
+ export declare function SubagentCreatedEntry({ subagent }: {
4
+ subagent: TuiSubagent;
5
+ }): JSX.Element;
6
+ export declare function visibleSubagents(subagents: readonly TuiSubagent[]): readonly TuiSubagent[];
7
+ export declare function SubagentActivity({ subagents, selectedId, paused }: {
8
+ subagents: readonly TuiSubagent[];
9
+ selectedId?: string;
10
+ paused?: boolean;
11
+ }): JSX.Element | null;
@@ -0,0 +1 @@
1
+ import{jsx as c,jsxs as o}from"react/jsx-runtime";import{Box as a,Text as t,useAnimation as s}from"ink";import{DARK_THEME as e}from"../../../themes/theme.js";const f=5;function y({subagent:r}){return o(a,{flexDirection:"column",marginBottom:1,children:[o(t,{color:e.accent,children:["\u25CC ",c(t,{bold:!0,children:"Created agent"})," ",o(t,{color:e.muted,children:["\xB7 ",p(r)]})]}),o(t,{color:e.muted,children:[" ",r.mode,r.background?" \xB7 background":""]})]})}function x(r){return r.filter(h).sort(g).slice(0,f)}function D({subagents:r,selectedId:n,paused:l=!1}){const i=r.filter(h),{frame:d}=s({interval:250,isActive:i.length>0&&!l}),m=x(r);return m.length===0?null:o(a,{borderStyle:"round",borderColor:e.border,flexDirection:"column",marginBottom:1,paddingX:1,children:[o(t,{color:e.text,children:[c(t,{bold:!0,children:"Subagents"}),c(t,{color:e.muted,children:i.length===0?"":` \xB7 ${i.length} working`})]}),m.map(u=>c(A,{subagent:u,selected:u.id===n,frame:d},u.id)),i.length>f&&o(t,{color:e.muted,children:[" and ",i.length-f," other subagents working"]}),c(t,{color:e.muted,dimColor:!0,children:"Ctrl+J/K select \xB7 Ctrl+O handoff"})]})}function A({subagent:r,selected:n,frame:l}){const i=C(r.status),d=r.status==="running"||r.status==="queued"?Date.now()-r.createdAt:r.durationMs??r.updatedAt-r.createdAt;return o(a,{backgroundColor:n?e.selection:void 0,flexDirection:"column",marginTop:1,paddingX:n?1:0,children:[o(t,{color:i,children:[_(r.status,l)," ",c(t,{bold:!0,children:p(r)})]}),o(t,{color:e.muted,children:[" ",r.mode," \xB7 ",r.status," \xB7 ",B(d)]}),r.lastAction!==void 0&&o(t,{color:e.muted,wrap:"truncate",children:[" ",r.lastAction.label]})]})}function h(r){return r.status==="queued"||r.status==="running"}function g(r,n){return n.updatedAt-r.updatedAt}function p(r){return`${r.displayName} \xB7 ${w(r.task)}`}function w(r){const n=r.replace(/\s+/gu," ").trim();return n.length<=56?n:`${n.slice(0,53)}...`}function C(r){return r==="completed"?e.success:r==="completed_with_warning"?e.warning:r==="failed"||r==="cancelled"?e.error:r==="queued"?e.muted:e.warning}function _(r,n){return r==="completed"?"\u2713":r==="completed_with_warning"?"\u26A0":r==="failed"||r==="cancelled"?"!":r==="queued"?"\u25CC":["\u25D0","\u25D3","\u25D1","\u25D2"][n%4]??"\u25D0"}function B(r){return r<1e3?`${Math.max(0,r)}ms`:`${(r/1e3).toFixed(1)}s`}export{D as SubagentActivity,y as SubagentCreatedEntry,x as visibleSubagents};
@@ -0,0 +1,40 @@
1
+ import type { JSX } from 'react';
2
+ import type { Attachment } from '../../../../domain/session/attachment.js';
3
+ import type { TuiMessage } from '../tui-bridge.js';
4
+ import type { TuiWelcome } from '../tui-bridge.js';
5
+ import { type ActivityStatusProps } from './activity-status.js';
6
+ export interface TuiStatusEntry {
7
+ id: string;
8
+ kind: 'status';
9
+ content: '';
10
+ status: ActivityStatusProps;
11
+ }
12
+ export interface TuiWelcomeEntry {
13
+ id: string;
14
+ kind: 'welcome';
15
+ content: '';
16
+ welcome: TuiWelcome;
17
+ visible?: boolean;
18
+ }
19
+ export type TuiTranscriptEntry = TuiMessage | TuiStatusEntry | TuiWelcomeEntry;
20
+ export interface TranscriptProps {
21
+ messages: readonly TuiTranscriptEntry[];
22
+ showActionDetails?: boolean;
23
+ fill?: boolean;
24
+ height?: number;
25
+ }
26
+ export declare function Transcript({ messages, showActionDetails, fill, height }: TranscriptProps): JSX.Element;
27
+ export interface TranscriptViewport {
28
+ messages: readonly TuiTranscriptEntry[];
29
+ firstMessage: number;
30
+ lastMessage: number;
31
+ totalRows?: number;
32
+ }
33
+ /** Returns a stable message window, measured from the newest transcript entry. */
34
+ export declare function transcriptViewport(messages: readonly TuiTranscriptEntry[], offset: number, maximumMessages: number): TranscriptViewport;
35
+ /** Returns a viewport measured in terminal rows so wrapped messages scroll predictably. */
36
+ export declare function transcriptViewportByRows(messages: readonly TuiTranscriptEntry[], offsetRows: number, maximumRows: number, columns: number): TranscriptViewport;
37
+ export declare function transcriptTotalRows(messages: readonly TuiTranscriptEntry[], columns: number): number;
38
+ export declare function AttachmentChip({ attachment }: {
39
+ attachment: Attachment;
40
+ }): JSX.Element;
@@ -0,0 +1,5 @@
1
+ import{jsx as e,jsxs as s}from"react/jsx-runtime";import{Box as f,Text as m}from"ink";import{DARK_THEME as M}from"../../../themes/theme.js";import{MarkdownMessage as E}from"../markdown-message.js";import{FileDiff as W,fileDiffRowCount as _}from"./file-diff.js";import{terminalTextWidth as D,wrapTerminalText as G}from"../../formatters.js";import{ActivityEntry as I}from"./activity-entry.js";import{SubagentCreatedEntry as F}from"./subagent-activity.js";import{ActivityStatus as L}from"./activity-status.js";import{WelcomePanel as P,WELCOME_PANEL_ROWS as S}from"./welcome-panel.js";function rt({messages:t,showActionDetails:o=!1,fill:n=!1,height:i}){return e(f,{flexDirection:"column",...n?{flexGrow:1,overflow:"hidden"}:{},...i===void 0?{}:{height:i},children:t.map(r=>e(K,{message:r,showActionDetails:o},r.id))})}function ot(t,o,n){const i=Math.max(0,Math.min(o,Math.max(0,t.length-n))),r=t.length-i,a=Math.max(0,r-n);return{messages:t.slice(a,r),firstMessage:a+1,lastMessage:r}}function it(t,o,n,i){const r=t.map(l=>R(l,i)),a=[],c=r.reduce((l,h)=>l+h,0),d=Math.max(1,Math.floor(n)),p=Math.max(0,Math.min(Math.floor(o),Math.max(0,c-d))),x=c-p,T=Math.max(0,x-d);let k=0,u=t.length,C=0;for(let l=0;l<t.length;l+=1){const h=k;a[l]=h;const w=r[l]??1;k+=w,k>T&&h<x&&(u=Math.min(u,l),C=l+1)}return u===t.length?{messages:[],firstMessage:0,lastMessage:0,totalRows:c}:{messages:t.slice(u,C).flatMap((l,h)=>{const w=u+h,b=a[w]??0,O=b+(r[w]??1),v=Math.max(T,b),y=Math.min(x,O);return y<=v?[]:[z(l,v-b,y-v,i)]}),firstMessage:u+1,lastMessage:C,totalRows:c}}function et(t,o){return t.reduce((n,i)=>n+R(i,o),0)}const A=new WeakMap;function R(t,o){let n=A.get(t);if(n!==void 0){const r=n.get(o);if(r!==void 0)return r}else n=new Map,A.set(t,n);const i=V(t,o);return n.set(o,i),i}function V(t,o){if(t.kind==="welcome")return S;if(t.kind==="status")return 2;const n=Math.max(1,o-4),i=t.content.split(`
2
+ `).reduce((d,p)=>d+Math.max(1,Math.ceil(D(p)/n)),0),r=(t.attachments?.length??0)*2,a=t.fileChange===void 0?0:_(t.fileChange,o),c=t.subagent===void 0?0:2;return Math.max(1,i+r+a+c+1)}function z(t,o,n,i){if(t.kind==="welcome")return o<=0&&n>=S?t:{...t,visible:!1};if(t.kind==="status"||!H(t)||o<=0&&n>=R(t,i))return t;const r=Math.max(1,i-4),a=t.content.split(`
3
+ `).reduce((p,x)=>p+Math.max(1,Math.ceil(D(x)/r)),0),c=Math.max(0,o),d=Math.min(a,c+Math.max(0,n));return d<=c?{...t,content:B(t.content,Math.max(0,a-1),1,r)}:{...t,content:B(t.content,c,d-c,r)}}function H(t){return t.kind==="assistant"||t.kind==="user"||t.kind==="notice"||t.kind==="error"||t.kind==="command"}function B(t,o,n,i){const r=[];for(const a of t.split(`
4
+ `)){const c=G(a,i);r.push(...c)}return r.slice(o,o+n).join(`
5
+ `)}function K({message:t,showActionDetails:o}){if(t.kind==="welcome")return t.visible===!1?null:e(P,{welcome:t.welcome});if(t.kind==="status")return e(L,{...t.status});if(t.kind==="assistant")return s(f,{flexDirection:"row",alignItems:"flex-start",marginBottom:1,children:[e(j,{}),e(f,{flexGrow:1,children:e(E,{content:t.content||" "})})]});if(t.kind==="diff"&&t.fileChange!==void 0)return e(W,{change:t.fileChange});if(t.kind==="activity"&&t.activity!==void 0)return e(I,{activity:t.activity,showDetails:o});if(t.kind==="subagent"&&t.subagent!==void 0)return e(F,{subagent:t.subagent});if(t.kind==="user")return s(f,{backgroundColor:M.user,flexDirection:"column",marginBottom:1,children:[s(f,{flexDirection:"row",alignItems:"flex-start",children:[e(j,{}),e(f,{flexGrow:1,children:e(E,{content:t.content})})]}),t.attachments?.map(r=>e(N,{attachment:r},r.id))]});const n=t.kind==="error"?M.error:t.kind==="command"?M.accent:M.muted,i=t.kind==="error"?"!":t.kind==="command"?"\u203A":"\xB7";return s(f,{marginBottom:1,children:[s(m,{color:n,children:[i," "]}),e(m,{color:n,wrap:"wrap",children:t.content})]})}function j(){return e(m,{color:M.text,children:"\u25CF "})}function N({attachment:t}){return e(f,{marginTop:1,children:s(m,{color:M.muted,children:["\u25A3 ",t.name]})})}export{N as AttachmentChip,rt as Transcript,et as transcriptTotalRows,ot as transcriptViewport,it as transcriptViewportByRows};
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ import type { TuiWelcome } from '../tui-bridge.js';
3
+ export declare const WELCOME_PANEL_ROWS = 10;
4
+ export declare function WelcomePanel({ welcome }: {
5
+ welcome: TuiWelcome;
6
+ }): JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsxs as o,jsx as c}from"react/jsx-runtime";import{Box as d,Text as e}from"ink";import{DARK_THEME as r}from"../../../themes/theme.js";import{COMMAND_REGISTRY as s}from"../../../../application/commands/command-runtime.js";import{formatCommandReference as m}from"../../../../application/commands/command-presentation.js";const u=i("help"),h=i("model.current"),w=10;function C({welcome:t}){const n=t.model??"Select a model to begin",l=t.trusted?"Trusted workspace":"Restricted workspace",a=t.trusted?r.success:r.warning;return o(d,{borderStyle:"round",borderColor:r.accent,flexDirection:"row",marginBottom:1,paddingX:1,paddingY:1,children:[o(d,{flexDirection:"column",width:"38%",children:[o(e,{color:r.accent,children:["LotaGate CLI v",t.version]}),c(e,{bold:!0,color:r.text,children:"Welcome back!"}),c(e,{color:r.muted,wrap:"truncate",children:n}),o(e,{color:a,children:["\u25CF ",l]}),c(e,{color:r.muted,wrap:"truncate",children:t.cwd})]}),o(d,{borderLeft:!0,borderColor:r.border,flexDirection:"column",paddingLeft:1,width:"62%",children:[c(e,{bold:!0,color:r.accent,children:"Tips for getting started"}),o(e,{color:r.muted,wrap:"truncate",children:[u," Browse interactive commands"]}),o(e,{color:r.muted,wrap:"truncate",children:[h," Show the active model"]}),c(d,{marginTop:1,children:c(e,{bold:!0,color:r.accent,children:"Recent activity"})}),c(e,{color:r.muted,children:"No recent activity"})]})]})}function i(t){const n=s.get(t);if(n===void 0)throw new Error(`Missing command contract: ${t}`);return m(n,"tui")}export{w as WELCOME_PANEL_ROWS,C as WelcomePanel};
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ import type { InkTuiBridge } from './tui-bridge.js';
3
+ export interface LotaGateTuiProps {
4
+ bridge: InkTuiBridge;
5
+ }
6
+ export declare function LotaGateTui({ bridge }: LotaGateTuiProps): JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as f,Fragment as X,jsxs as z}from"react/jsx-runtime";import{useCallback as T,useEffect as J,useState as p,useSyncExternalStore as K}from"react";import{Box as P,useInput as Q,useStdout as Y}from"ink";import{Transcript as Z,transcriptTotalRows as $,transcriptViewportByRows as y}from"./components/transcript.js";import{Composer as k}from"./components/composer.js";import{estimateModalRows as ee,Modal as D}from"./components/modal.js";import{SubagentActivity as ne,visibleSubagents as te}from"./components/subagent-activity.js";import{parseMouseWheel as oe}from"../terminal-mouse.js";const O=3;function ge({bridge:n}){const e=K(o=>n.subscribe(o),()=>n.snapshot(),()=>n.snapshot()),{stdout:i}=Y(),[l,u]=p(0),[r,g]=p(),[B,I]=p(),[R,j]=p(),m=e.modal,a=se(m)?m:void 0,M=e.runActive&&e.modal===void 0,_=i.rows??24,x=6+e.pendingAttachments.length*2,b=B??x,N=a===void 0?0:R?.modal===a?R.rows:ee(a),E=ie(e,re(e.subagents),b,N),S=Math.max(40,i.columns??80),v=ae(e),C=$(v,S),F=Math.max(0,_-E),W=b>x?0:1,d=Math.max(W,F),w=Math.max(0,C-d),q=y(v,l,Math.max(1,d),S),A=d>0&&C>=d,c=te(e.subagents),G=T(o=>{I(t=>t===o?t:o)},[]),H=T(o=>{a!==void 0&&j(t=>t?.modal===a&&t.rows===o?t:{modal:a,rows:o})},[a]);return J(()=>{r!==void 0&&c.some(o=>o.id===r)||g(c[0]?.id)},[c,r]),Q((o,t)=>{const L=e.modal===void 0?de(o,t,e.runActive):void 0;if(t.ctrl&&o.toLowerCase()==="c")n.interrupt();else if((t.escape||o==="\x1B")&&M)n.cancel();else if(L!==void 0){if(c.length===0)return;const h=c.findIndex(V=>V.id===r),s=c[(h+L+c.length)%c.length];g(s?.id)}else if(e.modal===void 0&&t.ctrl&&o.toLowerCase()==="o"&&r!==void 0)n.openSubagentDetails(r);else{const h=oe(o);h==="up"?u(s=>Math.min(w,s+3)):h==="down"?u(s=>Math.max(0,s-3)):t.pageUp||t.home?u(t.home?w:s=>Math.min(w,s+d)):U(o,t,"up")?u(s=>Math.min(w,s+O)):t.pageDown||t.end?u(t.end?0:s=>Math.max(0,s-d)):U(o,t,"down")&&u(s=>Math.max(0,s-O))}}),f(P,{flexDirection:"column",paddingX:1,...i.rows===void 0?{}:{height:i.rows,overflow:"hidden"},children:m!==void 0&&a===void 0?f(D,{bridge:n,modal:m}):z(X,{children:[d>0&&f(Z,{messages:q.messages,showActionDetails:e.actionDetails,fill:A,...A?{height:d}:{}}),f(ne,{subagents:e.subagents,paused:!1,...r===void 0?{}:{selectedId:r}}),f(k,{bridge:n,enabled:e.ready&&!e.runActive&&a===void 0,activeRun:M,onLayoutRowsChange:G,...e.clearBlockedUntil===void 0?{}:{clearBlockedUntil:e.clearBlockedUntil},...e.footerNotice===void 0?{}:{footerNotice:e.footerNotice},...e.contextUsage===void 0?{}:{contextUsage:e.contextUsage},attachments:e.pendingAttachments,fileChoices:e.fileSuggestions}),a!==void 0&&f(D,{bridge:n,modal:a,onLayoutRowsChange:H})]})})}function se(n){return n?.kind==="choice"||n?.kind==="approval"}function ie(n,e,i,l){return(e===0?0:4+e*4)+Math.max(i,6+n.pendingAttachments.length*2)+l}function ae(n){const e=n.welcome===void 0?[]:[{id:"tui-welcome",kind:"welcome",content:"",welcome:n.welcome}];return n.status===void 0?[...e,...n.messages]:[...e,...n.messages,{id:"tui-live-turn-status",kind:"status",content:"",status:{status:n.status,...n.activityStartedAt===void 0?{}:{activityStartedAt:n.activityStartedAt},...n.elapsedMs===void 0?{}:{elapsedMs:n.elapsedMs},...n.usage===void 0?{}:{usage:n.usage},paused:n.modal!==void 0}}]}function re(n){return n.filter(e=>e.status==="queued"||e.status==="running").length}function U(n,e,i){return e.ctrl&&(i==="up"?e.upArrow:e.downArrow)?!0:n===(i==="up"?"\x1B[1;5A":"\x1B[1;5B")}function de(n,e,i){const l=n.toLowerCase();if(e.ctrl&&l==="j")return 1;if(e.ctrl&&l==="k")return-1;if(i){if(n===`
2
+ `)return 1;if(n==="\v")return-1}}export{ge as LotaGateTui};
@@ -0,0 +1,4 @@
1
+ import type { JSX } from 'react';
2
+ export declare function MarkdownInline({ value }: {
3
+ value: string;
4
+ }): JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as i,Fragment as d}from"react/jsx-runtime";import{Text as e}from"ink";import{DARK_THEME as n}from"../../themes/theme.js";import{tokenizeMarkdownInline as a}from"./markdown-inline.js";function h({value:r}){return i(d,{children:a(r).map((l,u)=>i(t,{token:l},u))})}function t({token:r}){return r.kind==="link"?i(e,{color:n.link,underline:!0,children:r.label}):r.kind==="code"?i(e,{color:n.code,backgroundColor:n.surfaceRaised,children:r.value}):r.kind==="bold"?i(e,{bold:!0,children:r.value}):r.kind==="italic"?i(e,{italic:!0,children:r.value}):r.kind==="strike"?i(e,{strikethrough:!0,children:r.value}):i(e,{children:r.value})}export{h as MarkdownInline};
@@ -0,0 +1,13 @@
1
+ export type MarkdownInlineToken = {
2
+ kind: 'text';
3
+ value: string;
4
+ } | {
5
+ kind: 'code' | 'bold' | 'italic' | 'strike';
6
+ value: string;
7
+ } | {
8
+ kind: 'link';
9
+ label: string;
10
+ href: string;
11
+ };
12
+ /** Tokenizes the safe Markdown subset rendered by the terminal UI. */
13
+ export declare function tokenizeMarkdownInline(value: string): readonly MarkdownInlineToken[];
@@ -0,0 +1 @@
1
+ const d=/(`[^\n`]+`|\*\*[^*\n]+\*\*|__[^_\n]+__|~~[^~\n]+~~|\*[^*\n]+\*|_[^_\n]+_)/gu;function u(n){const e=[];let t=0,i=0;for(;t<n.length;){const s=k(n,t);if(s!==void 0){f(e,n,i,t),e.push({kind:"link",label:s.label,href:s.href}),t=s.end,i=t;continue}d.lastIndex=0;const r=d.exec(n.slice(t));if(r?.index===0){const c=r[0]??"";f(e,n,i,t),e.push(h(c)),t+=c.length,i=t;continue}t+=1}return f(e,n,i,n.length),e}function h(n){return n.startsWith("`")?{kind:"code",value:n.slice(1,-1)}:n.startsWith("**")||n.startsWith("__")?{kind:"bold",value:n.slice(2,-2)}:n.startsWith("~~")?{kind:"strike",value:n.slice(2,-2)}:n.startsWith("*")||n.startsWith("_")?{kind:"italic",value:n.slice(1,-1)}:{kind:"text",value:n}}function k(n,e){if(n[e]!=="[")return;const t=o(n,"]",e+1);if(t===-1||n[t+1]!=="(")return;const i=t+2;if(n[i]==="<"){const r=o(n,">",i+1);return r===-1||n[r+1]!==")"?void 0:{label:n.slice(e+1,t),href:n.slice(i+1,r),end:r+2}}let s=1;for(let r=i;r<n.length;r+=1){const c=n[r]??"";if(c==="\\"){r+=1;continue}if(/\s/u.test(c))return;if(c==="("){s+=1;continue}if(c===")"&&(s-=1,s===0))return{label:n.slice(e+1,t),href:n.slice(i,r),end:r+1}}}function o(n,e,t){for(let i=t;i<n.length;i+=1){if(n[i]==="\\"){i+=1;continue}if(n[i]===e)return i}return-1}function f(n,e,t,i){i>t&&n.push({kind:"text",value:e.slice(t,i)})}export{u as tokenizeMarkdownInline};
@@ -0,0 +1,6 @@
1
+ import type { JSX } from 'react';
2
+ export interface MarkdownMessageProps {
3
+ content: string;
4
+ }
5
+ /** A deliberately small, safe Markdown subset for streamed terminal text. */
6
+ export declare function MarkdownMessage({ content }: MarkdownMessageProps): JSX.Element;
@@ -0,0 +1,2 @@
1
+ import{jsx as e,jsxs as p}from"react/jsx-runtime";import{Box as h,Text as c}from"ink";import{DARK_THEME as s}from"../../themes/theme.js";import{MarkdownInline as a}from"./markdown-inline-renderer.js";import{MarkdownTable as m,parseMarkdownTable as x}from"./markdown-table.js";function L({content:t}){let r=!1;const i=t.split(`
2
+ `),o=[];for(let n=0;n<i.length;n+=1){const u=i[n]??"";if(u.startsWith("```")){r=!r,o.push(e(c,{color:s.muted,children:u.length>3?`\xB7 ${u.slice(3).trim()}`:""},n));continue}if(r){o.push(e(c,{color:s.code,wrap:"wrap",children:u},n));continue}const d=x(i,n);if(d!==void 0){o.push(e(m,{table:d.table},n)),n=d.nextLine-1;continue}const f=/^(#{1,6})\s+(.+)$/u.exec(u);if(f!==null){o.push(e(c,{bold:!0,color:s.accent,wrap:"wrap",children:e(a,{value:f[2]??""})},n));continue}const w=k(u);if(w!==void 0){o.push(e(M,{item:w},n));continue}const l=/^(\s*)(>+)\s?(.*)$/u.exec(u);if(l!==null){o.push(p(c,{color:s.muted,wrap:"wrap",children:[l[1],"\u2502 ".repeat(l[2]?.length??1),e(a,{value:l[3]??""})]},n));continue}if(/^([-*_])(?:\s*\1){2,}\s*$/u.test(u)){o.push(e(c,{color:s.muted,children:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"},n));continue}o.push(e(c,{wrap:"wrap",children:e(a,{value:u})},n))}return e(h,{flexDirection:"column",children:o})}function k(t){const r=/^(\s*)([-*+]|\d+[.)])\s+(?:(\[(?: |x|X)\])\s+)?(.+)$/u.exec(t);if(r===null)return;const i=r[3];return{indent:r[1]??"",marker:r[2]??"\u2022",content:r[4]??"",...i===void 0?{}:{checked:i.toLowerCase()==="[x]"}}}function M({item:t}){const r=t.checked===void 0?/^\d/u.test(t.marker)?t.marker:"\u2022":t.checked?"\u2611":"\u2610";return p(h,{flexDirection:"row",children:[p(c,{color:s.accent,children:[t.indent,r," "]}),e(h,{flexGrow:1,children:e(c,{wrap:"wrap",children:e(a,{value:t.content})})})]})}export{L as MarkdownMessage};
@@ -0,0 +1,16 @@
1
+ import type { JSX } from 'react';
2
+ export type MarkdownTableAlignment = 'left' | 'center' | 'right';
3
+ export interface MarkdownTableData {
4
+ headers: readonly string[];
5
+ rows: readonly (readonly string[])[];
6
+ alignments: readonly MarkdownTableAlignment[];
7
+ }
8
+ export interface MarkdownTableMatch {
9
+ table: MarkdownTableData;
10
+ nextLine: number;
11
+ }
12
+ /** Detects a pipe table beginning at the supplied Markdown line. */
13
+ export declare function parseMarkdownTable(lines: readonly string[], startLine: number): MarkdownTableMatch | undefined;
14
+ export declare function MarkdownTable({ table }: {
15
+ table: MarkdownTableData;
16
+ }): JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsxs as a,jsx as s}from"react/jsx-runtime";import{Box as u,Text as h}from"ink";import{DARK_THEME as m}from"../../themes/theme.js";import{terminalTextWidth as w}from"../formatters.js";import{MarkdownInline as M}from"./markdown-inline-renderer.js";import{tokenizeMarkdownInline as j}from"./markdown-inline.js";function z(e,t){const r=p(e[t]??""),n=p(e[t+1]??"");if(r.length<2||n.length<2||n.some(f=>!W(f)))return;const o=Math.max(r.length,n.length),l=g(r,o),i=D(n,o),c=[];let d=t+2;for(;d<e.length;){const f=p(e[d]??"");if(f.length<2)break;c.push(g(f,o)),d+=1}return{table:{headers:l,rows:c,alignments:i},nextLine:d}}function v({table:e}){const t=e.headers.map((r,n)=>Math.max(w(T(r)),...e.rows.map(o=>w(T(o[n]??"")))));return a(u,{flexDirection:"column",children:[x(e.headers,t,e.alignments,!0),k(t),e.rows.map((r,n)=>x(r,t,e.alignments,!1,n))]})}function x(e,t,r,n,o=0){return a(u,{flexDirection:"row",children:[s(h,{color:m.muted,children:"\u2502"}),e.map((l,i)=>a(u,{flexDirection:"row",children:[s(u,{width:(t[i]??0)+2,paddingX:1,justifyContent:r[i]==="right"?"flex-end":r[i]==="center"?"center":"flex-start",children:s(h,{bold:n,wrap:"truncate",children:s(M,{value:l})})}),s(h,{color:m.muted,children:"\u2502"})]},i))]},o)}function k(e){return a(u,{flexDirection:"row",children:[s(h,{color:m.muted,children:"\u251C"}),e.map((t,r)=>a(h,{color:m.muted,children:["\u2500".repeat(t+2),r===e.length-1?"\u2524":"\u253C"]},r))]})}function p(e){const t=e.trim();if(!t.includes("|"))return[];const r=t.startsWith("|")?t.slice(1):t,n=r.endsWith("|")&&!r.endsWith("\\|")?r.slice(0,-1):r,o=[];let l="",i=!1;for(const c of n){if(c==="|"&&!i){o.push(l.trim()),l="";continue}if(c==="\\"&&!i){i=!0,l+=c;continue}i=!1,l+=c}return o.push(l.trim()),o}function W(e){return/^:?-{1,}:?$/u.test(e)}function g(e,t){return Array.from({length:t},(r,n)=>e[n]??"")}function D(e,t){return Array.from({length:t},(r,n)=>{const o=e[n]??"",l=o.startsWith(":"),i=o.endsWith(":");return l&&i?"center":i?"right":"left"})}function T(e){return j(e).map(t=>t.kind==="link"?t.label:t.value).join("")}export{v as MarkdownTable,z as parseMarkdownTable};
@@ -0,0 +1,193 @@
1
+ import type { Attachment } from '../../../domain/session/attachment.js';
2
+ import type { ChatUsage } from '../../../ports/chat-model.js';
3
+ import type { FileChangeDiff } from '../../../domain/filesystem/file-change-diff.js';
4
+ import type { ExtensionScope } from '../../../domain/extensions/extension-scope.js';
5
+ import type { SubagentMode, SubagentStatus } from '../../../domain/orchestration/subagent.js';
6
+ import type { SubagentHandoff } from '../../../domain/orchestration/subagent.js';
7
+ import type { SubagentLastAction, SubagentLifecycleEvent } from '../../../ports/subagent-lifecycle.js';
8
+ import type { CliActionKind } from '../../../application/orchestration/cli-turn-events.js';
9
+ export type TuiMessageKind = 'user' | 'assistant' | 'command' | 'notice' | 'error' | 'diff' | 'activity' | 'subagent';
10
+ export type TuiActivityState = 'pending' | 'running' | 'completed' | 'failed';
11
+ export interface TuiMessage {
12
+ id: string;
13
+ kind: TuiMessageKind;
14
+ content: string;
15
+ attachments?: readonly Attachment[];
16
+ fileChange?: FileChangeDiff;
17
+ activity?: {
18
+ label: string;
19
+ state: TuiActivityState;
20
+ startedAt: number;
21
+ elapsedMs?: number;
22
+ toolName?: string;
23
+ kind?: CliActionKind;
24
+ };
25
+ subagent?: TuiSubagent;
26
+ }
27
+ export interface TuiSubagent {
28
+ readonly id: string;
29
+ readonly displayName: string;
30
+ readonly task: string;
31
+ readonly mode: SubagentMode;
32
+ readonly model: string;
33
+ readonly status: SubagentStatus;
34
+ readonly background: boolean;
35
+ readonly createdAt: number;
36
+ readonly updatedAt: number;
37
+ readonly durationMs?: number;
38
+ readonly summary?: string;
39
+ readonly lastAction?: SubagentLastAction;
40
+ readonly handoff?: SubagentHandoff;
41
+ }
42
+ export interface TuiWelcome {
43
+ version: string;
44
+ cwd: string;
45
+ model: string | null;
46
+ profile: string | null;
47
+ trusted: boolean;
48
+ }
49
+ export interface TuiContextUsage {
50
+ usedTokens: number;
51
+ contextWindow?: number;
52
+ }
53
+ export interface TuiChoice {
54
+ value: string;
55
+ label: string;
56
+ description?: string;
57
+ kind?: 'file' | 'directory';
58
+ }
59
+ export type TuiModal = {
60
+ kind: 'trust';
61
+ } | {
62
+ kind: 'approval';
63
+ toolName: string;
64
+ detail?: string;
65
+ } | {
66
+ kind: 'subagent';
67
+ subagent: TuiSubagent;
68
+ } | {
69
+ kind: 'choice';
70
+ title: string;
71
+ choices: readonly TuiChoice[];
72
+ currentValue?: string;
73
+ detail?: string;
74
+ } | {
75
+ kind: 'secret';
76
+ label: string;
77
+ };
78
+ export interface TuiViewState {
79
+ ready: boolean;
80
+ runActive: boolean;
81
+ welcome?: TuiWelcome | undefined;
82
+ messages: readonly TuiMessage[];
83
+ subagents: readonly TuiSubagent[];
84
+ status?: string | undefined;
85
+ footerNotice?: string | undefined;
86
+ activityStartedAt?: number | undefined;
87
+ elapsedMs?: number | undefined;
88
+ usage?: ChatUsage | undefined;
89
+ contextUsage?: TuiContextUsage | undefined;
90
+ pendingAttachments: readonly Attachment[];
91
+ fileSuggestions: readonly TuiChoice[];
92
+ modal?: TuiModal | undefined;
93
+ clearBlockedUntil?: number | undefined;
94
+ actionDetails: boolean;
95
+ }
96
+ type Listener = () => void;
97
+ export declare class InkTuiBridge {
98
+ private readonly listeners;
99
+ private readonly initializationNotices;
100
+ private state;
101
+ private resolveModal;
102
+ private readonly exitResolvers;
103
+ private submitHandler;
104
+ private imagePasteHandler;
105
+ private textPasteHandler;
106
+ private clearAttachmentsHandler;
107
+ private interruptHandler;
108
+ private cancelHandler;
109
+ private sequence;
110
+ private noticeTimer;
111
+ private assistantRevealTimer;
112
+ private pendingAssistant;
113
+ private assistantSegmentPending;
114
+ private readonly pendingActivityTimers;
115
+ snapshot(): TuiViewState;
116
+ subscribe(listener: Listener): () => void;
117
+ setSubmitHandler(handler: (value: string) => Promise<void>): void;
118
+ setImagePasteHandler(handler: (prompt: string) => Promise<void>): void;
119
+ setTextPasteHandler(handler: () => Promise<string | undefined>): void;
120
+ setClearAttachmentsHandler(handler: () => void): void;
121
+ setInterruptHandler(handler: () => void): void;
122
+ setCancelHandler(handler: () => void): void;
123
+ submit(value: string): Promise<void>;
124
+ pasteImage(prompt: string): Promise<void>;
125
+ pasteText(): Promise<string | undefined>;
126
+ interrupt(): void;
127
+ cancel(): void;
128
+ clearAttachments(): void;
129
+ setReady(): void;
130
+ setRunActive(runActive: boolean): void;
131
+ setWelcome(welcome: TuiWelcome): void;
132
+ setPendingAttachments(attachments: readonly Attachment[]): void;
133
+ setContextUsage(contextUsage: TuiContextUsage | undefined): void;
134
+ setFileSuggestions(fileSuggestions: readonly TuiChoice[]): void;
135
+ toggleActionDetails(): boolean;
136
+ clearTranscript(): void;
137
+ private exitCode;
138
+ requestExit(code?: number): void;
139
+ waitForExit(): Promise<number>;
140
+ userPrompt(content: string, attachments?: readonly Attachment[]): void;
141
+ command(content: string): void;
142
+ commandOutput(content: string): void;
143
+ transcriptNotice(content: string, notify?: boolean): void;
144
+ initializationNotice(key: string, content: string): void;
145
+ fileChange(change: FileChangeDiff): void;
146
+ notice(content: string): void;
147
+ dispose(): void;
148
+ error(content: string): void;
149
+ subagentLifecycle(event: SubagentLifecycleEvent): void;
150
+ startToolActivity(key: string, label: string, metadata?: {
151
+ toolName?: string;
152
+ kind?: CliActionKind;
153
+ }): {
154
+ complete: (isError: boolean) => void;
155
+ };
156
+ toolActivityStarted(key: string, label: string, metadata?: {
157
+ toolName?: string;
158
+ kind?: CliActionKind;
159
+ }): void;
160
+ toolActivityCompleted(key: string, isError: boolean): void;
161
+ status(label: string): void;
162
+ activity(label: string, elapsedMs: number, usage?: ChatUsage): void;
163
+ clearActivity(): void;
164
+ complete(elapsedMs: number, usage?: ChatUsage): void;
165
+ failed(): void;
166
+ cancelled(): void;
167
+ beginAssistant(): void;
168
+ /** Starts a new assistant segment after a host-owned action or approval boundary. */
169
+ assistantActionBoundary(): void;
170
+ assistantDelta(content: string): void;
171
+ replaceAssistant(content: string): void;
172
+ finishAssistant(): void;
173
+ confirmTrust(): Promise<boolean>;
174
+ confirmTool(toolName: string, detail?: string): Promise<boolean>;
175
+ openSubagentDetails(id: string): void;
176
+ closeSubagentDetails(): void;
177
+ selectModel(title: string, choices: readonly TuiChoice[], currentValue?: string): Promise<string | undefined>;
178
+ selectScope(title: string): Promise<ExtensionScope | undefined>;
179
+ requestSecret(label: string): Promise<string | undefined>;
180
+ resolveActiveModal(value: boolean | string | undefined): void;
181
+ private request;
182
+ private selectChoice;
183
+ private append;
184
+ private appendAssistant;
185
+ private message;
186
+ private updateActivity;
187
+ private completeToolActivity;
188
+ private clearPendingActivityTimer;
189
+ private update;
190
+ private flushAssistant;
191
+ private revealAssistant;
192
+ }
193
+ export {};
@@ -0,0 +1 @@
1
+ import{RESOURCE_LIMITS as h}from"../../../domain/runtime/resource-limits.js";class y{listeners=new Set;initializationNotices=new Map;state={ready:!1,runActive:!1,messages:[],subagents:[],pendingAttachments:[],fileSuggestions:[],actionDetails:!1};resolveModal;exitResolvers=new Set;submitHandler;imagePasteHandler;textPasteHandler;clearAttachmentsHandler;interruptHandler;cancelHandler;sequence=0;noticeTimer;assistantRevealTimer;pendingAssistant;assistantSegmentPending=!1;pendingActivityTimers=new Map;snapshot(){return this.state}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}setSubmitHandler(t){this.submitHandler=t}setImagePasteHandler(t){this.imagePasteHandler=t}setTextPasteHandler(t){this.textPasteHandler=t}setClearAttachmentsHandler(t){this.clearAttachmentsHandler=t}setInterruptHandler(t){this.interruptHandler=t}setCancelHandler(t){this.cancelHandler=t}async submit(t){await this.submitHandler?.(t)}async pasteImage(t){await this.imagePasteHandler?.(t)}async pasteText(){return this.textPasteHandler?.()}interrupt(){this.interruptHandler?.()}cancel(){this.cancelHandler?.(),this.resolveActiveModal(void 0),this.update({clearBlockedUntil:Date.now()+1500})}clearAttachments(){this.clearAttachmentsHandler?.()}setReady(){this.update({ready:!0})}setRunActive(t){this.update({runActive:t})}setWelcome(t){this.update({welcome:t})}setPendingAttachments(t){this.update({pendingAttachments:t})}setContextUsage(t){this.update({contextUsage:t})}setFileSuggestions(t){this.update({fileSuggestions:t})}toggleActionDetails(){const t=!this.state.actionDetails;return this.update({actionDetails:t}),t}clearTranscript(){this.initializationNotices.clear(),this.assistantRevealTimer!==void 0&&clearTimeout(this.assistantRevealTimer),this.assistantRevealTimer=void 0,this.pendingAssistant=void 0,this.update({messages:[],subagents:[]})}exitCode;requestExit(t=0){this.exitCode??=t;for(const e of this.exitResolvers)e(this.exitCode);this.exitResolvers.clear()}waitForExit(){return this.exitCode===void 0?new Promise(t=>{this.exitResolvers.add(t)}):Promise.resolve(this.exitCode)}userPrompt(t,e=[]){this.append("user",t,e)}command(t){this.append("command",t)}commandOutput(t){this.append("notice",t)}transcriptNotice(t,e=!0){this.append("notice",t,void 0,void 0,void 0,void 0,e)}initializationNotice(t,e){this.initializationNotices.get(t)!==e&&(this.initializationNotices.set(t,e),this.transcriptNotice(e))}fileChange(t){this.append("diff",t.path,void 0,t)}notice(t){this.noticeTimer!==void 0&&clearTimeout(this.noticeTimer),this.update({footerNotice:t}),this.noticeTimer=setTimeout(()=>{this.noticeTimer=void 0,this.update({footerNotice:void 0})},4e3)}dispose(){this.noticeTimer!==void 0&&clearTimeout(this.noticeTimer),this.assistantRevealTimer!==void 0&&clearTimeout(this.assistantRevealTimer);for(const t of this.pendingActivityTimers.values())clearImmediate(t);this.pendingActivityTimers.clear(),this.noticeTimer=void 0,this.assistantRevealTimer=void 0,this.resolveActiveModal(void 0),this.initializationNotices.clear(),this.listeners.clear()}error(t){this.append("error",t)}subagentLifecycle(t){const e=this.state.modal?.kind==="subagent",i=this.state.subagents.find(n=>n.id===t.id),s={id:t.id,displayName:t.displayName,task:t.task,mode:t.mode,model:t.model,status:t.status,background:t.background,createdAt:i?.createdAt??t.timestamp,updatedAt:t.timestamp,...t.durationMs===void 0?{}:{durationMs:t.durationMs},...t.summary===void 0?{}:{summary:t.summary},...t.lastAction===void 0?i?.lastAction===void 0?{}:{lastAction:i.lastAction}:{lastAction:t.lastAction},...t.handoff===void 0?i?.handoff===void 0?{}:{handoff:i.handoff}:{handoff:t.handoff}},a=i===void 0?[...this.state.subagents,s]:this.state.subagents.map(n=>n.id===t.id?s:n);this.update({subagents:a},!e),t.type==="created"&&!this.state.messages.some(n=>n.kind==="subagent"&&n.subagent?.id===t.id)&&this.append("subagent",t.id,void 0,void 0,void 0,s,!e),(t.type==="completed"||t.type==="failed"||t.type==="cancelled")&&t.summary!==void 0&&this.transcriptNotice(`Agent ${t.displayName} ${t.status} \xB7 ${t.summary}`,!e)}startToolActivity(t,e,i){const s=this.state.messages.find(n=>n.kind==="activity"&&(n.activity?.state==="pending"||n.activity?.state==="running")&&n.content===t);let a=s?.id;if(s===void 0){const n=this.message("activity",t,void 0,void 0,{label:e,state:"running",startedAt:Date.now(),...i});a=n.id,this.update({messages:[...this.state.messages,n]})}else this.clearPendingActivityTimer(t),this.updateActivity(s.id,e,"running",i);return{complete:n=>this.completeToolActivity(a,n)}}toolActivityStarted(t,e,i){const s=this.state.messages.find(d=>d.kind==="activity"&&d.content===t&&(d.activity?.state==="pending"||d.activity?.state==="running"));if(s!==void 0){this.updateActivity(s.id,e,s.activity?.state==="pending"?"pending":"running",i);return}const a=this.message("activity",t,void 0,void 0,{label:e,state:"pending",startedAt:Date.now(),...i});this.update({messages:[...this.state.messages,a]});const n=setImmediate(()=>{this.pendingActivityTimers.delete(t);const d=this.state.messages.find(c=>c.kind==="activity"&&c.content===t&&c.activity?.state==="pending");d!==void 0&&this.updateActivity(d.id,e,"running",i)});this.pendingActivityTimers.set(t,n)}toolActivityCompleted(t,e){this.clearPendingActivityTimer(t);const i=this.state.messages.find(s=>s.kind==="activity"&&s.content===t&&(s.activity?.state==="pending"||s.activity?.state==="running"));i!==void 0&&this.completeToolActivity(i.id,e)}status(t){this.update({status:t,activityStartedAt:Date.now(),elapsedMs:void 0,usage:void 0})}activity(t,e,i){this.update({status:t,...this.state.activityStartedAt===void 0?{activityStartedAt:Date.now()-e}:{},elapsedMs:e,...i===void 0?{}:{usage:i}})}clearActivity(){this.update({status:void 0,activityStartedAt:void 0,elapsedMs:void 0,usage:void 0})}complete(t,e){this.update({status:"Done",elapsedMs:t,...e===void 0?{}:{usage:e}})}failed(){this.update({status:"Failed",elapsedMs:void 0,usage:void 0})}cancelled(){this.update({status:"Cancelled",elapsedMs:void 0,usage:void 0})}beginAssistant(){this.flushAssistant(),this.assistantSegmentPending=!1,this.appendAssistant("")}assistantActionBoundary(){this.flushAssistant(),this.assistantSegmentPending=!0}assistantDelta(t){if(this.assistantSegmentPending){this.assistantSegmentPending=!1,this.appendAssistant(t);return}const e=this.state.messages.at(-1);if(e?.kind!=="assistant"){this.flushAssistant(),this.appendAssistant(t);return}const i=this.pendingAssistant;this.pendingAssistant={id:e.id,content:`${i?.id===e.id?i.content:e.content}${t}`},this.assistantRevealTimer===void 0&&this.revealAssistant()}replaceAssistant(t){this.assistantRevealTimer!==void 0&&clearTimeout(this.assistantRevealTimer),this.assistantRevealTimer=void 0,this.pendingAssistant=void 0,this.assistantSegmentPending=!1;let e=-1;for(let s=this.state.messages.length-1;s>=0;s-=1)if(this.state.messages[s]?.kind==="user"){e=s;break}const i=this.state.messages.filter((s,a)=>a<=e||s.kind!=="assistant");this.update({messages:l([...i,this.message("assistant",t)])})}finishAssistant(){this.revealAssistant(),this.assistantSegmentPending=!1}confirmTrust(){return this.request({kind:"trust"}).then(t=>t===!0)}confirmTool(t,e){return this.request({kind:"approval",toolName:t,...e===void 0?{}:{detail:e}}).then(i=>i==="allow"||i===!0)}openSubagentDetails(t){if(this.state.modal!==void 0)return;const e=this.state.subagents.find(i=>i.id===t);e!==void 0&&this.update({modal:{kind:"subagent",subagent:e}})}closeSubagentDetails(){this.state.modal?.kind==="subagent"&&this.update({modal:void 0})}selectModel(t,e,i){return this.selectChoice(t,e,i)}selectScope(t){return this.selectChoice(t,[{value:"user",label:"User",description:"Available across your projects"},{value:"project",label:"Project",description:"Stored in the trusted project"}]).then(e=>e==="user"||e==="project"?e:void 0)}requestSecret(t){return this.request({kind:"secret",label:t}).then(e=>typeof e=="string"?e:void 0)}resolveActiveModal(t){const e=this.resolveModal;e!==void 0&&(this.resolveModal=void 0,this.update({modal:void 0}),e?.(t))}request(t){if(this.resolveModal!==void 0)throw new Error("A TUI decision is already active.");return this.update({modal:t}),new Promise(e=>{this.resolveModal=e})}selectChoice(t,e,i){return this.request({kind:"choice",title:t,choices:e,...i===void 0?{}:{currentValue:i}}).then(s=>typeof s=="string"?s:void 0)}append(t,e,i,s,a,n,d=!0){this.update({messages:l([...this.state.messages,this.message(t,e,i,s,a,n)])},d)}appendAssistant(t){const e=this.message("assistant","");this.update({messages:l([...this.state.messages,e])}),this.pendingAssistant={id:e.id,content:t},this.revealAssistant()}message(t,e,i,s,a,n){return{id:`tui-${++this.sequence}`,kind:t,content:e,...i===void 0||i.length===0?{}:{attachments:i},...s===void 0?{}:{fileChange:s},...a===void 0?{}:{activity:a},...n===void 0?{}:{subagent:n}}}updateActivity(t,e,i,s){const a=this.state.messages.map(n=>n.id===t&&n.activity!==void 0?{...n,content:n.content,activity:{...n.activity,label:e,state:i,...s}}:n);this.update({messages:a})}completeToolActivity(t,e){const i=this.state.messages.find(s=>s.id===t&&s.activity!==void 0);i?.activity===void 0||i.activity.state!=="pending"&&i.activity.state!=="running"||this.update({messages:this.state.messages.map(s=>s.id===t&&s.activity!==void 0?{...s,activity:{...s.activity,state:e?"failed":"completed",elapsedMs:Date.now()-s.activity.startedAt}}:s)})}clearPendingActivityTimer(t){const e=this.pendingActivityTimers.get(t);e!==void 0&&(clearImmediate(e),this.pendingActivityTimers.delete(t))}update(t,e=!0){if(this.state={...this.state,...t},!!e)for(const i of this.listeners)i()}flushAssistant(){this.assistantRevealTimer!==void 0&&(clearTimeout(this.assistantRevealTimer),this.assistantRevealTimer=void 0);const t=this.pendingAssistant;if(t===void 0)return;this.pendingAssistant=void 0;const e=this.state.messages.findIndex(a=>a.id===t.id);if(e<0)return;const i=[...this.state.messages],s=i[e];s===void 0||s.kind!=="assistant"||(i[e]={...s,content:t.content},this.update({messages:i}))}revealAssistant(){const t=this.pendingAssistant;if(t===void 0)return;const e=this.state.messages.findIndex(o=>o.id===t.id);if(e<0){this.pendingAssistant=void 0;return}const i=this.state.messages[e];if(i===void 0||i.kind!=="assistant"){this.pendingAssistant=void 0;return}const s=i.content.length,a=t.content.length,n=a-s;if(n<=0){this.pendingAssistant=void 0,this.assistantRevealTimer!==void 0&&(clearTimeout(this.assistantRevealTimer),this.assistantRevealTimer=void 0);return}const m=Math.max(s===0?A:v,Math.ceil(n/4));let u=Math.min(a,s+m);if(u<a){const o=t.content.charCodeAt(u-1);o>=55296&&o<=56319&&(u+=1)}const p=u>=a,f=[...this.state.messages];if(f[e]={...i,content:t.content.slice(0,u)},this.update({messages:f}),p){this.pendingAssistant=void 0,this.assistantRevealTimer!==void 0&&(clearTimeout(this.assistantRevealTimer),this.assistantRevealTimer=void 0);return}this.assistantRevealTimer===void 0&&(this.assistantRevealTimer=setTimeout(()=>{this.assistantRevealTimer=void 0,this.revealAssistant()},g))}}const g=16,A=64,v=8;function l(r){if(r.length<=h.tuiTranscriptMessages)return r;const t=r.filter(s=>s.activity?.state==="pending"||s.activity?.state==="running"||s.subagent?.status==="queued"||s.subagent?.status==="running"),e=r.slice(-h.tuiTranscriptMessages);return[...t,...e.filter(s=>!t.some(a=>a.id===s.id))].slice(-h.tuiTranscriptMessages)}export{y as InkTuiBridge};
@@ -0,0 +1,15 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ export interface TerminalOutput extends Writable {
3
+ isTTY?: boolean;
4
+ columns?: number;
5
+ rows?: number;
6
+ }
7
+ export interface TerminalCapabilities {
8
+ isInteractive: boolean;
9
+ colorEnabled: boolean;
10
+ unicodeEnabled: boolean;
11
+ width: number;
12
+ }
13
+ export declare function detectTerminalCapabilities(input: Readable & {
14
+ isTTY?: boolean;
15
+ }, output: TerminalOutput, env?: Readonly<Record<string, string | undefined>>): TerminalCapabilities;
@@ -0,0 +1 @@
1
+ function t(s,e,n=process.env){const c=s.isTTY===!0&&e.isTTY===!0,i=c&&n.NO_COLOR===void 0&&n.TERM!=="dumb",o=n.LOTAGATE_ASCII!=="1",r=typeof e.columns=="number"&&e.columns>0?e.columns:80;return{isInteractive:c,colorEnabled:i,unicodeEnabled:o,width:r}}export{t as detectTerminalCapabilities};
@@ -0,0 +1,5 @@
1
+ export type MouseWheelDirection = 'up' | 'down';
2
+ /** Returns the wheel direction for an SGR mouse event, if the event is a wheel event. */
3
+ export declare function parseMouseWheel(input: string): MouseWheelDirection | undefined;
4
+ /** Identifies mouse escape sequences so they cannot be inserted into the prompt draft. */
5
+ export declare function isMouseSequence(input: string): boolean;
@@ -0,0 +1 @@
1
+ const o="\x1B",u=/^\[<(\d+);(\d+);(\d+)([mM])$/u;function s(e){const n=u.exec(r(e));if(n===null)return;const t=Number(n[1]);if((t&64)!==0)return(t&1)===0?"up":"down"}function c(e){return/^\[<[0-9;]+[mM]$/u.test(r(e))}function r(e){return e.startsWith("\x1B")?e.slice(1):e}export{c as isMouseSequence,s as parseMouseWheel};
@@ -0,0 +1,10 @@
1
+ import type { TerminalOutput } from './terminal-capabilities.js';
2
+ /** Starts the interactive application at the top of a clean terminal screen. */
3
+ export declare function clearTerminalScreen(output: TerminalOutput): void;
4
+ /**
5
+ * Isolates the interactive application from the invoking shell's scrollback.
6
+ * The terminal restores the original screen after the TUI has unmounted.
7
+ */
8
+ export declare function enterInteractiveScreen(output: TerminalOutput): void;
9
+ /** Restores the shell screen that was active before the interactive TUI. */
10
+ export declare function exitInteractiveScreen(output: TerminalOutput): void;
@@ -0,0 +1 @@
1
+ const E="\x1B[2J\x1B[H",n="\x1B[?1049h",r="\x1B[?1049l",t="\x1B[?1000h\x1B[?1006h",c="\x1B[?1006l\x1B[?1000l";function i(e){e.write(E)}function S(e){e.write(n),i(e),e.write(t)}function _(e){e.write(c),e.write(r)}export{i as clearTerminalScreen,S as enterInteractiveScreen,_ as exitInteractiveScreen};
@@ -0,0 +1,29 @@
1
+ import type { PreparedCliAgent } from '../../application/agent/cli-agent-execution-service.js';
2
+ import type { AgentRunTracker } from '../../application/agent/agent-run-tracker.js';
3
+ import type { CliRuntime } from '../../bootstrap/runtime-factory.js';
4
+ import type { ChatUsage } from '../../ports/chat-model.js';
5
+ import type { InkTuiBridge } from './ink/tui-bridge.js';
6
+ import type { CliAgentSessionStore } from '../../application/agent/agent-session-store.js';
7
+ import type { CliAgentRunRequest } from '../../application/agent/cli-agent-run-request.js';
8
+ export interface TuiAgentEventRunnerOptions {
9
+ prepared: PreparedCliAgent;
10
+ input: string;
11
+ userInput?: string;
12
+ workspaceContext?: string;
13
+ inputContent?: CliAgentRunRequest['inputContent'];
14
+ model: string;
15
+ sessionId?: string;
16
+ turnId?: string;
17
+ signal: AbortSignal;
18
+ agentSessionStore: CliAgentSessionStore;
19
+ tracker: AgentRunTracker;
20
+ runtime: CliRuntime;
21
+ renderer: InkTuiBridge;
22
+ startedAt: number;
23
+ getUsage: () => ChatUsage | undefined;
24
+ appendAssistantDelta: (content: string) => void;
25
+ replaceAssistantResponse: (content: string) => void;
26
+ hasResponse: () => boolean;
27
+ }
28
+ /** Owns the CLI projection of the Agent SDK event stream for interactive runs. */
29
+ export declare function runTuiAgentEvents(options: TuiAgentEventRunnerOptions): Promise<void>;
@@ -0,0 +1 @@
1
+ import{CliTurnEventProjector as i}from"../../application/orchestration/cli-turn-event-projector.js";import{persistCliTurnEvent as d}from"../../application/orchestration/cli-turn-persistence.js";import{persistContextCompaction as s}from"../../application/agent/context-compaction-persistence.js";import{renderAgentInitialization as c}from"./agent-initialization-renderer.js";import{throwIfAborted as l}from"./tui-lifecycle-actions.js";import{agentLimitNotice as f,classifyAgentLimit as m}from"../../application/agent/agent-limit.js";async function w(e){const a=new i;if(c(e.renderer,await e.prepared.agent.initialize()),e.sessionId!==void 0){const r=await e.runtime.sessionStore.readHistory(e.sessionId);e.agentSessionStore.hydrate(e.sessionId,r.transcript,r.events,e.input)}for await(const r of e.prepared.run({input:e.input,...e.userInput===void 0?{}:{userInput:e.userInput},...e.workspaceContext===void 0?{}:{workspaceContext:e.workspaceContext},...e.inputContent===void 0?{}:{inputContent:e.inputContent},model:e.model,...e.sessionId===void 0?{}:{sessionId:e.sessionId},signal:e.signal})){l(e.signal),e.tracker.observe(r);for(const t of a.observe(r)){if(e.sessionId!==void 0)try{await d(e.runtime.sessionStore,e.sessionId,t,{...e.turnId===void 0?{}:{turnId:e.turnId}})}catch(n){e.runtime.logger.warn("Unable to persist agent lifecycle event.",{eventType:t.type,reason:n instanceof Error?n.message:String(n)})}t.type==="assistant.delta"&&e.appendAssistantDelta(t.content),t.type==="assistant.replaced"&&e.replaceAssistantResponse(t.content),t.type==="assistant.segment.completed"&&(e.renderer.assistantActionBoundary(),t.phase==="final"&&e.renderer.complete(Date.now()-e.startedAt,e.getUsage())),t.type==="action.approval_requested"&&(e.renderer.assistantActionBoundary(),e.renderer.status("Waiting for approval")),t.type==="action.started"&&(e.renderer.assistantActionBoundary(),e.runtime.logger.info("Agent tool called.",{toolName:t.toolName,actionId:t.actionId}),t.toolName!=="agent.spawn"&&e.renderer.toolActivityStarted(t.actionId,t.displayName,{toolName:t.toolName,kind:t.kind})),t.type==="action.completed"&&(e.runtime.logger.info("Agent tool completed.",{toolName:t.toolName,actionId:t.actionId,isError:t.isError}),e.renderer.toolActivityCompleted(t.actionId,t.isError))}if(r.type==="context.compacted"&&(e.sessionId!==void 0&&await s(e.runtime,e.prepared,e.sessionId,r.metrics,e.turnId),e.renderer.transcriptNotice("Context compacted automatically."),e.renderer.activity("Thinking",Date.now()-e.startedAt,e.getUsage())),r.type==="session.failed"){const t=m(r.error);if(t===void 0)throw r.error;e.tracker.markStuck(),e.sessionId!==void 0&&e.agentSessionStore.delete(e.sessionId);const n=f(t);e.hasResponse()?e.renderer.notice(n):e.appendAssistantDelta(n);return}r.type==="session.completed"&&!e.hasResponse()&&e.appendAssistantDelta(r.content)}}export{w as runTuiAgentEvents};
@@ -0,0 +1,45 @@
1
+ import type { CliRuntime } from '../../bootstrap/runtime-factory.js';
2
+ import type { CliAgentSessionStore } from '../../application/agent/agent-session-store.js';
3
+ import type { SubagentJobRegistry } from '../../application/orchestration/cli-subagent-service.js';
4
+ import type { SessionExecutionWorkspaceService, SessionExecutionWorkspace } from '../../application/workspace/session-execution-workspace.js';
5
+ import type { SessionMetadata } from '../../domain/session/session.js';
6
+ import type { GoalTurnCallbacks } from '../../application/orchestration/goal-runner.js';
7
+ import type { SkillManifest } from '../../domain/extensions/skill-manifest.js';
8
+ import type { AttachmentPayload } from '../../domain/session/attachment.js';
9
+ import type { HookEvent } from '../../domain/extensions/hook-manifest.js';
10
+ import type { PendingAttachmentStore } from '../../application/chat/pending-attachment-store.js';
11
+ import type { InkTuiBridge } from './ink/tui-bridge.js';
12
+ import type { TuiToolApprovalCoordinator } from './tui-tool-approval.js';
13
+ import type { TuiContextService } from './tui-context-service.js';
14
+ export interface TuiAgentTurnControllerHost {
15
+ readonly runtime: CliRuntime;
16
+ readonly cwd: string;
17
+ readonly renderer: InkTuiBridge;
18
+ readonly pendingAttachments: PendingAttachmentStore;
19
+ readonly approvals: TuiToolApprovalCoordinator;
20
+ readonly contextService: TuiContextService;
21
+ readonly agentSessionStore: CliAgentSessionStore;
22
+ readonly executionWorkspaces: SessionExecutionWorkspaceService;
23
+ getSession(): SessionMetadata | undefined;
24
+ getActiveModel(): string | null;
25
+ getActiveProfile(): string | null;
26
+ getExecutionWorkspace(): SessionExecutionWorkspace;
27
+ setExecutionWorkspace(workspace: SessionExecutionWorkspace): void;
28
+ getSubagentJobs(): SubagentJobRegistry;
29
+ runHookEvent(event: HookEvent, sessionId: string): Promise<void>;
30
+ refreshContextUsage(): Promise<void>;
31
+ }
32
+ /** Owns interactive turn state and keeps prompt execution out of the TUI shell. */
33
+ export declare class TuiAgentTurnController {
34
+ private readonly host;
35
+ private activeAbortController;
36
+ private activePromptRun;
37
+ constructor(host: TuiAgentTurnControllerHost);
38
+ isRunning(): boolean;
39
+ getActiveAbortController(): AbortController | undefined;
40
+ setActiveAbortController(controller: AbortController | undefined): void;
41
+ abortActive(reason?: unknown): void;
42
+ runPrompt(prompt: string, initialSkill?: SkillManifest, goalCallbacks?: GoalTurnCallbacks): Promise<string>;
43
+ sendPrompt(prompt: string, attachments?: readonly AttachmentPayload[], initialSkill?: SkillManifest, goalCallbacks?: GoalTurnCallbacks): Promise<string>;
44
+ private executePrompt;
45
+ }