@lotagate/cli 0.1.22 → 0.1.24

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/package.json +7 -7
  2. package/scripts/install-native.mjs +11 -11
  3. package/dist/application/agent/agent-history.d.ts +0 -3
  4. package/dist/application/agent/agent-history.js +0 -81
  5. package/dist/application/agent/agent-input-context.d.ts +0 -9
  6. package/dist/application/agent/agent-input-context.js +0 -12
  7. package/dist/application/agent/agent-limit.d.ts +0 -3
  8. package/dist/application/agent/agent-limit.js +0 -12
  9. package/dist/application/agent/agent-run-tracker.d.ts +0 -30
  10. package/dist/application/agent/agent-run-tracker.js +0 -68
  11. package/dist/application/agent/agent-session-store.d.ts +0 -19
  12. package/dist/application/agent/agent-session-store.js +0 -74
  13. package/dist/application/agent/capability-profile.d.ts +0 -37
  14. package/dist/application/agent/capability-profile.js +0 -13
  15. package/dist/application/agent/cli-agent-execution-service.d.ts +0 -81
  16. package/dist/application/agent/cli-agent-execution-service.js +0 -279
  17. package/dist/application/agent/context-compaction-persistence.d.ts +0 -8
  18. package/dist/application/agent/context-compaction-persistence.js +0 -27
  19. package/dist/application/agent/context-compaction.d.ts +0 -20
  20. package/dist/application/agent/context-compaction.js +0 -114
  21. package/dist/application/agent/prompt-data-safety.d.ts +0 -14
  22. package/dist/application/agent/prompt-data-safety.js +0 -38
  23. package/dist/application/agent/safe-system-prompt.d.ts +0 -3
  24. package/dist/application/agent/safe-system-prompt.js +0 -19
  25. package/dist/application/agent/scoped-tool-executor.d.ts +0 -13
  26. package/dist/application/agent/scoped-tool-executor.js +0 -32
  27. package/dist/application/agent/system-prompt-builder.d.ts +0 -14
  28. package/dist/application/agent/system-prompt-builder.js +0 -199
  29. package/dist/application/agent/tool-catalog.d.ts +0 -14
  30. package/dist/application/agent/tool-catalog.js +0 -30
  31. package/dist/application/agent/tool-display.d.ts +0 -6
  32. package/dist/application/agent/tool-display.js +0 -59
  33. package/dist/application/agent/tool-hook-lifecycle.d.ts +0 -19
  34. package/dist/application/agent/tool-hook-lifecycle.js +0 -85
  35. package/dist/application/auth/authentication-service.d.ts +0 -20
  36. package/dist/application/auth/authentication-service.js +0 -44
  37. package/dist/application/chat/chat-service.d.ts +0 -12
  38. package/dist/application/chat/chat-service.js +0 -19
  39. package/dist/application/chat/pending-attachment-store.d.ts +0 -12
  40. package/dist/application/chat/pending-attachment-store.js +0 -28
  41. package/dist/application/commands/application-command-executor.d.ts +0 -20
  42. package/dist/application/commands/application-command-executor.js +0 -66
  43. package/dist/application/commands/cli-args.d.ts +0 -6
  44. package/dist/application/commands/cli-args.js +0 -43
  45. package/dist/application/commands/cli-command-services.d.ts +0 -16
  46. package/dist/application/commands/cli-command-services.js +0 -405
  47. package/dist/application/commands/command-catalog.d.ts +0 -6
  48. package/dist/application/commands/command-catalog.js +0 -159
  49. package/dist/application/commands/command-contract.d.ts +0 -58
  50. package/dist/application/commands/command-contract.js +0 -1
  51. package/dist/application/commands/command-hints.d.ts +0 -9
  52. package/dist/application/commands/command-hints.js +0 -17
  53. package/dist/application/commands/command-output.d.ts +0 -4
  54. package/dist/application/commands/command-output.js +0 -1
  55. package/dist/application/commands/command-parser.d.ts +0 -10
  56. package/dist/application/commands/command-parser.js +0 -155
  57. package/dist/application/commands/command-presentation.d.ts +0 -7
  58. package/dist/application/commands/command-presentation.js +0 -131
  59. package/dist/application/commands/command-registry.d.ts +0 -11
  60. package/dist/application/commands/command-registry.js +0 -64
  61. package/dist/application/commands/command-runtime.d.ts +0 -2
  62. package/dist/application/commands/command-runtime.js +0 -3
  63. package/dist/application/commands/goal-command-handlers.d.ts +0 -3
  64. package/dist/application/commands/goal-command-handlers.js +0 -120
  65. package/dist/application/commands/media-command-handlers.d.ts +0 -9
  66. package/dist/application/commands/media-command-handlers.js +0 -307
  67. package/dist/application/commands/media-command-output.d.ts +0 -11
  68. package/dist/application/commands/media-command-output.js +0 -8
  69. package/dist/application/commands/runtime-command-handlers.d.ts +0 -7
  70. package/dist/application/commands/runtime-command-handlers.js +0 -177
  71. package/dist/application/commands/stream-output.d.ts +0 -4
  72. package/dist/application/commands/stream-output.js +0 -10
  73. package/dist/application/commands/utility-commands.d.ts +0 -6
  74. package/dist/application/commands/utility-commands.js +0 -81
  75. package/dist/application/config/execution-config.d.ts +0 -4
  76. package/dist/application/config/execution-config.js +0 -6
  77. package/dist/application/extensions/extension-list-contract.d.ts +0 -13
  78. package/dist/application/extensions/extension-list-contract.js +0 -1
  79. package/dist/application/extensions/extension-list-formatters.d.ts +0 -31
  80. package/dist/application/extensions/extension-list-formatters.js +0 -98
  81. package/dist/application/extensions/extension-list-output.d.ts +0 -3
  82. package/dist/application/extensions/extension-list-output.js +0 -7
  83. package/dist/application/extensions/plugin-contribution-registry.d.ts +0 -15
  84. package/dist/application/extensions/plugin-contribution-registry.js +0 -80
  85. package/dist/application/extensions/skill-scope-store.d.ts +0 -23
  86. package/dist/application/extensions/skill-scope-store.js +0 -33
  87. package/dist/application/formatting/compact-number.d.ts +0 -2
  88. package/dist/application/formatting/compact-number.js +0 -18
  89. package/dist/application/formatting/compact-table.d.ts +0 -22
  90. package/dist/application/formatting/compact-table.js +0 -49
  91. package/dist/application/media/video-operation-poller.d.ts +0 -5
  92. package/dist/application/media/video-operation-poller.js +0 -42
  93. package/dist/application/model/cached-model-catalog.d.ts +0 -13
  94. package/dist/application/model/cached-model-catalog.js +0 -31
  95. package/dist/application/model/initial-model-selection.d.ts +0 -10
  96. package/dist/application/model/initial-model-selection.js +0 -11
  97. package/dist/application/model/model-catalog-service.d.ts +0 -6
  98. package/dist/application/model/model-catalog-service.js +0 -13
  99. package/dist/application/model/model-context-window.d.ts +0 -3
  100. package/dist/application/model/model-context-window.js +0 -23
  101. package/dist/application/orchestration/cli-subagent-service.d.ts +0 -70
  102. package/dist/application/orchestration/cli-subagent-service.js +0 -328
  103. package/dist/application/orchestration/cli-turn-event-projector.d.ts +0 -12
  104. package/dist/application/orchestration/cli-turn-event-projector.js +0 -81
  105. package/dist/application/orchestration/cli-turn-events.d.ts +0 -76
  106. package/dist/application/orchestration/cli-turn-events.js +0 -39
  107. package/dist/application/orchestration/cli-turn-persistence.d.ts +0 -6
  108. package/dist/application/orchestration/cli-turn-persistence.js +0 -14
  109. package/dist/application/orchestration/goal-evaluator.d.ts +0 -18
  110. package/dist/application/orchestration/goal-evaluator.js +0 -88
  111. package/dist/application/orchestration/goal-input.d.ts +0 -3
  112. package/dist/application/orchestration/goal-input.js +0 -19
  113. package/dist/application/orchestration/goal-output.d.ts +0 -2
  114. package/dist/application/orchestration/goal-output.js +0 -11
  115. package/dist/application/orchestration/goal-runner.d.ts +0 -22
  116. package/dist/application/orchestration/goal-runner.js +0 -153
  117. package/dist/application/orchestration/goal-usage.d.ts +0 -9
  118. package/dist/application/orchestration/goal-usage.js +0 -19
  119. package/dist/application/orchestration/headless-agent-turn.d.ts +0 -32
  120. package/dist/application/orchestration/headless-agent-turn.js +0 -82
  121. package/dist/application/orchestration/plan-generator.d.ts +0 -7
  122. package/dist/application/orchestration/plan-generator.js +0 -34
  123. package/dist/application/orchestration/subagent-coordinator.d.ts +0 -33
  124. package/dist/application/orchestration/subagent-coordinator.js +0 -28
  125. package/dist/application/orchestration/subagent-handoff.d.ts +0 -2
  126. package/dist/application/orchestration/subagent-handoff.js +0 -68
  127. package/dist/application/orchestration/subagent-tool-executor.d.ts +0 -12
  128. package/dist/application/orchestration/subagent-tool-executor.js +0 -93
  129. package/dist/application/orchestration/task-assessment.d.ts +0 -4
  130. package/dist/application/orchestration/task-assessment.js +0 -35
  131. package/dist/application/orchestration/task-graph.d.ts +0 -13
  132. package/dist/application/orchestration/task-graph.js +0 -56
  133. package/dist/application/orchestration/task-scheduler.d.ts +0 -18
  134. package/dist/application/orchestration/task-scheduler.js +0 -88
  135. package/dist/application/project/project-trust-service.d.ts +0 -13
  136. package/dist/application/project/project-trust-service.js +0 -74
  137. package/dist/application/protocol/browser-host-tool-executor.d.ts +0 -41
  138. package/dist/application/protocol/browser-host-tool-executor.js +0 -88
  139. package/dist/application/protocol/desktop-agent-command.d.ts +0 -9
  140. package/dist/application/protocol/desktop-agent-command.js +0 -663
  141. package/dist/application/protocol/desktop-attachment-store.d.ts +0 -16
  142. package/dist/application/protocol/desktop-attachment-store.js +0 -82
  143. package/dist/application/protocol/desktop-command-catalog.d.ts +0 -2
  144. package/dist/application/protocol/desktop-command-catalog.js +0 -19
  145. package/dist/application/protocol/desktop-command-contract.d.ts +0 -22
  146. package/dist/application/protocol/desktop-command-contract.js +0 -3
  147. package/dist/application/protocol/desktop-command-executor.d.ts +0 -16
  148. package/dist/application/protocol/desktop-command-executor.js +0 -47
  149. package/dist/application/protocol/desktop-command-output.d.ts +0 -15
  150. package/dist/application/protocol/desktop-command-output.js +0 -24
  151. package/dist/application/protocol/desktop-execution-policy.d.ts +0 -17
  152. package/dist/application/protocol/desktop-execution-policy.js +0 -49
  153. package/dist/application/protocol/desktop-host-tool-executor.d.ts +0 -57
  154. package/dist/application/protocol/desktop-host-tool-executor.js +0 -53
  155. package/dist/application/protocol/desktop-orchestration-events.d.ts +0 -5
  156. package/dist/application/protocol/desktop-orchestration-events.js +0 -37
  157. package/dist/application/protocol/json-line-writer.d.ts +0 -9
  158. package/dist/application/protocol/json-line-writer.js +0 -19
  159. package/dist/application/protocol/jsonl-agent-command.d.ts +0 -3
  160. package/dist/application/protocol/jsonl-agent-command.js +0 -97
  161. package/dist/application/protocol/jsonl-protocol.d.ts +0 -52
  162. package/dist/application/protocol/jsonl-protocol.js +0 -170
  163. package/dist/application/security/desktop-tool-scope-policy.d.ts +0 -3
  164. package/dist/application/security/desktop-tool-scope-policy.js +0 -52
  165. package/dist/application/security/tool-action-risk-analyzer.d.ts +0 -13
  166. package/dist/application/security/tool-action-risk-analyzer.js +0 -64
  167. package/dist/application/security/tool-approval-service.d.ts +0 -35
  168. package/dist/application/security/tool-approval-service.js +0 -97
  169. package/dist/application/security/tool-risk-classifier.d.ts +0 -11
  170. package/dist/application/security/tool-risk-classifier.js +0 -65
  171. package/dist/application/security/workspace-permission-policy.d.ts +0 -10
  172. package/dist/application/security/workspace-permission-policy.js +0 -50
  173. package/dist/application/session/project-session-access.d.ts +0 -8
  174. package/dist/application/session/project-session-access.js +0 -19
  175. package/dist/application/session/session-compaction-service.d.ts +0 -10
  176. package/dist/application/session/session-compaction-service.js +0 -43
  177. package/dist/application/session/session-turn-lifecycle.d.ts +0 -5
  178. package/dist/application/session/session-turn-lifecycle.js +0 -31
  179. package/dist/application/workspace/workspace-file-index.d.ts +0 -15
  180. package/dist/application/workspace/workspace-file-index.js +0 -60
  181. package/dist/application/workspace/workspace-file-reference-resolver.d.ts +0 -14
  182. package/dist/application/workspace/workspace-file-reference-resolver.js +0 -123
  183. package/dist/application/workspace/workspace-instruction-loader.d.ts +0 -8
  184. package/dist/application/workspace/workspace-instruction-loader.js +0 -55
  185. package/dist/bootstrap/composition-root.d.ts +0 -6
  186. package/dist/bootstrap/composition-root.js +0 -4
  187. package/dist/bootstrap/global-cli-options.d.ts +0 -6
  188. package/dist/bootstrap/global-cli-options.js +0 -29
  189. package/dist/bootstrap/native-devtools-stub.d.ts +0 -10
  190. package/dist/bootstrap/native-devtools-stub.js +0 -10
  191. package/dist/bootstrap/native-entry.d.ts +0 -1
  192. package/dist/bootstrap/native-entry.js +0 -6
  193. package/dist/bootstrap/native-tiktoken.d.ts +0 -4
  194. package/dist/bootstrap/native-tiktoken.js +0 -5
  195. package/dist/bootstrap/runtime-factory.d.ts +0 -35
  196. package/dist/bootstrap/runtime-factory.js +0 -44
  197. package/dist/bootstrap/shutdown-manager.d.ts +0 -10
  198. package/dist/bootstrap/shutdown-manager.js +0 -14
  199. package/dist/bootstrap/startup-sequence.d.ts +0 -5
  200. package/dist/bootstrap/startup-sequence.js +0 -10
  201. package/dist/domain/auth/auth-profile.d.ts +0 -14
  202. package/dist/domain/auth/auth-profile.js +0 -39
  203. package/dist/domain/config/config-schema.d.ts +0 -17
  204. package/dist/domain/config/config-schema.js +0 -105
  205. package/dist/domain/errors/cli-command-hint.d.ts +0 -5
  206. package/dist/domain/errors/cli-command-hint.js +0 -1
  207. package/dist/domain/errors/cli-error.d.ts +0 -35
  208. package/dist/domain/errors/cli-error.js +0 -129
  209. package/dist/domain/errors/error-codes.d.ts +0 -46
  210. package/dist/domain/errors/error-codes.js +0 -45
  211. package/dist/domain/extensions/extension-scope.d.ts +0 -3
  212. package/dist/domain/extensions/extension-scope.js +0 -23
  213. package/dist/domain/extensions/extension-state.d.ts +0 -5
  214. package/dist/domain/extensions/extension-state.js +0 -11
  215. package/dist/domain/extensions/hook-manifest.d.ts +0 -10
  216. package/dist/domain/extensions/hook-manifest.js +0 -23
  217. package/dist/domain/extensions/mcp-config.d.ts +0 -18
  218. package/dist/domain/extensions/mcp-config.js +0 -111
  219. package/dist/domain/extensions/plugin-manifest.d.ts +0 -11
  220. package/dist/domain/extensions/plugin-manifest.js +0 -43
  221. package/dist/domain/extensions/skill-manifest.d.ts +0 -10
  222. package/dist/domain/extensions/skill-manifest.js +0 -51
  223. package/dist/domain/filesystem/file-change-diff.d.ts +0 -21
  224. package/dist/domain/filesystem/file-change-diff.js +0 -60
  225. package/dist/domain/media/gateway-media-contract.d.ts +0 -23
  226. package/dist/domain/media/gateway-media-contract.js +0 -163
  227. package/dist/domain/media/media-contract.d.ts +0 -28
  228. package/dist/domain/media/media-contract.js +0 -1
  229. package/dist/domain/media/media-execution-policy.d.ts +0 -9
  230. package/dist/domain/media/media-execution-policy.js +0 -31
  231. package/dist/domain/orchestration/goal.d.ts +0 -58
  232. package/dist/domain/orchestration/goal.js +0 -113
  233. package/dist/domain/orchestration/subagent-identity.d.ts +0 -2
  234. package/dist/domain/orchestration/subagent-identity.js +0 -8
  235. package/dist/domain/orchestration/subagent.d.ts +0 -33
  236. package/dist/domain/orchestration/subagent.js +0 -1
  237. package/dist/domain/orchestration/task.d.ts +0 -31
  238. package/dist/domain/orchestration/task.js +0 -1
  239. package/dist/domain/project/project-identity.d.ts +0 -6
  240. package/dist/domain/project/project-identity.js +0 -4
  241. package/dist/domain/runtime/assistant-delta-normalizer.d.ts +0 -11
  242. package/dist/domain/runtime/assistant-delta-normalizer.js +0 -19
  243. package/dist/domain/runtime/resource-limits.d.ts +0 -60
  244. package/dist/domain/runtime/resource-limits.js +0 -60
  245. package/dist/domain/session/attachment.d.ts +0 -13
  246. package/dist/domain/session/attachment.js +0 -1
  247. package/dist/domain/session/session-schema.d.ts +0 -6
  248. package/dist/domain/session/session-schema.js +0 -28
  249. package/dist/domain/session/session.d.ts +0 -27
  250. package/dist/domain/session/session.js +0 -1
  251. package/dist/domain/settings/settings-document.d.ts +0 -8
  252. package/dist/domain/settings/settings-document.js +0 -36
  253. package/dist/domain/validation/record-schema.d.ts +0 -4
  254. package/dist/domain/validation/record-schema.js +0 -9
  255. package/dist/domain/workspace/workspace-settings.d.ts +0 -12
  256. package/dist/domain/workspace/workspace-settings.js +0 -44
  257. package/dist/infrastructure/agent-sdk/agent-instance-factory.d.ts +0 -22
  258. package/dist/infrastructure/agent-sdk/agent-instance-factory.js +0 -31
  259. package/dist/infrastructure/agent-sdk/tool-calling-model-client.d.ts +0 -11
  260. package/dist/infrastructure/agent-sdk/tool-calling-model-client.js +0 -447
  261. package/dist/infrastructure/cache/cache-policy.d.ts +0 -7
  262. package/dist/infrastructure/cache/cache-policy.js +0 -18
  263. package/dist/infrastructure/cache/file-cache-store.d.ts +0 -17
  264. package/dist/infrastructure/cache/file-cache-store.js +0 -121
  265. package/dist/infrastructure/clipboard/clipboard-adapter-factory.d.ts +0 -11
  266. package/dist/infrastructure/clipboard/clipboard-adapter-factory.js +0 -98
  267. package/dist/infrastructure/clipboard/clipboard-policy.d.ts +0 -8
  268. package/dist/infrastructure/clipboard/clipboard-policy.js +0 -19
  269. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.d.ts +0 -10
  270. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.js +0 -94
  271. package/dist/infrastructure/clipboard/image-normalizer.d.ts +0 -12
  272. package/dist/infrastructure/clipboard/image-normalizer.js +0 -78
  273. package/dist/infrastructure/clipboard/windows-clipboard-adapter.d.ts +0 -7
  274. package/dist/infrastructure/clipboard/windows-clipboard-adapter.js +0 -66
  275. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.d.ts +0 -7
  276. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.js +0 -70
  277. package/dist/infrastructure/config/config-loader.d.ts +0 -19
  278. package/dist/infrastructure/config/config-loader.js +0 -76
  279. package/dist/infrastructure/config/environment-values.d.ts +0 -2
  280. package/dist/infrastructure/config/environment-values.js +0 -7
  281. package/dist/infrastructure/credentials/composite-credential-store.d.ts +0 -11
  282. package/dist/infrastructure/credentials/composite-credential-store.js +0 -32
  283. package/dist/infrastructure/credentials/encrypted-file-credential-store.d.ts +0 -17
  284. package/dist/infrastructure/credentials/encrypted-file-credential-store.js +0 -181
  285. package/dist/infrastructure/credentials/environment-credential-store.d.ts +0 -11
  286. package/dist/infrastructure/credentials/environment-credential-store.js +0 -37
  287. package/dist/infrastructure/credentials/secret-input.d.ts +0 -7
  288. package/dist/infrastructure/credentials/secret-input.js +0 -44
  289. package/dist/infrastructure/extensions/composite-mcp-config-store.d.ts +0 -9
  290. package/dist/infrastructure/extensions/composite-mcp-config-store.js +0 -10
  291. package/dist/infrastructure/extensions/extension-directory-reader.d.ts +0 -2
  292. package/dist/infrastructure/extensions/extension-directory-reader.js +0 -15
  293. package/dist/infrastructure/extensions/extension-source-resolver.d.ts +0 -6
  294. package/dist/infrastructure/extensions/extension-source-resolver.js +0 -126
  295. package/dist/infrastructure/extensions/file-mcp-config-store.d.ts +0 -15
  296. package/dist/infrastructure/extensions/file-mcp-config-store.js +0 -66
  297. package/dist/infrastructure/extensions/hook-runtime.d.ts +0 -18
  298. package/dist/infrastructure/extensions/hook-runtime.js +0 -66
  299. package/dist/infrastructure/extensions/mcp-runtime.d.ts +0 -12
  300. package/dist/infrastructure/extensions/mcp-runtime.js +0 -52
  301. package/dist/infrastructure/extensions/plugin-discovery.d.ts +0 -5
  302. package/dist/infrastructure/extensions/plugin-discovery.js +0 -52
  303. package/dist/infrastructure/extensions/plugin-manager.d.ts +0 -26
  304. package/dist/infrastructure/extensions/plugin-manager.js +0 -139
  305. package/dist/infrastructure/extensions/skill-discovery.d.ts +0 -4
  306. package/dist/infrastructure/extensions/skill-discovery.js +0 -29
  307. package/dist/infrastructure/extensions/skill-installer.d.ts +0 -8
  308. package/dist/infrastructure/extensions/skill-installer.js +0 -88
  309. package/dist/infrastructure/extensions/skill-manager.d.ts +0 -22
  310. package/dist/infrastructure/extensions/skill-manager.js +0 -67
  311. package/dist/infrastructure/extensions/skill-roots.d.ts +0 -19
  312. package/dist/infrastructure/extensions/skill-roots.js +0 -25
  313. package/dist/infrastructure/extensions/skill-tool-executor.d.ts +0 -18
  314. package/dist/infrastructure/extensions/skill-tool-executor.js +0 -53
  315. package/dist/infrastructure/filesystem/atomic-file-store.d.ts +0 -12
  316. package/dist/infrastructure/filesystem/atomic-file-store.js +0 -106
  317. package/dist/infrastructure/filesystem/bounded-file-reader.d.ts +0 -6
  318. package/dist/infrastructure/filesystem/bounded-file-reader.js +0 -24
  319. package/dist/infrastructure/filesystem/bounded-json-reader.d.ts +0 -1
  320. package/dist/infrastructure/filesystem/bounded-json-reader.js +0 -7
  321. package/dist/infrastructure/filesystem/fs-errors.d.ts +0 -2
  322. package/dist/infrastructure/filesystem/fs-errors.js +0 -6
  323. package/dist/infrastructure/filesystem/gateway-media-input-reader.d.ts +0 -12
  324. package/dist/infrastructure/filesystem/gateway-media-input-reader.js +0 -49
  325. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.d.ts +0 -21
  326. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.js +0 -176
  327. package/dist/infrastructure/filesystem/path-resolver.d.ts +0 -20
  328. package/dist/infrastructure/filesystem/path-resolver.js +0 -119
  329. package/dist/infrastructure/filesystem/workspace-media-artifact-store.d.ts +0 -13
  330. package/dist/infrastructure/filesystem/workspace-media-artifact-store.js +0 -152
  331. package/dist/infrastructure/logging/daily-rotating-file-writer.d.ts +0 -20
  332. package/dist/infrastructure/logging/daily-rotating-file-writer.js +0 -75
  333. package/dist/infrastructure/logging/log-redactor.d.ts +0 -2
  334. package/dist/infrastructure/logging/log-redactor.js +0 -26
  335. package/dist/infrastructure/logging/logging-policy.d.ts +0 -6
  336. package/dist/infrastructure/logging/logging-policy.js +0 -6
  337. package/dist/infrastructure/logging/structured-logger.d.ts +0 -24
  338. package/dist/infrastructure/logging/structured-logger.js +0 -40
  339. package/dist/infrastructure/network/safe-media-downloader.d.ts +0 -23
  340. package/dist/infrastructure/network/safe-media-downloader.js +0 -239
  341. package/dist/infrastructure/platform/host-platform.d.ts +0 -14
  342. package/dist/infrastructure/platform/host-platform.js +0 -23
  343. package/dist/infrastructure/platform/host-process.d.ts +0 -17
  344. package/dist/infrastructure/platform/host-process.js +0 -116
  345. package/dist/infrastructure/platform/platform-paths.d.ts +0 -25
  346. package/dist/infrastructure/platform/platform-paths.js +0 -33
  347. package/dist/infrastructure/project/file-project-trust-store.d.ts +0 -12
  348. package/dist/infrastructure/project/file-project-trust-store.js +0 -59
  349. package/dist/infrastructure/sdk/chat-completion-adapter.d.ts +0 -8
  350. package/dist/infrastructure/sdk/chat-completion-adapter.js +0 -115
  351. package/dist/infrastructure/sdk/lotagate-client-factory.d.ts +0 -3
  352. package/dist/infrastructure/sdk/lotagate-client-factory.js +0 -8
  353. package/dist/infrastructure/sdk/model-catalog-adapter.d.ts +0 -19
  354. package/dist/infrastructure/sdk/model-catalog-adapter.js +0 -28
  355. package/dist/infrastructure/sdk/sdk-media-gateway-client.d.ts +0 -20
  356. package/dist/infrastructure/sdk/sdk-media-gateway-client.js +0 -97
  357. package/dist/infrastructure/sessions/file-goal-store.d.ts +0 -21
  358. package/dist/infrastructure/sessions/file-goal-store.js +0 -160
  359. package/dist/infrastructure/sessions/file-session-store.d.ts +0 -48
  360. package/dist/infrastructure/sessions/file-session-store.js +0 -525
  361. package/dist/infrastructure/sessions/project-session-paths.d.ts +0 -17
  362. package/dist/infrastructure/sessions/project-session-paths.js +0 -41
  363. package/dist/infrastructure/sessions/session-index.d.ts +0 -16
  364. package/dist/infrastructure/sessions/session-index.js +0 -84
  365. package/dist/infrastructure/sessions/session-journal.d.ts +0 -22
  366. package/dist/infrastructure/sessions/session-journal.js +0 -137
  367. package/dist/infrastructure/sessions/subagent-journal-store.d.ts +0 -28
  368. package/dist/infrastructure/sessions/subagent-journal-store.js +0 -30
  369. package/dist/infrastructure/shell/shell-tool-executor.d.ts +0 -17
  370. package/dist/infrastructure/shell/shell-tool-executor.js +0 -115
  371. package/dist/infrastructure/tokens/tiktoken-token-estimator.d.ts +0 -18
  372. package/dist/infrastructure/tokens/tiktoken-token-estimator.js +0 -48
  373. package/dist/infrastructure/workspace/workspace-settings-store.d.ts +0 -9
  374. package/dist/infrastructure/workspace/workspace-settings-store.js +0 -75
  375. package/dist/main.d.ts +0 -7
  376. package/dist/main.js +0 -66
  377. package/dist/ports/cache-store.d.ts +0 -10
  378. package/dist/ports/cache-store.js +0 -1
  379. package/dist/ports/chat-model.d.ts +0 -30
  380. package/dist/ports/chat-model.js +0 -1
  381. package/dist/ports/clipboard-adapter.d.ts +0 -7
  382. package/dist/ports/clipboard-adapter.js +0 -1
  383. package/dist/ports/clipboard-text-adapter.d.ts +0 -3
  384. package/dist/ports/clipboard-text-adapter.js +0 -1
  385. package/dist/ports/credential-store.d.ts +0 -7
  386. package/dist/ports/credential-store.js +0 -1
  387. package/dist/ports/goal-store.d.ts +0 -12
  388. package/dist/ports/goal-store.js +0 -1
  389. package/dist/ports/logger.d.ts +0 -8
  390. package/dist/ports/logger.js +0 -1
  391. package/dist/ports/media-gateway-client.d.ts +0 -54
  392. package/dist/ports/media-gateway-client.js +0 -1
  393. package/dist/ports/model-diagnostics.d.ts +0 -17
  394. package/dist/ports/model-diagnostics.js +0 -1
  395. package/dist/ports/project-trust-store.d.ts +0 -12
  396. package/dist/ports/project-trust-store.js +0 -1
  397. package/dist/ports/session-store.d.ts +0 -58
  398. package/dist/ports/session-store.js +0 -1
  399. package/dist/ports/subagent-lifecycle.d.ts +0 -31
  400. package/dist/ports/subagent-lifecycle.js +0 -1
  401. package/dist/ports/tool-activity.d.ts +0 -13
  402. package/dist/ports/tool-activity.js +0 -1
  403. package/dist/presentation/themes/theme.d.ts +0 -19
  404. package/dist/presentation/themes/theme.js +0 -8
  405. package/dist/presentation/tui/agent-initialization-renderer.d.ts +0 -4
  406. package/dist/presentation/tui/agent-initialization-renderer.js +0 -37
  407. package/dist/presentation/tui/context-display.d.ts +0 -21
  408. package/dist/presentation/tui/context-display.js +0 -33
  409. package/dist/presentation/tui/formatters.d.ts +0 -6
  410. package/dist/presentation/tui/formatters.js +0 -60
  411. package/dist/presentation/tui/ink/choice-window.d.ts +0 -5
  412. package/dist/presentation/tui/ink/choice-window.js +0 -5
  413. package/dist/presentation/tui/ink/components/activity-entry.d.ts +0 -6
  414. package/dist/presentation/tui/ink/components/activity-entry.js +0 -16
  415. package/dist/presentation/tui/ink/components/activity-status.d.ts +0 -10
  416. package/dist/presentation/tui/ink/components/activity-status.js +0 -21
  417. package/dist/presentation/tui/ink/components/choice-modal.d.ts +0 -11
  418. package/dist/presentation/tui/ink/components/choice-modal.js +0 -29
  419. package/dist/presentation/tui/ink/components/composer.d.ts +0 -40
  420. package/dist/presentation/tui/ink/components/composer.js +0 -271
  421. package/dist/presentation/tui/ink/components/file-diff.d.ts +0 -6
  422. package/dist/presentation/tui/ink/components/file-diff.js +0 -34
  423. package/dist/presentation/tui/ink/components/modal.d.ts +0 -8
  424. package/dist/presentation/tui/ink/components/modal.js +0 -110
  425. package/dist/presentation/tui/ink/components/shimmer-text.d.ts +0 -6
  426. package/dist/presentation/tui/ink/components/shimmer-text.js +0 -9
  427. package/dist/presentation/tui/ink/components/subagent-activity.d.ts +0 -11
  428. package/dist/presentation/tui/ink/components/subagent-activity.js +0 -61
  429. package/dist/presentation/tui/ink/components/transcript.d.ts +0 -39
  430. package/dist/presentation/tui/ink/components/transcript.js +0 -121
  431. package/dist/presentation/tui/ink/components/welcome-panel.d.ts +0 -6
  432. package/dist/presentation/tui/ink/components/welcome-panel.js +0 -20
  433. package/dist/presentation/tui/ink/lotagate-tui.d.ts +0 -6
  434. package/dist/presentation/tui/ink/lotagate-tui.js +0 -136
  435. package/dist/presentation/tui/ink/markdown-inline-renderer.d.ts +0 -4
  436. package/dist/presentation/tui/ink/markdown-inline-renderer.js +0 -20
  437. package/dist/presentation/tui/ink/markdown-inline.d.ts +0 -13
  438. package/dist/presentation/tui/ink/markdown-inline.js +0 -91
  439. package/dist/presentation/tui/ink/markdown-message.d.ts +0 -6
  440. package/dist/presentation/tui/ink/markdown-message.js +0 -66
  441. package/dist/presentation/tui/ink/markdown-table.d.ts +0 -16
  442. package/dist/presentation/tui/ink/markdown-table.js +0 -77
  443. package/dist/presentation/tui/ink/tui-bridge.d.ts +0 -195
  444. package/dist/presentation/tui/ink/tui-bridge.js +0 -289
  445. package/dist/presentation/tui/terminal-capabilities.d.ts +0 -15
  446. package/dist/presentation/tui/terminal-capabilities.js +0 -7
  447. package/dist/presentation/tui/terminal-mouse.d.ts +0 -5
  448. package/dist/presentation/tui/terminal-mouse.js +0 -19
  449. package/dist/presentation/tui/terminal-screen.d.ts +0 -10
  450. package/dist/presentation/tui/terminal-screen.js +0 -23
  451. package/dist/presentation/tui/tui-agent-event-runner.d.ts +0 -24
  452. package/dist/presentation/tui/tui-agent-event-runner.js +0 -69
  453. package/dist/presentation/tui/tui-application-contract.d.ts +0 -10
  454. package/dist/presentation/tui/tui-application-contract.js +0 -8
  455. package/dist/presentation/tui/tui-application.d.ts +0 -62
  456. package/dist/presentation/tui/tui-application.js +0 -675
  457. package/dist/presentation/tui/tui-attachment-input.d.ts +0 -2
  458. package/dist/presentation/tui/tui-attachment-input.js +0 -5
  459. package/dist/presentation/tui/tui-clipboard-paste-handlers.d.ts +0 -11
  460. package/dist/presentation/tui/tui-clipboard-paste-handlers.js +0 -25
  461. package/dist/presentation/tui/tui-command-context.d.ts +0 -3
  462. package/dist/presentation/tui/tui-command-context.js +0 -1
  463. package/dist/presentation/tui/tui-command-executor.d.ts +0 -38
  464. package/dist/presentation/tui/tui-command-executor.js +0 -214
  465. package/dist/presentation/tui/tui-command-host-factory.d.ts +0 -40
  466. package/dist/presentation/tui/tui-command-host-factory.js +0 -23
  467. package/dist/presentation/tui/tui-context-compaction.d.ts +0 -5
  468. package/dist/presentation/tui/tui-context-compaction.js +0 -22
  469. package/dist/presentation/tui/tui-context-service.d.ts +0 -34
  470. package/dist/presentation/tui/tui-context-service.js +0 -126
  471. package/dist/presentation/tui/tui-file-suggestions.d.ts +0 -3
  472. package/dist/presentation/tui/tui-file-suggestions.js +0 -8
  473. package/dist/presentation/tui/tui-goal-controller.d.ts +0 -14
  474. package/dist/presentation/tui/tui-goal-controller.js +0 -52
  475. package/dist/presentation/tui/tui-initial-model.d.ts +0 -3
  476. package/dist/presentation/tui/tui-initial-model.js +0 -28
  477. package/dist/presentation/tui/tui-lifecycle-actions.d.ts +0 -13
  478. package/dist/presentation/tui/tui-lifecycle-actions.js +0 -45
  479. package/dist/presentation/tui/tui-manual-compaction.d.ts +0 -18
  480. package/dist/presentation/tui/tui-manual-compaction.js +0 -31
  481. package/dist/presentation/tui/tui-media-model-selection.d.ts +0 -12
  482. package/dist/presentation/tui/tui-media-model-selection.js +0 -38
  483. package/dist/presentation/tui/tui-prompt-dispatcher.d.ts +0 -16
  484. package/dist/presentation/tui/tui-prompt-dispatcher.js +0 -38
  485. package/dist/presentation/tui/tui-skill-controller.d.ts +0 -11
  486. package/dist/presentation/tui/tui-skill-controller.js +0 -13
  487. package/dist/presentation/tui/tui-tool-approval.d.ts +0 -22
  488. package/dist/presentation/tui/tui-tool-approval.js +0 -73
  489. package/dist/version.d.ts +0 -1
  490. package/dist/version.js +0 -1
@@ -1,181 +0,0 @@
1
- import crypto from 'node:crypto';
2
- import fs from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { CliError } from '../../domain/errors/cli-error.js';
5
- import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
6
- import { validateApiKey, validateBaseUrl, validateProfileName } from '../../domain/auth/auth-profile.js';
7
- import { withFileLock } from '../filesystem/atomic-file-store.js';
8
- import { isAlreadyExists, isFileNotFound } from '../filesystem/fs-errors.js';
9
- export class EncryptedFileCredentialStore {
10
- paths;
11
- secret;
12
- constructor(paths, secret = process.env['LOTAGATE_CREDENTIAL_SECRET']) {
13
- this.paths = paths;
14
- this.secret = secret;
15
- }
16
- async list() {
17
- const payload = await this.readPayload();
18
- return payload.credentials.map(({ profile }) => profile);
19
- }
20
- async get(profileName) {
21
- const name = validateProfileName(profileName);
22
- const payload = await this.readPayload();
23
- return payload.credentials.find((credential) => credential.profile.name === name);
24
- }
25
- async set(credential) {
26
- const normalized = {
27
- profile: {
28
- ...credential.profile,
29
- name: validateProfileName(credential.profile.name),
30
- baseUrl: validateBaseUrl(credential.profile.baseUrl),
31
- credentialRef: `file:${validateProfileName(credential.profile.name)}`,
32
- },
33
- apiKey: validateApiKey(credential.apiKey),
34
- };
35
- await withFileLock(this.paths.credentialsFile, async () => {
36
- const payload = await this.readPayload();
37
- const credentials = payload.credentials.filter(({ profile }) => profile.name !== normalized.profile.name);
38
- credentials.push(normalized);
39
- await this.writePayload({ version: 1, credentials });
40
- });
41
- }
42
- async delete(profileName) {
43
- const name = validateProfileName(profileName);
44
- return withFileLock(this.paths.credentialsFile, async () => {
45
- const payload = await this.readPayload();
46
- const credentials = payload.credentials.filter(({ profile }) => profile.name !== name);
47
- if (credentials.length === payload.credentials.length)
48
- return false;
49
- await this.writePayload({ version: 1, credentials });
50
- return true;
51
- });
52
- }
53
- async readPayload() {
54
- const encrypted = await this.readFile();
55
- if (encrypted === undefined)
56
- return { version: 1, credentials: [] };
57
- const key = await this.deriveKey(encrypted.salt);
58
- try {
59
- const decipher = crypto.createDecipheriv('aes-256-gcm', key, Buffer.from(encrypted.iv, 'base64'));
60
- decipher.setAuthTag(Buffer.from(encrypted.authTag, 'base64'));
61
- const plaintext = Buffer.concat([decipher.update(Buffer.from(encrypted.ciphertext, 'base64')), decipher.final()]).toString('utf8');
62
- const value = JSON.parse(plaintext);
63
- if (!isCredentialPayload(value))
64
- throw new Error('Invalid credential payload.');
65
- return value;
66
- }
67
- catch (error) {
68
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential file cannot be decrypted.', {
69
- category: 'auth', userMessage: 'Unable to decrypt the credential store. Check LOTAGATE_CREDENTIAL_SECRET.', cause: error,
70
- });
71
- }
72
- }
73
- async writePayload(payload) {
74
- const salt = crypto.randomBytes(16);
75
- const iv = crypto.randomBytes(12);
76
- const key = await this.deriveKey(salt.toString('base64'));
77
- const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
78
- const ciphertext = Buffer.concat([cipher.update(JSON.stringify(payload), 'utf8'), cipher.final()]);
79
- const file = {
80
- version: 1,
81
- salt: salt.toString('base64'),
82
- iv: iv.toString('base64'),
83
- authTag: cipher.getAuthTag().toString('base64'),
84
- ciphertext: ciphertext.toString('base64'),
85
- };
86
- await fs.mkdir(this.paths.globalConfigDir, { recursive: true });
87
- const tempPath = path.join(this.paths.globalConfigDir, `.credentials.${process.pid}.${crypto.randomUUID()}.tmp`);
88
- try {
89
- await fs.writeFile(tempPath, `${JSON.stringify(file, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
90
- await fs.rename(tempPath, this.paths.credentialsFile);
91
- }
92
- finally {
93
- await fs.rm(tempPath, { force: true });
94
- }
95
- }
96
- async readFile() {
97
- try {
98
- return parseEncryptedFile(await fs.readFile(this.paths.credentialsFile, 'utf8'));
99
- }
100
- catch (error) {
101
- if (isFileNotFound(error))
102
- return undefined;
103
- if (error instanceof CliError)
104
- throw error;
105
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential file cannot be read.', {
106
- category: 'auth', userMessage: 'Unable to read the credential store.', cause: error,
107
- });
108
- }
109
- }
110
- async deriveKey(salt) {
111
- return crypto.scryptSync(await this.resolveSecret(), salt, 32);
112
- }
113
- async resolveSecret() {
114
- if (this.secret !== undefined && this.secret.length >= 16)
115
- return this.secret;
116
- await fs.mkdir(this.paths.globalConfigDir, { recursive: true });
117
- try {
118
- const existing = (await fs.readFile(this.paths.credentialKeyFile, 'utf8')).trim();
119
- if (existing.length >= 16)
120
- return existing;
121
- throw new Error('Credential key file is invalid.');
122
- }
123
- catch (error) {
124
- if (!isFileNotFound(error)) {
125
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential key cannot be read.', {
126
- category: 'auth', userMessage: 'Unable to read the local credential key.', cause: error,
127
- });
128
- }
129
- }
130
- const generated = crypto.randomBytes(32).toString('base64url');
131
- try {
132
- await fs.writeFile(this.paths.credentialKeyFile, `${generated}\n`, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
133
- return generated;
134
- }
135
- catch (error) {
136
- if (!isAlreadyExists(error)) {
137
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential key cannot be created.', {
138
- category: 'auth', userMessage: 'Unable to initialize secure local credential storage.', cause: error,
139
- });
140
- }
141
- try {
142
- const existing = (await fs.readFile(this.paths.credentialKeyFile, 'utf8')).trim();
143
- if (existing.length >= 16)
144
- return existing;
145
- }
146
- catch (readError) {
147
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential key cannot be read after initialization.', {
148
- category: 'auth', userMessage: 'Unable to initialize secure local credential storage.', cause: readError,
149
- });
150
- }
151
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential key file is invalid.', {
152
- category: 'auth', userMessage: 'Unable to initialize secure local credential storage.',
153
- });
154
- }
155
- }
156
- }
157
- function parseEncryptedFile(raw) {
158
- try {
159
- const value = JSON.parse(raw);
160
- if (typeof value !== 'object' || value === null)
161
- throw new Error('Expected object.');
162
- const record = value;
163
- if (record['version'] !== 1 || typeof record['salt'] !== 'string' || typeof record['iv'] !== 'string' || typeof record['authTag'] !== 'string' || typeof record['ciphertext'] !== 'string') {
164
- throw new Error('Invalid encrypted credential file.');
165
- }
166
- return { version: 1, salt: record['salt'], iv: record['iv'], authTag: record['authTag'], ciphertext: record['ciphertext'] };
167
- }
168
- catch (error) {
169
- if (error instanceof CliError)
170
- throw error;
171
- throw new CliError(CLI_ERROR_CODES.AUTH_CREDENTIAL_STORE_UNAVAILABLE, 'Credential file is invalid.', {
172
- category: 'auth', userMessage: 'Credential store is corrupted or has an invalid format.', cause: error,
173
- });
174
- }
175
- }
176
- function isCredentialPayload(value) {
177
- if (typeof value !== 'object' || value === null)
178
- return false;
179
- const record = value;
180
- return record['version'] === 1 && Array.isArray(record['credentials']);
181
- }
@@ -1,11 +0,0 @@
1
- import { type AuthProfile, type StoredCredential } from '../../domain/auth/auth-profile.js';
2
- import type { CredentialStore } from '../../ports/credential-store.js';
3
- export declare class EnvironmentCredentialStore implements CredentialStore {
4
- private readonly env;
5
- constructor(env?: Readonly<Record<string, string | undefined>>);
6
- list(): Promise<readonly AuthProfile[]>;
7
- get(profileName: string): Promise<StoredCredential | undefined>;
8
- set(): Promise<void>;
9
- delete(): Promise<boolean>;
10
- private read;
11
- }
@@ -1,37 +0,0 @@
1
- import { DEFAULT_CONFIG } from '../../domain/config/config-schema.js';
2
- import { validateApiKey, validateBaseUrl, validateProfileName } from '../../domain/auth/auth-profile.js';
3
- export class EnvironmentCredentialStore {
4
- env;
5
- constructor(env = process.env) {
6
- this.env = env;
7
- }
8
- async list() {
9
- const credential = this.read();
10
- return credential === undefined ? [] : [credential.profile];
11
- }
12
- async get(profileName) {
13
- const credential = this.read();
14
- return credential?.profile.name === validateProfileName(profileName) ? credential : undefined;
15
- }
16
- async set() {
17
- throw new Error('Environment credentials are read-only.');
18
- }
19
- async delete() { return false; }
20
- read() {
21
- const apiKey = this.env['LOTAGATE_API_KEY'];
22
- if (apiKey === undefined || apiKey.trim().length === 0)
23
- return undefined;
24
- const profileName = validateProfileName(this.env['LOTAGATE_PROFILE'] ?? 'default');
25
- const now = new Date().toISOString();
26
- return {
27
- apiKey: validateApiKey(apiKey),
28
- profile: {
29
- name: profileName,
30
- baseUrl: validateBaseUrl(this.env['LOTAGATE_BASE_URL'] ?? DEFAULT_CONFIG.baseUrl),
31
- credentialRef: 'env:LOTAGATE_API_KEY',
32
- createdAt: now,
33
- updatedAt: now,
34
- },
35
- };
36
- }
37
- }
@@ -1,7 +0,0 @@
1
- import type { Readable, Writable } from 'node:stream';
2
- interface RawInput extends Readable {
3
- isTTY?: boolean;
4
- setRawMode?: (mode: boolean) => void;
5
- }
6
- export declare function readSecret(prompt: string, input?: RawInput, output?: Writable): Promise<string>;
7
- export {};
@@ -1,44 +0,0 @@
1
- export async function readSecret(prompt, input = process.stdin, output = process.stderr) {
2
- if (input.isTTY !== true || input.setRawMode === undefined)
3
- return readStream(input);
4
- const setRawMode = input.setRawMode;
5
- return new Promise((resolve, reject) => {
6
- let value = '';
7
- const onData = (chunk) => {
8
- const text = chunk.toString('utf8');
9
- for (const character of text) {
10
- if (character === '\u0003') {
11
- cleanup();
12
- reject(new Error('Input interrupted.'));
13
- return;
14
- }
15
- if (character === '\r' || character === '\n') {
16
- cleanup();
17
- output.write('\n');
18
- resolve(value);
19
- return;
20
- }
21
- if (character === '\u0008' || character === '\u007f') {
22
- value = value.slice(0, -1);
23
- continue;
24
- }
25
- value += character;
26
- }
27
- };
28
- const cleanup = () => {
29
- setRawMode(false);
30
- input.pause();
31
- input.off('data', onData);
32
- };
33
- output.write(prompt);
34
- setRawMode(true);
35
- input.resume();
36
- input.on('data', onData);
37
- });
38
- }
39
- async function readStream(input) {
40
- const chunks = [];
41
- for await (const chunk of input)
42
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
43
- return Buffer.concat(chunks).toString('utf8').trim();
44
- }
@@ -1,9 +0,0 @@
1
- import type { CliMcpConfig } from '../../domain/extensions/mcp-config.js';
2
- export interface McpConfigReader {
3
- list(): Promise<CliMcpConfig>;
4
- }
5
- export declare class CompositeMcpConfigStore implements McpConfigReader {
6
- private readonly stores;
7
- constructor(stores: readonly McpConfigReader[]);
8
- list(): Promise<CliMcpConfig>;
9
- }
@@ -1,10 +0,0 @@
1
- import { mergeMcpConfigsWithOverride } from '../../domain/extensions/mcp-config.js';
2
- export class CompositeMcpConfigStore {
3
- stores;
4
- constructor(stores) {
5
- this.stores = stores;
6
- }
7
- async list() {
8
- return mergeMcpConfigsWithOverride(...await Promise.all(this.stores.map((store) => store.list())));
9
- }
10
- }
@@ -1,2 +0,0 @@
1
- /** Lists direct extension directories while keeping missing optional roots harmless. */
2
- export declare function listExtensionDirectories(root: string): Promise<readonly string[]>;
@@ -1,15 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { isFileNotFound } from '../filesystem/fs-errors.js';
4
- /** Lists direct extension directories while keeping missing optional roots harmless. */
5
- export async function listExtensionDirectories(root) {
6
- try {
7
- const entries = await fs.readdir(root, { withFileTypes: true });
8
- return entries.filter((entry) => entry.isDirectory()).map((entry) => path.join(root, entry.name));
9
- }
10
- catch (error) {
11
- if (isFileNotFound(error))
12
- return [];
13
- throw error;
14
- }
15
- }
@@ -1,6 +0,0 @@
1
- import { type HostPlatformContext } from '../platform/host-platform.js';
2
- export interface ResolvedExtensionSource {
3
- directory: string;
4
- cleanup(): Promise<void>;
5
- }
6
- export declare function resolveExtensionSource(source: string, platform?: HostPlatformContext): Promise<ResolvedExtensionSource>;
@@ -1,126 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import { CliError } from '../../domain/errors/cli-error.js';
6
- import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
7
- import { isFileNotFound } from '../filesystem/fs-errors.js';
8
- import { detectHostPlatform } from '../platform/host-platform.js';
9
- import { execPlatformCommand } from '../platform/host-process.js';
10
- export async function resolveExtensionSource(source, platform = detectHostPlatform()) {
11
- const local = await resolveLocalSource(source);
12
- if (local !== undefined)
13
- return { directory: local, cleanup: async () => { } };
14
- if (isGitSource(source))
15
- return resolveGitSource(source, platform);
16
- if (isNpmSource(source))
17
- return resolveNpmSource(source, platform);
18
- throw invalidSource('Source must be a local directory, HTTPS Git repository, or npm package.');
19
- }
20
- async function resolveLocalSource(source) {
21
- const candidate = source.startsWith('file://') ? fileURLToPath(source) : path.resolve(source);
22
- try {
23
- const stat = await fs.stat(candidate);
24
- if (!stat.isDirectory())
25
- throw invalidSource('Extension source must be a directory.');
26
- return candidate;
27
- }
28
- catch (error) {
29
- if (error instanceof CliError || !isFileNotFound(error))
30
- throw error;
31
- return undefined;
32
- }
33
- }
34
- async function resolveGitSource(source, platform) {
35
- const temporaryRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'lotagate-extension-git-'));
36
- const directory = path.join(temporaryRoot, 'source');
37
- try {
38
- await execPlatformCommand('git', ['clone', '--depth', '1', source, directory], platform, { maxBufferBytes: 2 * 1024 * 1024 });
39
- await fs.rm(path.join(directory, '.git'), { recursive: true, force: true });
40
- return { directory, cleanup: () => fs.rm(temporaryRoot, { recursive: true, force: true }) };
41
- }
42
- catch (error) {
43
- await fs.rm(temporaryRoot, { recursive: true, force: true });
44
- throw invalidSource(`Unable to clone Git source: ${error instanceof Error ? error.message : String(error)}`);
45
- }
46
- }
47
- async function resolveNpmSource(source, platform) {
48
- const temporaryRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'lotagate-extension-npm-'));
49
- try {
50
- await execPlatformCommand('npm', ['install', '--ignore-scripts', '--no-package-lock', '--no-save', '--prefix', temporaryRoot, source], platform, { maxBufferBytes: 4 * 1024 * 1024 });
51
- const packageRoot = await findPackageRoot(path.join(temporaryRoot, 'node_modules'));
52
- if (packageRoot === undefined)
53
- throw invalidSource('npm package does not contain a LotaGate plugin or skill.');
54
- return { directory: packageRoot, cleanup: () => fs.rm(temporaryRoot, { recursive: true, force: true }) };
55
- }
56
- catch (error) {
57
- await fs.rm(temporaryRoot, { recursive: true, force: true });
58
- if (error instanceof CliError)
59
- throw error;
60
- throw invalidSource(`Unable to install npm source: ${error instanceof Error ? error.message : String(error)}`);
61
- }
62
- }
63
- async function findPackageRoot(root) {
64
- let entries;
65
- try {
66
- entries = await fs.readdir(root, { withFileTypes: true });
67
- }
68
- catch (error) {
69
- if (isFileNotFound(error))
70
- return undefined;
71
- throw error;
72
- }
73
- const candidates = [];
74
- for (const entry of entries) {
75
- if (!entry.isDirectory() || entry.name.startsWith('.'))
76
- continue;
77
- const directory = path.join(root, entry.name);
78
- if (await containsExtensionMarker(directory))
79
- candidates.push(directory);
80
- if (entry.name.startsWith('@')) {
81
- let scoped;
82
- try {
83
- scoped = await fs.readdir(directory, { withFileTypes: true });
84
- }
85
- catch {
86
- scoped = [];
87
- }
88
- for (const child of scoped.filter((item) => item.isDirectory())) {
89
- const scopedDirectory = path.join(directory, child.name);
90
- if (await containsExtensionMarker(scopedDirectory))
91
- candidates.push(scopedDirectory);
92
- }
93
- }
94
- }
95
- if (candidates.length > 1)
96
- throw invalidSource('npm package contains multiple extension roots.');
97
- return candidates[0];
98
- }
99
- async function containsExtensionMarker(directory) {
100
- try {
101
- await fs.stat(path.join(directory, '.lotagate-plugin', 'plugin.json'));
102
- return true;
103
- }
104
- catch (error) {
105
- if (!isFileNotFound(error))
106
- throw error;
107
- }
108
- try {
109
- await fs.stat(path.join(directory, 'SKILL.md'));
110
- return true;
111
- }
112
- catch (error) {
113
- if (!isFileNotFound(error))
114
- throw error;
115
- return false;
116
- }
117
- }
118
- function isGitSource(source) {
119
- return /^https:\/\//u.test(source) && (source.endsWith('.git') || /^https:\/\/github\.com\/[^/]+\/[^/]+\/?$/u.test(source));
120
- }
121
- function isNpmSource(source) {
122
- return /^@?[a-z0-9][a-z0-9._/-]*(?:@[a-z0-9][a-z0-9._-]*)?$/iu.test(source) && !source.includes('/') || /^@[a-z0-9][a-z0-9-]*\/[a-z0-9][a-z0-9._-]*(?:@[a-z0-9][a-z0-9._-]*)?$/iu.test(source);
123
- }
124
- function invalidSource(message) {
125
- return new CliError(CLI_ERROR_CODES.PLUGIN_MANIFEST_INVALID, message, { category: 'extension', userMessage: `Unable to resolve extension source: ${message}` });
126
- }
@@ -1,15 +0,0 @@
1
- import { type CliMcpConfig, type CliMcpServerConfig } from '../../domain/extensions/mcp-config.js';
2
- import type { ExtensionScope } from '../../domain/extensions/extension-scope.js';
3
- export declare class FileMcpConfigStore {
4
- private readonly filePath;
5
- constructor(location: string, scope?: ExtensionScope);
6
- static forScope(cwd: string, globalConfigDir: string, scope: ExtensionScope): FileMcpConfigStore;
7
- get path(): string;
8
- list(): Promise<CliMcpConfig>;
9
- get(name: string): Promise<import("../../domain/extensions/mcp-config.js").CliMcpServerEntry | undefined>;
10
- add(name: string, config: CliMcpServerConfig): Promise<void>;
11
- remove(name: string): Promise<boolean>;
12
- setEnabled(name: string, enabled: boolean): Promise<void>;
13
- private readRaw;
14
- private write;
15
- }
@@ -1,66 +0,0 @@
1
- import path from 'node:path';
2
- import { validateMcpConfig, validateMcpName } from '../../domain/extensions/mcp-config.js';
3
- import { CliError } from '../../domain/errors/cli-error.js';
4
- import { CLI_ERROR_CODES } from '../../domain/errors/error-codes.js';
5
- import { atomicWriteFile, withFileLock } from '../filesystem/atomic-file-store.js';
6
- import { isFileNotFound } from '../filesystem/fs-errors.js';
7
- import { readJsonFileBounded } from '../filesystem/bounded-json-reader.js';
8
- import { RESOURCE_LIMITS } from '../../domain/runtime/resource-limits.js';
9
- export class FileMcpConfigStore {
10
- filePath;
11
- constructor(location, scope = 'project') {
12
- this.filePath = scope === 'user'
13
- ? path.join(path.resolve(location), 'mcp.json')
14
- : path.join(path.resolve(location), '.lotagate', 'mcp.json');
15
- }
16
- static forScope(cwd, globalConfigDir, scope) {
17
- return new FileMcpConfigStore(scope === 'user' ? globalConfigDir : cwd, scope);
18
- }
19
- get path() { return this.filePath; }
20
- async list() { return validateMcpConfig(await this.readRaw()); }
21
- async get(name) { return (await this.list())[validateMcpName(name)]; }
22
- async add(name, config) {
23
- const normalized = validateMcpName(name);
24
- await withFileLock(this.filePath, async () => {
25
- const current = await this.list();
26
- current[normalized] = { enabled: true, config };
27
- await this.write(current);
28
- });
29
- }
30
- async remove(name) {
31
- const normalized = validateMcpName(name);
32
- return withFileLock(this.filePath, async () => {
33
- const current = await this.list();
34
- if (current[normalized] === undefined)
35
- return false;
36
- delete current[normalized];
37
- await this.write(current);
38
- return true;
39
- });
40
- }
41
- async setEnabled(name, enabled) {
42
- const normalized = validateMcpName(name);
43
- await withFileLock(this.filePath, async () => {
44
- const current = await this.list();
45
- const entry = current[normalized];
46
- if (entry === undefined)
47
- throw new CliError(CLI_ERROR_CODES.MCP_SERVER_NOT_FOUND, `MCP server not found: ${normalized}`, { category: 'mcp', userMessage: `MCP server not found: ${normalized}.` });
48
- current[normalized] = { ...entry, enabled };
49
- await this.write(current);
50
- });
51
- }
52
- async readRaw() {
53
- try {
54
- return await readJsonFileBounded(this.filePath, RESOURCE_LIMITS.mcpConfigBytes);
55
- }
56
- catch (error) {
57
- if (isFileNotFound(error))
58
- return {};
59
- throw error;
60
- }
61
- }
62
- async write(value) {
63
- const normalized = validateMcpConfig(value);
64
- await atomicWriteFile(this.filePath, `${JSON.stringify(normalized, null, 2)}\n`);
65
- }
66
- }
@@ -1,18 +0,0 @@
1
- import type { ToolExecutionContext, ToolExecutor, ToolPolicy } from '@lotagate/agent-sdk';
2
- import { type HookDefinition, type HookEvent } from '../../domain/extensions/hook-manifest.js';
3
- import type { PluginManifest } from '../../domain/extensions/plugin-manifest.js';
4
- export interface HookRuntimePolicy {
5
- trustedProject: boolean;
6
- enabled: boolean;
7
- toolPolicy: ToolPolicy;
8
- }
9
- export declare class HookRuntime {
10
- private readonly executor;
11
- private readonly policy;
12
- constructor(executor: ToolExecutor, policy: HookRuntimePolicy);
13
- load(plugin: PluginManifest): Promise<readonly HookDefinition[]>;
14
- loadProject(cwd: string): Promise<readonly HookDefinition[]>;
15
- private loadDirectory;
16
- run(hook: HookDefinition, context: ToolExecutionContext): Promise<boolean>;
17
- runEvent(hooks: readonly HookDefinition[], event: HookEvent, context: ToolExecutionContext): Promise<number>;
18
- }
@@ -1,66 +0,0 @@
1
- import fs from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { ToolExecutionError } from '@lotagate/agent-sdk';
4
- import { parseHookDefinition } from '../../domain/extensions/hook-manifest.js';
5
- import { isFileNotFound } from '../filesystem/fs-errors.js';
6
- import { readJsonFileBounded } from '../filesystem/bounded-json-reader.js';
7
- import { RESOURCE_LIMITS } from '../../domain/runtime/resource-limits.js';
8
- export class HookRuntime {
9
- executor;
10
- policy;
11
- constructor(executor, policy) {
12
- this.executor = executor;
13
- this.policy = policy;
14
- }
15
- async load(plugin) {
16
- if (plugin.hooksDirectory === undefined)
17
- return [];
18
- const root = path.resolve(plugin.directory, plugin.hooksDirectory);
19
- if (!root.startsWith(`${path.resolve(plugin.directory)}${path.sep}`))
20
- return [];
21
- return this.loadDirectory(root);
22
- }
23
- async loadProject(cwd) {
24
- return this.loadDirectory(path.join(path.resolve(cwd), '.lotagate', 'hooks'));
25
- }
26
- async loadDirectory(root) {
27
- let files;
28
- try {
29
- files = (await fs.readdir(root, { withFileTypes: true })).filter((entry) => entry.isFile() && entry.name.endsWith('.json')).map((entry) => path.join(root, entry.name));
30
- }
31
- catch (error) {
32
- if (isFileNotFound(error))
33
- return [];
34
- throw error;
35
- }
36
- const hooks = [];
37
- for (const file of files.sort())
38
- hooks.push(parseHookDefinition(await readJsonFileBounded(file, RESOURCE_LIMITS.configFileBytes), root, path.basename(file, '.json')));
39
- return hooks;
40
- }
41
- async run(hook, context) {
42
- if (!this.policy.enabled || !this.policy.trustedProject)
43
- return false;
44
- const input = { command: hook.command, args: [...hook.args], cwd: '.', timeoutMs: hook.timeoutMs };
45
- const toolInfo = this.executor.getToolInfo?.('shell.exec');
46
- try {
47
- await this.policy.toolPolicy.assertAllowed({ toolName: 'shell.exec', input, context, ...(toolInfo === undefined ? {} : { toolInfo }) });
48
- }
49
- catch (error) {
50
- if (error instanceof ToolExecutionError)
51
- return false;
52
- throw error;
53
- }
54
- const result = await this.executor.execute('shell.exec', input, context);
55
- if (result.isError)
56
- throw new Error(`Hook failed: ${hook.id}`);
57
- return true;
58
- }
59
- async runEvent(hooks, event, context) {
60
- let executed = 0;
61
- for (const hook of hooks)
62
- if (hook.event === event && await this.run(hook, context))
63
- executed += 1;
64
- return executed;
65
- }
66
- }
@@ -1,12 +0,0 @@
1
- import { McpClientManager, type McpConnectionSummary, type McpServerConfigMap } from '@lotagate/agent-sdk';
2
- import type { CliMcpConfig } from '../../domain/extensions/mcp-config.js';
3
- import type { McpConfigReader } from './composite-mcp-config-store.js';
4
- export declare class McpRuntime {
5
- private readonly storeFactory;
6
- private manager;
7
- constructor(storeFactory?: (cwd: string) => McpConfigReader);
8
- connectConfigured(cwd: string, trusted: boolean): Promise<readonly McpConnectionSummary[]>;
9
- get client(): McpClientManager | undefined;
10
- close(): Promise<void>;
11
- }
12
- export declare function toAgentMcpConfig(config: CliMcpConfig): McpServerConfigMap;