@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,66 @@
1
+ import { runAgentCommand } from '../protocol/jsonl-agent-command.js';
2
+ import { runAuthCommand, runConfigCommand, runHookCommand, runMcpCommand, runModelCommand, runPluginCommand, runSkillCommand, runTrustCommand } from './cli-command-services.js';
3
+ import { formatCommandHelp } from './command-presentation.js';
4
+ import { COMMAND_REGISTRY } from './command-runtime.js';
5
+ import { runGoalCommand } from './goal-command-handlers.js';
6
+ import { runChatCommand, runExecCommand, runSessionCommand } from './runtime-command-handlers.js';
7
+ import { runMediaCommand } from './media-command-handlers.js';
8
+ import { runCompletionsCommand, runDoctorCommand, runInspectCommand, runUpdateCommand } from './utility-commands.js';
9
+ import { CLI_VERSION } from '../../version.js';
10
+ const EXECUTORS = {
11
+ help: async (invocation, host) => requireInformationalCommand(invocation, host.output),
12
+ version: async (invocation, host) => requireInformationalCommand(invocation, host.output),
13
+ config: async (invocation, host) => runConfigCommand(invocation.handlerPositionals, host.runtime.configLoader, host.cwd, host.output),
14
+ auth: async (invocation, host) => runAuthCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output),
15
+ trust: async (invocation, host) => runTrustCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.output),
16
+ inspect: async (_invocation, host) => runInspectCommand(host.runtime, host.cwd, host.output),
17
+ hook: async (invocation, host) => runHookCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.output),
18
+ model: async (invocation, host) => runModelCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.output),
19
+ mcp: async (invocation, host) => runMcpCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output, scopeInteraction(host)),
20
+ plugin: async (invocation, host) => runPluginCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output, scopeInteraction(host)),
21
+ skill: async (invocation, host) => runSkillCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output, scopeInteraction(host)),
22
+ session: async (invocation, host) => runSessionCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output, host.resumeInteractive),
23
+ goal: async (invocation, host) => {
24
+ if (host.writableOutput === undefined)
25
+ throw new Error('Goal commands require a writable terminal output.');
26
+ return runGoalCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.writableOutput);
27
+ },
28
+ doctor: async (_invocation, host) => runDoctorCommand(host.runtime, host.cwd, host.output),
29
+ chat: async (invocation, host) => runChatCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.output),
30
+ exec: async (invocation, host) => runExecCommand(invocation.handlerPositionals, invocation.options, host.runtime, host.cwd, host.output),
31
+ media: async (invocation, host) => runMediaCommand(invocation, host.runtime, host.cwd, host.output, host.activity, host.signal),
32
+ agent: async (invocation, host) => {
33
+ if (host.stdin === undefined || host.writableOutput === undefined)
34
+ throw new Error('The JSONL agent protocol requires stdin and a writable terminal output.');
35
+ return runAgentCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.stdin, host.writableOutput);
36
+ },
37
+ completions: async (invocation, host) => runCompletionsCommand(invocation.handlerPositionals, host.output),
38
+ update: async (invocation, host) => runUpdateCommand(invocation.handlerPositionals, host.runtime, host.cwd, host.output),
39
+ };
40
+ export async function executeApplicationCommand(invocation, host) {
41
+ const executor = EXECUTORS[invocation.action.executor];
42
+ if (executor === undefined)
43
+ throw new Error(`Command ${invocation.action.id} requires a ${invocation.surface}-specific executor.`);
44
+ return executor(invocation, host);
45
+ }
46
+ /** Runs commands that do not require a runtime or any persistent CLI state. */
47
+ export function executeInformationalCommand(invocation, output) {
48
+ if (invocation.action.executor === 'help') {
49
+ output.write(`${formatCommandHelp(COMMAND_REGISTRY, invocation.surface)}\n`);
50
+ return 0;
51
+ }
52
+ if (invocation.action.executor === 'version') {
53
+ output.write(`${CLI_VERSION}\n`);
54
+ return 0;
55
+ }
56
+ return undefined;
57
+ }
58
+ function requireInformationalCommand(invocation, output) {
59
+ const exitCode = executeInformationalCommand(invocation, output);
60
+ if (exitCode === undefined)
61
+ throw new Error(`Command ${invocation.action.id} is not informational.`);
62
+ return exitCode;
63
+ }
64
+ function scopeInteraction(host) {
65
+ return host.selectScope === undefined ? {} : { selectScope: host.selectScope };
66
+ }
@@ -0,0 +1,6 @@
1
+ export declare function getFlag(flags: ReadonlyMap<string, string | boolean>, name: string): string | boolean | undefined;
2
+ export declare function isFlagEnabled(flags: ReadonlyMap<string, string | boolean>, name: string): boolean;
3
+ export declare function getStringFlag(flags: ReadonlyMap<string, string | boolean>, name: string): string | undefined;
4
+ export declare function requireStringFlag(flags: ReadonlyMap<string, string | boolean>, name: string): string;
5
+ export declare function getPositiveIntegerFlag(flags: ReadonlyMap<string, string | boolean>, name: string, maximum: number): number | undefined;
6
+ export declare function requirePositional(positionals: readonly string[], index: number, label: string): string;
@@ -0,0 +1,43 @@
1
+ import { CliError } from '../../domain/errors/cli-error.js';
2
+ import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
3
+ export function getFlag(flags, name) {
4
+ return flags.get(name);
5
+ }
6
+ export function isFlagEnabled(flags, name) {
7
+ const value = flags.get(name);
8
+ return value === true || value === 'true';
9
+ }
10
+ export function getStringFlag(flags, name) {
11
+ const value = getFlag(flags, name);
12
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
13
+ }
14
+ export function requireStringFlag(flags, name) {
15
+ const value = getStringFlag(flags, name);
16
+ if (value === undefined) {
17
+ throw new CliError(CLI_ERROR_CODES.MISSING_ARGUMENT, `Missing --${name}.`, {
18
+ category: 'arguments', userMessage: `Missing required option --${name}.`,
19
+ });
20
+ }
21
+ return value;
22
+ }
23
+ export function getPositiveIntegerFlag(flags, name, maximum) {
24
+ const value = getFlag(flags, name);
25
+ if (value === undefined)
26
+ return undefined;
27
+ const parsed = typeof value === 'string' && /^\d+$/u.test(value) ? Number(value) : Number.NaN;
28
+ if (!Number.isSafeInteger(parsed) || parsed <= 0 || parsed > maximum) {
29
+ throw new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, `Invalid --${name}.`, {
30
+ category: 'arguments', userMessage: `--${name} must be a positive integer no greater than ${maximum}.`,
31
+ });
32
+ }
33
+ return parsed;
34
+ }
35
+ export function requirePositional(positionals, index, label) {
36
+ const value = positionals[index];
37
+ if (value === undefined || value.trim().length === 0) {
38
+ throw new CliError(CLI_ERROR_CODES.MISSING_ARGUMENT, `Missing ${label}.`, {
39
+ category: 'arguments', userMessage: `Missing required argument: ${label}.`,
40
+ });
41
+ }
42
+ return value;
43
+ }
@@ -0,0 +1,16 @@
1
+ import { type ExtensionScope } from '../../domain/extensions/extension-scope.js';
2
+ import type { ConfigLoader } from '../../infrastructure/config/config-loader.js';
3
+ import type { createCompositionRoot } from '../../bootstrap/composition-root.js';
4
+ import type { CommandOutput } from './command-output.js';
5
+ export type CliRuntime = ReturnType<typeof createCompositionRoot>;
6
+ export interface CommandInteraction {
7
+ selectScope?: (title: string) => Promise<ExtensionScope | undefined>;
8
+ }
9
+ export declare function runConfigCommand(positionals: readonly string[], loader: ConfigLoader, cwd: string, output: CommandOutput): Promise<number>;
10
+ export declare function runAuthCommand(positionals: readonly string[], flags: ReadonlyMap<string, string | boolean>, runtime: CliRuntime, cwd: string, output: CommandOutput): Promise<number>;
11
+ export declare function runTrustCommand(positionals: readonly string[], runtime: CliRuntime, cwd: string, output: CommandOutput): Promise<number>;
12
+ export declare function runModelCommand(positionals: readonly string[], runtime: CliRuntime, cwd: string, output: CommandOutput): Promise<number>;
13
+ export declare function runMcpCommand(positionals: readonly string[], flags: ReadonlyMap<string, string | boolean>, runtime: CliRuntime, cwd: string, output: CommandOutput, interaction?: CommandInteraction): Promise<number>;
14
+ export declare function runPluginCommand(positionals: readonly string[], flags: ReadonlyMap<string, string | boolean>, runtime: CliRuntime, cwd: string, output: CommandOutput, interaction?: CommandInteraction): Promise<number>;
15
+ export declare function runSkillCommand(positionals: readonly string[], flags: ReadonlyMap<string, string | boolean>, runtime: CliRuntime, cwd: string, output: CommandOutput, interaction?: CommandInteraction): Promise<number>;
16
+ export declare function runHookCommand(positionals: readonly string[], runtime: CliRuntime, cwd: string, output: CommandOutput): Promise<number>;
@@ -0,0 +1,405 @@
1
+ import path from 'node:path';
2
+ import { AuthenticationService } from '../auth/authentication-service.js';
3
+ import { CONFIGURABLE_KEYS, DEFAULT_CONFIG } from '../../domain/config/config-schema.js';
4
+ import { requirePositional, getFlag, requireStringFlag } from './cli-args.js';
5
+ import { readSecret } from '../../infrastructure/credentials/secret-input.js';
6
+ import { getModelContextWindow } from '../../infrastructure/sdk/model-catalog-adapter.js';
7
+ import { FileMcpConfigStore } from '../../infrastructure/extensions/file-mcp-config-store.js';
8
+ import { McpRuntime } from '../../infrastructure/extensions/mcp-runtime.js';
9
+ import { PluginManager } from '../../infrastructure/extensions/plugin-manager.js';
10
+ import { SkillManager } from '../../infrastructure/extensions/skill-manager.js';
11
+ import { SkillInstaller } from '../../infrastructure/extensions/skill-installer.js';
12
+ import { resolveExtensionSource } from '../../infrastructure/extensions/extension-source-resolver.js';
13
+ import { resolveSkillRootScopes } from '../../infrastructure/extensions/skill-roots.js';
14
+ import { CompositeMcpConfigStore } from '../../infrastructure/extensions/composite-mcp-config-store.js';
15
+ import { PluginContributionRegistry } from '../extensions/plugin-contribution-registry.js';
16
+ import { parseExtensionScope, requireExtensionScope } from '../../domain/extensions/extension-scope.js';
17
+ import { CliError } from '../../domain/errors/cli-error.js';
18
+ import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
19
+ import { createHookListResult, createMcpListResult, createPluginListResult, createSkillListResult, formatExtensionList } from '../extensions/extension-list-formatters.js';
20
+ import { writeExtensionListResult } from '../extensions/extension-list-output.js';
21
+ import { HookRuntime } from '../../infrastructure/extensions/hook-runtime.js';
22
+ import { ShellToolExecutor } from '../../infrastructure/shell/shell-tool-executor.js';
23
+ import { ToolPolicy } from '@lotagate/agent-sdk';
24
+ import { formatMcpDetails } from '../extensions/extension-list-formatters.js';
25
+ import { loadExecutionConfig } from '../config/execution-config.js';
26
+ import { redactLogText } from '../../infrastructure/logging/log-redactor.js';
27
+ import { formatCompactTable } from '../formatting/compact-table.js';
28
+ import { formatCompactNumber } from '../formatting/compact-number.js';
29
+ import { loadModelCatalog } from '../model/model-catalog-service.js';
30
+ const MODEL_LIST_TABLE_OPTIONS = {
31
+ empty: 'No models are available.',
32
+ maxWidth: 160,
33
+ columns: [
34
+ { key: 'name', header: 'Name', width: 52, minWidth: 16 },
35
+ { key: 'category', header: 'Model category', width: 16, minWidth: 8 },
36
+ { key: 'contextWindow', header: 'Context window', width: 14, minWidth: 8 },
37
+ { key: 'status', header: 'Status', width: 12, minWidth: 6 },
38
+ { key: 'detail', header: 'Detail', minWidth: 6 },
39
+ ],
40
+ };
41
+ export async function runConfigCommand(positionals, loader, cwd, output) {
42
+ const action = positionals[0] ?? 'get';
43
+ if (action === 'path') {
44
+ output.write(`${JSON.stringify({ global: loader.platformPaths.globalConfigFile, project: path.join(cwd, '.lotagate') }, null, 2)}\n`);
45
+ return 0;
46
+ }
47
+ if (action === 'get') {
48
+ const loaded = await loader.load(cwd);
49
+ const key = positionals[1];
50
+ output.write(`${JSON.stringify(key === undefined ? loaded.config : loaded.config[key] ?? null, null, 2)}\n`);
51
+ return 0;
52
+ }
53
+ if (action === 'set') {
54
+ const keyValue = requirePositional(positionals, 1, 'config key');
55
+ if (!CONFIGURABLE_KEYS.includes(keyValue)) {
56
+ throw new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, `Unsupported config key: ${keyValue}`, {
57
+ category: 'arguments', userMessage: `Unsupported configuration key: ${keyValue}.`,
58
+ });
59
+ }
60
+ await loader.setGlobal(keyValue, parseConfigValue(requirePositional(positionals, 2, 'config value')));
61
+ return 0;
62
+ }
63
+ throw new Error(`Unsupported config action: ${action}`);
64
+ }
65
+ export async function runAuthCommand(positionals, flags, runtime, cwd, output) {
66
+ const action = positionals[0] ?? 'status';
67
+ const loaded = await runtime.configLoader.load(cwd, { includeProject: false });
68
+ const configuredProfile = loaded.config.profile ?? AuthenticationService.defaultProfileName();
69
+ if (action === 'login') {
70
+ const profileName = String(getFlag(flags, 'profile') ?? configuredProfile);
71
+ const baseUrl = String(getFlag(flags, 'base-url') ?? loaded.config.baseUrl ?? DEFAULT_CONFIG.baseUrl);
72
+ const profile = await runtime.auth.login({ profileName, baseUrl, apiKey: await readSecret('LotaGate API key: ') });
73
+ await runtime.configLoader.setGlobal('profile', profile.name);
74
+ output.write(`Logged in profile: ${profile.name}\n`);
75
+ return 0;
76
+ }
77
+ if (action === 'list') {
78
+ const profiles = await runtime.auth.list();
79
+ output.write(`${formatCompactTable(profiles.map((profile) => ({ name: profile.name, status: profile.name === configuredProfile ? 'ACTIVE' : 'READY', detail: redactLogText(profile.baseUrl) })), { empty: 'No authentication profiles.' })}\n`);
80
+ return 0;
81
+ }
82
+ if (action === 'status') {
83
+ const credential = await runtime.credentialStore.get(configuredProfile);
84
+ output.write(`${JSON.stringify(credential === undefined ? { authenticated: false, profile: configuredProfile } : {
85
+ authenticated: true,
86
+ profile: credential.profile.name,
87
+ baseUrl: credential.profile.baseUrl,
88
+ credentialRef: credential.profile.credentialRef,
89
+ }, null, 2)}\n`);
90
+ return 0;
91
+ }
92
+ if (action === 'logout') {
93
+ const profile = positionals[1] ?? configuredProfile;
94
+ const deleted = await runtime.auth.logout(profile);
95
+ output.write(`${deleted ? `Logged out profile: ${profile}` : `Profile not found: ${profile}`}\n`);
96
+ return deleted ? 0 : 1;
97
+ }
98
+ if (action === 'use') {
99
+ const profile = requirePositional(positionals, 1, 'profile name');
100
+ await runtime.auth.requireCredential(profile);
101
+ await runtime.configLoader.setGlobal('profile', profile);
102
+ output.write(`Active profile: ${profile}\n`);
103
+ return 0;
104
+ }
105
+ throw new Error(`Unsupported auth action: ${action}`);
106
+ }
107
+ export async function runTrustCommand(positionals, runtime, cwd, output) {
108
+ const action = positionals[0] ?? 'status';
109
+ if (action === 'list') {
110
+ output.write(`${formatCompactTable((await runtime.projectTrust.list()).map((project) => ({ name: project.canonicalPath, status: 'TRUSTED', detail: project.fingerprint })), { empty: 'No trusted projects.' })}\n`);
111
+ return 0;
112
+ }
113
+ const identity = await runtime.projectTrust.inspect(cwd);
114
+ if (action === 'status') {
115
+ output.write(`${JSON.stringify({ ...identity, trusted: await runtime.projectTrust.isTrusted(identity) }, null, 2)}\n`);
116
+ return 0;
117
+ }
118
+ if (action === 'grant') {
119
+ await runtime.projectTrust.grant(identity);
120
+ await runtime.workspaceSettings.ensureInitialized(identity.canonicalPath);
121
+ output.write(`Trusted project: ${identity.canonicalPath}\n`);
122
+ return 0;
123
+ }
124
+ if (action === 'revoke') {
125
+ const revoked = await runtime.projectTrust.revoke(identity);
126
+ output.write(`${revoked ? `Revoked project: ${identity.canonicalPath}` : 'Project was not trusted.'}\n`);
127
+ return revoked ? 0 : 1;
128
+ }
129
+ throw new Error(`Unsupported trust action: ${action}`);
130
+ }
131
+ export async function runModelCommand(positionals, runtime, cwd, output) {
132
+ const action = positionals[0] ?? 'current';
133
+ const loaded = await loadExecutionConfig(runtime, cwd);
134
+ if (action === 'current') {
135
+ output.write(`${JSON.stringify({ model: loaded.config.model, profile: loaded.config.profile }, null, 2)}\n`);
136
+ return 0;
137
+ }
138
+ if (action === 'use') {
139
+ const model = requirePositional(positionals, 1, 'model id');
140
+ await runtime.configLoader.setGlobal('model', model);
141
+ output.write(`Active model: ${model}\n`);
142
+ return 0;
143
+ }
144
+ if (action === 'list' || action === 'refresh') {
145
+ const models = await loadModelCatalog(runtime, cwd, action === 'refresh');
146
+ output.write(`${formatCompactTable(models.data.map((model) => ({
147
+ name: model.id,
148
+ status: model.id === loaded.config.model ? 'ACTIVE' : 'AVAILABLE',
149
+ ...(typeof model['owned_by'] === 'string' ? { detail: model['owned_by'] } : {}),
150
+ values: {
151
+ category: typeof model['model_category'] === 'string' ? model['model_category'] : '-',
152
+ contextWindow: formatModelContextWindow(model),
153
+ },
154
+ })), MODEL_LIST_TABLE_OPTIONS)}\n`);
155
+ return 0;
156
+ }
157
+ if (action === 'doctor') {
158
+ const profileName = loaded.config.profile ?? AuthenticationService.defaultProfileName();
159
+ const credential = await runtime.auth.status(profileName);
160
+ output.write(`${JSON.stringify({ profile: profileName, authenticated: credential !== undefined, model: loaded.config.model, baseUrl: credential?.baseUrl ?? loaded.config.baseUrl }, null, 2)}\n`);
161
+ return 0;
162
+ }
163
+ throw new Error(`Unsupported model action: ${action}`);
164
+ }
165
+ function formatModelContextWindow(model) {
166
+ const contextWindow = getModelContextWindow(model);
167
+ return contextWindow === undefined ? '-' : formatCompactNumber(contextWindow);
168
+ }
169
+ export async function runMcpCommand(positionals, flags, runtime, cwd, output, interaction = {}) {
170
+ const projectStore = FileMcpConfigStore.forScope(cwd, runtime.paths.globalConfigDir, 'project');
171
+ const userStore = FileMcpConfigStore.forScope(cwd, runtime.paths.globalConfigDir, 'user');
172
+ const action = positionals[0] ?? 'list';
173
+ if (action === 'list') {
174
+ const result = createMcpListResult([{ scope: 'user', config: await userStore.list() }, { scope: 'project', config: await projectStore.list() }]);
175
+ writeExtensionListResult(output, result, formatExtensionList(result));
176
+ return 0;
177
+ }
178
+ if (action === 'reload' || action === 'doctor') {
179
+ const mcpRuntime = new McpRuntime(() => new CompositeMcpConfigStore([userStore, projectStore]));
180
+ try {
181
+ const identity = await runtime.projectTrust.inspect(cwd);
182
+ const summaries = await mcpRuntime.connectConfigured(cwd, await runtime.projectTrust.isTrusted(identity));
183
+ output.write(`${formatCompactTable(summaries.map(({ serverId, status, protocolEra, protocolVersion, error }) => ({
184
+ name: serverId,
185
+ status: status === 'connected' ? 'OK' : status.toUpperCase(),
186
+ detail: error === undefined ? [protocolEra, protocolVersion].filter(Boolean).join(' · ') : redactLogText(error.message),
187
+ })), { empty: 'No MCP servers configured.' })}\n`);
188
+ return summaries.some((summary) => summary.status === 'failed') ? 1 : 0;
189
+ }
190
+ finally {
191
+ await mcpRuntime.close();
192
+ }
193
+ }
194
+ const name = requirePositional(positionals, 1, 'MCP server name');
195
+ const selectedScope = await resolveCommandScope(flags, interaction, 'MCP server scope', true);
196
+ if (selectedScope === undefined)
197
+ throw new Error('MCP server scope was not selected.');
198
+ const target = { store: selectedScope === 'project' ? projectStore : userStore, scope: selectedScope };
199
+ const store = target.store;
200
+ if (action === 'get') {
201
+ const entry = await store.get(name);
202
+ output.write(`${formatMcpDetails(name, target.scope, entry)}\n`);
203
+ return 0;
204
+ }
205
+ if (action === 'remove') {
206
+ await requireTrustedProjectForScope(runtime, cwd, target.scope);
207
+ const removed = await store.remove(name);
208
+ runtime.logger.info('MCP server removal completed.', { name, scope: target.scope, removed });
209
+ output.write(`${removed ? `Removed MCP server: ${name}` : `MCP server not found: ${name}`}\n`);
210
+ return removed ? 0 : 1;
211
+ }
212
+ if (action === 'enable' || action === 'disable') {
213
+ await requireTrustedProjectForScope(runtime, cwd, target.scope);
214
+ await store.setEnabled(name, action === 'enable');
215
+ runtime.logger.info('MCP server state changed.', { name, scope: target.scope, enabled: action === 'enable' });
216
+ output.write(`${action === 'enable' ? 'Enabled' : 'Disabled'} MCP server: ${name}\n`);
217
+ return 0;
218
+ }
219
+ if (action === 'add') {
220
+ await requireTrustedProjectForScope(runtime, cwd, selectedScope ?? 'project');
221
+ const type = String(getFlag(flags, 'type') ?? 'stdio');
222
+ if (type === 'stdio') {
223
+ const command = requireStringFlag(flags, 'command');
224
+ const rawArgs = getFlag(flags, 'args');
225
+ await store.add(name, { type: 'stdio', command, ...(typeof rawArgs === 'string' ? { args: rawArgs.split(',').map((arg) => arg.trim()).filter(Boolean) } : {}) });
226
+ }
227
+ else if (type === 'http' || type === 'sse') {
228
+ await store.add(name, { type, url: requireStringFlag(flags, 'url') });
229
+ }
230
+ else
231
+ throw new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, `Unsupported MCP type: ${type}`, { category: 'arguments', userMessage: 'MCP type must be stdio, http, or sse.' });
232
+ runtime.logger.info('MCP server added.', { name, scope: selectedScope ?? 'project', type });
233
+ output.write(`Added MCP server successfully: ${name}\n`);
234
+ return 0;
235
+ }
236
+ throw new Error(`Unsupported MCP action: ${action}`);
237
+ }
238
+ export async function runPluginCommand(positionals, flags, runtime, cwd, output, interaction = {}) {
239
+ const userManager = new PluginManager(runtime.paths.pluginsDir);
240
+ const projectManager = new PluginManager(path.join(path.resolve(cwd), '.lotagate', 'plugins'));
241
+ const action = positionals[0] ?? 'list';
242
+ if (action === 'list') {
243
+ const result = createPluginListResult([{ scope: 'user', plugins: await userManager.list(undefined, { verifyIntegrity: false }) }, { scope: 'project', plugins: await projectManager.list(undefined, { verifyIntegrity: false }) }]);
244
+ writeExtensionListResult(output, result, formatExtensionList(result));
245
+ return 0;
246
+ }
247
+ if (action === 'install') {
248
+ const source = requirePositional(positionals, 1, 'plugin or skill source');
249
+ const scope = await resolveCommandScope(flags, interaction, 'Plugin installation scope', true);
250
+ if (scope === undefined)
251
+ throw new Error('Plugin installation scope was not selected.');
252
+ await requireTrustedProjectForScope(runtime, cwd, scope);
253
+ const sha256 = getFlag(flags, 'sha256');
254
+ const signature = getFlag(flags, 'signature');
255
+ const publicKey = getFlag(flags, 'public-key');
256
+ const manager = scope === 'project' ? projectManager : userManager;
257
+ const skillRoot = scope === 'project' ? path.join(path.resolve(cwd), '.lotagate', 'skills') : runtime.paths.skillsDir;
258
+ const resolved = await resolveExtensionSource(source, runtime.platform);
259
+ try {
260
+ const installedSkill = await new SkillInstaller().install(resolved.directory, skillRoot);
261
+ if (installedSkill !== undefined) {
262
+ runtime.logger.info('Skill installed.', { name: installedSkill.manifest.name, scope });
263
+ output.write(`Added skill successfully: ${installedSkill.manifest.name}\n`);
264
+ return 0;
265
+ }
266
+ const installedPlugin = await manager.install(resolved.directory, {
267
+ ...(typeof sha256 === 'string' ? { sha256 } : {}),
268
+ ...(typeof signature === 'string' ? { signature } : {}),
269
+ ...(typeof publicKey === 'string' ? { publicKeyPem: publicKey } : {}),
270
+ });
271
+ runtime.logger.info('Plugin installed.', { name: installedPlugin.manifest.name, scope });
272
+ output.write(`Added plugin successfully: ${installedPlugin.manifest.name}\n`);
273
+ return 0;
274
+ }
275
+ finally {
276
+ await resolved.cleanup();
277
+ }
278
+ }
279
+ const name = requirePositional(positionals, 1, 'plugin name');
280
+ const selectedScope = await resolveCommandScope(flags, interaction, 'Plugin scope', true);
281
+ if (selectedScope === undefined)
282
+ throw new Error('Plugin scope was not selected.');
283
+ const target = { manager: selectedScope === 'project' ? projectManager : userManager, scope: selectedScope };
284
+ const manager = target.manager;
285
+ if ((await manager.list(undefined, { verifyIntegrity: false })).every((plugin) => plugin.manifest.name !== name)) {
286
+ throw new CliError(CLI_ERROR_CODES.PLUGIN_NOT_FOUND, `Plugin not found: ${name}`, { category: 'extension', userMessage: `Plugin not found: ${name}.` });
287
+ }
288
+ if (action === 'enable' || action === 'disable') {
289
+ await requireTrustedProjectForScope(runtime, cwd, target.scope);
290
+ await manager.setEnabled(name, action === 'enable');
291
+ runtime.logger.info('Plugin state changed.', { name, scope: target.scope, enabled: action === 'enable' });
292
+ output.write(`${action === 'enable' ? 'Enabled' : 'Disabled'} plugin: ${name}\n`);
293
+ return 0;
294
+ }
295
+ if (action === 'uninstall') {
296
+ await requireTrustedProjectForScope(runtime, cwd, target.scope);
297
+ const removed = await manager.uninstall(name);
298
+ runtime.logger.info('Plugin uninstallation completed.', { name, scope: target.scope, removed });
299
+ output.write(`${removed ? `Uninstalled plugin: ${name}` : `Plugin not found: ${name}`}\n`);
300
+ return removed ? 0 : 1;
301
+ }
302
+ throw new Error(`Unsupported plugin action: ${action}`);
303
+ }
304
+ async function resolveCommandScope(flags, interaction, title, required) {
305
+ const explicit = parseExtensionScope(getFlag(flags, 'scope'));
306
+ if (explicit !== undefined)
307
+ return explicit;
308
+ const selected = interaction.selectScope === undefined ? undefined : await interaction.selectScope(title);
309
+ if (selected !== undefined)
310
+ return selected;
311
+ return required ? requireExtensionScope(undefined) : undefined;
312
+ }
313
+ async function requireTrustedProjectForScope(runtime, cwd, scope) {
314
+ if (scope !== 'project')
315
+ return;
316
+ const identity = await runtime.projectTrust.inspect(cwd);
317
+ if (!await runtime.projectTrust.isTrusted(identity)) {
318
+ throw new CliError(CLI_ERROR_CODES.PROJECT_TRUST_REQUIRED, 'Project scope requires trust.', {
319
+ category: 'project',
320
+ userMessage: 'Trust the project before writing project-scoped extensions.',
321
+ });
322
+ }
323
+ }
324
+ export async function runSkillCommand(positionals, flags, runtime, cwd, output, interaction = {}) {
325
+ const identity = await runtime.projectTrust.inspect(cwd);
326
+ const contributions = await new PluginContributionRegistry(runtime.paths.globalConfigDir).resolve(cwd, await runtime.projectTrust.isTrusted(identity));
327
+ const scopes = resolveSkillRootScopes(cwd, runtime.paths.globalConfigDir, contributions.skillRoots);
328
+ const manager = new SkillManager(path.join(runtime.paths.globalConfigDir, 'skills-state.json'));
329
+ const action = positionals[0] ?? 'list';
330
+ if (action === 'list') {
331
+ const result = createSkillListResult(await manager.listScoped(scopes, { includeShadowed: true }));
332
+ writeExtensionListResult(output, result, formatExtensionList(result));
333
+ return 0;
334
+ }
335
+ const name = requirePositional(positionals, 1, 'skill name');
336
+ const requestedScope = await resolveCommandScope(flags, interaction, 'Skill scope', true);
337
+ if (requestedScope === undefined)
338
+ throw new Error('Skill scope was not selected.');
339
+ const skill = (await manager.listScoped(scopes, { includeShadowed: true })).find((item) => item.skillKey === name && item.scope === requestedScope);
340
+ if (skill === undefined)
341
+ throw new CliError(CLI_ERROR_CODES.SKILL_NOT_FOUND, `Skill not found: ${name}`, { category: 'extension', userMessage: `Skill not found: ${name}.` });
342
+ if (action === 'remove' && skill.scope !== 'user' && skill.scope !== 'project') {
343
+ throw new CliError(CLI_ERROR_CODES.INVALID_ARGUMENT, `Skill cannot be removed from the ${skill.scope} scope: ${name}`, { category: 'arguments', userMessage: 'Only user- and project-scoped skills can be removed.' });
344
+ }
345
+ const isProjectSkill = skill.scope === 'project';
346
+ if (action === 'remove' || action === 'enable' || action === 'disable')
347
+ await requireTrustedProjectForScope(runtime, cwd, isProjectSkill ? 'project' : 'user');
348
+ if (action === 'info') {
349
+ output.write(`${JSON.stringify(toPublicSkill(skill), null, 2)}\n`);
350
+ return 0;
351
+ }
352
+ if (action === 'enable' || action === 'disable') {
353
+ await manager.setEnabled(skill.skillKey, action === 'enable', skill.statePath);
354
+ runtime.logger.info('Skill state changed.', { name, scope: skill.scope, enabled: action === 'enable' });
355
+ output.write(`${action === 'enable' ? 'Enabled' : 'Disabled'} skill: ${name}\n`);
356
+ return 0;
357
+ }
358
+ if (action === 'remove') {
359
+ const removed = await manager.remove(skill.skillKey, skill.root, skill.statePath);
360
+ runtime.logger.info('Skill removal completed.', { name, scope: skill.scope, removed });
361
+ output.write(`${removed ? `Removed skill: ${name}` : `Skill not found: ${name}`}\n`);
362
+ return removed ? 0 : 1;
363
+ }
364
+ if (action === 'run') {
365
+ if (!skill.enabled)
366
+ throw new CliError(CLI_ERROR_CODES.SKILL_NOT_FOUND, `Skill is disabled: ${name}`, { category: 'extension', userMessage: `Skill is disabled: ${name}.` });
367
+ output.write(`${skill.body}\n`);
368
+ return 0;
369
+ }
370
+ throw new Error(`Unsupported skill action: ${action}`);
371
+ }
372
+ export async function runHookCommand(positionals, runtime, cwd, output) {
373
+ const action = positionals[0] ?? 'list';
374
+ if (action !== 'list')
375
+ throw new Error(`Unsupported hook action: ${action}`);
376
+ const identity = await runtime.projectTrust.inspect(cwd);
377
+ if (!await runtime.projectTrust.isTrusted(identity)) {
378
+ const result = createHookListResult([]);
379
+ writeExtensionListResult(output, result, formatExtensionList(result));
380
+ return 0;
381
+ }
382
+ const hookRuntime = new HookRuntime(new ShellToolExecutor({ platform: runtime.platform }), { trustedProject: true, enabled: true, toolPolicy: new ToolPolicy() });
383
+ const contributions = await new PluginContributionRegistry(runtime.paths.globalConfigDir).resolve(cwd, true);
384
+ const hooks = [...await hookRuntime.loadProject(identity.canonicalPath)];
385
+ for (const plugin of contributions.plugins)
386
+ hooks.push(...await hookRuntime.load(plugin));
387
+ const result = createHookListResult(hooks);
388
+ writeExtensionListResult(output, result, formatExtensionList(result));
389
+ return 0;
390
+ }
391
+ function parseConfigValue(value) {
392
+ if (value === 'true')
393
+ return true;
394
+ if (value === 'false')
395
+ return false;
396
+ if (value === 'null')
397
+ return null;
398
+ return value;
399
+ }
400
+ function toPublicSkill(skill) {
401
+ const { root, statePath, ...publicSkill } = skill;
402
+ void root;
403
+ void statePath;
404
+ return publicSkill;
405
+ }
@@ -0,0 +1,6 @@
1
+ import type { CommandActionSpec } from './command-contract.js';
2
+ /**
3
+ * Executable command contract for every public direct and slash command.
4
+ * Presentation layers consume this catalog; application handlers remain separate.
5
+ */
6
+ export declare const COMMAND_ACTIONS: readonly CommandActionSpec[];