@lotagate/cli 0.1.20 → 0.1.22

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 (490) hide show
  1. package/dist/application/agent/agent-history.d.ts +3 -0
  2. package/dist/application/agent/agent-history.js +81 -0
  3. package/dist/application/agent/agent-input-context.d.ts +9 -0
  4. package/dist/application/agent/agent-input-context.js +12 -0
  5. package/dist/application/agent/agent-limit.d.ts +3 -0
  6. package/dist/application/agent/agent-limit.js +12 -0
  7. package/dist/application/agent/agent-run-tracker.d.ts +30 -0
  8. package/dist/application/agent/agent-run-tracker.js +68 -0
  9. package/dist/application/agent/agent-session-store.d.ts +19 -0
  10. package/dist/application/agent/agent-session-store.js +74 -0
  11. package/dist/application/agent/capability-profile.d.ts +37 -0
  12. package/dist/application/agent/capability-profile.js +13 -0
  13. package/dist/application/agent/cli-agent-execution-service.d.ts +81 -0
  14. package/dist/application/agent/cli-agent-execution-service.js +279 -0
  15. package/dist/application/agent/context-compaction-persistence.d.ts +8 -0
  16. package/dist/application/agent/context-compaction-persistence.js +27 -0
  17. package/dist/application/agent/context-compaction.d.ts +20 -0
  18. package/dist/application/agent/context-compaction.js +114 -0
  19. package/dist/application/agent/prompt-data-safety.d.ts +14 -0
  20. package/dist/application/agent/prompt-data-safety.js +38 -0
  21. package/dist/application/agent/safe-system-prompt.d.ts +3 -0
  22. package/dist/application/agent/safe-system-prompt.js +19 -0
  23. package/dist/application/agent/scoped-tool-executor.d.ts +13 -0
  24. package/dist/application/agent/scoped-tool-executor.js +32 -0
  25. package/dist/application/agent/system-prompt-builder.d.ts +14 -0
  26. package/dist/application/agent/system-prompt-builder.js +199 -0
  27. package/dist/application/agent/tool-catalog.d.ts +14 -0
  28. package/dist/application/agent/tool-catalog.js +30 -0
  29. package/dist/application/agent/tool-display.d.ts +6 -0
  30. package/dist/application/agent/tool-display.js +59 -0
  31. package/dist/application/agent/tool-hook-lifecycle.d.ts +19 -0
  32. package/dist/application/agent/tool-hook-lifecycle.js +85 -0
  33. package/dist/application/auth/authentication-service.d.ts +20 -0
  34. package/dist/application/auth/authentication-service.js +44 -0
  35. package/dist/application/chat/chat-service.d.ts +12 -0
  36. package/dist/application/chat/chat-service.js +19 -0
  37. package/dist/application/chat/pending-attachment-store.d.ts +12 -0
  38. package/dist/application/chat/pending-attachment-store.js +28 -0
  39. package/dist/application/commands/application-command-executor.d.ts +20 -0
  40. package/dist/application/commands/application-command-executor.js +66 -0
  41. package/dist/application/commands/cli-args.d.ts +6 -0
  42. package/dist/application/commands/cli-args.js +43 -0
  43. package/dist/application/commands/cli-command-services.d.ts +16 -0
  44. package/dist/application/commands/cli-command-services.js +405 -0
  45. package/dist/application/commands/command-catalog.d.ts +6 -0
  46. package/dist/application/commands/command-catalog.js +159 -0
  47. package/dist/application/commands/command-contract.d.ts +58 -0
  48. package/dist/application/commands/command-contract.js +1 -0
  49. package/dist/application/commands/command-hints.d.ts +9 -0
  50. package/dist/application/commands/command-hints.js +17 -0
  51. package/dist/application/commands/command-output.d.ts +4 -0
  52. package/dist/application/commands/command-output.js +1 -0
  53. package/dist/application/commands/command-parser.d.ts +10 -0
  54. package/dist/application/commands/command-parser.js +155 -0
  55. package/dist/application/commands/command-presentation.d.ts +7 -0
  56. package/dist/application/commands/command-presentation.js +131 -0
  57. package/dist/application/commands/command-registry.d.ts +11 -0
  58. package/dist/application/commands/command-registry.js +64 -0
  59. package/dist/application/commands/command-runtime.d.ts +2 -0
  60. package/dist/application/commands/command-runtime.js +3 -0
  61. package/dist/application/commands/goal-command-handlers.d.ts +3 -0
  62. package/dist/application/commands/goal-command-handlers.js +120 -0
  63. package/dist/application/commands/media-command-handlers.d.ts +9 -0
  64. package/dist/application/commands/media-command-handlers.js +307 -0
  65. package/dist/application/commands/media-command-output.d.ts +11 -0
  66. package/dist/application/commands/media-command-output.js +8 -0
  67. package/dist/application/commands/runtime-command-handlers.d.ts +7 -0
  68. package/dist/application/commands/runtime-command-handlers.js +177 -0
  69. package/dist/application/commands/stream-output.d.ts +4 -0
  70. package/dist/application/commands/stream-output.js +10 -0
  71. package/dist/application/commands/utility-commands.d.ts +6 -0
  72. package/dist/application/commands/utility-commands.js +81 -0
  73. package/dist/application/config/execution-config.d.ts +4 -0
  74. package/dist/application/config/execution-config.js +6 -0
  75. package/dist/application/extensions/extension-list-contract.d.ts +13 -0
  76. package/dist/application/extensions/extension-list-contract.js +1 -0
  77. package/dist/application/extensions/extension-list-formatters.d.ts +31 -0
  78. package/dist/application/extensions/extension-list-formatters.js +98 -0
  79. package/dist/application/extensions/extension-list-output.d.ts +3 -0
  80. package/dist/application/extensions/extension-list-output.js +7 -0
  81. package/dist/application/extensions/plugin-contribution-registry.d.ts +15 -0
  82. package/dist/application/extensions/plugin-contribution-registry.js +80 -0
  83. package/dist/application/extensions/skill-scope-store.d.ts +23 -0
  84. package/dist/application/extensions/skill-scope-store.js +33 -0
  85. package/dist/application/formatting/compact-number.d.ts +2 -0
  86. package/dist/application/formatting/compact-number.js +18 -0
  87. package/dist/application/formatting/compact-table.d.ts +22 -0
  88. package/dist/application/formatting/compact-table.js +49 -0
  89. package/dist/application/media/video-operation-poller.d.ts +5 -0
  90. package/dist/application/media/video-operation-poller.js +42 -0
  91. package/dist/application/model/cached-model-catalog.d.ts +13 -0
  92. package/dist/application/model/cached-model-catalog.js +31 -0
  93. package/dist/application/model/initial-model-selection.d.ts +10 -0
  94. package/dist/application/model/initial-model-selection.js +11 -0
  95. package/dist/application/model/model-catalog-service.d.ts +6 -0
  96. package/dist/application/model/model-catalog-service.js +13 -0
  97. package/dist/application/model/model-context-window.d.ts +3 -0
  98. package/dist/application/model/model-context-window.js +23 -0
  99. package/dist/application/orchestration/cli-subagent-service.d.ts +70 -0
  100. package/dist/application/orchestration/cli-subagent-service.js +328 -0
  101. package/dist/application/orchestration/cli-turn-event-projector.d.ts +12 -0
  102. package/dist/application/orchestration/cli-turn-event-projector.js +81 -0
  103. package/dist/application/orchestration/cli-turn-events.d.ts +76 -0
  104. package/dist/application/orchestration/cli-turn-events.js +39 -0
  105. package/dist/application/orchestration/cli-turn-persistence.d.ts +6 -0
  106. package/dist/application/orchestration/cli-turn-persistence.js +14 -0
  107. package/dist/application/orchestration/goal-evaluator.d.ts +18 -0
  108. package/dist/application/orchestration/goal-evaluator.js +88 -0
  109. package/dist/application/orchestration/goal-input.d.ts +3 -0
  110. package/dist/application/orchestration/goal-input.js +19 -0
  111. package/dist/application/orchestration/goal-output.d.ts +2 -0
  112. package/dist/application/orchestration/goal-output.js +11 -0
  113. package/dist/application/orchestration/goal-runner.d.ts +22 -0
  114. package/dist/application/orchestration/goal-runner.js +153 -0
  115. package/dist/application/orchestration/goal-usage.d.ts +9 -0
  116. package/dist/application/orchestration/goal-usage.js +19 -0
  117. package/dist/application/orchestration/headless-agent-turn.d.ts +32 -0
  118. package/dist/application/orchestration/headless-agent-turn.js +82 -0
  119. package/dist/application/orchestration/plan-generator.d.ts +7 -0
  120. package/dist/application/orchestration/plan-generator.js +34 -0
  121. package/dist/application/orchestration/subagent-coordinator.d.ts +33 -0
  122. package/dist/application/orchestration/subagent-coordinator.js +28 -0
  123. package/dist/application/orchestration/subagent-handoff.d.ts +2 -0
  124. package/dist/application/orchestration/subagent-handoff.js +68 -0
  125. package/dist/application/orchestration/subagent-tool-executor.d.ts +12 -0
  126. package/dist/application/orchestration/subagent-tool-executor.js +93 -0
  127. package/dist/application/orchestration/task-assessment.d.ts +4 -0
  128. package/dist/application/orchestration/task-assessment.js +35 -0
  129. package/dist/application/orchestration/task-graph.d.ts +13 -0
  130. package/dist/application/orchestration/task-graph.js +56 -0
  131. package/dist/application/orchestration/task-scheduler.d.ts +18 -0
  132. package/dist/application/orchestration/task-scheduler.js +88 -0
  133. package/dist/application/project/project-trust-service.d.ts +13 -0
  134. package/dist/application/project/project-trust-service.js +74 -0
  135. package/dist/application/protocol/browser-host-tool-executor.d.ts +41 -0
  136. package/dist/application/protocol/browser-host-tool-executor.js +88 -0
  137. package/dist/application/protocol/desktop-agent-command.d.ts +9 -0
  138. package/dist/application/protocol/desktop-agent-command.js +663 -0
  139. package/dist/application/protocol/desktop-attachment-store.d.ts +16 -0
  140. package/dist/application/protocol/desktop-attachment-store.js +82 -0
  141. package/dist/application/protocol/desktop-command-catalog.d.ts +2 -0
  142. package/dist/application/protocol/desktop-command-catalog.js +19 -0
  143. package/dist/application/protocol/desktop-command-contract.d.ts +22 -0
  144. package/dist/application/protocol/desktop-command-contract.js +3 -0
  145. package/dist/application/protocol/desktop-command-executor.d.ts +16 -0
  146. package/dist/application/protocol/desktop-command-executor.js +47 -0
  147. package/dist/application/protocol/desktop-command-output.d.ts +15 -0
  148. package/dist/application/protocol/desktop-command-output.js +24 -0
  149. package/dist/application/protocol/desktop-execution-policy.d.ts +17 -0
  150. package/dist/application/protocol/desktop-execution-policy.js +49 -0
  151. package/dist/application/protocol/desktop-host-tool-executor.d.ts +57 -0
  152. package/dist/application/protocol/desktop-host-tool-executor.js +53 -0
  153. package/dist/application/protocol/desktop-orchestration-events.d.ts +5 -0
  154. package/dist/application/protocol/desktop-orchestration-events.js +37 -0
  155. package/dist/application/protocol/json-line-writer.d.ts +9 -0
  156. package/dist/application/protocol/json-line-writer.js +19 -0
  157. package/dist/application/protocol/jsonl-agent-command.d.ts +3 -0
  158. package/dist/application/protocol/jsonl-agent-command.js +97 -0
  159. package/dist/application/protocol/jsonl-protocol.d.ts +52 -0
  160. package/dist/application/protocol/jsonl-protocol.js +170 -0
  161. package/dist/application/security/desktop-tool-scope-policy.d.ts +3 -0
  162. package/dist/application/security/desktop-tool-scope-policy.js +52 -0
  163. package/dist/application/security/tool-action-risk-analyzer.d.ts +13 -0
  164. package/dist/application/security/tool-action-risk-analyzer.js +64 -0
  165. package/dist/application/security/tool-approval-service.d.ts +35 -0
  166. package/dist/application/security/tool-approval-service.js +97 -0
  167. package/dist/application/security/tool-risk-classifier.d.ts +11 -0
  168. package/dist/application/security/tool-risk-classifier.js +65 -0
  169. package/dist/application/security/workspace-permission-policy.d.ts +10 -0
  170. package/dist/application/security/workspace-permission-policy.js +50 -0
  171. package/dist/application/session/project-session-access.d.ts +8 -0
  172. package/dist/application/session/project-session-access.js +19 -0
  173. package/dist/application/session/session-compaction-service.d.ts +10 -0
  174. package/dist/application/session/session-compaction-service.js +43 -0
  175. package/dist/application/session/session-turn-lifecycle.d.ts +5 -0
  176. package/dist/application/session/session-turn-lifecycle.js +31 -0
  177. package/dist/application/workspace/workspace-file-index.d.ts +15 -0
  178. package/dist/application/workspace/workspace-file-index.js +60 -0
  179. package/dist/application/workspace/workspace-file-reference-resolver.d.ts +14 -0
  180. package/dist/application/workspace/workspace-file-reference-resolver.js +123 -0
  181. package/dist/application/workspace/workspace-instruction-loader.d.ts +8 -0
  182. package/dist/application/workspace/workspace-instruction-loader.js +55 -0
  183. package/dist/bootstrap/composition-root.d.ts +6 -0
  184. package/dist/bootstrap/composition-root.js +4 -0
  185. package/dist/bootstrap/global-cli-options.d.ts +6 -0
  186. package/dist/bootstrap/global-cli-options.js +29 -0
  187. package/dist/bootstrap/native-devtools-stub.d.ts +10 -0
  188. package/dist/bootstrap/native-devtools-stub.js +10 -0
  189. package/dist/bootstrap/native-entry.d.ts +1 -0
  190. package/dist/bootstrap/native-entry.js +6 -0
  191. package/dist/bootstrap/native-tiktoken.d.ts +4 -0
  192. package/dist/bootstrap/native-tiktoken.js +5 -0
  193. package/dist/bootstrap/runtime-factory.d.ts +35 -0
  194. package/dist/bootstrap/runtime-factory.js +44 -0
  195. package/dist/bootstrap/shutdown-manager.d.ts +10 -0
  196. package/dist/bootstrap/shutdown-manager.js +14 -0
  197. package/dist/bootstrap/startup-sequence.d.ts +5 -0
  198. package/dist/bootstrap/startup-sequence.js +10 -0
  199. package/dist/domain/auth/auth-profile.d.ts +14 -0
  200. package/dist/domain/auth/auth-profile.js +39 -0
  201. package/dist/domain/config/config-schema.d.ts +17 -0
  202. package/dist/domain/config/config-schema.js +105 -0
  203. package/dist/domain/errors/cli-command-hint.d.ts +5 -0
  204. package/dist/domain/errors/cli-command-hint.js +1 -0
  205. package/dist/domain/errors/cli-error.d.ts +35 -0
  206. package/dist/domain/errors/cli-error.js +129 -0
  207. package/dist/domain/errors/error-codes.d.ts +46 -0
  208. package/dist/domain/errors/error-codes.js +45 -0
  209. package/dist/domain/extensions/extension-scope.d.ts +3 -0
  210. package/dist/domain/extensions/extension-scope.js +23 -0
  211. package/dist/domain/extensions/extension-state.d.ts +5 -0
  212. package/dist/domain/extensions/extension-state.js +11 -0
  213. package/dist/domain/extensions/hook-manifest.d.ts +10 -0
  214. package/dist/domain/extensions/hook-manifest.js +23 -0
  215. package/dist/domain/extensions/mcp-config.d.ts +18 -0
  216. package/dist/domain/extensions/mcp-config.js +111 -0
  217. package/dist/domain/extensions/plugin-manifest.d.ts +11 -0
  218. package/dist/domain/extensions/plugin-manifest.js +43 -0
  219. package/dist/domain/extensions/skill-manifest.d.ts +10 -0
  220. package/dist/domain/extensions/skill-manifest.js +51 -0
  221. package/dist/domain/filesystem/file-change-diff.d.ts +21 -0
  222. package/dist/domain/filesystem/file-change-diff.js +60 -0
  223. package/dist/domain/media/gateway-media-contract.d.ts +23 -0
  224. package/dist/domain/media/gateway-media-contract.js +163 -0
  225. package/dist/domain/media/media-contract.d.ts +28 -0
  226. package/dist/domain/media/media-contract.js +1 -0
  227. package/dist/domain/media/media-execution-policy.d.ts +9 -0
  228. package/dist/domain/media/media-execution-policy.js +31 -0
  229. package/dist/domain/orchestration/goal.d.ts +58 -0
  230. package/dist/domain/orchestration/goal.js +113 -0
  231. package/dist/domain/orchestration/subagent-identity.d.ts +2 -0
  232. package/dist/domain/orchestration/subagent-identity.js +8 -0
  233. package/dist/domain/orchestration/subagent.d.ts +33 -0
  234. package/dist/domain/orchestration/subagent.js +1 -0
  235. package/dist/domain/orchestration/task.d.ts +31 -0
  236. package/dist/domain/orchestration/task.js +1 -0
  237. package/dist/domain/project/project-identity.d.ts +6 -0
  238. package/dist/domain/project/project-identity.js +4 -0
  239. package/dist/domain/runtime/assistant-delta-normalizer.d.ts +11 -0
  240. package/dist/domain/runtime/assistant-delta-normalizer.js +19 -0
  241. package/dist/domain/runtime/resource-limits.d.ts +60 -0
  242. package/dist/domain/runtime/resource-limits.js +60 -0
  243. package/dist/domain/session/attachment.d.ts +13 -0
  244. package/dist/domain/session/attachment.js +1 -0
  245. package/dist/domain/session/session-schema.d.ts +6 -0
  246. package/dist/domain/session/session-schema.js +28 -0
  247. package/dist/domain/session/session.d.ts +27 -0
  248. package/dist/domain/session/session.js +1 -0
  249. package/dist/domain/settings/settings-document.d.ts +8 -0
  250. package/dist/domain/settings/settings-document.js +36 -0
  251. package/dist/domain/validation/record-schema.d.ts +4 -0
  252. package/dist/domain/validation/record-schema.js +9 -0
  253. package/dist/domain/workspace/workspace-settings.d.ts +12 -0
  254. package/dist/domain/workspace/workspace-settings.js +44 -0
  255. package/dist/infrastructure/agent-sdk/agent-instance-factory.d.ts +22 -0
  256. package/dist/infrastructure/agent-sdk/agent-instance-factory.js +31 -0
  257. package/dist/infrastructure/agent-sdk/tool-calling-model-client.d.ts +11 -0
  258. package/dist/infrastructure/agent-sdk/tool-calling-model-client.js +447 -0
  259. package/dist/infrastructure/cache/cache-policy.d.ts +7 -0
  260. package/dist/infrastructure/cache/cache-policy.js +18 -0
  261. package/dist/infrastructure/cache/file-cache-store.d.ts +17 -0
  262. package/dist/infrastructure/cache/file-cache-store.js +121 -0
  263. package/dist/infrastructure/clipboard/clipboard-adapter-factory.d.ts +11 -0
  264. package/dist/infrastructure/clipboard/clipboard-adapter-factory.js +98 -0
  265. package/dist/infrastructure/clipboard/clipboard-policy.d.ts +8 -0
  266. package/dist/infrastructure/clipboard/clipboard-policy.js +19 -0
  267. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.d.ts +10 -0
  268. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.js +94 -0
  269. package/dist/infrastructure/clipboard/image-normalizer.d.ts +12 -0
  270. package/dist/infrastructure/clipboard/image-normalizer.js +78 -0
  271. package/dist/infrastructure/clipboard/windows-clipboard-adapter.d.ts +7 -0
  272. package/dist/infrastructure/clipboard/windows-clipboard-adapter.js +66 -0
  273. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.d.ts +7 -0
  274. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.js +70 -0
  275. package/dist/infrastructure/config/config-loader.d.ts +19 -0
  276. package/dist/infrastructure/config/config-loader.js +76 -0
  277. package/dist/infrastructure/config/environment-values.d.ts +2 -0
  278. package/dist/infrastructure/config/environment-values.js +7 -0
  279. package/dist/infrastructure/credentials/composite-credential-store.d.ts +11 -0
  280. package/dist/infrastructure/credentials/composite-credential-store.js +32 -0
  281. package/dist/infrastructure/credentials/encrypted-file-credential-store.d.ts +17 -0
  282. package/dist/infrastructure/credentials/encrypted-file-credential-store.js +181 -0
  283. package/dist/infrastructure/credentials/environment-credential-store.d.ts +11 -0
  284. package/dist/infrastructure/credentials/environment-credential-store.js +37 -0
  285. package/dist/infrastructure/credentials/secret-input.d.ts +7 -0
  286. package/dist/infrastructure/credentials/secret-input.js +44 -0
  287. package/dist/infrastructure/extensions/composite-mcp-config-store.d.ts +9 -0
  288. package/dist/infrastructure/extensions/composite-mcp-config-store.js +10 -0
  289. package/dist/infrastructure/extensions/extension-directory-reader.d.ts +2 -0
  290. package/dist/infrastructure/extensions/extension-directory-reader.js +15 -0
  291. package/dist/infrastructure/extensions/extension-source-resolver.d.ts +6 -0
  292. package/dist/infrastructure/extensions/extension-source-resolver.js +126 -0
  293. package/dist/infrastructure/extensions/file-mcp-config-store.d.ts +15 -0
  294. package/dist/infrastructure/extensions/file-mcp-config-store.js +66 -0
  295. package/dist/infrastructure/extensions/hook-runtime.d.ts +18 -0
  296. package/dist/infrastructure/extensions/hook-runtime.js +66 -0
  297. package/dist/infrastructure/extensions/mcp-runtime.d.ts +12 -0
  298. package/dist/infrastructure/extensions/mcp-runtime.js +52 -0
  299. package/dist/infrastructure/extensions/plugin-discovery.d.ts +5 -0
  300. package/dist/infrastructure/extensions/plugin-discovery.js +52 -0
  301. package/dist/infrastructure/extensions/plugin-manager.d.ts +26 -0
  302. package/dist/infrastructure/extensions/plugin-manager.js +139 -0
  303. package/dist/infrastructure/extensions/skill-discovery.d.ts +4 -0
  304. package/dist/infrastructure/extensions/skill-discovery.js +29 -0
  305. package/dist/infrastructure/extensions/skill-installer.d.ts +8 -0
  306. package/dist/infrastructure/extensions/skill-installer.js +88 -0
  307. package/dist/infrastructure/extensions/skill-manager.d.ts +22 -0
  308. package/dist/infrastructure/extensions/skill-manager.js +67 -0
  309. package/dist/infrastructure/extensions/skill-roots.d.ts +19 -0
  310. package/dist/infrastructure/extensions/skill-roots.js +25 -0
  311. package/dist/infrastructure/extensions/skill-tool-executor.d.ts +18 -0
  312. package/dist/infrastructure/extensions/skill-tool-executor.js +53 -0
  313. package/dist/infrastructure/filesystem/atomic-file-store.d.ts +12 -0
  314. package/dist/infrastructure/filesystem/atomic-file-store.js +106 -0
  315. package/dist/infrastructure/filesystem/bounded-file-reader.d.ts +6 -0
  316. package/dist/infrastructure/filesystem/bounded-file-reader.js +24 -0
  317. package/dist/infrastructure/filesystem/bounded-json-reader.d.ts +1 -0
  318. package/dist/infrastructure/filesystem/bounded-json-reader.js +7 -0
  319. package/dist/infrastructure/filesystem/fs-errors.d.ts +2 -0
  320. package/dist/infrastructure/filesystem/fs-errors.js +6 -0
  321. package/dist/infrastructure/filesystem/gateway-media-input-reader.d.ts +12 -0
  322. package/dist/infrastructure/filesystem/gateway-media-input-reader.js +49 -0
  323. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.d.ts +21 -0
  324. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.js +176 -0
  325. package/dist/infrastructure/filesystem/path-resolver.d.ts +20 -0
  326. package/dist/infrastructure/filesystem/path-resolver.js +119 -0
  327. package/dist/infrastructure/filesystem/workspace-media-artifact-store.d.ts +13 -0
  328. package/dist/infrastructure/filesystem/workspace-media-artifact-store.js +152 -0
  329. package/dist/infrastructure/logging/daily-rotating-file-writer.d.ts +20 -0
  330. package/dist/infrastructure/logging/daily-rotating-file-writer.js +75 -0
  331. package/dist/infrastructure/logging/log-redactor.d.ts +2 -0
  332. package/dist/infrastructure/logging/log-redactor.js +26 -0
  333. package/dist/infrastructure/logging/logging-policy.d.ts +6 -0
  334. package/dist/infrastructure/logging/logging-policy.js +6 -0
  335. package/dist/infrastructure/logging/structured-logger.d.ts +24 -0
  336. package/dist/infrastructure/logging/structured-logger.js +40 -0
  337. package/dist/infrastructure/network/safe-media-downloader.d.ts +23 -0
  338. package/dist/infrastructure/network/safe-media-downloader.js +239 -0
  339. package/dist/infrastructure/platform/host-platform.d.ts +14 -0
  340. package/dist/infrastructure/platform/host-platform.js +23 -0
  341. package/dist/infrastructure/platform/host-process.d.ts +17 -0
  342. package/dist/infrastructure/platform/host-process.js +116 -0
  343. package/dist/infrastructure/platform/platform-paths.d.ts +25 -0
  344. package/dist/infrastructure/platform/platform-paths.js +33 -0
  345. package/dist/infrastructure/project/file-project-trust-store.d.ts +12 -0
  346. package/dist/infrastructure/project/file-project-trust-store.js +59 -0
  347. package/dist/infrastructure/sdk/chat-completion-adapter.d.ts +8 -0
  348. package/dist/infrastructure/sdk/chat-completion-adapter.js +115 -0
  349. package/dist/infrastructure/sdk/lotagate-client-factory.d.ts +3 -0
  350. package/dist/infrastructure/sdk/lotagate-client-factory.js +8 -0
  351. package/dist/infrastructure/sdk/model-catalog-adapter.d.ts +19 -0
  352. package/dist/infrastructure/sdk/model-catalog-adapter.js +28 -0
  353. package/dist/infrastructure/sdk/sdk-media-gateway-client.d.ts +20 -0
  354. package/dist/infrastructure/sdk/sdk-media-gateway-client.js +97 -0
  355. package/dist/infrastructure/sessions/file-goal-store.d.ts +21 -0
  356. package/dist/infrastructure/sessions/file-goal-store.js +160 -0
  357. package/dist/infrastructure/sessions/file-session-store.d.ts +48 -0
  358. package/dist/infrastructure/sessions/file-session-store.js +525 -0
  359. package/dist/infrastructure/sessions/project-session-paths.d.ts +17 -0
  360. package/dist/infrastructure/sessions/project-session-paths.js +41 -0
  361. package/dist/infrastructure/sessions/session-index.d.ts +16 -0
  362. package/dist/infrastructure/sessions/session-index.js +84 -0
  363. package/dist/infrastructure/sessions/session-journal.d.ts +22 -0
  364. package/dist/infrastructure/sessions/session-journal.js +137 -0
  365. package/dist/infrastructure/sessions/subagent-journal-store.d.ts +28 -0
  366. package/dist/infrastructure/sessions/subagent-journal-store.js +30 -0
  367. package/dist/infrastructure/shell/shell-tool-executor.d.ts +17 -0
  368. package/dist/infrastructure/shell/shell-tool-executor.js +115 -0
  369. package/dist/infrastructure/tokens/tiktoken-token-estimator.d.ts +18 -0
  370. package/dist/infrastructure/tokens/tiktoken-token-estimator.js +48 -0
  371. package/dist/infrastructure/workspace/workspace-settings-store.d.ts +9 -0
  372. package/dist/infrastructure/workspace/workspace-settings-store.js +75 -0
  373. package/dist/main.d.ts +7 -0
  374. package/dist/main.js +66 -0
  375. package/dist/ports/cache-store.d.ts +10 -0
  376. package/dist/ports/cache-store.js +1 -0
  377. package/dist/ports/chat-model.d.ts +30 -0
  378. package/dist/ports/chat-model.js +1 -0
  379. package/dist/ports/clipboard-adapter.d.ts +7 -0
  380. package/dist/ports/clipboard-adapter.js +1 -0
  381. package/dist/ports/clipboard-text-adapter.d.ts +3 -0
  382. package/dist/ports/clipboard-text-adapter.js +1 -0
  383. package/dist/ports/credential-store.d.ts +7 -0
  384. package/dist/ports/credential-store.js +1 -0
  385. package/dist/ports/goal-store.d.ts +12 -0
  386. package/dist/ports/goal-store.js +1 -0
  387. package/dist/ports/logger.d.ts +8 -0
  388. package/dist/ports/logger.js +1 -0
  389. package/dist/ports/media-gateway-client.d.ts +54 -0
  390. package/dist/ports/media-gateway-client.js +1 -0
  391. package/dist/ports/model-diagnostics.d.ts +17 -0
  392. package/dist/ports/model-diagnostics.js +1 -0
  393. package/dist/ports/project-trust-store.d.ts +12 -0
  394. package/dist/ports/project-trust-store.js +1 -0
  395. package/dist/ports/session-store.d.ts +58 -0
  396. package/dist/ports/session-store.js +1 -0
  397. package/dist/ports/subagent-lifecycle.d.ts +31 -0
  398. package/dist/ports/subagent-lifecycle.js +1 -0
  399. package/dist/ports/tool-activity.d.ts +13 -0
  400. package/dist/ports/tool-activity.js +1 -0
  401. package/dist/presentation/themes/theme.d.ts +19 -0
  402. package/dist/presentation/themes/theme.js +8 -0
  403. package/dist/presentation/tui/agent-initialization-renderer.d.ts +4 -0
  404. package/dist/presentation/tui/agent-initialization-renderer.js +37 -0
  405. package/dist/presentation/tui/context-display.d.ts +21 -0
  406. package/dist/presentation/tui/context-display.js +33 -0
  407. package/dist/presentation/tui/formatters.d.ts +6 -0
  408. package/dist/presentation/tui/formatters.js +60 -0
  409. package/dist/presentation/tui/ink/choice-window.d.ts +5 -0
  410. package/dist/presentation/tui/ink/choice-window.js +5 -0
  411. package/dist/presentation/tui/ink/components/activity-entry.d.ts +6 -0
  412. package/dist/presentation/tui/ink/components/activity-entry.js +16 -0
  413. package/dist/presentation/tui/ink/components/activity-status.d.ts +10 -0
  414. package/dist/presentation/tui/ink/components/activity-status.js +21 -0
  415. package/dist/presentation/tui/ink/components/choice-modal.d.ts +11 -0
  416. package/dist/presentation/tui/ink/components/choice-modal.js +29 -0
  417. package/dist/presentation/tui/ink/components/composer.d.ts +40 -0
  418. package/dist/presentation/tui/ink/components/composer.js +271 -0
  419. package/dist/presentation/tui/ink/components/file-diff.d.ts +6 -0
  420. package/dist/presentation/tui/ink/components/file-diff.js +34 -0
  421. package/dist/presentation/tui/ink/components/modal.d.ts +8 -0
  422. package/dist/presentation/tui/ink/components/modal.js +110 -0
  423. package/dist/presentation/tui/ink/components/shimmer-text.d.ts +6 -0
  424. package/dist/presentation/tui/ink/components/shimmer-text.js +9 -0
  425. package/dist/presentation/tui/ink/components/subagent-activity.d.ts +11 -0
  426. package/dist/presentation/tui/ink/components/subagent-activity.js +61 -0
  427. package/dist/presentation/tui/ink/components/transcript.d.ts +39 -0
  428. package/dist/presentation/tui/ink/components/transcript.js +121 -0
  429. package/dist/presentation/tui/ink/components/welcome-panel.d.ts +6 -0
  430. package/dist/presentation/tui/ink/components/welcome-panel.js +20 -0
  431. package/dist/presentation/tui/ink/lotagate-tui.d.ts +6 -0
  432. package/dist/presentation/tui/ink/lotagate-tui.js +136 -0
  433. package/dist/presentation/tui/ink/markdown-inline-renderer.d.ts +4 -0
  434. package/dist/presentation/tui/ink/markdown-inline-renderer.js +20 -0
  435. package/dist/presentation/tui/ink/markdown-inline.d.ts +13 -0
  436. package/dist/presentation/tui/ink/markdown-inline.js +91 -0
  437. package/dist/presentation/tui/ink/markdown-message.d.ts +6 -0
  438. package/dist/presentation/tui/ink/markdown-message.js +66 -0
  439. package/dist/presentation/tui/ink/markdown-table.d.ts +16 -0
  440. package/dist/presentation/tui/ink/markdown-table.js +77 -0
  441. package/dist/presentation/tui/ink/tui-bridge.d.ts +195 -0
  442. package/dist/presentation/tui/ink/tui-bridge.js +289 -0
  443. package/dist/presentation/tui/terminal-capabilities.d.ts +15 -0
  444. package/dist/presentation/tui/terminal-capabilities.js +7 -0
  445. package/dist/presentation/tui/terminal-mouse.d.ts +5 -0
  446. package/dist/presentation/tui/terminal-mouse.js +19 -0
  447. package/dist/presentation/tui/terminal-screen.d.ts +10 -0
  448. package/dist/presentation/tui/terminal-screen.js +23 -0
  449. package/dist/presentation/tui/tui-agent-event-runner.d.ts +24 -0
  450. package/dist/presentation/tui/tui-agent-event-runner.js +69 -0
  451. package/dist/presentation/tui/tui-application-contract.d.ts +10 -0
  452. package/dist/presentation/tui/tui-application-contract.js +8 -0
  453. package/dist/presentation/tui/tui-application.d.ts +62 -0
  454. package/dist/presentation/tui/tui-application.js +675 -0
  455. package/dist/presentation/tui/tui-attachment-input.d.ts +2 -0
  456. package/dist/presentation/tui/tui-attachment-input.js +5 -0
  457. package/dist/presentation/tui/tui-clipboard-paste-handlers.d.ts +11 -0
  458. package/dist/presentation/tui/tui-clipboard-paste-handlers.js +25 -0
  459. package/dist/presentation/tui/tui-command-context.d.ts +3 -0
  460. package/dist/presentation/tui/tui-command-context.js +1 -0
  461. package/dist/presentation/tui/tui-command-executor.d.ts +38 -0
  462. package/dist/presentation/tui/tui-command-executor.js +214 -0
  463. package/dist/presentation/tui/tui-command-host-factory.d.ts +40 -0
  464. package/dist/presentation/tui/tui-command-host-factory.js +23 -0
  465. package/dist/presentation/tui/tui-context-compaction.d.ts +5 -0
  466. package/dist/presentation/tui/tui-context-compaction.js +22 -0
  467. package/dist/presentation/tui/tui-context-service.d.ts +34 -0
  468. package/dist/presentation/tui/tui-context-service.js +126 -0
  469. package/dist/presentation/tui/tui-file-suggestions.d.ts +3 -0
  470. package/dist/presentation/tui/tui-file-suggestions.js +8 -0
  471. package/dist/presentation/tui/tui-goal-controller.d.ts +14 -0
  472. package/dist/presentation/tui/tui-goal-controller.js +52 -0
  473. package/dist/presentation/tui/tui-initial-model.d.ts +3 -0
  474. package/dist/presentation/tui/tui-initial-model.js +28 -0
  475. package/dist/presentation/tui/tui-lifecycle-actions.d.ts +13 -0
  476. package/dist/presentation/tui/tui-lifecycle-actions.js +45 -0
  477. package/dist/presentation/tui/tui-manual-compaction.d.ts +18 -0
  478. package/dist/presentation/tui/tui-manual-compaction.js +31 -0
  479. package/dist/presentation/tui/tui-media-model-selection.d.ts +12 -0
  480. package/dist/presentation/tui/tui-media-model-selection.js +38 -0
  481. package/dist/presentation/tui/tui-prompt-dispatcher.d.ts +16 -0
  482. package/dist/presentation/tui/tui-prompt-dispatcher.js +38 -0
  483. package/dist/presentation/tui/tui-skill-controller.d.ts +11 -0
  484. package/dist/presentation/tui/tui-skill-controller.js +13 -0
  485. package/dist/presentation/tui/tui-tool-approval.d.ts +22 -0
  486. package/dist/presentation/tui/tui-tool-approval.js +73 -0
  487. package/dist/version.d.ts +1 -0
  488. package/dist/version.js +1 -0
  489. package/package.json +9 -8
  490. package/scripts/install-native.mjs +11 -11
@@ -0,0 +1,17 @@
1
+ import { type ChildProcess, type SpawnOptions } from 'node:child_process';
2
+ import type { HostPlatformContext } from './host-platform.js';
3
+ export interface PreparedPlatformCommand {
4
+ command: string;
5
+ args: readonly string[];
6
+ windowsVerbatimArguments: boolean;
7
+ }
8
+ export interface PlatformExecOptions {
9
+ cwd?: string;
10
+ env?: NonNullable<SpawnOptions['env']>;
11
+ maxBufferBytes?: number;
12
+ }
13
+ export declare function spawnPlatformProcess(command: string, args: readonly string[], platform: HostPlatformContext, options?: SpawnOptions): ChildProcess;
14
+ export declare function execPlatformCommand(command: string, args: readonly string[], platform: HostPlatformContext, options?: PlatformExecOptions): Promise<void>;
15
+ export declare function terminatePlatformProcess(child: ChildProcess, platform: HostPlatformContext): void;
16
+ export declare function createSafeChildEnvironment(platform: HostPlatformContext): NonNullable<SpawnOptions['env']>;
17
+ export declare function preparePlatformCommand(command: string, args: readonly string[], platform: HostPlatformContext): PreparedPlatformCommand;
@@ -0,0 +1,116 @@
1
+ import path from 'node:path';
2
+ import { spawn } from 'node:child_process';
3
+ const DEFAULT_EXEC_BUFFER_BYTES = 2 * 1024 * 1024;
4
+ const WINDOWS_META_CHARS = /([()\][%!^"`<>&|;, *?])/gu;
5
+ const WINDOWS_DIRECT_EXECUTABLE = /\.(?:com|exe)$/iu;
6
+ const WINDOWS_CMD_SHIM = /node_modules[\\/]\.bin[\\/][^\\/]+\.cmd$/iu;
7
+ export function spawnPlatformProcess(command, args, platform, options = {}) {
8
+ const prepared = preparePlatformCommand(command, args, platform);
9
+ return spawn(prepared.command, [...prepared.args], {
10
+ ...options,
11
+ shell: false,
12
+ windowsHide: true,
13
+ ...(prepared.windowsVerbatimArguments ? { windowsVerbatimArguments: true } : {}),
14
+ });
15
+ }
16
+ export function execPlatformCommand(command, args, platform, options = {}) {
17
+ const maxBufferBytes = options.maxBufferBytes ?? DEFAULT_EXEC_BUFFER_BYTES;
18
+ return new Promise((resolve, reject) => {
19
+ const child = spawnPlatformProcess(command, args, platform, {
20
+ ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
21
+ ...(options.env === undefined ? {} : { env: options.env }),
22
+ stdio: ['ignore', 'pipe', 'pipe'],
23
+ });
24
+ const stdout = [];
25
+ const stderr = [];
26
+ let outputBytes = 0;
27
+ let settled = false;
28
+ const append = (target, chunk) => {
29
+ if (settled)
30
+ return;
31
+ outputBytes += chunk.byteLength;
32
+ if (outputBytes > maxBufferBytes) {
33
+ settled = true;
34
+ terminatePlatformProcess(child, platform);
35
+ reject(new Error('Process output exceeded the configured limit.'));
36
+ return;
37
+ }
38
+ target.push(chunk);
39
+ };
40
+ child.stdout?.on('data', (chunk) => append(stdout, chunk));
41
+ child.stderr?.on('data', (chunk) => append(stderr, chunk));
42
+ child.once('error', (error) => {
43
+ if (settled)
44
+ return;
45
+ settled = true;
46
+ reject(error);
47
+ });
48
+ child.once('close', (code) => {
49
+ if (settled)
50
+ return;
51
+ settled = true;
52
+ if (code === 0)
53
+ resolve();
54
+ else
55
+ reject(new Error(Buffer.concat(stderr).toString('utf8').trim() || `Process exited with code ${String(code)}.`));
56
+ });
57
+ });
58
+ }
59
+ export function terminatePlatformProcess(child, platform) {
60
+ const pid = child.pid;
61
+ if (pid === undefined)
62
+ return;
63
+ if (platform.isWindows) {
64
+ const killer = spawn('taskkill', ['/pid', String(pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' });
65
+ killer.once('error', () => child.kill());
66
+ return;
67
+ }
68
+ if (platform.supportsProcessGroups) {
69
+ try {
70
+ process.kill(-pid, 'SIGTERM');
71
+ return;
72
+ }
73
+ catch { /* Fall through when the process group is unavailable. */ }
74
+ }
75
+ child.kill();
76
+ }
77
+ export function createSafeChildEnvironment(platform) {
78
+ const keys = platform.isWindows
79
+ ? ['PATHEXT', 'SystemRoot', 'ComSpec', 'COMSPEC', 'TEMP', 'TMP', 'HOME', 'USERPROFILE', 'APPDATA', 'LOCALAPPDATA', 'LANG', 'LC_ALL']
80
+ : ['PATH', 'HOME', 'TMPDIR', 'TEMP', 'LANG', 'LC_ALL', 'XDG_RUNTIME_DIR', 'WAYLAND_DISPLAY', 'DISPLAY'];
81
+ const result = {};
82
+ if (platform.isWindows) {
83
+ const pathValue = platform.env['Path'] ?? platform.env['PATH'];
84
+ if (pathValue !== undefined)
85
+ result['Path'] = pathValue;
86
+ }
87
+ for (const key of keys) {
88
+ const value = platform.env[key];
89
+ if (value !== undefined)
90
+ result[key] = value;
91
+ }
92
+ return result;
93
+ }
94
+ export function preparePlatformCommand(command, args, platform) {
95
+ if (!platform.isWindows || WINDOWS_DIRECT_EXECUTABLE.test(command))
96
+ return { command, args, windowsVerbatimArguments: false };
97
+ const normalizedCommand = path.win32.normalize(command);
98
+ const doubleEscape = WINDOWS_CMD_SHIM.test(normalizedCommand);
99
+ const escapedCommand = escapeWindowsCommand(normalizedCommand);
100
+ const escapedArgs = args.map((arg) => escapeWindowsArgument(arg, doubleEscape));
101
+ return {
102
+ command: platform.env['ComSpec'] ?? platform.env['COMSPEC'] ?? 'cmd.exe',
103
+ args: ['/d', '/s', '/c', `"${[escapedCommand, ...escapedArgs].join(' ')}"`],
104
+ windowsVerbatimArguments: true,
105
+ };
106
+ }
107
+ function escapeWindowsCommand(value) {
108
+ return value.replace(WINDOWS_META_CHARS, '^$1');
109
+ }
110
+ function escapeWindowsArgument(value, doubleEscape) {
111
+ let escaped = value
112
+ .replace(/(?=(\\+?)?)\1"/gu, '$1$1\\"')
113
+ .replace(/(?=(\\+?)?)\1$/gu, '$1$1');
114
+ escaped = `"${escaped}"`.replace(WINDOWS_META_CHARS, '^$1');
115
+ return doubleEscape ? escaped.replace(WINDOWS_META_CHARS, '^$1') : escaped;
116
+ }
@@ -0,0 +1,25 @@
1
+ import { type HostPlatformContext } from './host-platform.js';
2
+ export interface PlatformPaths {
3
+ platform: HostPlatformContext;
4
+ home: string;
5
+ globalConfigDir: string;
6
+ globalConfigFile: string;
7
+ credentialsFile: string;
8
+ credentialKeyFile: string;
9
+ projectsDir: string;
10
+ cacheDir: string;
11
+ logsDir: string;
12
+ skillsDir: string;
13
+ pluginsDir: string;
14
+ mcpConfigFile: string;
15
+ }
16
+ export declare function resolvePlatformPaths(env?: Readonly<Record<string, string | undefined>>, platform?: HostPlatformContext): PlatformPaths;
17
+ export declare function resolveProjectConfigPaths(cwd: string): {
18
+ directory: string;
19
+ settings: string;
20
+ localSettings: string;
21
+ skillsDir: string;
22
+ pluginsDir: string;
23
+ hooksDir: string;
24
+ mcpConfigFile: string;
25
+ };
@@ -0,0 +1,33 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+ import { detectHostPlatform } from './host-platform.js';
4
+ export function resolvePlatformPaths(env = process.env, platform = detectHostPlatform({ env })) {
5
+ const home = env['LOTAGATE_HOME']?.trim() || os.homedir();
6
+ const root = path.join(home, '.lotagate');
7
+ return {
8
+ platform,
9
+ home,
10
+ globalConfigDir: root,
11
+ globalConfigFile: path.join(root, 'settings.json'),
12
+ credentialsFile: path.join(root, 'credentials.enc.json'),
13
+ credentialKeyFile: path.join(root, 'credentials.key'),
14
+ projectsDir: path.join(root, 'projects'),
15
+ cacheDir: path.join(root, 'cache'),
16
+ logsDir: path.join(root, 'logs'),
17
+ skillsDir: path.join(root, 'skills'),
18
+ pluginsDir: path.join(root, 'plugins'),
19
+ mcpConfigFile: path.join(root, 'mcp.json'),
20
+ };
21
+ }
22
+ export function resolveProjectConfigPaths(cwd) {
23
+ const directory = path.join(cwd, '.lotagate');
24
+ return {
25
+ directory,
26
+ settings: path.join(directory, 'settings.json'),
27
+ localSettings: path.join(directory, 'settings.local.json'),
28
+ skillsDir: path.join(directory, 'skills'),
29
+ pluginsDir: path.join(directory, 'plugins'),
30
+ hooksDir: path.join(directory, 'hooks'),
31
+ mcpConfigFile: path.join(directory, 'mcp.json'),
32
+ };
33
+ }
@@ -0,0 +1,12 @@
1
+ import type { ProjectTrustStore, TrustedProject } from '../../ports/project-trust-store.js';
2
+ import type { PlatformPaths } from '../platform/platform-paths.js';
3
+ export declare class FileProjectTrustStore implements ProjectTrustStore {
4
+ private readonly filePath;
5
+ constructor(paths: PlatformPaths);
6
+ list(): Promise<readonly TrustedProject[]>;
7
+ get(fingerprint: string): Promise<TrustedProject | undefined>;
8
+ grant(project: TrustedProject): Promise<void>;
9
+ revoke(fingerprint: string): Promise<boolean>;
10
+ private read;
11
+ private write;
12
+ }
@@ -0,0 +1,59 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { isFileNotFound } from '../filesystem/fs-errors.js';
4
+ import { atomicWriteFile, withFileLock } from '../filesystem/atomic-file-store.js';
5
+ import { readJsonFileBounded } from '../filesystem/bounded-json-reader.js';
6
+ import { RESOURCE_LIMITS } from '../../domain/runtime/resource-limits.js';
7
+ export class FileProjectTrustStore {
8
+ filePath;
9
+ constructor(paths) {
10
+ this.filePath = path.join(paths.globalConfigDir, 'trusted-projects.json');
11
+ }
12
+ async list() {
13
+ return (await this.read()).projects;
14
+ }
15
+ async get(fingerprint) {
16
+ return (await this.read()).projects.find((project) => project.fingerprint === fingerprint);
17
+ }
18
+ async grant(project) {
19
+ await withFileLock(this.filePath, async () => {
20
+ const file = await this.read();
21
+ const projects = file.projects.filter((candidate) => candidate.fingerprint !== project.fingerprint);
22
+ projects.push(project);
23
+ await this.write({ version: 1, projects });
24
+ });
25
+ }
26
+ async revoke(fingerprint) {
27
+ return withFileLock(this.filePath, async () => {
28
+ const file = await this.read();
29
+ const projects = file.projects.filter((project) => project.fingerprint !== fingerprint);
30
+ if (projects.length === file.projects.length)
31
+ return false;
32
+ await this.write({ version: 1, projects });
33
+ return true;
34
+ });
35
+ }
36
+ async read() {
37
+ try {
38
+ const value = await readJsonFileBounded(this.filePath, RESOURCE_LIMITS.configFileBytes);
39
+ if (!isTrustFile(value))
40
+ throw new Error('Invalid trust file.');
41
+ return value;
42
+ }
43
+ catch (error) {
44
+ if (isFileNotFound(error))
45
+ return { version: 1, projects: [] };
46
+ throw error;
47
+ }
48
+ }
49
+ async write(file) {
50
+ await fs.mkdir(path.dirname(this.filePath), { recursive: true });
51
+ await atomicWriteFile(this.filePath, `${JSON.stringify(file, null, 2)}\n`);
52
+ }
53
+ }
54
+ function isTrustFile(value) {
55
+ if (typeof value !== 'object' || value === null)
56
+ return false;
57
+ const record = value;
58
+ return record['version'] === 1 && Array.isArray(record['projects']);
59
+ }
@@ -0,0 +1,8 @@
1
+ import { type LotaGate } from '@lotagate/sdk';
2
+ import type { ChatModelPort, ChatModelRequest, ChatModelEvent } from '../../ports/chat-model.js';
3
+ export declare class SdkChatCompletionAdapter implements ChatModelPort {
4
+ private readonly client;
5
+ constructor(client: LotaGate);
6
+ stream(request: ChatModelRequest): AsyncIterable<ChatModelEvent>;
7
+ private fallbackToBufferedCompletion;
8
+ }
@@ -0,0 +1,115 @@
1
+ import { SdkErrorCode } from '@lotagate/sdk';
2
+ import { CliError } from '../../domain/errors/cli-error.js';
3
+ import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
4
+ import { buildUserMessage } from '../clipboard/image-normalizer.js';
5
+ export class SdkChatCompletionAdapter {
6
+ client;
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ async *stream(request) {
11
+ const messages = [
12
+ ...(request.system === undefined || request.system.trim().length === 0 ? [] : [{ role: 'system', content: request.system }]),
13
+ buildUserMessage(request.prompt, request.attachments),
14
+ ];
15
+ const options = request.signal === undefined ? undefined : { signal: request.signal };
16
+ let emittedDelta = false;
17
+ try {
18
+ yield { type: 'activity', state: 'connecting' };
19
+ const stream = await this.client.chat.completions.create({
20
+ model: request.model,
21
+ messages,
22
+ stream: true,
23
+ }, options);
24
+ yield { type: 'activity', state: 'thinking' };
25
+ for await (const chunk of stream) {
26
+ if (chunk.usage !== undefined)
27
+ yield { type: 'usage', usage: mapUsage(chunk.usage) };
28
+ const content = chunk.choices[0]?.delta.content;
29
+ if (typeof content === 'string' && content.length > 0) {
30
+ emittedDelta = true;
31
+ yield { type: 'activity', state: 'writing' };
32
+ yield { type: 'delta', content };
33
+ }
34
+ }
35
+ yield { type: 'activity', state: 'completed' };
36
+ yield { type: 'completed' };
37
+ }
38
+ catch (error) {
39
+ if (request.signal?.aborted === true) {
40
+ throw request.signal.reason ?? createAbortError();
41
+ }
42
+ if (!emittedDelta && isSseParseError(error)) {
43
+ yield* this.fallbackToBufferedCompletion(request, messages, options);
44
+ return;
45
+ }
46
+ throw new CliError(CLI_ERROR_CODES.MODEL_STREAM_FAILED, 'Chat completion stream failed.', {
47
+ category: 'model',
48
+ userMessage: 'Unable to read the model stream. The gateway may have returned an invalid SSE payload. Check the model, authentication and base URL.',
49
+ retryable: true,
50
+ cause: error,
51
+ });
52
+ }
53
+ }
54
+ async *fallbackToBufferedCompletion(request, messages, options) {
55
+ try {
56
+ const response = await this.client.chat.completions.create({
57
+ model: request.model,
58
+ messages: [...messages],
59
+ stream: false,
60
+ }, options);
61
+ if (response.usage !== undefined)
62
+ yield { type: 'usage', usage: mapUsage(response.usage) };
63
+ const content = textContent(response.choices[0]?.message.content);
64
+ if (content.length > 0) {
65
+ yield { type: 'activity', state: 'writing' };
66
+ yield { type: 'delta', content };
67
+ }
68
+ yield { type: 'activity', state: 'completed' };
69
+ yield { type: 'completed' };
70
+ }
71
+ catch (error) {
72
+ if (request.signal?.aborted === true) {
73
+ throw request.signal.reason ?? createAbortError();
74
+ }
75
+ throw new CliError(CLI_ERROR_CODES.MODEL_STREAM_FAILED, 'Chat completion fallback failed.', {
76
+ category: 'model',
77
+ userMessage: 'Unable to read the model response. Check the model, authentication and base URL.',
78
+ retryable: true,
79
+ cause: error,
80
+ });
81
+ }
82
+ }
83
+ }
84
+ function createAbortError() {
85
+ const error = new Error('The operation was aborted.');
86
+ error.name = 'AbortError';
87
+ return error;
88
+ }
89
+ function mapUsage(usage) {
90
+ return {
91
+ ...(typeof usage.prompt_tokens === 'number' ? { promptTokens: usage.prompt_tokens } : {}),
92
+ ...(typeof usage.completion_tokens === 'number' ? { completionTokens: usage.completion_tokens } : {}),
93
+ ...(typeof usage.total_tokens === 'number' ? { totalTokens: usage.total_tokens } : {}),
94
+ };
95
+ }
96
+ function isSseParseError(error) {
97
+ return typeof error === 'object'
98
+ && error !== null
99
+ && 'errorCode' in error
100
+ && error.errorCode === SdkErrorCode.ResponseParseError;
101
+ }
102
+ function textContent(content) {
103
+ if (typeof content === 'string')
104
+ return content;
105
+ if (!Array.isArray(content))
106
+ return '';
107
+ return content
108
+ .map((part) => {
109
+ if (typeof part !== 'object' || part === null || !('text' in part))
110
+ return '';
111
+ const text = part.text;
112
+ return typeof text === 'string' ? text : '';
113
+ })
114
+ .join('');
115
+ }
@@ -0,0 +1,3 @@
1
+ import { LotaGate } from '@lotagate/sdk';
2
+ import type { AuthProfile } from '../../domain/auth/auth-profile.js';
3
+ export declare function createLotaGateClient(profile: AuthProfile, apiKey: string): LotaGate;
@@ -0,0 +1,8 @@
1
+ import { LotaGate } from '@lotagate/sdk';
2
+ export function createLotaGateClient(profile, apiKey) {
3
+ const options = {
4
+ apiKey,
5
+ baseURL: profile.baseUrl,
6
+ };
7
+ return new LotaGate(options);
8
+ }
@@ -0,0 +1,19 @@
1
+ import type { ModelListResponse, ModelSummary } from '@lotagate/sdk';
2
+ export interface ModelCatalogClient {
3
+ models: {
4
+ list(): Promise<ModelListResponse>;
5
+ retrieve(model: string): Promise<ModelSummary>;
6
+ };
7
+ }
8
+ export declare class ModelCatalogAdapter {
9
+ private readonly client;
10
+ constructor(client: ModelCatalogClient);
11
+ /** Lists every selectable gateway model while excluding embeddings from interactive selection. */
12
+ listModels(): Promise<{
13
+ data: ModelSummary[];
14
+ object: "list" | string;
15
+ }>;
16
+ get(model: string): Promise<ModelSummary>;
17
+ }
18
+ /** Reads the optional gateway metadata without coupling the CLI to SDK internals. */
19
+ export declare function getModelContextWindow(model: ModelSummary): number | undefined;
@@ -0,0 +1,28 @@
1
+ export class ModelCatalogAdapter {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /** Lists every selectable gateway model while excluding embeddings from interactive selection. */
7
+ async listModels() {
8
+ const response = await this.client.models.list();
9
+ return {
10
+ ...response,
11
+ data: response.data.filter((model) => model['model_category'] !== 'embedding'),
12
+ };
13
+ }
14
+ async get(model) {
15
+ return this.client.models.retrieve(model);
16
+ }
17
+ }
18
+ /** Reads the optional gateway metadata without coupling the CLI to SDK internals. */
19
+ export function getModelContextWindow(model) {
20
+ const value = model['context_window'];
21
+ if (typeof value === 'number' && Number.isInteger(value) && value > 0)
22
+ return value;
23
+ if (typeof value === 'string' && /^\d+$/u.test(value)) {
24
+ const parsed = Number(value);
25
+ return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;
26
+ }
27
+ return undefined;
28
+ }
@@ -0,0 +1,20 @@
1
+ import type { LotaGate } from '@lotagate/sdk';
2
+ import type { MediaGatewayClient, AudioUploadInput, ImageEditInput, ImageGenerationInput, MediaRequestOptions, SpeechInput } from '../../ports/media-gateway-client.js';
3
+ import type { GeneratedImage, MediaBinary, VideoOperation } from '../../domain/media/media-contract.js';
4
+ /** SDK boundary adapter. Application code only sees CLI-owned media contracts. */
5
+ export declare class SdkMediaGatewayClient implements MediaGatewayClient {
6
+ private readonly client;
7
+ constructor(client: LotaGate);
8
+ generateImage(input: ImageGenerationInput, options?: MediaRequestOptions): Promise<readonly GeneratedImage[]>;
9
+ editImage(input: ImageEditInput, options?: MediaRequestOptions): Promise<readonly GeneratedImage[]>;
10
+ createSpeech(input: SpeechInput, options?: MediaRequestOptions): Promise<MediaBinary>;
11
+ transcribe(input: AudioUploadInput, options?: MediaRequestOptions): Promise<string>;
12
+ translate(input: AudioUploadInput, options?: MediaRequestOptions): Promise<string>;
13
+ createVideo(input: {
14
+ model: string;
15
+ prompt: string;
16
+ parameters?: Record<string, unknown>;
17
+ }, options?: MediaRequestOptions): Promise<VideoOperation>;
18
+ getVideoOperation(id: string, options?: MediaRequestOptions): Promise<VideoOperation>;
19
+ downloadVideo(id: string, options?: MediaRequestOptions): Promise<MediaBinary>;
20
+ }
@@ -0,0 +1,97 @@
1
+ /** SDK boundary adapter. Application code only sees CLI-owned media contracts. */
2
+ export class SdkMediaGatewayClient {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async generateImage(input, options) {
8
+ const response = await this.client.images.generations.create(toImageGenerationRequest(input), options);
9
+ return response.data.map((image) => ({
10
+ ...(typeof image.b64_json === 'string' ? { base64: image.b64_json } : {}),
11
+ ...(typeof image.url === 'string' ? { url: image.url } : {}),
12
+ ...(typeof image.revised_prompt === 'string' ? { revisedPrompt: image.revised_prompt } : {}),
13
+ }));
14
+ }
15
+ async editImage(input, options) {
16
+ const request = {
17
+ ...toImageGenerationRequest(input), image: input.images,
18
+ ...(input.mask === undefined ? {} : { mask: input.mask }),
19
+ ...(input.inputFidelity === undefined ? {} : { input_fidelity: input.inputFidelity }),
20
+ };
21
+ const response = await this.client.images.edits.create(request, options);
22
+ return response.data.map((image) => ({
23
+ ...(typeof image.b64_json === 'string' ? { base64: image.b64_json } : {}),
24
+ ...(typeof image.url === 'string' ? { url: image.url } : {}),
25
+ ...(typeof image.revised_prompt === 'string' ? { revisedPrompt: image.revised_prompt } : {}),
26
+ }));
27
+ }
28
+ async createSpeech(input, options) {
29
+ const response = await this.client.audio.speech.create({
30
+ model: input.model, input: input.input, voice: input.voice,
31
+ ...(input.instructions === undefined ? {} : { instructions: input.instructions }),
32
+ ...(input.responseFormat === undefined ? {} : { response_format: input.responseFormat }),
33
+ ...(input.speed === undefined ? {} : { speed: input.speed }),
34
+ }, options);
35
+ return binaryResponse(response);
36
+ }
37
+ async transcribe(input, options) {
38
+ const response = await this.client.audio.transcriptions.create(toTranscriptionRequest(input), options);
39
+ return response.text;
40
+ }
41
+ async translate(input, options) {
42
+ const response = await this.client.audio.translations.create(toTranslationRequest(input), options);
43
+ return response.text;
44
+ }
45
+ async createVideo(input, options) {
46
+ const request = { model: input.model, instances: [{ prompt: input.prompt }], ...(input.parameters === undefined ? {} : { parameters: input.parameters }) };
47
+ return toVideoOperation(await this.client.video.generations.create(request, options));
48
+ }
49
+ async getVideoOperation(id, options) {
50
+ return toVideoOperation(await this.client.video.operations.retrieve(id, options));
51
+ }
52
+ async downloadVideo(id, options) {
53
+ return binaryResponse(await this.client.video.operations.download(id, options));
54
+ }
55
+ }
56
+ function toImageGenerationRequest(input) {
57
+ return {
58
+ model: input.model, prompt: input.prompt,
59
+ ...(input.n === undefined ? {} : { n: input.n }), ...(input.size === undefined ? {} : { size: input.size }),
60
+ ...(input.quality === undefined ? {} : { quality: input.quality }), ...(input.background === undefined ? {} : { background: input.background }),
61
+ ...(input.outputFormat === undefined ? {} : { output_format: input.outputFormat }), ...(input.outputCompression === undefined ? {} : { output_compression: input.outputCompression }),
62
+ ...(input.moderation === undefined ? {} : { moderation: input.moderation }), ...(input.user === undefined ? {} : { user: input.user }),
63
+ };
64
+ }
65
+ function toTranscriptionRequest(input) {
66
+ const request = { model: input.model, file: input.file, filename: input.filename };
67
+ if (input.prompt !== undefined)
68
+ request.prompt = input.prompt;
69
+ if (input.temperature !== undefined)
70
+ request.temperature = input.temperature;
71
+ if (input.responseFormat !== undefined)
72
+ request.response_format = input.responseFormat;
73
+ if (input.language !== undefined)
74
+ request.language = input.language;
75
+ if (input.timestampGranularities !== undefined)
76
+ request.timestamp_granularities = [...input.timestampGranularities];
77
+ if (input.include !== undefined)
78
+ request.include = [...input.include];
79
+ return request;
80
+ }
81
+ function toTranslationRequest(input) {
82
+ const request = { model: input.model, file: input.file, filename: input.filename };
83
+ if (input.prompt !== undefined)
84
+ request.prompt = input.prompt;
85
+ if (input.temperature !== undefined)
86
+ request.temperature = input.temperature;
87
+ if (input.responseFormat !== undefined)
88
+ request.response_format = input.responseFormat;
89
+ return request;
90
+ }
91
+ function binaryResponse(response) {
92
+ const contentType = response.headers.get('content-type')?.split(';', 1)[0]?.trim();
93
+ return { bytes: new Uint8Array(response.data), ...(contentType === undefined || contentType.length === 0 ? {} : { contentType }) };
94
+ }
95
+ function toVideoOperation(operation) {
96
+ return { id: operation.name, done: operation.done === true, ...(typeof operation.error?.message === 'string' ? { errorMessage: operation.error.message } : {}) };
97
+ }
@@ -0,0 +1,21 @@
1
+ import { type CreateGoalInput, type GoalEvaluation, type GoalState, type GoalUsageDelta } from '../../domain/orchestration/goal.js';
2
+ import type { GoalStore } from '../../ports/goal-store.js';
3
+ import type { SessionStore } from '../../ports/session-store.js';
4
+ export declare class FileGoalStore implements GoalStore {
5
+ private readonly sessions;
6
+ constructor(sessions: SessionStore);
7
+ get(sessionId: string): Promise<GoalState | undefined>;
8
+ create(sessionId: string, input: CreateGoalInput): Promise<GoalState>;
9
+ replace(sessionId: string, input: CreateGoalInput): Promise<GoalState>;
10
+ pause(sessionId: string, reason?: string): Promise<GoalState>;
11
+ resume(sessionId: string): Promise<GoalState>;
12
+ recordTurn(sessionId: string): Promise<GoalState>;
13
+ recordUsage(sessionId: string, delta: GoalUsageDelta): Promise<GoalState>;
14
+ recordEvaluation(sessionId: string, evaluation: GoalEvaluation): Promise<GoalState>;
15
+ clear(sessionId: string, reason?: string): Promise<void>;
16
+ private requireActiveUnlocked;
17
+ private getOrThrowUnlocked;
18
+ private invalidState;
19
+ private appendState;
20
+ private append;
21
+ }