@lotagate/cli 0.1.24 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (671) hide show
  1. package/README.md +75 -7
  2. package/SECURITY.md +2 -0
  3. package/bin/lotagate.mjs +50 -8
  4. package/dist/application/agent/agent-constants.d.ts +6 -0
  5. package/dist/application/agent/agent-constants.js +1 -0
  6. package/dist/application/agent/agent-history.d.ts +3 -0
  7. package/dist/application/agent/agent-history.js +5 -0
  8. package/dist/application/agent/agent-input-context.d.ts +12 -0
  9. package/dist/application/agent/agent-input-context.js +5 -0
  10. package/dist/application/agent/agent-limit.d.ts +3 -0
  11. package/dist/application/agent/agent-limit.js +1 -0
  12. package/dist/application/agent/agent-run-tracker.d.ts +30 -0
  13. package/dist/application/agent/agent-run-tracker.js +1 -0
  14. package/dist/application/agent/agent-runtime-context.d.ts +22 -0
  15. package/dist/application/agent/agent-runtime-context.js +1 -0
  16. package/dist/application/agent/agent-session-store-registry.d.ts +16 -0
  17. package/dist/application/agent/agent-session-store-registry.js +1 -0
  18. package/dist/application/agent/agent-session-store.d.ts +23 -0
  19. package/dist/application/agent/agent-session-store.js +6 -0
  20. package/dist/application/agent/capability-profile.d.ts +17 -0
  21. package/dist/application/agent/capability-profile.js +0 -0
  22. package/dist/application/agent/cli-agent-execution-service.d.ts +120 -0
  23. package/dist/application/agent/cli-agent-execution-service.js +1 -0
  24. package/dist/application/agent/cli-agent-preparation-cache.d.ts +39 -0
  25. package/dist/application/agent/cli-agent-preparation-cache.js +1 -0
  26. package/dist/application/agent/cli-agent-run-request.d.ts +12 -0
  27. package/dist/application/agent/cli-agent-run-request.js +0 -0
  28. package/dist/application/agent/context-compaction-persistence.d.ts +8 -0
  29. package/dist/application/agent/context-compaction-persistence.js +1 -0
  30. package/dist/application/agent/context-compaction.d.ts +22 -0
  31. package/dist/application/agent/context-compaction.js +8 -0
  32. package/dist/application/agent/context-token-cache.d.ts +21 -0
  33. package/dist/application/agent/context-token-cache.js +4 -0
  34. package/dist/application/agent/context-usage-service.d.ts +52 -0
  35. package/dist/application/agent/context-usage-service.js +1 -0
  36. package/dist/application/agent/continuation-checkpoint.d.ts +15 -0
  37. package/dist/application/agent/continuation-checkpoint.js +2 -0
  38. package/dist/application/agent/interactive-agent-guidance.d.ts +5 -0
  39. package/dist/application/agent/interactive-agent-guidance.js +2 -0
  40. package/dist/application/agent/prompt-data-safety.d.ts +14 -0
  41. package/dist/application/agent/prompt-data-safety.js +4 -0
  42. package/dist/application/agent/scoped-tool-executor.d.ts +13 -0
  43. package/dist/application/agent/scoped-tool-executor.js +1 -0
  44. package/dist/application/agent/tool-catalog.d.ts +14 -0
  45. package/dist/application/agent/tool-catalog.js +1 -0
  46. package/dist/application/agent/tool-display.d.ts +7 -0
  47. package/dist/application/agent/tool-display.js +1 -0
  48. package/dist/application/agent/tool-hook-lifecycle.d.ts +19 -0
  49. package/dist/application/agent/tool-hook-lifecycle.js +1 -0
  50. package/dist/application/auth/authentication-service.d.ts +20 -0
  51. package/dist/application/auth/authentication-service.js +1 -0
  52. package/dist/application/chat/chat-service.d.ts +12 -0
  53. package/dist/application/chat/chat-service.js +1 -0
  54. package/dist/application/chat/pending-attachment-store.d.ts +15 -0
  55. package/dist/application/chat/pending-attachment-store.js +1 -0
  56. package/dist/application/commands/application-command-executor.d.ts +23 -0
  57. package/dist/application/commands/application-command-executor.js +3 -0
  58. package/dist/application/commands/cli-args.d.ts +6 -0
  59. package/dist/application/commands/cli-args.js +1 -0
  60. package/dist/application/commands/cli-command-services.d.ts +17 -0
  61. package/dist/application/commands/cli-command-services.js +33 -0
  62. package/dist/application/commands/command-cancellation.d.ts +6 -0
  63. package/dist/application/commands/command-cancellation.js +1 -0
  64. package/dist/application/commands/command-catalog.d.ts +6 -0
  65. package/dist/application/commands/command-catalog.js +1 -0
  66. package/dist/application/commands/command-contract.d.ts +60 -0
  67. package/dist/application/commands/command-contract.js +0 -0
  68. package/dist/application/commands/command-hints.d.ts +9 -0
  69. package/dist/application/commands/command-hints.js +1 -0
  70. package/dist/application/commands/command-output.d.ts +4 -0
  71. package/dist/application/commands/command-output.js +0 -0
  72. package/dist/application/commands/command-parser.d.ts +10 -0
  73. package/dist/application/commands/command-parser.js +1 -0
  74. package/dist/application/commands/command-presentation.d.ts +7 -0
  75. package/dist/application/commands/command-presentation.js +3 -0
  76. package/dist/application/commands/command-registry.d.ts +11 -0
  77. package/dist/application/commands/command-registry.js +1 -0
  78. package/dist/application/commands/command-runtime.d.ts +2 -0
  79. package/dist/application/commands/command-runtime.js +1 -0
  80. package/dist/application/commands/goal-command-handlers.d.ts +3 -0
  81. package/dist/application/commands/goal-command-handlers.js +7 -0
  82. package/dist/application/commands/media-command-handlers.d.ts +9 -0
  83. package/dist/application/commands/media-command-handlers.js +9 -0
  84. package/dist/application/commands/media-command-output.d.ts +11 -0
  85. package/dist/application/commands/media-command-output.js +1 -0
  86. package/dist/application/commands/memory-command-handler.d.ts +29 -0
  87. package/dist/application/commands/memory-command-handler.js +12 -0
  88. package/dist/application/commands/runtime-command-handlers.d.ts +7 -0
  89. package/dist/application/commands/runtime-command-handlers.js +14 -0
  90. package/dist/application/commands/stream-output.d.ts +4 -0
  91. package/dist/application/commands/stream-output.js +1 -0
  92. package/dist/application/commands/utility-commands.d.ts +6 -0
  93. package/dist/application/commands/utility-commands.js +10 -0
  94. package/dist/application/config/execution-config.d.ts +4 -0
  95. package/dist/application/config/execution-config.js +1 -0
  96. package/dist/application/extensions/extension-list-contract.d.ts +18 -0
  97. package/dist/application/extensions/extension-list-contract.js +0 -0
  98. package/dist/application/extensions/extension-list-formatters.d.ts +38 -0
  99. package/dist/application/extensions/extension-list-formatters.js +1 -0
  100. package/dist/application/extensions/extension-list-output.d.ts +3 -0
  101. package/dist/application/extensions/extension-list-output.js +3 -0
  102. package/dist/application/extensions/plugin-contribution-registry.d.ts +31 -0
  103. package/dist/application/extensions/plugin-contribution-registry.js +1 -0
  104. package/dist/application/extensions/plugin-detail-contract.d.ts +25 -0
  105. package/dist/application/extensions/plugin-detail-contract.js +0 -0
  106. package/dist/application/extensions/plugin-detail-service.d.ts +3 -0
  107. package/dist/application/extensions/plugin-detail-service.js +1 -0
  108. package/dist/application/extensions/skill-scope-store.d.ts +23 -0
  109. package/dist/application/extensions/skill-scope-store.js +1 -0
  110. package/dist/application/formatting/compact-number.d.ts +2 -0
  111. package/dist/application/formatting/compact-number.js +1 -0
  112. package/dist/application/formatting/compact-table.d.ts +22 -0
  113. package/dist/application/formatting/compact-table.js +2 -0
  114. package/dist/application/intent/completion-gate.d.ts +3 -0
  115. package/dist/application/intent/completion-gate.js +1 -0
  116. package/dist/application/intent/evidence-ledger.d.ts +22 -0
  117. package/dist/application/intent/evidence-ledger.js +1 -0
  118. package/dist/application/intent/evidence-recording-tool-executor.d.ts +16 -0
  119. package/dist/application/intent/evidence-recording-tool-executor.js +1 -0
  120. package/dist/application/intent/intent-compiler.d.ts +11 -0
  121. package/dist/application/intent/intent-compiler.js +2 -0
  122. package/dist/application/intent/intent-execution-gate.d.ts +11 -0
  123. package/dist/application/intent/intent-execution-gate.js +1 -0
  124. package/dist/application/intent/intent-host-context.d.ts +6 -0
  125. package/dist/application/intent/intent-host-context.js +1 -0
  126. package/dist/application/intent/intent-run-controller.d.ts +56 -0
  127. package/dist/application/intent/intent-run-controller.js +3 -0
  128. package/dist/application/intent/project-policy.d.ts +16 -0
  129. package/dist/application/intent/project-policy.js +1 -0
  130. package/dist/application/media/video-operation-poller.d.ts +5 -0
  131. package/dist/application/media/video-operation-poller.js +1 -0
  132. package/dist/application/memory/memory-capture-policy.d.ts +10 -0
  133. package/dist/application/memory/memory-capture-policy.js +1 -0
  134. package/dist/application/memory/memory-consolidation-service.d.ts +12 -0
  135. package/dist/application/memory/memory-consolidation-service.js +1 -0
  136. package/dist/application/memory/memory-context-assembler.d.ts +24 -0
  137. package/dist/application/memory/memory-context-assembler.js +1 -0
  138. package/dist/application/memory/memory-extractor.d.ts +21 -0
  139. package/dist/application/memory/memory-extractor.js +2 -0
  140. package/dist/application/memory/memory-service.d.ts +34 -0
  141. package/dist/application/memory/memory-service.js +1 -0
  142. package/dist/application/model/cached-model-catalog.d.ts +19 -0
  143. package/dist/application/model/cached-model-catalog.js +1 -0
  144. package/dist/application/model/initial-model-selection.d.ts +10 -0
  145. package/dist/application/model/initial-model-selection.js +1 -0
  146. package/dist/application/model/model-catalog-service.d.ts +6 -0
  147. package/dist/application/model/model-catalog-service.js +1 -0
  148. package/dist/application/model/model-context-window.d.ts +3 -0
  149. package/dist/application/model/model-context-window.js +1 -0
  150. package/dist/application/model/model-response-retry.d.ts +15 -0
  151. package/dist/application/model/model-response-retry.js +1 -0
  152. package/dist/application/orchestration/abortable-wait.d.ts +2 -0
  153. package/dist/application/orchestration/abortable-wait.js +1 -0
  154. package/dist/application/orchestration/cli-subagent-service.d.ts +77 -0
  155. package/dist/application/orchestration/cli-subagent-service.js +13 -0
  156. package/dist/application/orchestration/cli-turn-event-projector.d.ts +15 -0
  157. package/dist/application/orchestration/cli-turn-event-projector.js +1 -0
  158. package/dist/application/orchestration/cli-turn-events.d.ts +76 -0
  159. package/dist/application/orchestration/cli-turn-events.js +1 -0
  160. package/dist/application/orchestration/cli-turn-persistence.d.ts +6 -0
  161. package/dist/application/orchestration/cli-turn-persistence.js +1 -0
  162. package/dist/application/orchestration/goal-evaluator.d.ts +18 -0
  163. package/dist/application/orchestration/goal-evaluator.js +3 -0
  164. package/dist/application/orchestration/goal-input.d.ts +3 -0
  165. package/dist/application/orchestration/goal-input.js +1 -0
  166. package/dist/application/orchestration/goal-output.d.ts +2 -0
  167. package/dist/application/orchestration/goal-output.js +2 -0
  168. package/dist/application/orchestration/goal-runner.d.ts +22 -0
  169. package/dist/application/orchestration/goal-runner.js +10 -0
  170. package/dist/application/orchestration/goal-usage.d.ts +9 -0
  171. package/dist/application/orchestration/goal-usage.js +1 -0
  172. package/dist/application/orchestration/headless-agent-turn.d.ts +36 -0
  173. package/dist/application/orchestration/headless-agent-turn.js +4 -0
  174. package/dist/application/orchestration/orchestration-constants.d.ts +3 -0
  175. package/dist/application/orchestration/orchestration-constants.js +1 -0
  176. package/dist/application/orchestration/subagent-coordinator.d.ts +41 -0
  177. package/dist/application/orchestration/subagent-coordinator.js +1 -0
  178. package/dist/application/orchestration/subagent-handoff.d.ts +3 -0
  179. package/dist/application/orchestration/subagent-handoff.js +3 -0
  180. package/dist/application/orchestration/subagent-tool-executor.d.ts +12 -0
  181. package/dist/application/orchestration/subagent-tool-executor.js +1 -0
  182. package/dist/application/orchestration/task-graph.d.ts +13 -0
  183. package/dist/application/orchestration/task-graph.js +1 -0
  184. package/dist/application/orchestration/task-scheduler.d.ts +18 -0
  185. package/dist/application/orchestration/task-scheduler.js +1 -0
  186. package/dist/application/project/project-trust-service.d.ts +13 -0
  187. package/dist/application/project/project-trust-service.js +1 -0
  188. package/dist/application/project-intelligence/project-intelligence-constants.d.ts +56 -0
  189. package/dist/application/project-intelligence/project-intelligence-constants.js +1 -0
  190. package/dist/application/project-intelligence/project-intelligence-service.d.ts +14 -0
  191. package/dist/application/project-intelligence/project-intelligence-service.js +1 -0
  192. package/dist/application/protocol/browser-host-tool-executor.d.ts +51 -0
  193. package/dist/application/protocol/browser-host-tool-executor.js +2 -0
  194. package/dist/application/protocol/computer-host-tool-executor.d.ts +45 -0
  195. package/dist/application/protocol/computer-host-tool-executor.js +2 -0
  196. package/dist/application/protocol/desktop-agent-command.d.ts +9 -0
  197. package/dist/application/protocol/desktop-agent-command.js +3 -0
  198. package/dist/application/protocol/desktop-agent-contracts.d.ts +34 -0
  199. package/dist/application/protocol/desktop-agent-contracts.js +1 -0
  200. package/dist/application/protocol/desktop-agent-helpers.d.ts +5 -0
  201. package/dist/application/protocol/desktop-agent-helpers.js +1 -0
  202. package/dist/application/protocol/desktop-agent-request-parser.d.ts +211 -0
  203. package/dist/application/protocol/desktop-agent-request-parser.js +1 -0
  204. package/dist/application/protocol/desktop-approval-broker.d.ts +26 -0
  205. package/dist/application/protocol/desktop-approval-broker.js +1 -0
  206. package/dist/application/protocol/desktop-attachment-store.d.ts +33 -0
  207. package/dist/application/protocol/desktop-attachment-store.js +1 -0
  208. package/dist/application/protocol/desktop-command-catalog.d.ts +2 -0
  209. package/dist/application/protocol/desktop-command-catalog.js +1 -0
  210. package/dist/application/protocol/desktop-command-contract.d.ts +26 -0
  211. package/dist/application/protocol/desktop-command-contract.js +1 -0
  212. package/dist/application/protocol/desktop-command-executor.d.ts +17 -0
  213. package/dist/application/protocol/desktop-command-executor.js +1 -0
  214. package/dist/application/protocol/desktop-command-output.d.ts +15 -0
  215. package/dist/application/protocol/desktop-command-output.js +1 -0
  216. package/dist/application/protocol/desktop-execution-policy.d.ts +19 -0
  217. package/dist/application/protocol/desktop-execution-policy.js +1 -0
  218. package/dist/application/protocol/desktop-extension-request-handler.d.ts +14 -0
  219. package/dist/application/protocol/desktop-extension-request-handler.js +1 -0
  220. package/dist/application/protocol/desktop-extension-service.d.ts +44 -0
  221. package/dist/application/protocol/desktop-extension-service.js +3 -0
  222. package/dist/application/protocol/desktop-host-bridge.d.ts +33 -0
  223. package/dist/application/protocol/desktop-host-bridge.js +1 -0
  224. package/dist/application/protocol/desktop-host-capabilities.d.ts +12 -0
  225. package/dist/application/protocol/desktop-host-capabilities.js +1 -0
  226. package/dist/application/protocol/desktop-host-tool-executor.d.ts +76 -0
  227. package/dist/application/protocol/desktop-host-tool-executor.js +2 -0
  228. package/dist/application/protocol/desktop-intent-event-writer.d.ts +20 -0
  229. package/dist/application/protocol/desktop-intent-event-writer.js +1 -0
  230. package/dist/application/protocol/desktop-mcp-events.d.ts +10 -0
  231. package/dist/application/protocol/desktop-mcp-events.js +1 -0
  232. package/dist/application/protocol/desktop-orchestration-events.d.ts +2 -0
  233. package/dist/application/protocol/desktop-orchestration-events.js +2 -0
  234. package/dist/application/protocol/desktop-protocol-helpers.d.ts +13 -0
  235. package/dist/application/protocol/desktop-protocol-helpers.js +1 -0
  236. package/dist/application/protocol/json-line-writer.d.ts +31 -0
  237. package/dist/application/protocol/json-line-writer.js +2 -0
  238. package/dist/application/protocol/jsonl-agent-command.d.ts +3 -0
  239. package/dist/application/protocol/jsonl-agent-command.js +3 -0
  240. package/dist/application/protocol/jsonl-protocol.d.ts +82 -0
  241. package/dist/application/protocol/jsonl-protocol.js +2 -0
  242. package/dist/application/protocol/tool-image-content.d.ts +4 -0
  243. package/dist/application/protocol/tool-image-content.js +1 -0
  244. package/dist/application/security/delegated-worker-policy.d.ts +3 -0
  245. package/dist/application/security/delegated-worker-policy.js +1 -0
  246. package/dist/application/security/desktop-tool-scope-policy.d.ts +4 -0
  247. package/dist/application/security/desktop-tool-scope-policy.js +1 -0
  248. package/dist/application/security/tool-action-risk-analyzer.d.ts +13 -0
  249. package/dist/application/security/tool-action-risk-analyzer.js +1 -0
  250. package/dist/application/security/tool-approval-service.d.ts +43 -0
  251. package/dist/application/security/tool-approval-service.js +1 -0
  252. package/dist/application/security/tool-policy-registry.d.ts +20 -0
  253. package/dist/application/security/tool-policy-registry.js +1 -0
  254. package/dist/application/security/tool-risk-classifier.d.ts +19 -0
  255. package/dist/application/security/tool-risk-classifier.js +1 -0
  256. package/dist/application/security/workspace-permission-policy.d.ts +10 -0
  257. package/dist/application/security/workspace-permission-policy.js +1 -0
  258. package/dist/application/session/project-session-access.d.ts +8 -0
  259. package/dist/application/session/project-session-access.js +1 -0
  260. package/dist/application/session/session-compaction-service.d.ts +10 -0
  261. package/dist/application/session/session-compaction-service.js +1 -0
  262. package/dist/application/session/session-turn-lifecycle.d.ts +5 -0
  263. package/dist/application/session/session-turn-lifecycle.js +1 -0
  264. package/dist/application/workspace/session-execution-workspace.d.ts +59 -0
  265. package/dist/application/workspace/session-execution-workspace.js +3 -0
  266. package/dist/application/workspace/workspace-constants.d.ts +17 -0
  267. package/dist/application/workspace/workspace-constants.js +1 -0
  268. package/dist/application/workspace/workspace-file-index.d.ts +14 -0
  269. package/dist/application/workspace/workspace-file-index.js +1 -0
  270. package/dist/application/workspace/workspace-file-reference-resolver.d.ts +20 -0
  271. package/dist/application/workspace/workspace-file-reference-resolver.js +17 -0
  272. package/dist/application/workspace/workspace-instruction-loader.d.ts +8 -0
  273. package/dist/application/workspace/workspace-instruction-loader.js +1 -0
  274. package/dist/bootstrap/composition-root.d.ts +7 -0
  275. package/dist/bootstrap/composition-root.js +1 -0
  276. package/dist/bootstrap/global-cli-options.d.ts +6 -0
  277. package/dist/bootstrap/global-cli-options.js +1 -0
  278. package/dist/bootstrap/native-devtools-stub.d.ts +10 -0
  279. package/dist/bootstrap/native-devtools-stub.js +1 -0
  280. package/dist/bootstrap/native-entry.d.ts +1 -0
  281. package/dist/bootstrap/native-entry.js +2 -0
  282. package/dist/bootstrap/native-tiktoken.d.ts +4 -0
  283. package/dist/bootstrap/native-tiktoken.js +1 -0
  284. package/dist/bootstrap/runtime-factory.d.ts +46 -0
  285. package/dist/bootstrap/runtime-factory.js +1 -0
  286. package/dist/bootstrap/shutdown-manager.d.ts +11 -0
  287. package/dist/bootstrap/shutdown-manager.js +1 -0
  288. package/dist/bootstrap/startup-sequence.d.ts +5 -0
  289. package/dist/bootstrap/startup-sequence.js +1 -0
  290. package/dist/domain/auth/auth-profile.d.ts +14 -0
  291. package/dist/domain/auth/auth-profile.js +1 -0
  292. package/dist/domain/config/config-schema.d.ts +24 -0
  293. package/dist/domain/config/config-schema.js +1 -0
  294. package/dist/domain/errors/cli-command-hint.d.ts +5 -0
  295. package/dist/domain/errors/cli-command-hint.js +0 -0
  296. package/dist/domain/errors/cli-error.d.ts +35 -0
  297. package/dist/domain/errors/cli-error.js +1 -0
  298. package/dist/domain/errors/error-codes.d.ts +51 -0
  299. package/dist/domain/errors/error-codes.js +1 -0
  300. package/dist/domain/extensions/extension-constants.d.ts +1 -0
  301. package/dist/domain/extensions/extension-constants.js +1 -0
  302. package/dist/domain/extensions/extension-scope.d.ts +3 -0
  303. package/dist/domain/extensions/extension-scope.js +1 -0
  304. package/dist/domain/extensions/extension-state.d.ts +5 -0
  305. package/dist/domain/extensions/extension-state.js +1 -0
  306. package/dist/domain/extensions/hook-manifest.d.ts +13 -0
  307. package/dist/domain/extensions/hook-manifest.js +1 -0
  308. package/dist/domain/extensions/host-tool-plugin-ids.d.ts +5 -0
  309. package/dist/domain/extensions/host-tool-plugin-ids.js +1 -0
  310. package/dist/domain/extensions/mcp-config.d.ts +35 -0
  311. package/dist/domain/extensions/mcp-config.js +1 -0
  312. package/dist/domain/extensions/plugin-agent-manifest.d.ts +8 -0
  313. package/dist/domain/extensions/plugin-agent-manifest.js +1 -0
  314. package/dist/domain/extensions/plugin-manifest.d.ts +23 -0
  315. package/dist/domain/extensions/plugin-manifest.js +1 -0
  316. package/dist/domain/extensions/skill-manifest.d.ts +10 -0
  317. package/dist/domain/extensions/skill-manifest.js +3 -0
  318. package/dist/domain/extensions/yaml-subset.d.ts +9 -0
  319. package/dist/domain/extensions/yaml-subset.js +2 -0
  320. package/dist/domain/filesystem/file-change-diff.d.ts +21 -0
  321. package/dist/domain/filesystem/file-change-diff.js +3 -0
  322. package/dist/domain/intent/intent-contract.d.ts +33 -0
  323. package/dist/domain/intent/intent-contract.js +1 -0
  324. package/dist/domain/media/gateway-media-contract.d.ts +23 -0
  325. package/dist/domain/media/gateway-media-contract.js +1 -0
  326. package/dist/domain/media/media-constants.d.ts +3 -0
  327. package/dist/domain/media/media-constants.js +1 -0
  328. package/dist/domain/media/media-contract.d.ts +28 -0
  329. package/dist/domain/media/media-contract.js +0 -0
  330. package/dist/domain/media/media-execution-policy.d.ts +9 -0
  331. package/dist/domain/media/media-execution-policy.js +1 -0
  332. package/dist/domain/memory/memory-constants.d.ts +3 -0
  333. package/dist/domain/memory/memory-constants.js +1 -0
  334. package/dist/domain/memory/memory-kinds.d.ts +15 -0
  335. package/dist/domain/memory/memory-kinds.js +1 -0
  336. package/dist/domain/memory/memory-retrieval-policy.d.ts +3 -0
  337. package/dist/domain/memory/memory-retrieval-policy.js +1 -0
  338. package/dist/domain/memory/memory-search.d.ts +33 -0
  339. package/dist/domain/memory/memory-search.js +2 -0
  340. package/dist/domain/memory/memory.d.ts +48 -0
  341. package/dist/domain/memory/memory.js +1 -0
  342. package/dist/domain/orchestration/goal.d.ts +57 -0
  343. package/dist/domain/orchestration/goal.js +1 -0
  344. package/dist/domain/orchestration/subagent-identity.d.ts +2 -0
  345. package/dist/domain/orchestration/subagent-identity.js +1 -0
  346. package/dist/domain/orchestration/subagent.d.ts +33 -0
  347. package/dist/domain/orchestration/subagent.js +0 -0
  348. package/dist/domain/orchestration/work-plan.d.ts +15 -0
  349. package/dist/domain/orchestration/work-plan.js +0 -0
  350. package/dist/domain/project/project-identity.d.ts +6 -0
  351. package/dist/domain/project/project-identity.js +1 -0
  352. package/dist/domain/runtime/assistant-delta-normalizer.d.ts +11 -0
  353. package/dist/domain/runtime/assistant-delta-normalizer.js +1 -0
  354. package/dist/domain/runtime/assistant-stream-text.d.ts +11 -0
  355. package/dist/domain/runtime/assistant-stream-text.js +1 -0
  356. package/dist/domain/runtime/gateway-request-budget.d.ts +19 -0
  357. package/dist/domain/runtime/gateway-request-budget.js +1 -0
  358. package/dist/domain/runtime/resource-limits.d.ts +92 -0
  359. package/dist/domain/runtime/resource-limits.js +1 -0
  360. package/dist/domain/session/attachment.d.ts +15 -0
  361. package/dist/domain/session/attachment.js +0 -0
  362. package/dist/domain/session/session-schema.d.ts +6 -0
  363. package/dist/domain/session/session-schema.js +1 -0
  364. package/dist/domain/session/session.d.ts +27 -0
  365. package/dist/domain/session/session.js +0 -0
  366. package/dist/domain/settings/settings-document.d.ts +8 -0
  367. package/dist/domain/settings/settings-document.js +1 -0
  368. package/dist/domain/validation/record-schema.d.ts +4 -0
  369. package/dist/domain/validation/record-schema.js +1 -0
  370. package/dist/domain/workspace/workspace-settings.d.ts +14 -0
  371. package/dist/domain/workspace/workspace-settings.js +1 -0
  372. package/dist/infrastructure/agent-sdk/agent-instance-factory.d.ts +22 -0
  373. package/dist/infrastructure/agent-sdk/agent-instance-factory.js +1 -0
  374. package/dist/infrastructure/agent-sdk/model-response-metrics.d.ts +7 -0
  375. package/dist/infrastructure/agent-sdk/model-response-metrics.js +1 -0
  376. package/dist/infrastructure/agent-sdk/model-tool-name-mapper.d.ts +13 -0
  377. package/dist/infrastructure/agent-sdk/model-tool-name-mapper.js +1 -0
  378. package/dist/infrastructure/agent-sdk/sdk-constants.d.ts +2 -0
  379. package/dist/infrastructure/agent-sdk/sdk-constants.js +1 -0
  380. package/dist/infrastructure/agent-sdk/tool-calling-completion-client.d.ts +4 -0
  381. package/dist/infrastructure/agent-sdk/tool-calling-completion-client.js +1 -0
  382. package/dist/infrastructure/agent-sdk/tool-calling-model-client.d.ts +11 -0
  383. package/dist/infrastructure/agent-sdk/tool-calling-model-client.js +1 -0
  384. package/dist/infrastructure/cache/cache-policy.d.ts +9 -0
  385. package/dist/infrastructure/cache/cache-policy.js +1 -0
  386. package/dist/infrastructure/cache/file-cache-store.d.ts +25 -0
  387. package/dist/infrastructure/cache/file-cache-store.js +2 -0
  388. package/dist/infrastructure/clipboard/clipboard-adapter-factory.d.ts +11 -0
  389. package/dist/infrastructure/clipboard/clipboard-adapter-factory.js +1 -0
  390. package/dist/infrastructure/clipboard/clipboard-constants.d.ts +1 -0
  391. package/dist/infrastructure/clipboard/clipboard-constants.js +1 -0
  392. package/dist/infrastructure/clipboard/clipboard-policy.d.ts +8 -0
  393. package/dist/infrastructure/clipboard/clipboard-policy.js +1 -0
  394. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.d.ts +10 -0
  395. package/dist/infrastructure/clipboard/clipboard-text-adapter-factory.js +1 -0
  396. package/dist/infrastructure/clipboard/image-normalizer.d.ts +12 -0
  397. package/dist/infrastructure/clipboard/image-normalizer.js +1 -0
  398. package/dist/infrastructure/clipboard/windows-clipboard-adapter.d.ts +7 -0
  399. package/dist/infrastructure/clipboard/windows-clipboard-adapter.js +1 -0
  400. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.d.ts +7 -0
  401. package/dist/infrastructure/clipboard/windows-clipboard-text-adapter.js +1 -0
  402. package/dist/infrastructure/config/config-loader.d.ts +19 -0
  403. package/dist/infrastructure/config/config-loader.js +2 -0
  404. package/dist/infrastructure/config/environment-values.d.ts +2 -0
  405. package/dist/infrastructure/config/environment-values.js +1 -0
  406. package/dist/infrastructure/credentials/composite-credential-store.d.ts +11 -0
  407. package/dist/infrastructure/credentials/composite-credential-store.js +1 -0
  408. package/dist/infrastructure/credentials/encrypted-file-credential-store.d.ts +17 -0
  409. package/dist/infrastructure/credentials/encrypted-file-credential-store.js +3 -0
  410. package/dist/infrastructure/credentials/environment-credential-store.d.ts +11 -0
  411. package/dist/infrastructure/credentials/environment-credential-store.js +1 -0
  412. package/dist/infrastructure/credentials/secret-input.d.ts +7 -0
  413. package/dist/infrastructure/credentials/secret-input.js +3 -0
  414. package/dist/infrastructure/extensions/composite-mcp-config-store.d.ts +9 -0
  415. package/dist/infrastructure/extensions/composite-mcp-config-store.js +1 -0
  416. package/dist/infrastructure/extensions/extension-directory-reader.d.ts +2 -0
  417. package/dist/infrastructure/extensions/extension-directory-reader.js +1 -0
  418. package/dist/infrastructure/extensions/extension-integrity.d.ts +7 -0
  419. package/dist/infrastructure/extensions/extension-integrity.js +1 -0
  420. package/dist/infrastructure/extensions/extension-source-resolver.d.ts +6 -0
  421. package/dist/infrastructure/extensions/extension-source-resolver.js +1 -0
  422. package/dist/infrastructure/extensions/extensions-constants.d.ts +6 -0
  423. package/dist/infrastructure/extensions/extensions-constants.js +1 -0
  424. package/dist/infrastructure/extensions/file-mcp-config-store.d.ts +15 -0
  425. package/dist/infrastructure/extensions/file-mcp-config-store.js +2 -0
  426. package/dist/infrastructure/extensions/hook-runtime.d.ts +18 -0
  427. package/dist/infrastructure/extensions/hook-runtime.js +1 -0
  428. package/dist/infrastructure/extensions/mcp-runtime.d.ts +58 -0
  429. package/dist/infrastructure/extensions/mcp-runtime.js +1 -0
  430. package/dist/infrastructure/extensions/plugin-agent-discovery.d.ts +4 -0
  431. package/dist/infrastructure/extensions/plugin-agent-discovery.js +1 -0
  432. package/dist/infrastructure/extensions/plugin-discovery.d.ts +5 -0
  433. package/dist/infrastructure/extensions/plugin-discovery.js +1 -0
  434. package/dist/infrastructure/extensions/plugin-manager.d.ts +23 -0
  435. package/dist/infrastructure/extensions/plugin-manager.js +2 -0
  436. package/dist/infrastructure/extensions/skill-discovery.d.ts +4 -0
  437. package/dist/infrastructure/extensions/skill-discovery.js +1 -0
  438. package/dist/infrastructure/extensions/skill-installer.d.ts +9 -0
  439. package/dist/infrastructure/extensions/skill-installer.js +1 -0
  440. package/dist/infrastructure/extensions/skill-manager.d.ts +22 -0
  441. package/dist/infrastructure/extensions/skill-manager.js +2 -0
  442. package/dist/infrastructure/extensions/skill-roots.d.ts +19 -0
  443. package/dist/infrastructure/extensions/skill-roots.js +1 -0
  444. package/dist/infrastructure/extensions/skill-tool-executor.d.ts +20 -0
  445. package/dist/infrastructure/extensions/skill-tool-executor.js +2 -0
  446. package/dist/infrastructure/filesystem/atomic-file-store.d.ts +28 -0
  447. package/dist/infrastructure/filesystem/atomic-file-store.js +1 -0
  448. package/dist/infrastructure/filesystem/bounded-file-reader.d.ts +6 -0
  449. package/dist/infrastructure/filesystem/bounded-file-reader.js +1 -0
  450. package/dist/infrastructure/filesystem/bounded-json-reader.d.ts +1 -0
  451. package/dist/infrastructure/filesystem/bounded-json-reader.js +1 -0
  452. package/dist/infrastructure/filesystem/filesystem-constants.d.ts +8 -0
  453. package/dist/infrastructure/filesystem/filesystem-constants.js +1 -0
  454. package/dist/infrastructure/filesystem/fs-errors.d.ts +2 -0
  455. package/dist/infrastructure/filesystem/fs-errors.js +1 -0
  456. package/dist/infrastructure/filesystem/gateway-media-input-reader.d.ts +12 -0
  457. package/dist/infrastructure/filesystem/gateway-media-input-reader.js +1 -0
  458. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.d.ts +25 -0
  459. package/dist/infrastructure/filesystem/local-filesystem-tool-executor.js +3 -0
  460. package/dist/infrastructure/filesystem/path-resolver.d.ts +20 -0
  461. package/dist/infrastructure/filesystem/path-resolver.js +1 -0
  462. package/dist/infrastructure/filesystem/workspace-media-artifact-store.d.ts +13 -0
  463. package/dist/infrastructure/filesystem/workspace-media-artifact-store.js +1 -0
  464. package/dist/infrastructure/logging/daily-rotating-file-writer.d.ts +26 -0
  465. package/dist/infrastructure/logging/daily-rotating-file-writer.js +2 -0
  466. package/dist/infrastructure/logging/log-redactor.d.ts +2 -0
  467. package/dist/infrastructure/logging/log-redactor.js +1 -0
  468. package/dist/infrastructure/logging/logging-constants.d.ts +3 -0
  469. package/dist/infrastructure/logging/logging-constants.js +1 -0
  470. package/dist/infrastructure/logging/logging-policy.d.ts +6 -0
  471. package/dist/infrastructure/logging/logging-policy.js +1 -0
  472. package/dist/infrastructure/logging/structured-logger.d.ts +24 -0
  473. package/dist/infrastructure/logging/structured-logger.js +4 -0
  474. package/dist/infrastructure/memory/file-memory-store.d.ts +37 -0
  475. package/dist/infrastructure/memory/file-memory-store.js +11 -0
  476. package/dist/infrastructure/network/safe-media-downloader.d.ts +23 -0
  477. package/dist/infrastructure/network/safe-media-downloader.js +1 -0
  478. package/dist/infrastructure/observability/tool-execution-logger.d.ts +11 -0
  479. package/dist/infrastructure/observability/tool-execution-logger.js +1 -0
  480. package/dist/infrastructure/platform/host-platform.d.ts +16 -0
  481. package/dist/infrastructure/platform/host-platform.js +1 -0
  482. package/dist/infrastructure/platform/host-process.d.ts +31 -0
  483. package/dist/infrastructure/platform/host-process.js +1 -0
  484. package/dist/infrastructure/platform/platform-constants.d.ts +4 -0
  485. package/dist/infrastructure/platform/platform-constants.js +1 -0
  486. package/dist/infrastructure/platform/platform-paths.d.ts +25 -0
  487. package/dist/infrastructure/platform/platform-paths.js +1 -0
  488. package/dist/infrastructure/platform/process-identity.d.ts +8 -0
  489. package/dist/infrastructure/platform/process-identity.js +1 -0
  490. package/dist/infrastructure/platform/process-termination.d.ts +4 -0
  491. package/dist/infrastructure/platform/process-termination.js +1 -0
  492. package/dist/infrastructure/platform/read-only-executable.d.ts +4 -0
  493. package/dist/infrastructure/platform/read-only-executable.js +1 -0
  494. package/dist/infrastructure/project/file-project-trust-store.d.ts +12 -0
  495. package/dist/infrastructure/project/file-project-trust-store.js +2 -0
  496. package/dist/infrastructure/sdk/chat-completion-adapter.d.ts +8 -0
  497. package/dist/infrastructure/sdk/chat-completion-adapter.js +1 -0
  498. package/dist/infrastructure/sdk/lotagate-client-factory.d.ts +3 -0
  499. package/dist/infrastructure/sdk/lotagate-client-factory.js +1 -0
  500. package/dist/infrastructure/sdk/model-catalog-adapter.d.ts +19 -0
  501. package/dist/infrastructure/sdk/model-catalog-adapter.js +1 -0
  502. package/dist/infrastructure/sdk/sdk-media-gateway-client.d.ts +24 -0
  503. package/dist/infrastructure/sdk/sdk-media-gateway-client.js +1 -0
  504. package/dist/infrastructure/sessions/file-goal-store.d.ts +21 -0
  505. package/dist/infrastructure/sessions/file-goal-store.js +1 -0
  506. package/dist/infrastructure/sessions/file-session-store.d.ts +50 -0
  507. package/dist/infrastructure/sessions/file-session-store.js +4 -0
  508. package/dist/infrastructure/sessions/project-session-paths.d.ts +17 -0
  509. package/dist/infrastructure/sessions/project-session-paths.js +1 -0
  510. package/dist/infrastructure/sessions/session-constants.d.ts +3 -0
  511. package/dist/infrastructure/sessions/session-constants.js +1 -0
  512. package/dist/infrastructure/sessions/session-index.d.ts +16 -0
  513. package/dist/infrastructure/sessions/session-index.js +3 -0
  514. package/dist/infrastructure/sessions/session-journal-health.d.ts +7 -0
  515. package/dist/infrastructure/sessions/session-journal-health.js +1 -0
  516. package/dist/infrastructure/sessions/session-journal.d.ts +22 -0
  517. package/dist/infrastructure/sessions/session-journal.js +6 -0
  518. package/dist/infrastructure/sessions/subagent-journal-store.d.ts +28 -0
  519. package/dist/infrastructure/sessions/subagent-journal-store.js +2 -0
  520. package/dist/infrastructure/shell/shell-tool-executor.d.ts +21 -0
  521. package/dist/infrastructure/shell/shell-tool-executor.js +2 -0
  522. package/dist/infrastructure/tokens/tiktoken-token-estimator.d.ts +18 -0
  523. package/dist/infrastructure/tokens/tiktoken-token-estimator.js +1 -0
  524. package/dist/infrastructure/tokens/token-constants.d.ts +1 -0
  525. package/dist/infrastructure/tokens/token-constants.js +1 -0
  526. package/dist/infrastructure/workspace/workspace-settings-store.d.ts +10 -0
  527. package/dist/infrastructure/workspace/workspace-settings-store.js +4 -0
  528. package/dist/main.d.ts +7 -0
  529. package/dist/main.js +3 -0
  530. package/dist/ports/cache-store.d.ts +10 -0
  531. package/dist/ports/cache-store.js +0 -0
  532. package/dist/ports/chat-model.d.ts +30 -0
  533. package/dist/ports/chat-model.js +0 -0
  534. package/dist/ports/clipboard-adapter.d.ts +7 -0
  535. package/dist/ports/clipboard-adapter.js +0 -0
  536. package/dist/ports/clipboard-text-adapter.d.ts +3 -0
  537. package/dist/ports/clipboard-text-adapter.js +0 -0
  538. package/dist/ports/credential-store.d.ts +7 -0
  539. package/dist/ports/credential-store.js +0 -0
  540. package/dist/ports/goal-store.d.ts +12 -0
  541. package/dist/ports/goal-store.js +0 -0
  542. package/dist/ports/logger.d.ts +8 -0
  543. package/dist/ports/logger.js +0 -0
  544. package/dist/ports/media-gateway-client.d.ts +60 -0
  545. package/dist/ports/media-gateway-client.js +0 -0
  546. package/dist/ports/memory-store.d.ts +26 -0
  547. package/dist/ports/memory-store.js +0 -0
  548. package/dist/ports/model-completion-client.d.ts +8 -0
  549. package/dist/ports/model-completion-client.js +0 -0
  550. package/dist/ports/model-diagnostics.d.ts +17 -0
  551. package/dist/ports/model-diagnostics.js +0 -0
  552. package/dist/ports/project-trust-store.d.ts +12 -0
  553. package/dist/ports/project-trust-store.js +0 -0
  554. package/dist/ports/session-store.d.ts +59 -0
  555. package/dist/ports/session-store.js +0 -0
  556. package/dist/ports/subagent-lifecycle.d.ts +31 -0
  557. package/dist/ports/subagent-lifecycle.js +0 -0
  558. package/dist/ports/tool-activity.d.ts +13 -0
  559. package/dist/ports/tool-activity.js +0 -0
  560. package/dist/presentation/themes/theme.d.ts +19 -0
  561. package/dist/presentation/themes/theme.js +1 -0
  562. package/dist/presentation/tui/agent-initialization-renderer.d.ts +4 -0
  563. package/dist/presentation/tui/agent-initialization-renderer.js +1 -0
  564. package/dist/presentation/tui/context-display.d.ts +21 -0
  565. package/dist/presentation/tui/context-display.js +2 -0
  566. package/dist/presentation/tui/formatters.d.ts +6 -0
  567. package/dist/presentation/tui/formatters.js +1 -0
  568. package/dist/presentation/tui/ink/choice-window.d.ts +5 -0
  569. package/dist/presentation/tui/ink/choice-window.js +1 -0
  570. package/dist/presentation/tui/ink/components/activity-animation.d.ts +3 -0
  571. package/dist/presentation/tui/ink/components/activity-animation.js +1 -0
  572. package/dist/presentation/tui/ink/components/activity-entry.d.ts +6 -0
  573. package/dist/presentation/tui/ink/components/activity-entry.js +1 -0
  574. package/dist/presentation/tui/ink/components/activity-status.d.ts +10 -0
  575. package/dist/presentation/tui/ink/components/activity-status.js +1 -0
  576. package/dist/presentation/tui/ink/components/choice-modal.d.ts +11 -0
  577. package/dist/presentation/tui/ink/components/choice-modal.js +1 -0
  578. package/dist/presentation/tui/ink/components/composer.d.ts +40 -0
  579. package/dist/presentation/tui/ink/components/composer.js +8 -0
  580. package/dist/presentation/tui/ink/components/file-diff.d.ts +6 -0
  581. package/dist/presentation/tui/ink/components/file-diff.js +1 -0
  582. package/dist/presentation/tui/ink/components/modal.d.ts +8 -0
  583. package/dist/presentation/tui/ink/components/modal.js +2 -0
  584. package/dist/presentation/tui/ink/components/shimmer-text.d.ts +8 -0
  585. package/dist/presentation/tui/ink/components/shimmer-text.js +1 -0
  586. package/dist/presentation/tui/ink/components/subagent-activity.d.ts +11 -0
  587. package/dist/presentation/tui/ink/components/subagent-activity.js +1 -0
  588. package/dist/presentation/tui/ink/components/transcript.d.ts +40 -0
  589. package/dist/presentation/tui/ink/components/transcript.js +5 -0
  590. package/dist/presentation/tui/ink/components/welcome-panel.d.ts +6 -0
  591. package/dist/presentation/tui/ink/components/welcome-panel.js +1 -0
  592. package/dist/presentation/tui/ink/lotagate-tui.d.ts +6 -0
  593. package/dist/presentation/tui/ink/lotagate-tui.js +2 -0
  594. package/dist/presentation/tui/ink/markdown-inline-renderer.d.ts +4 -0
  595. package/dist/presentation/tui/ink/markdown-inline-renderer.js +1 -0
  596. package/dist/presentation/tui/ink/markdown-inline.d.ts +13 -0
  597. package/dist/presentation/tui/ink/markdown-inline.js +1 -0
  598. package/dist/presentation/tui/ink/markdown-message.d.ts +6 -0
  599. package/dist/presentation/tui/ink/markdown-message.js +2 -0
  600. package/dist/presentation/tui/ink/markdown-table.d.ts +16 -0
  601. package/dist/presentation/tui/ink/markdown-table.js +1 -0
  602. package/dist/presentation/tui/ink/tui-bridge.d.ts +193 -0
  603. package/dist/presentation/tui/ink/tui-bridge.js +1 -0
  604. package/dist/presentation/tui/terminal-capabilities.d.ts +15 -0
  605. package/dist/presentation/tui/terminal-capabilities.js +1 -0
  606. package/dist/presentation/tui/terminal-mouse.d.ts +5 -0
  607. package/dist/presentation/tui/terminal-mouse.js +1 -0
  608. package/dist/presentation/tui/terminal-screen.d.ts +10 -0
  609. package/dist/presentation/tui/terminal-screen.js +1 -0
  610. package/dist/presentation/tui/tui-agent-event-runner.d.ts +29 -0
  611. package/dist/presentation/tui/tui-agent-event-runner.js +1 -0
  612. package/dist/presentation/tui/tui-agent-turn-controller.d.ts +45 -0
  613. package/dist/presentation/tui/tui-agent-turn-controller.js +1 -0
  614. package/dist/presentation/tui/tui-application-contract.d.ts +11 -0
  615. package/dist/presentation/tui/tui-application-contract.js +1 -0
  616. package/dist/presentation/tui/tui-application.d.ts +61 -0
  617. package/dist/presentation/tui/tui-application.js +3 -0
  618. package/dist/presentation/tui/tui-clipboard-paste-handlers.d.ts +11 -0
  619. package/dist/presentation/tui/tui-clipboard-paste-handlers.js +1 -0
  620. package/dist/presentation/tui/tui-command-context.d.ts +3 -0
  621. package/dist/presentation/tui/tui-command-context.js +0 -0
  622. package/dist/presentation/tui/tui-command-executor.d.ts +38 -0
  623. package/dist/presentation/tui/tui-command-executor.js +4 -0
  624. package/dist/presentation/tui/tui-command-host-factory.d.ts +40 -0
  625. package/dist/presentation/tui/tui-command-host-factory.js +1 -0
  626. package/dist/presentation/tui/tui-context-compaction.d.ts +8 -0
  627. package/dist/presentation/tui/tui-context-compaction.js +1 -0
  628. package/dist/presentation/tui/tui-context-service.d.ts +2 -0
  629. package/dist/presentation/tui/tui-context-service.js +1 -0
  630. package/dist/presentation/tui/tui-extension-loader.d.ts +21 -0
  631. package/dist/presentation/tui/tui-extension-loader.js +1 -0
  632. package/dist/presentation/tui/tui-file-suggestions.d.ts +3 -0
  633. package/dist/presentation/tui/tui-file-suggestions.js +1 -0
  634. package/dist/presentation/tui/tui-goal-controller.d.ts +14 -0
  635. package/dist/presentation/tui/tui-goal-controller.js +1 -0
  636. package/dist/presentation/tui/tui-initial-model.d.ts +3 -0
  637. package/dist/presentation/tui/tui-initial-model.js +1 -0
  638. package/dist/presentation/tui/tui-lifecycle-actions.d.ts +13 -0
  639. package/dist/presentation/tui/tui-lifecycle-actions.js +1 -0
  640. package/dist/presentation/tui/tui-manual-compaction.d.ts +18 -0
  641. package/dist/presentation/tui/tui-manual-compaction.js +1 -0
  642. package/dist/presentation/tui/tui-media-model-selection.d.ts +12 -0
  643. package/dist/presentation/tui/tui-media-model-selection.js +1 -0
  644. package/dist/presentation/tui/tui-prompt-dispatcher.d.ts +16 -0
  645. package/dist/presentation/tui/tui-prompt-dispatcher.js +1 -0
  646. package/dist/presentation/tui/tui-skill-controller.d.ts +11 -0
  647. package/dist/presentation/tui/tui-skill-controller.js +3 -0
  648. package/dist/presentation/tui/tui-tool-approval.d.ts +22 -0
  649. package/dist/presentation/tui/tui-tool-approval.js +1 -0
  650. package/dist/version.d.ts +1 -0
  651. package/dist/version.js +1 -0
  652. package/native-targets.mjs +1 -1
  653. package/package.json +13 -12
  654. package/scripts/install-native.mjs +5 -13
  655. package/skills/architecture-review/SKILL.md +41 -14
  656. package/skills/code-review/SKILL.md +41 -12
  657. package/skills/debugging/SKILL.md +49 -12
  658. package/skills/documentation/SKILL.md +43 -9
  659. package/skills/feature-implementation/SKILL.md +58 -19
  660. package/bin/lotagate.exe +0 -1
  661. package/skills/api-contract-review/SKILL.md +0 -17
  662. package/skills/database-review/SKILL.md +0 -17
  663. package/skills/dependency-review/SKILL.md +0 -16
  664. package/skills/frontend-review/SKILL.md +0 -18
  665. package/skills/incident-response/SKILL.md +0 -18
  666. package/skills/performance-review/SKILL.md +0 -17
  667. package/skills/refactor/SKILL.md +0 -23
  668. package/skills/release-readiness/SKILL.md +0 -16
  669. package/skills/security-review/SKILL.md +0 -16
  670. package/skills/test-plan/SKILL.md +0 -22
  671. package/skills/verify/SKILL.md +0 -13
@@ -0,0 +1,26 @@
1
+ import type { ToolApprovalRequest } from '@lotagate/agent-sdk';
2
+ import type { DesktopExecutionPolicy } from './desktop-execution-policy.js';
3
+ export type DesktopApprovalDecision = {
4
+ decision: 'allow';
5
+ } | {
6
+ decision: 'deny';
7
+ } | {
8
+ decision: 'redirect';
9
+ message: string;
10
+ };
11
+ /** Owns Desktop approval/trust waiters and their AbortSignal lifecycle. */
12
+ export declare class DesktopApprovalBroker {
13
+ private readonly writeEvent;
14
+ private readonly approvals;
15
+ private readonly trusts;
16
+ constructor(writeEvent: (event: string, data: Record<string, unknown>) => Promise<void>);
17
+ waitForApproval(request: ToolApprovalRequest, sessionId: string, turnId: string, signal: AbortSignal, executionBoundary: DesktopExecutionPolicy['isolation'], fallbackReason?: string): Promise<DesktopApprovalDecision>;
18
+ waitForTrust(trustRequestId: string, signal: AbortSignal): Promise<boolean>;
19
+ respondApproval(approvalId: string, decision: DesktopApprovalDecision | boolean): boolean;
20
+ respondTrust(trustRequestId: string, trusted: boolean): boolean;
21
+ close(): void;
22
+ private waitApproval;
23
+ private waitTrust;
24
+ private respondApprovalDecision;
25
+ private respondTrustDecision;
26
+ }
@@ -0,0 +1 @@
1
+ import{randomUUID as l}from"node:crypto";import{actionDisplayName as d,actionKind as v}from"../orchestration/cli-turn-events.js";import{describeApproval as u}from"./desktop-protocol-helpers.js";class m{writeEvent;approvals=new Map;trusts=new Map;constructor(e){this.writeEvent=e}async waitForApproval(e,t,r,o,s,n){const i=l(),a=this.waitApproval(i,o);try{await this.writeEvent("approval.requested",{approvalId:i,turnId:r,sessionId:t,toolName:e.toolName,displayName:d(e.toolName),kind:v(e.toolName,e.toolInfo?.source),detail:u(e),executionBoundary:s,...n===void 0?{}:{fallbackReason:n}})}catch(p){throw this.respondApproval(i,{decision:"deny"}),p}return a}waitForTrust(e,t){return this.waitTrust(e,t)}respondApproval(e,t){return this.respondApprovalDecision(e,t)}respondTrust(e,t){return this.respondTrustDecision(e,t)}close(){for(const e of this.approvals.values())e.resolve({decision:"deny"});for(const e of this.trusts.values())e.resolve(!1);this.approvals.clear(),this.trusts.clear()}waitApproval(e,t){return new Promise(r=>{const o=()=>s({decision:"deny"}),s=n=>{this.approvals.delete(e),t.removeEventListener("abort",o),r(n)};if(t.aborted){s({decision:"deny"});return}t.addEventListener("abort",o,{once:!0}),this.approvals.set(e,{resolve:s,signal:t,onAbort:o})})}waitTrust(e,t){return new Promise(r=>{const o=()=>s(!1),s=n=>{this.trusts.delete(e),t.removeEventListener("abort",o),r(n)};if(t.aborted){s(!1);return}t.addEventListener("abort",o,{once:!0}),this.trusts.set(e,{resolve:s,signal:t,onAbort:o})})}respondApprovalDecision(e,t){const r=this.approvals.get(e);return r===void 0?!1:(r.resolve(typeof t=="boolean"?{decision:t?"allow":"deny"}:t),!0)}respondTrustDecision(e,t){const r=this.trusts.get(e);return r===void 0?!1:(r.resolve(t),!0)}}export{m as DesktopApprovalBroker};
@@ -0,0 +1,33 @@
1
+ import type { AttachmentPayload } from '../../domain/session/attachment.js';
2
+ export interface DesktopAttachmentStoreOptions {
3
+ readonly ttlMs?: number;
4
+ }
5
+ export declare class DesktopAttachmentStore {
6
+ private readonly pending;
7
+ private readonly completed;
8
+ private readonly ttlMs;
9
+ constructor(options?: DesktopAttachmentStoreOptions);
10
+ begin(input: {
11
+ id: string;
12
+ sessionId?: string;
13
+ name: string;
14
+ mimeType: string;
15
+ sizeBytes: number;
16
+ storageName?: string;
17
+ }): void;
18
+ appendChunk(id: string, index: number, encoded: string): void;
19
+ complete(id: string): AttachmentUpload;
20
+ take(ids: readonly string[], sessionId?: string): AttachmentPayload[];
21
+ replace(id: string, upload: AttachmentUpload): void;
22
+ delete(id: string, sessionId?: string): void;
23
+ clear(): void;
24
+ private totalReservedBytes;
25
+ private schedulePendingExpiry;
26
+ private createRetainedAttachment;
27
+ private removePending;
28
+ private removeCompleted;
29
+ private clearExpiryTimer;
30
+ }
31
+ export interface AttachmentUpload extends AttachmentPayload {
32
+ sessionId: string;
33
+ }
@@ -0,0 +1 @@
1
+ import{CLI_ERROR_CODES as i}from"../../domain/errors/error-codes.js";import{CliError as d}from"../../domain/errors/cli-error.js";import{createImageAttachment as c,normalizeImage as l}from"../../infrastructure/clipboard/image-normalizer.js";import{RESOURCE_LIMITS as h}from"../../domain/runtime/resource-limits.js";class E{pending=new Map;completed=new Map;ttlMs;constructor(e={}){if(this.ttlMs=e.ttlMs??h.desktopAttachmentTtlMs,!Number.isSafeInteger(this.ttlMs)||this.ttlMs<=0)throw new RangeError("Desktop attachment TTL must be a positive safe integer.")}begin(e){if(!T(e.id)||!A(e.name)||!g(e.mimeType))throw o(i.ATTACHMENT_INVALID_IMAGE,"Invalid desktop attachment metadata.","The attachment metadata is invalid.");if(!Number.isSafeInteger(e.sizeBytes)||e.sizeBytes<=0||e.sizeBytes>h.maxAttachmentBytes)throw o(i.ATTACHMENT_TOO_LARGE,"Desktop attachment size is outside the allowed range.","The attachment exceeds the maximum allowed size.",!0);if(this.pending.has(e.id)||this.completed.has(e.id))throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment id is already in use.","This attachment has already been uploaded.");if(this.totalReservedBytes()+e.sizeBytes>h.pendingAttachmentTotalBytes||this.pending.size+this.completed.size>=h.pendingAttachments)throw o(i.ATTACHMENT_TOO_LARGE,"Desktop attachment limits exceeded.","Too many or too-large attachments are pending.",!0);const t={id:e.id,sessionId:e.sessionId??"",name:e.name,mimeType:e.mimeType,sizeBytes:e.sizeBytes,...e.storageName===void 0?{}:{storageName:e.storageName},nextIndex:0,receivedBytes:0,chunks:[]};this.pending.set(e.id,t),this.schedulePendingExpiry(t)}appendChunk(e,t,r){const s=this.pending.get(e);if(s===void 0)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment upload was not started.","The attachment upload is not active.");if(!Number.isSafeInteger(t)||t!==s.nextIndex)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment chunk order is invalid.","The attachment upload is out of order.");const n=p(r);if(n.byteLength===0||n.byteLength>h.desktopAttachmentChunkBytes||s.receivedBytes+n.byteLength>s.sizeBytes)throw o(i.ATTACHMENT_TOO_LARGE,"Desktop attachment chunk exceeds its declared size.","The attachment upload is invalid or too large.",!0);s.chunks.push(n),s.receivedBytes+=n.byteLength,s.nextIndex+=1,this.schedulePendingExpiry(s)}complete(e){const t=this.pending.get(e);if(t===void 0)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment upload was not started.","The attachment upload is not active.");if(t.receivedBytes!==t.sizeBytes)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment upload is incomplete.","The attachment upload did not finish.");const r=Buffer.concat(t.chunks),s=t.mimeType.startsWith("image/")?(()=>{const n=l(r,t.mimeType),m=c(n,"file",t.id);return{sessionId:t.sessionId,attachment:{...m,name:t.name,...t.storageName===void 0?{}:{storageName:t.storageName}},bytes:n.bytes}})():{sessionId:t.sessionId,attachment:{id:t.id,name:t.name,mimeType:t.mimeType,sizeBytes:r.byteLength,source:"file",...t.storageName===void 0?{}:{storageName:t.storageName}},bytes:r};return this.removePending(e),this.completed.set(e,this.createRetainedAttachment(s)),s}take(e,t){if(new Set(e).size!==e.length)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment ids must be unique.","An attachment was referenced more than once.");const r=e.map(s=>{const n=this.completed.get(s);if(n===void 0)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment is not complete.","Complete the attachment upload before sending the prompt.");if(t!==void 0&&n.upload.sessionId.length>0&&n.upload.sessionId!==t)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment belongs to another session.","The attachment is not available in this session.");return{attachment:n.upload.attachment,bytes:n.upload.bytes}});return e.forEach(s=>this.removeCompleted(s)),r}replace(e,t){if(!this.completed.has(e))throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment upload was not retained.","The attachment upload is not available.");this.removeCompleted(e),this.completed.set(e,this.createRetainedAttachment(t))}delete(e,t){const r=this.pending.get(e),s=this.completed.get(e),n=r?.sessionId??s?.upload.sessionId;if(t!==void 0&&n!==void 0&&n.length>0&&n!==t)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment belongs to another session.","The attachment is not available in this session.");this.removePending(e),this.removeCompleted(e)}clear(){for(const e of this.pending.values())this.clearExpiryTimer(e.expiryTimer);for(const e of this.completed.values())this.clearExpiryTimer(e.expiryTimer);this.pending.clear(),this.completed.clear()}totalReservedBytes(){let e=0;for(const t of this.pending.values())e+=t.sizeBytes;for(const t of this.completed.values())e+=t.upload.bytes.byteLength;return e}schedulePendingExpiry(e){this.clearExpiryTimer(e.expiryTimer);const t=setTimeout(()=>{this.pending.get(e.id)===e&&this.pending.delete(e.id)},this.ttlMs);t.unref?.(),e.expiryTimer=t}createRetainedAttachment(e){const t={upload:e},r=setTimeout(()=>{this.completed.get(e.attachment.id)===t&&this.completed.delete(e.attachment.id)},this.ttlMs);return r.unref?.(),t.expiryTimer=r,t}removePending(e){const t=this.pending.get(e);t!==void 0&&(this.clearExpiryTimer(t.expiryTimer),this.pending.delete(e))}removeCompleted(e){const t=this.completed.get(e);t!==void 0&&(this.clearExpiryTimer(t.expiryTimer),this.completed.delete(e))}clearExpiryTimer(e){e!==void 0&&clearTimeout(e)}}function p(a){if(!/^[A-Za-z0-9+/]*={0,2}$/u.test(a)||a.length===0||a.length%4!==0)throw o(i.ATTACHMENT_INVALID_IMAGE,"Desktop attachment chunk is not valid Base64.","The attachment upload is invalid.");return Buffer.from(a,"base64")}function T(a){return/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u.test(a)}function A(a){return a.length>0&&a.length<=200&&!a.includes("\0")}function g(a){return a.length<=h.jsonlIdBytes&&/^[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/u.test(a)}function o(a,e,t,r=!1){return new d(a,e,{category:"attachment",userMessage:t,retryable:r})}export{E as DesktopAttachmentStore};
@@ -0,0 +1,2 @@
1
+ import type { DesktopCommandListResult } from './desktop-command-contract.js';
2
+ export declare function getDesktopCommandCatalog(): DesktopCommandListResult;
@@ -0,0 +1 @@
1
+ import{COMMAND_REGISTRY as r}from"../commands/command-runtime.js";import{isDesktopCommandExposed as t}from"./desktop-command-contract.js";function n(){return{commands:r.list("direct").filter(t).map(e)}}function e(m){return{id:m.id,path:m.path,summary:m.summary,...m.arguments===void 0?{}:{arguments:m.arguments},...m.options===void 0?{}:{options:m.options}}}export{n as getDesktopCommandCatalog};
@@ -0,0 +1,26 @@
1
+ import type { CommandActionSpec, CommandArgumentSpec, CommandOptionSpec } from '../commands/command-contract.js';
2
+ export interface DesktopCommandDescriptor {
3
+ readonly id: string;
4
+ readonly path: readonly string[];
5
+ readonly summary: string;
6
+ readonly arguments?: readonly CommandArgumentSpec[];
7
+ readonly options?: readonly CommandOptionSpec[];
8
+ }
9
+ export interface DesktopCommandListResult {
10
+ readonly commands: readonly DesktopCommandDescriptor[];
11
+ }
12
+ export interface DesktopCommandInvocation {
13
+ readonly actionId: string;
14
+ readonly positionals: readonly string[];
15
+ readonly options: Readonly<Record<string, string | boolean>>;
16
+ /** Secrets are transported out-of-band from regular command options. */
17
+ readonly secrets?: Readonly<{
18
+ apiKey?: string;
19
+ }>;
20
+ }
21
+ export interface DesktopCommandExecutionResult {
22
+ readonly accepted: true;
23
+ readonly commandId: string;
24
+ readonly actionId: string;
25
+ }
26
+ export declare function isDesktopCommandExposed(action: CommandActionSpec): boolean;
@@ -0,0 +1 @@
1
+ function s(e){return e.surfaces.includes("direct")&&e.desktop?.exposed!==!1}export{s as isDesktopCommandExposed};
@@ -0,0 +1,17 @@
1
+ import type { CliRuntime } from '../../bootstrap/runtime-factory.js';
2
+ import type { DesktopCommandInvocation } from './desktop-command-contract.js';
3
+ import { type DesktopCommandOutputSink } from './desktop-command-output.js';
4
+ export interface DesktopCommandExecutorOptions {
5
+ readonly runtime: CliRuntime;
6
+ readonly cwd: string;
7
+ readonly invocation: DesktopCommandInvocation;
8
+ readonly signal: AbortSignal;
9
+ readonly output: DesktopCommandOutputSink;
10
+ readonly activity?: DesktopCommandActivitySink;
11
+ readonly onActivityError?: (error: unknown) => void;
12
+ }
13
+ export interface DesktopCommandActivitySink {
14
+ started(key: string, label: string): Promise<void>;
15
+ completed(key: string, isError: boolean): Promise<void>;
16
+ }
17
+ export declare function executeDesktopCommand(options: DesktopCommandExecutorOptions): Promise<number>;
@@ -0,0 +1 @@
1
+ import{executeApplicationCommand as r}from"../commands/application-command-executor.js";import{COMMAND_REGISTRY as a}from"../commands/command-runtime.js";import{parseCommandInvocationForAction as m}from"../commands/command-parser.js";import{CliError as s}from"../../domain/errors/cli-error.js";import{CLI_ERROR_CODES as d}from"../../domain/errors/error-codes.js";import{isDesktopCommandExposed as p}from"./desktop-command-contract.js";import{DesktopCommandOutput as u}from"./desktop-command-output.js";async function b(t){const i=l(t.invocation),o=new u(t.output),e={runtime:t.runtime,cwd:t.cwd,output:o,...t.invocation.secrets===void 0?{}:{secrets:t.invocation.secrets},writableOutput:o.writable,signal:t.signal,...t.activity===void 0?{}:{activity:f(t.activity,t.onActivityError)}};try{const n=await r(i,e);return await o.flush(),n}finally{await o.flush(),o.writable.destroy()}}function l(t){const i=a.get(t.actionId);if(i===void 0||!p(i))throw new s(d.INVALID_ARGUMENT,`Command action '${t.actionId}' is not available through the Desktop protocol.`,{category:"command",userMessage:`The command '${t.actionId}' is not available in the Desktop application.`});const o=new Map(Object.entries(t.options));return m(t.actionId,t.positionals,o,"direct",a)}function f(t,i){return{start(o,e){return c(t.started(o,e),i),{complete:n=>c(t.completed(o,n),i)}}}}function c(t,i){Promise.resolve(t).catch(o=>i?.(o))}export{b as executeDesktopCommand};
@@ -0,0 +1,15 @@
1
+ import { Writable } from 'node:stream';
2
+ import type { CommandOutput } from '../commands/command-output.js';
3
+ export interface DesktopCommandOutputSink {
4
+ write(content: string, structured?: object): Promise<void>;
5
+ }
6
+ /** Adapts existing command output to ordered JSONL command.output events. */
7
+ export declare class DesktopCommandOutput implements CommandOutput {
8
+ private readonly _sink;
9
+ private _pending;
10
+ readonly writable: Writable;
11
+ constructor(_sink: DesktopCommandOutputSink);
12
+ write(value: string): void;
13
+ writeStructured<T extends object>(value: T, fallbackText?: string): void;
14
+ flush(): Promise<void>;
15
+ }
@@ -0,0 +1 @@
1
+ import{Writable as e}from"node:stream";class h{_sink;_pending=Promise.resolve();writable=new e({write:(i,t,n)=>{this.write(String(i)),n()}});constructor(i){this._sink=i}write(i){this._pending=this._pending.then(()=>this._sink.write(i))}writeStructured(i,t){this._pending=this._pending.then(()=>this._sink.write(t??"",i))}async flush(){await this._pending}}export{h as DesktopCommandOutput};
@@ -0,0 +1,19 @@
1
+ export type DesktopPermissionPolicy = 'ask' | 'allowlist' | 'review' | 'autonomous';
2
+ export type DesktopBrowserAccess = 'disabled' | 'read-only' | 'interactive' | 'autonomous';
3
+ export type DesktopBrowserExecution = 'isolated' | 'interactive';
4
+ export interface DesktopExecutionPolicy {
5
+ readonly permissionPolicy: DesktopPermissionPolicy;
6
+ readonly allowedTools?: readonly string[];
7
+ readonly browserAccess: DesktopBrowserAccess;
8
+ readonly browserExecution: DesktopBrowserExecution;
9
+ readonly isolation: 'sandbox' | 'host';
10
+ readonly hostFallback: 'ask' | 'deny' | 'allow';
11
+ readonly timeoutMs: number;
12
+ readonly retryAttempt?: number;
13
+ }
14
+ /**
15
+ * Parses the required Desktop-only execution context at the CLI boundary.
16
+ * Standalone CLI commands use a separate protocol and never provide this
17
+ * object. Unknown fields are ignored so the new contract can grow additively.
18
+ */
19
+ export declare function parseDesktopExecutionPolicy(value: unknown): DesktopExecutionPolicy;
@@ -0,0 +1 @@
1
+ import{RESOURCE_LIMITS as f}from"../../domain/runtime/resource-limits.js";function m(o){if(!a(o))throw new Error("Invalid Desktop execution policy.");const r=e(o.permissionPolicy,["ask","allowlist","review","autonomous"],"permissionPolicy"),t=e(o.browserAccess,["disabled","read-only","interactive","autonomous"],"browserAccess"),n=e(o.browserExecution,["isolated","interactive"],"browserExecution"),d=e(o.isolation,["sandbox","host"],"isolation"),l=e(o.hostFallback,["ask","deny","allow"],"hostFallback"),s=o.allowedTools===void 0?void 0:p(o.allowedTools),w=c(o.timeoutMs,1e4,7200*1e3,"timeoutMs"),i=o.retryAttempt===void 0?void 0:c(o.retryAttempt,0,3,"retryAttempt");return{permissionPolicy:r,...s===void 0?{}:{allowedTools:s},browserAccess:t,browserExecution:n,isolation:d,hostFallback:l,timeoutMs:w,...i===void 0?{}:{retryAttempt:i}}}function p(o){if(!Array.isArray(o)||o.length>128)throw new Error("Invalid Desktop allowedTools.");const r=o.map(t=>{if(typeof t!="string"||t.trim().length===0||Buffer.byteLength(t,"utf8")>f.jsonlIdBytes)throw new Error("Invalid Desktop allowedTools entry.");return t.trim()});if(new Set(r).size!==r.length)throw new Error("Desktop allowedTools must not contain duplicates.");return r}function e(o,r,t){if(typeof o!="string"||!r.includes(o))throw new Error(`Invalid Desktop ${t}.`);return o}function c(o,r,t,n){if(typeof o!="number"||!Number.isSafeInteger(o)||o<r||o>t)throw new Error(`Invalid Desktop ${n}.`);return o}function a(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}export{m as parseDesktopExecutionPolicy};
@@ -0,0 +1,14 @@
1
+ import type { DesktopExtensionService } from './desktop-extension-service.js';
2
+ import type { DesktopRequest } from './desktop-agent-request-parser.js';
3
+ type ExtensionRequest = Extract<DesktopRequest, {
4
+ method: 'extension.listPublicPlugins' | 'extension.resolvePublicPluginSource' | 'extension.readPublicPluginContribution' | 'extension.readDetail' | 'extension.readPluginIcon';
5
+ }>;
6
+ /** Keeps CLI-owned extension request dispatch separate from the agent turn lifecycle. */
7
+ export declare class DesktopExtensionRequestHandler {
8
+ private readonly service;
9
+ private readonly respond;
10
+ private readonly cwd;
11
+ constructor(service: DesktopExtensionService, respond: (request: DesktopRequest, result: unknown) => Promise<void>, cwd: string);
12
+ handle(request: ExtensionRequest): Promise<void>;
13
+ }
14
+ export {};
@@ -0,0 +1 @@
1
+ class e{service;respond;cwd;constructor(i,a,s){this.service=i,this.respond=a,this.cwd=s}async handle(i){switch(i.method){case"extension.listPublicPlugins":return this.respond(i,await this.service.listPublicPlugins(i.params.root));case"extension.resolvePublicPluginSource":return this.respond(i,{path:await this.service.resolvePublicPluginSource(i.params.root,i.params.name)});case"extension.readPublicPluginContribution":return this.respond(i,await this.service.readPublicPluginContribution(i.params.root,i.params.pluginName,i.params.kind,i.params.sourceName));case"extension.readDetail":return this.respond(i,await this.service.readDetail(this.cwd,i.params));case"extension.readPluginIcon":return this.respond(i,await this.service.readPluginIcon(this.cwd,i.params.name,i.params.scope))}}}export{e as DesktopExtensionRequestHandler};
@@ -0,0 +1,44 @@
1
+ type Detail = {
2
+ content: string;
3
+ format: 'json' | 'markdown' | 'text';
4
+ editable: boolean;
5
+ fileName?: string;
6
+ };
7
+ type PublicContribution = {
8
+ kind: 'skill' | 'mcp' | 'hook' | 'agent';
9
+ sourceName: string;
10
+ description: string;
11
+ };
12
+ type PublicPlugin = {
13
+ directory: string;
14
+ name: string;
15
+ displayName?: string;
16
+ version: string;
17
+ description: string;
18
+ author?: string;
19
+ license?: string;
20
+ homepage?: string;
21
+ privacyPolicy?: string;
22
+ termsOfService?: string;
23
+ icon?: string;
24
+ contributions: readonly PublicContribution[];
25
+ };
26
+ /** CLI-owned extension reads exposed only through the Desktop JSONL protocol. */
27
+ export declare class DesktopExtensionService {
28
+ listPublicPlugins(root: string): Promise<readonly PublicPlugin[]>;
29
+ resolvePublicPluginSource(root: string, name: string): Promise<string>;
30
+ readPublicPluginContribution(root: string, pluginName: string, kind: 'skill' | 'mcp' | 'hook', sourceName: string): Promise<Detail>;
31
+ readDetail(cwd: string, input: {
32
+ kind: 'hook' | 'skill' | 'plugin' | 'mcp';
33
+ name: string;
34
+ scope?: 'user' | 'project' | 'plugin' | 'builtin';
35
+ pluginName?: string;
36
+ pluginScope?: 'user' | 'project';
37
+ sourceName?: string;
38
+ }): Promise<Detail>;
39
+ readPluginIcon(cwd: string, name: string, scope: 'user' | 'project'): Promise<{
40
+ mimeType: 'image/svg+xml';
41
+ data: string;
42
+ } | undefined>;
43
+ }
44
+ export {};
@@ -0,0 +1,3 @@
1
+ import{fileURLToPath as I}from"node:url";import d from"node:fs/promises";import n from"node:path";import{PLUGIN_LAYOUT as c}from"../../domain/extensions/plugin-manifest.js";import{PluginDiscovery as j}from"../../infrastructure/extensions/plugin-discovery.js";import{PluginAgentDiscovery as F}from"../../infrastructure/extensions/plugin-agent-discovery.js";import{SkillDiscovery as T}from"../../infrastructure/extensions/skill-discovery.js";import{discoverHooks as A}from"../../infrastructure/extensions/hook-runtime.js";import{loadPluginMcpConfig as R}from"../extensions/plugin-contribution-registry.js";import{readFileBounded as v}from"../../infrastructure/filesystem/bounded-file-reader.js";import{readJsonFileBounded as O}from"../../infrastructure/filesystem/bounded-json-reader.js";import{RESOURCE_LIMITS as x}from"../../domain/runtime/resource-limits.js";import{resolvePlatformPaths as M,resolveProjectConfigPaths as D}from"../../infrastructure/platform/platform-paths.js";const _=2*1024*1024,B=256*1024;class ot{async listPublicPlugins(o){const t=await d.realpath(o),r=await new j().discover([t]);return Promise.all(r.map(async i=>{const s=await P(i.directory),a=await new T().discover([n.join(i.directory,c.skillsDirectory)]),u=await R([i]),p=await A(n.join(i.directory,c.hooksDirectory)),C=await new F().discover(n.join(i.directory,c.agentsDirectory)),$=[...a.map(l=>({kind:"skill",sourceName:l.name,description:l.description})),...u.contributions.map(l=>({kind:"mcp",sourceName:l.sourceName,description:z(u.config[l.qualifiedName]?.config)})),...p.map(l=>({kind:"hook",sourceName:l.id,description:`${l.event} hook`})),...C.map(l=>({kind:"agent",sourceName:l.name,description:l.description}))].sort((l,k)=>l.kind.localeCompare(k.kind)||l.sourceName.localeCompare(k.sourceName));return{directory:n.basename(i.directory),name:i.name,...i.displayName===void 0?{}:{displayName:i.displayName},version:i.version,description:i.description??"No description provided.",...i.author===void 0?{}:{author:i.author},...i.license===void 0?{}:{license:i.license},homepage:i.homepage??"https://lotagate.com/",privacyPolicy:"https://lotagate.com/privacy",termsOfService:"https://lotagate.com/terms",...s===void 0?{}:{icon:`data:${s.mimeType};base64,${s.data}`},contributions:$}}))}async resolvePublicPluginSource(o,t){m(t,"public plugin");const r=await d.realpath(o),i=n.resolve(r,t);w(r,i);const s=await d.lstat(i);if(!s.isDirectory()||s.isSymbolicLink())throw new Error(`Public plugin source is invalid: ${t}.`);const a=await d.realpath(i);w(r,a);const u=await d.lstat(n.join(a,c.markerDirectory,c.manifestFile));if(!u.isFile()||u.isSymbolicLink())throw new Error(`Public plugin manifest is missing: ${t}.`);return a}async readPublicPluginContribution(o,t,r,i){const s=await this.resolvePublicPluginSource(o,t);m(i,r);const a=r==="skill"?{path:n.join(s,c.skillsDirectory,i,"SKILL.md"),format:"markdown"}:r==="hook"?{path:n.join(s,c.hooksDirectory,`${i}.json`),format:"json"}:{path:n.join(s,c.mcpDirectory,`${i}.json`),format:"json"};return await E(s,a.path),{content:r==="mcp"?await S(a.path,i,!0):await f(a.path),format:a.format,editable:!1,...r==="mcp"?{}:{fileName:n.basename(a.path)}}}async readDetail(o,t){if(t.scope==="builtin"&&t.kind==="skill"){m(t.name,"skill");const p=n.join(U(),t.name,"SKILL.md");return await J(p)?{content:await f(p),format:"markdown",editable:!1,fileName:"SKILL.md"}:y()}const r=await d.realpath(o),i=t.scope==="plugin"?t.pluginName===void 0?void 0:await g(r,t.pluginName,t.pluginScope):t.kind==="plugin"&&t.scope!=="builtin"?await g(r,t.name,t.scope==="user"?"user":"project"):void 0;if(t.kind==="plugin"&&t.scope!=="plugin"&&t.scope!=="builtin")return i===void 0?y():N(n.join(i,c.markerDirectory,c.manifestFile),"json",!0);if(t.scope!=="plugin"||i===void 0||t.pluginName===void 0)return y();if(t.kind==="plugin")return N(n.join(i,c.markerDirectory,c.manifestFile),"json",!1);const s=t.sourceName??t.name.split(":").slice(1).join(":");m(s,t.kind);const a=t.kind==="skill"?{path:n.join(i,c.skillsDirectory,s,"SKILL.md"),format:"markdown"}:t.kind==="hook"?{path:n.join(i,c.hooksDirectory,`${s}.json`),format:"json"}:{path:n.join(i,c.mcpDirectory,`${s}.json`),format:"json"};return await E(i,a.path),{content:t.kind==="mcp"?await S(a.path,s,!0):await f(a.path),format:a.format,editable:!1,...t.kind==="mcp"?{}:{fileName:n.basename(a.path)}}}async readPluginIcon(o,t,r){const i=await g(await d.realpath(o),t,r);return i===void 0?void 0:P(i)}}async function g(e,o,t){m(o,"plugin");const r=M(),i=t==="project"?[D(e).pluginsDir]:t==="user"?[r.pluginsDir]:[D(e).pluginsDir,r.pluginsDir];return(await new j().discover(i)).find(a=>a.name===o)?.directory}async function N(e,o,t){return{content:await f(e),format:o,editable:t,fileName:n.basename(e)}}async function f(e){const o=await v(e,_);if(o.truncated)throw new Error("The extension detail is too large to display.");return o.bytes.toString("utf8")}async function S(e,o,t){const r=await O(e,x.mcpConfigBytes);if(!b(r))throw new Error("Extension configuration must be a JSON object.");if(t)return`${JSON.stringify(h(r),null,2)}
2
+ `;if(!b(r[o]))throw new Error(`MCP server ${o} was not found in its configuration file.`);return`${JSON.stringify(h(r[o]),null,2)}
3
+ `}async function P(e){const o=n.join(e,"icon.svg");try{const t=await v(o,B);if(t.truncated)return;const r=t.bytes.toString("utf8");return!/^\s*<svg(?:\s|>)/iu.test(r)||/<script\b|\bon[a-z]+\s*=|javascript:/iu.test(r)?void 0:{mimeType:"image/svg+xml",data:t.bytes.toString("base64")}}catch(t){if(L(t))return;throw t}}async function E(e,o){w(e,n.resolve(e,n.relative(e,o)));const t=await d.lstat(o);if(!t.isFile()||t.isSymbolicLink())throw new Error("Extension contribution is invalid.");w(e,await d.realpath(o))}function y(){return{content:"This item is provided by the CLI and has no editable project file.",format:"text",editable:!1}}function U(){return n.resolve(n.dirname(I(import.meta.url)),"../../../skills")}function m(e,o){if(!/^[a-z0-9][a-z0-9-]{0,63}$/u.test(e))throw new Error(`Invalid ${o} name.`)}function w(e,o){const t=n.relative(e,o);if(t.length===0||t.startsWith("..")||n.isAbsolute(t))throw new Error("Extension path is outside its owning directory.")}function z(e){return e?.type==="stdio"||e?.type==="http"||e?.type==="sse"?`${e.type} MCP server`:"MCP server contribution"}function h(e,o){return typeof e=="string"&&o!==void 0&&/(token|secret|password|api[-_]?key|authorization)/iu.test(o)?"[REDACTED]":Array.isArray(e)?e.map(t=>h(t)):b(e)?Object.fromEntries(Object.entries(e).map(([t,r])=>[t,h(r,t)])):e}function b(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function L(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}async function J(e){try{return(await d.lstat(e)).isFile()}catch(o){if(L(o))return!1;throw o}}export{ot as DesktopExtensionService};
@@ -0,0 +1,33 @@
1
+ import type { BrowserHostRequest, BrowserHostResponse } from './browser-host-tool-executor.js';
2
+ import type { DesktopHostExecutionRequest, DesktopHostExecutionResponse } from './desktop-host-tool-executor.js';
3
+ import type { ComputerHostRequest, ComputerHostResponse } from './computer-host-tool-executor.js';
4
+ import type { JsonLineWriter } from './json-line-writer.js';
5
+ type HostCancel = {
6
+ version: 1;
7
+ type: 'host.cancel';
8
+ requestId: string;
9
+ tool: 'browser' | 'computer' | 'filesystem' | 'shell' | 'git' | 'artifact';
10
+ sessionId: string;
11
+ };
12
+ export type DesktopHostWireMessage = BrowserHostRequest | BrowserHostResponse | DesktopHostExecutionRequest | DesktopHostExecutionResponse | ComputerHostRequest | ComputerHostResponse | HostCancel;
13
+ /** Owns the request/response lifecycle for Desktop-hosted capabilities. */
14
+ export declare class DesktopHostBridge {
15
+ private readonly writer;
16
+ private readonly isStopping;
17
+ private readonly browserRequests;
18
+ private readonly desktopRequests;
19
+ private readonly computerRequests;
20
+ constructor(writer: JsonLineWriter<DesktopHostWireMessage>, isStopping: () => boolean);
21
+ requestBrowser(request: BrowserHostRequest, signal?: AbortSignal): Promise<BrowserHostResponse>;
22
+ requestDesktop(request: DesktopHostExecutionRequest, signal?: AbortSignal): Promise<DesktopHostExecutionResponse>;
23
+ requestComputer(request: ComputerHostRequest, signal?: AbortSignal): Promise<ComputerHostResponse>;
24
+ resolveBrowser(response: BrowserHostResponse): void;
25
+ resolveDesktop(response: DesktopHostExecutionResponse): void;
26
+ resolveComputer(response: ComputerHostResponse): void;
27
+ close(): void;
28
+ private request;
29
+ private resolve;
30
+ private rejectAll;
31
+ private sendCancel;
32
+ }
33
+ export {};
@@ -0,0 +1 @@
1
+ class c{writer;isStopping;browserRequests=new Map;desktopRequests=new Map;computerRequests=new Map;constructor(e,t){this.writer=e,this.isStopping=t}requestBrowser(e,t){return this.request(e,t,this.browserRequests,"Browser action was cancelled.")}requestDesktop(e,t){return this.request(e,t,this.desktopRequests,"Host execution was cancelled.")}requestComputer(e,t){return this.request(e,t,this.computerRequests,"Computer action was cancelled.")}resolveBrowser(e){this.resolve(this.browserRequests,e)}resolveDesktop(e){this.resolve(this.desktopRequests,e)}resolveComputer(e){this.resolve(this.computerRequests,e)}close(){this.rejectAll(this.browserRequests,"The Desktop browser bridge was closed."),this.rejectAll(this.desktopRequests,"The Desktop execution bridge was closed."),this.rejectAll(this.computerRequests,"The Desktop computer bridge was closed.")}request(e,t,s,i){if(this.isStopping())return Promise.reject(new Error("The Desktop host bridge is stopping."));if(t?.aborted===!0)return Promise.reject(new Error(i));const n=new Promise((r,d)=>{const o={resolve:r,reject:d,...t===void 0?{}:{signal:t}};t!==void 0&&(o.onAbort=()=>{s.delete(e.requestId),this.sendCancel(e),d(new Error(i))},t.addEventListener("abort",o.onAbort,{once:!0})),s.set(e.requestId,o)});return n.catch(()=>{}),this.writer.write(e).then(()=>n).finally(()=>{const r=s.get(e.requestId);r!==void 0&&(r.onAbort!==void 0&&r.signal?.removeEventListener("abort",r.onAbort),s.delete(e.requestId))})}resolve(e,t){const s=e.get(t.requestId);s!==void 0&&(s.onAbort!==void 0&&s.signal?.removeEventListener("abort",s.onAbort),e.delete(t.requestId),s.resolve(t))}rejectAll(e,t){for(const s of e.values())s.onAbort!==void 0&&s.signal?.removeEventListener("abort",s.onAbort),s.reject(new Error(t));e.clear()}async sendCancel(e){this.isStopping()||await this.writer.write({version:1,type:"host.cancel",requestId:e.requestId,tool:e.tool,sessionId:e.sessionId}).catch(()=>{})}}export{c as DesktopHostBridge};
@@ -0,0 +1,12 @@
1
+ /** Capability metadata supplied by the Desktop native host during handshake. */
2
+ export interface DesktopHostCapability {
3
+ readonly available: boolean;
4
+ readonly provider: string;
5
+ readonly operations: readonly string[];
6
+ readonly reason?: string;
7
+ }
8
+ export interface DesktopHostCapabilities {
9
+ readonly computer?: DesktopHostCapability;
10
+ }
11
+ export declare function hostCapabilityAvailable(capabilities: DesktopHostCapabilities | undefined, capability: DesktopHostCapability | undefined): boolean;
12
+ export declare function normalizeDesktopHostCapabilities(value: unknown): DesktopHostCapabilities | undefined;
@@ -0,0 +1 @@
1
+ function a(r,n){return r===void 0?n?.available!==!1:n?.available===!0}function s(r){if(!i(r))return;const n=o(r.computer);return{...n===void 0?{}:{computer:n}}}function o(r){if(!i(r)||typeof r.available!="boolean"||typeof r.provider!="string"||r.provider.trim().length===0||!Array.isArray(r.operations))return;const n=r.operations.filter(t=>typeof t=="string"&&t.length>0),e=typeof r.reason=="string"&&r.reason.length>0?r.reason:void 0;return{available:r.available,provider:r.provider,operations:n,...e===void 0?{}:{reason:e}}}function i(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}export{a as hostCapabilityAvailable,s as normalizeDesktopHostCapabilities};
@@ -0,0 +1,76 @@
1
+ import type { ToolDefinition } from '@lotagate/sdk';
2
+ import type { ToolAuthorizationDecision, ToolExecutionContext, ToolExecutor, ToolInfo, ToolResult } from '@lotagate/agent-sdk';
3
+ import type { ToolActivityObserver } from '../../ports/tool-activity.js';
4
+ import type { ToolApprovalRequest } from '@lotagate/agent-sdk';
5
+ import type { FileChangeDiff } from '../../domain/filesystem/file-change-diff.js';
6
+ import { type HostPlatformContext } from '../../infrastructure/platform/host-platform.js';
7
+ export type DesktopHostExecutionTool = 'filesystem' | 'shell' | 'git' | 'artifact';
8
+ export interface DesktopHostExecutionRequest {
9
+ version: 1;
10
+ type: 'host.request';
11
+ requestId: string;
12
+ tool: DesktopHostExecutionTool;
13
+ sessionId: string;
14
+ runId: string;
15
+ action: string;
16
+ params: Record<string, unknown>;
17
+ taskId?: string;
18
+ executionBoundary: 'sandbox' | 'host';
19
+ hostFallback: 'ask' | 'deny' | 'allow';
20
+ projectRoot?: string;
21
+ executionCwd?: string;
22
+ executionWorkspaceId?: string;
23
+ }
24
+ export interface DesktopHostExecutionResponse {
25
+ version: 1;
26
+ type: 'host.response';
27
+ requestId: string;
28
+ tool: DesktopHostExecutionTool;
29
+ ok: boolean;
30
+ environmentId?: string;
31
+ result?: unknown;
32
+ error?: {
33
+ code: string;
34
+ category: string;
35
+ message: string;
36
+ retryable: boolean;
37
+ };
38
+ executionBoundary?: 'sandbox' | 'host';
39
+ fallbackReason?: string;
40
+ fileChange?: FileChangeDiff;
41
+ artifacts?: readonly DesktopArtifactDescriptor[];
42
+ }
43
+ export interface DesktopArtifactDescriptor {
44
+ readonly id: string;
45
+ readonly name: string;
46
+ readonly kind: string;
47
+ readonly sizeBytes: number;
48
+ }
49
+ export type DesktopHostInvoker = (request: DesktopHostExecutionRequest, signal?: AbortSignal) => Promise<DesktopHostExecutionResponse>;
50
+ /**
51
+ * Routes Desktop-only host operations through the versioned host protocol.
52
+ * Standalone CLI callers never provide this executor and continue to use the
53
+ * local filesystem and shell executors.
54
+ */
55
+ export declare class DesktopHostToolExecutor implements ToolExecutor {
56
+ private readonly options;
57
+ private readonly definitions;
58
+ constructor(options: {
59
+ request: DesktopHostInvoker;
60
+ executionBoundary: 'sandbox' | 'host';
61
+ hostFallback: 'ask' | 'deny' | 'allow';
62
+ projectRoot?: string;
63
+ executionCwd?: string;
64
+ executionWorkspaceId?: string;
65
+ executionPlatform?: HostPlatformContext;
66
+ readOnly?: boolean;
67
+ onWrite?: (change: FileChangeDiff) => void | Promise<void>;
68
+ onArtifacts?: (artifacts: readonly DesktopArtifactDescriptor[], context: ToolExecutionContext) => void | Promise<void>;
69
+ onFallbackApproval?: (request: ToolApprovalRequest, reason: string) => boolean | ToolAuthorizationDecision | Promise<boolean | ToolAuthorizationDecision>;
70
+ onActivity?: ToolActivityObserver;
71
+ });
72
+ listTools(): readonly ToolDefinition[];
73
+ getToolInfo(toolName: string): ToolInfo | undefined;
74
+ execute(toolName: string, input: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolResult>;
75
+ private request;
76
+ }
@@ -0,0 +1,2 @@
1
+ import{randomUUID as y}from"node:crypto";import{isReadOnlyShellRequest as b}from"../security/tool-risk-classifier.js";import{resolveWorkspacePath as x}from"../../infrastructure/filesystem/path-resolver.js";import{readOnlyArguments as g,resolveReadOnlyExecutable as E}from"../../infrastructure/platform/read-only-executable.js";import{filesystemToolDefinitions as k,filesystemToolRisk as I}from"../../infrastructure/filesystem/local-filesystem-tool-executor.js";import{shellToolDefinitions as w}from"../../infrastructure/shell/shell-tool-executor.js";import{formatFilesystemActivityName as C,formatShellCommandForDisplay as O}from"../agent/tool-display.js";import{normalizePowerShellScriptInput as R}from"../../infrastructure/platform/host-process.js";import{detectHostPlatform as T}from"../../infrastructure/platform/host-platform.js";class W{options;definitions;constructor(t){this.options=t,this.definitions=[...k(),...w(t.executionBoundary==="sandbox"?"linux-guest":"host"),_()]}listTools(){return this.definitions}getToolInfo(t){if(!this.definitions.some(i=>h(i)===t))return;const o=t==="artifact.publish"?"write":I(t);return{toolName:t,source:t==="shell.exec"?"shell":t==="artifact.publish"?"custom":"filesystem",executorId:t==="artifact.publish"?"desktop-artifact-publisher":"desktop-host-execution",metadata:{boundary:this.options.executionBoundary,...o===void 0?{}:{risk:o}}}}async execute(t,o,r){if(!this.definitions.some(e=>h(e)===t))return{content:`Unknown Desktop host tool: ${t}`,isError:!0};const i=t==="shell.exec"?"shell":t==="artifact.publish"?"artifact":"filesystem";let s;const f=this.options.executionPlatform??T();try{s=t==="shell.exec"?R(o,f,{allowNonWindows:this.options.executionBoundary!=="sandbox"}):o}catch(e){return{content:e instanceof Error?e.message:"Invalid shell.exec PowerShell script.",isError:!0}}const p=t==="shell.exec"?await b(s.command,s.args,r,x,s.cwd,f):!1;if(t==="shell.exec"&&this.options.readOnly&&!p)return{content:"This subagent is limited to read-only shell commands inside the trusted workspace.",isError:!0,metadata:{code:"READ_ONLY_SHELL_REQUIRED"}};if(t==="shell.exec"&&p){const e=s.command,a=this.options.executionBoundary==="sandbox"?e:await E(e,r.workspaceRoot??r.cwd??process.cwd(),f);if(a===void 0)return{content:"Read-only executable is no longer available.",isError:!0};s={...s,command:a,args:g(e,s.args)}}const m=t==="shell.exec"&&typeof s.command=="string"?O(s.command,Array.isArray(s.args)?s.args.filter(e=>typeof e=="string"):[]):C(t,s.path),u=this.options.onActivity?.start({key:`${r.runId}:${t}`,toolName:t,source:i==="artifact"?"custom":i,label:m});try{let e=await this.options.request(this.request(i,t,s,r),r.signal);if(!e.ok&&e.error?.code==="SANDBOX_FALLBACK_REQUIRED"&&this.options.hostFallback==="ask"){const d=this.getToolInfo(t),c=await this.options.onFallbackApproval?.({toolName:t,input:s,context:r,...d===void 0?{}:{toolInfo:d}},e.error.message)??!1;if(typeof c=="boolean"?c:c.decision==="allow")e=await this.options.request({...this.request(i,t,s,r),executionBoundary:"host",hostFallback:"deny"},r.signal);else if(typeof c!="boolean"&&c.decision==="redirect")return u?.complete(!0,{userRedirect:!0}),{content:c.message,isError:!0,metadata:{code:"USER_REDIRECTED_ACTION",boundary:this.options.executionBoundary,userRedirect:!0}}}if(!e.ok)return u?.complete(!0),{content:e.error?.message??"Desktop rejected the execution request.",isError:!0,metadata:{code:e.error?.code??"HOST_EXECUTION_ERROR",boundary:e.executionBoundary??this.options.executionBoundary,retryable:e.error?.retryable??!1}};const a=S(i,e.result);if(a!==void 0){const d={code:a.code,boundary:e.executionBoundary??this.options.executionBoundary,retryable:a.retryable,...a.exitCode===void 0?{}:{exitCode:a.exitCode}};return u?.complete(!0,d),{content:a.message,isError:!0,metadata:d}}const l=e.artifacts??[];return l.length>0&&await this.options.onArtifacts?.(l,r),u?.complete(!1,e.fileChange===void 0?void 0:{fileChange:{path:e.fileChange.path,additions:e.fileChange.additions,deletions:e.fileChange.deletions}}),e.fileChange!==void 0&&await this.options.onWrite?.(e.fileChange),{content:D(e.result,r.maxResultBytes),isError:!1,metadata:{boundary:e.executionBoundary??this.options.executionBoundary,...e.environmentId===void 0?{}:{environmentId:e.environmentId},...e.fallbackReason===void 0?{}:{fallbackReason:e.fallbackReason},...l.length===0?{}:{artifactIds:l.map(d=>d.id)}}}}catch(e){return u?.complete(!0),{content:e instanceof Error?e.message:"Desktop execution failed.",isError:!0,metadata:{boundary:this.options.executionBoundary}}}}request(t,o,r,i){return{version:1,type:"host.request",requestId:y(),tool:t,sessionId:i.sessionId,runId:i.runId,action:o,params:r,executionBoundary:this.options.executionBoundary,hostFallback:this.options.hostFallback,...this.options.projectRoot===void 0?{}:{projectRoot:this.options.projectRoot},...this.options.executionCwd===void 0?{}:{executionCwd:this.options.executionCwd},...this.options.executionWorkspaceId===void 0?{}:{executionWorkspaceId:this.options.executionWorkspaceId},...typeof i.metadata?.taskId=="string"?{taskId:i.metadata.taskId}:{}}}}function _(){return{type:"function",function:{name:"artifact.publish",description:"Publish one completed output file from the execution workspace to the current task artifacts. The path must be workspace-relative and the file must already exist.",parameters:{type:"object",properties:{path:{type:"string",description:"Workspace-relative path of the completed output file."}},required:["path"],additionalProperties:!1}}}}function h(n){return"function"in n?n.function.name:void 0}function D(n,t){const o=typeof n=="string"?n:JSON.stringify(n??null);return Buffer.byteLength(o,"utf8")<=t?o:`${o.slice(0,Math.max(0,t-12))}
2
+ [truncated]`}function S(n,t){if(n!=="shell"||typeof t!="object"||t===null||Array.isArray(t))return;const o=t,r=typeof o.stderr=="string"?o.stderr.trim():"",i=typeof o.stdout=="string"?o.stdout.trim():"";if(o.diskLimitExceeded===!0)return{code:"HOST_EXECUTION_DISK_LIMIT",message:r||"The sandbox workspace disk limit was exceeded while the command was running.",retryable:!1};if(o.processLimitExceeded===!0)return{code:"HOST_EXECUTION_PROCESS_LIMIT",message:r||"The sandbox process limit was exceeded while the command was running.",retryable:!1};if(o.cancelled===!0)return{code:"HOST_EXECUTION_CANCELLED",message:r||"Desktop host execution was cancelled.",retryable:!1};if(o.timedOut===!0)return{code:"HOST_EXECUTION_TIMEOUT",message:r||"Desktop host execution timed out.",retryable:!0};if(o.error===!0)return{code:"HOST_EXECUTION_PROCESS_ERROR",message:r||"Desktop host process failed to start or communicate.",retryable:!0};if(Object.hasOwn(o,"exitCode")&&o.exitCode!==0){const s=typeof o.exitCode=="number"?o.exitCode:null;return{code:"HOST_COMMAND_FAILED",message:r||i||`Desktop host command exited with code ${String(s)}.`,retryable:!1,exitCode:s}}}export{W as DesktopHostToolExecutor};
@@ -0,0 +1,20 @@
1
+ import type { IntentLifecycleEvent } from '../intent/intent-run-controller.js';
2
+ export interface DesktopIntentEventWriterOptions {
3
+ readonly writeEvent: (event: string, data: Record<string, unknown>) => Promise<void>;
4
+ readonly log: (message: string, details: Record<string, unknown>) => void;
5
+ }
6
+ /** Projects host-owned intent state into the stable Desktop event contract. */
7
+ export declare class DesktopIntentEventWriter {
8
+ private readonly options;
9
+ private readonly progress;
10
+ constructor(options: DesktopIntentEventWriterOptions);
11
+ clear(turnId: string): void;
12
+ write(event: IntentLifecycleEvent, sessionId: string, turnId: string): Promise<void>;
13
+ private writeCompiled;
14
+ private writeEvidence;
15
+ private writeVerificationRequired;
16
+ private writeBlocked;
17
+ private nextVersion;
18
+ private setActiveStep;
19
+ private evidenceStep;
20
+ }
@@ -0,0 +1 @@
1
+ class o{options;progress=new Map;constructor(i){this.options=i}clear(i){this.progress.delete(i)}async write(i,t,e){if(this.options.log("Intent lifecycle updated.",{lifecycle:i.type,intentId:i.contract.id,sessionId:t,turnId:e,...i.type==="intent.evidence"?{evidenceKind:i.evidence.kind,evidenceStatus:i.evidence.status}:{},...i.type==="intent.verification.required"||i.type==="intent.blocked"?{missingCount:i.missing.length}:{}}),i.type==="intent.compiled")return this.writeCompiled(i,t,e);if(i.type==="intent.evidence")return this.writeEvidence(i,t,e);if(i.type==="intent.verification.required")return this.writeVerificationRequired(i,t,e);if(i.type==="intent.blocked")return this.writeBlocked(i,t,e);await this.options.writeEvent("intent.completed",{turnId:e,sessionId:t,intentId:i.contract.id});for(const n of i.contract.steps)await this.options.writeEvent("work.task.completed",{turnId:e,sessionId:t,planId:i.contract.id,version:this.nextVersion(e),stepId:n.id});await this.options.writeEvent("work.plan.completed",{turnId:e,sessionId:t,planId:i.contract.id,version:this.nextVersion(e)}),this.clear(e)}async writeCompiled(i,t,e){const n=i.contract.steps[0]?.id;n!==void 0&&(this.progress.set(e,{version:1,activeStepId:n}),await this.options.writeEvent("intent.compiled",{turnId:e,sessionId:t,contract:i.contract}),await this.options.writeEvent("work.plan.created",{turnId:e,sessionId:t,planId:i.contract.id,version:1,goal:i.contract.objective,language:"und",totalSteps:i.contract.steps.length,steps:i.contract.steps.map((c,r)=>({index:r,id:c.id,title:c.title,description:c.title,dependencies:[],scope:[],acceptanceCriteria:c.acceptanceCriteria,verificationHints:c.requiresVerification?["Host-observed verification required"]:[],evidenceIds:[],status:r===0?"active":"queued"}))}))}async writeEvidence(i,t,e){const n=this.evidenceStep(e,i.contract,i.evidence.kind);await this.options.writeEvent("intent.evidence.recorded",{turnId:e,sessionId:t,intentId:i.contract.id,evidence:i.evidence}),await this.options.writeEvent("work.evidence.recorded",{turnId:e,sessionId:t,planId:i.contract.id,version:this.nextVersion(e),evidence:{id:i.evidence.id,stepId:n,kind:i.evidence.kind,summary:i.evidence.summary,status:i.evidence.status,...i.evidence.command===void 0?{}:{command:i.evidence.command},...i.evidence.paths===void 0?{}:{paths:i.evidence.paths},...i.evidence.exitCode===void 0?{}:{exitCode:i.evidence.exitCode},createdAt:i.evidence.timestamp}})}async writeVerificationRequired(i,t,e){await this.options.writeEvent("intent.verification.required",{turnId:e,sessionId:t,intentId:i.contract.id,missing:i.missing});const n=i.contract.steps.find(c=>c.requiresVerification);n!==void 0&&(this.setActiveStep(e,n.id),await this.options.writeEvent("work.task.started",{turnId:e,sessionId:t,planId:i.contract.id,version:this.nextVersion(e),stepId:n.id}))}async writeBlocked(i,t,e){await this.options.writeEvent("intent.blocked",{turnId:e,sessionId:t,intentId:i.contract.id,missing:i.missing}),await this.options.writeEvent("work.plan.blocked",{turnId:e,sessionId:t,planId:i.contract.id,version:this.nextVersion(e),reason:i.missing.join(", ")}),this.clear(e)}nextVersion(i){const t=this.progress.get(i);return t===void 0?1:(t.version+=1,t.version)}setActiveStep(i,t){const e=this.progress.get(i);e!==void 0&&(e.activeStepId=t)}evidenceStep(i,t,e){return e!=="read"?t.steps.find(n=>n.requiresVerification)?.id??t.steps.at(-1)?.id??t.steps[0].id:this.progress.get(i)?.activeStepId??t.steps[0].id}}export{o as DesktopIntentEventWriter};
@@ -0,0 +1,10 @@
1
+ import type { AgentEvent } from '@lotagate/agent-sdk';
2
+ import type { McpRuntimeEvent } from '../../infrastructure/extensions/mcp-runtime.js';
3
+ type DesktopMcpEvent = Extract<AgentEvent, {
4
+ type: 'mcp.server.status' | 'mcp.tool.catalog.updated';
5
+ }> | McpRuntimeEvent;
6
+ export declare function desktopMcpEvent(event: DesktopMcpEvent, sessionId: string, turnId: string): {
7
+ name: string;
8
+ data: Record<string, unknown>;
9
+ };
10
+ export {};
@@ -0,0 +1 @@
1
+ function t(r,o,a){if(r.type==="mcp.tool.catalog.updated")return{name:"mcp.tool.catalog.updated",data:{sessionId:o,turnId:a,serverId:r.serverId,toolCount:"toolCount"in r?r.toolCount:r.tools.length,...r.error===void 0?{}:{error:u(r.error),retryable:!0}}};const s=r.summary.status==="closed"?"disconnected":r.summary.status==="created"?"connecting":r.summary.status;return{name:`mcp.server.${s}`,data:{sessionId:o,turnId:a,serverId:r.summary.serverId,status:s,...!("latencyMs"in r.summary)||r.summary.latencyMs===void 0?{}:{latencyMs:r.summary.latencyMs},...r.summary.protocolEra===void 0?{}:{protocolEra:r.summary.protocolEra},...r.summary.protocolVersion===void 0?{}:{protocolVersion:r.summary.protocolVersion},...r.summary.error===void 0?{}:{error:u(r.summary.error),retryable:!0}}}}function u(r){return r.message.replace(/(api[-_ ]?key|authorization|bearer|token|password)\s*[:=]\s*[^\s,;]+/giu,"$1=[REDACTED]").slice(0,1024)}export{t as desktopMcpEvent};
@@ -0,0 +1,2 @@
1
+ import type { SubagentLifecycleEvent } from '../../ports/subagent-lifecycle.js';
2
+ export declare function subagentDesktopPayload(event: SubagentLifecycleEvent, turnId?: string): Record<string, unknown>;
@@ -0,0 +1,2 @@
1
+ function u(d,s){return{...s===void 0?{}:{turnId:s},sessionId:d.sessionId,id:d.id,displayName:d.displayName,task:o(d.task,16384),mode:d.mode,model:d.model,status:d.status,background:d.background,timestamp:d.timestamp,...d.durationMs===void 0?{}:{durationMs:d.durationMs},...d.summary===void 0?{}:{summary:o(d.summary,24576)},...d.lastAction===void 0?{}:{lastAction:d.lastAction},...d.handoff===void 0?{}:{handoff:d.handoff}}}function o(d,s){const a=Buffer.from(d,"utf8");return a.byteLength<=s?d:`${a.subarray(0,s).toString("utf8")}
2
+ [truncated]`}export{u as subagentDesktopPayload};
@@ -0,0 +1,13 @@
1
+ import type { ToolApprovalRequest } from '@lotagate/agent-sdk';
2
+ import type { SessionMetadata } from '../../domain/session/session.js';
3
+ import type { CliApprovalMode } from '../security/tool-approval-service.js';
4
+ import type { DesktopExecutionPolicy } from './desktop-execution-policy.js';
5
+ export declare function desktopApprovalMode(policy: DesktopExecutionPolicy['permissionPolicy']): CliApprovalMode;
6
+ export declare function toDesktopError(error: unknown): {
7
+ code: string;
8
+ category: string;
9
+ message: string;
10
+ retryable: boolean;
11
+ };
12
+ export declare function sessionResult(session: SessionMetadata): Record<string, unknown>;
13
+ export declare function describeApproval(request: ToolApprovalRequest): Record<string, unknown>;
@@ -0,0 +1 @@
1
+ import{asCliError as s}from"../../domain/errors/cli-error.js";import{formatShellCommandForDisplay as p,formatToolActivityName as c}from"../agent/tool-display.js";function l(e){return e==="allowlist"?"auto":e==="review"?"review":e==="autonomous"?"autonomous":"ask"}function f(e){if(typeof e=="object"&&e!==null){const t=e;if(typeof t.code=="string"&&typeof t.category=="string"&&typeof t.userMessage=="string"&&typeof t.retryable=="boolean")return{code:t.code,category:t.category,message:t.userMessage,retryable:t.retryable}}const r=s(e);return{code:r.code,category:r.category,message:r.userMessage,retryable:r.retryable}}function y(e){return{session:e}}function g(e){if(e.toolName==="filesystem.write")return{summary:`Write workspace file: ${a(e.input.path)}`,path:a(e.input.path)};if(e.toolName==="shell.exec"){const r=typeof e.input.command=="string"?e.input.command:"",t=Array.isArray(e.input.args)?e.input.args.filter(i=>typeof i=="string"):[],o=typeof e.input.script=="string"?a(e.input.script):void 0,n=o===void 0?t:[...t,"-Command",o];return{summary:`Run command: ${p(r,n,240)}`,command:r,args:t,...o===void 0?{}:{script:o}}}return{summary:`This ${c(e.toolName)} operation may change workspace or external state.`}}function a(e){return String(e??"").replace(/Bearer\s+[^\s]+/giu,"Bearer [REDACTED]").replace(/sk-[A-Za-z0-9_-]{8,}/gu,"[REDACTED]").slice(0,240)}export{g as describeApproval,l as desktopApprovalMode,y as sessionResult,f as toDesktopError};
@@ -0,0 +1,31 @@
1
+ import type { Writable } from 'node:stream';
2
+ export type JsonLineDelivery = 'reliable' | 'best-effort';
3
+ export interface JsonLineWriteOptions {
4
+ readonly delivery?: JsonLineDelivery;
5
+ }
6
+ export interface JsonLineWriterOptions {
7
+ readonly maxQueuedEntries?: number;
8
+ readonly maxQueuedBytes?: number;
9
+ }
10
+ export declare function waitForWritableDrain(output: Writable): Promise<void>;
11
+ /** Serializes protocol messages in order and applies Writable backpressure. */
12
+ export declare class JsonLineWriter<T> {
13
+ private readonly output;
14
+ private tail;
15
+ private activeEntries;
16
+ private activeBytes;
17
+ private waitingBytes;
18
+ private readonly waiting;
19
+ private closed;
20
+ private readonly maxQueuedEntries;
21
+ private readonly maxQueuedBytes;
22
+ constructor(output: Writable, options?: JsonLineWriterOptions);
23
+ write(value: T, options?: JsonLineWriteOptions): Promise<void>;
24
+ flush(): Promise<void>;
25
+ close(error?: Error): void;
26
+ private schedule;
27
+ private readonly complete;
28
+ private admitWaiting;
29
+ private canSchedule;
30
+ private canWait;
31
+ }
@@ -0,0 +1,2 @@
1
+ import{RESOURCE_LIMITS as c}from"../../domain/runtime/resource-limits.js";function h(i){return i.destroyed||i.writableEnded?Promise.reject(new Error("The protocol output is closed.")):new Promise((e,t)=>{const s=()=>{i.removeListener("drain",r),i.removeListener("error",o),i.removeListener("close",n),i.removeListener("finish",n)},r=()=>{s(),e()},o=a=>{s(),t(a)},n=()=>{s(),t(new Error("The protocol output is closed."))};i.once("drain",r),i.once("error",o),i.once("close",n),i.once("finish",n),(i.destroyed||i.writableEnded)&&n()})}class u{output;tail=Promise.resolve();activeEntries=0;activeBytes=0;waitingBytes=0;waiting=[];closed=!1;maxQueuedEntries;maxQueuedBytes;constructor(e,t={}){this.output=e,this.maxQueuedEntries=t.maxQueuedEntries??c.protocolWriteQueueEntries,this.maxQueuedBytes=t.maxQueuedBytes??c.protocolWriteQueueBytes}write(e,t={}){const s=`${JSON.stringify(e)}
2
+ `,r=Buffer.byteLength(s,"utf8"),o=t.delivery??"reliable";return this.closed?Promise.reject(new Error("The protocol writer is closed.")):this.waiting.length>0||!this.canSchedule(r)?o==="best-effort"?Promise.reject(new Error("The protocol output queue is full.")):this.canWait(r)?new Promise((n,a)=>{this.waiting.push({serialized:s,bytes:r,resolve:n,reject:a}),this.waitingBytes+=r}):Promise.reject(new Error("The protocol output queue limit was exceeded.")):this.schedule(s,r)}async flush(){for(;;){const e=this.tail;if(await e,await new Promise(t=>setImmediate(t)),e===this.tail&&this.activeEntries===0&&this.waiting.length===0)return}}close(e=new Error("The protocol writer is closed.")){this.closed=!0;const t=this.waiting.splice(0);this.waitingBytes=0;for(const s of t)s.reject(e)}schedule(e,t){this.activeEntries+=1,this.activeBytes+=t;const s=this.tail.then(async()=>{this.output.write(e)||await h(this.output)});return this.tail=s.catch(()=>{}),s.then(()=>this.complete(t),()=>this.complete(t)),s}complete=e=>{this.activeEntries-=1,this.activeBytes-=e,this.admitWaiting()};admitWaiting(){for(;this.waiting.length>0;){const e=this.waiting[0];if(!this.canSchedule(e.bytes))return;this.waiting.shift(),this.waitingBytes-=e.bytes,this.schedule(e.serialized,e.bytes).then(e.resolve,e.reject)}}canSchedule(e){return this.activeEntries<this.maxQueuedEntries&&this.activeBytes+e<=this.maxQueuedBytes}canWait(e){return this.activeEntries+this.waiting.length<this.maxQueuedEntries&&this.activeBytes+this.waitingBytes+e<=this.maxQueuedBytes}}export{u as JsonLineWriter,h as waitForWritableDrain};
@@ -0,0 +1,3 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ import type { createCompositionRoot } from '../../bootstrap/composition-root.js';
3
+ export declare function runAgentCommand(positionals: readonly string[], runtime: ReturnType<typeof createCompositionRoot>, cwd: string, stdin: Readable, stdout: Writable, signal?: AbortSignal): Promise<number>;
@@ -0,0 +1,3 @@
1
+ import{AuthenticationService as O}from"../auth/authentication-service.js";import{JsonlProtocolRunner as _}from"./jsonl-protocol.js";import{createLotaGateClient as b}from"../../infrastructure/sdk/lotagate-client-factory.js";import{CliError as C}from"../../domain/errors/cli-error.js";import{CLI_ERROR_CODES as d}from"../../domain/errors/error-codes.js";import{prepareCliAgent as v}from"../agent/cli-agent-execution-service.js";import{AgentRunTracker as P}from"../agent/agent-run-tracker.js";import{loadExecutionConfig as S}from"../config/execution-config.js";import{agentLimitNotice as T,classifyAgentLimit as D}from"../agent/agent-limit.js";import{runDesktopAgentCommand as I}from"./desktop-agent-command.js";import{createContextManagement as F}from"../agent/context-compaction.js";import{formatContinuationCheckpoint as U}from"../agent/continuation-checkpoint.js";import{resolveModelContextWindow as G}from"../model/model-context-window.js";async function oe(k,t,i,h,w,y){const N=k[0]??"stdio";if(N==="desktop")return I(t,i,h,w,y);if(N!=="stdio")throw new C(d.INVALID_ARGUMENT,"Unsupported agent action.",{category:"arguments",userMessage:"Use `lotagate agent stdio` or `lotagate agent desktop`."});const s=await S(t,i);if(s.config.model===null)throw new C(d.MODEL_NOT_FOUND,"No model is selected.",{category:"model",userMessage:"Select a model before running the stdio agent."});const M=s.config.profile??O.defaultProfileName(),x=await t.auth.requireCredential(M);return(await new _(async function*(m,L){const n=m.params.model??s.config.model;t.logger.info("Protocol agent request started.",{model:n,promptLength:m.params.prompt.length});const a=new P,E=b(x.profile,x.apiKey),R=await G(t,n,M),A=o=>{a.observeModel(o),t.logger.debug("Model turn completed.",{model:o.model,stream:o.stream,contentLength:o.contentLength,toolCallCount:o.toolCallCount,toolNames:o.toolNames,finishReason:o.finishReason})},f=await v({runtime:t,projectRoot:i,executionCwd:i,model:n,client:E,profile:"protocol-safe",approvalMode:s.config.approvalMode,onModelComplete:A,contextManagement:F({client:E,model:n,...R===void 0?{}:{contextWindow:R},onSummaryFailure:o=>t.logger.warn("Context summarization failed; using fallback summary.",{reason:o instanceof Error?o.message:String(o)}),continuationContext:()=>U({snapshot:a.snapshot()})})});let g=!1,l="",r,c;try{const o=await f.buildInput(m.params.prompt);for await(const e of f.run({input:o.input,userInput:o.userInput,...o.workspaceContext===void 0?{}:{workspaceContext:o.workspaceContext},model:n,signal:L}))if(a.observe(e),e.type==="tool.called"&&t.logger.info("Agent tool called.",{toolName:e.toolName}),e.type==="tool.completed"&&t.logger.info("Agent tool completed.",{toolName:e.toolName,isError:e.isError}),e.type==="model.delta"&&e.content.length>0?(g=!0,l+=e.content,yield{type:"delta",content:e.content}):e.type==="session.completed"&&(r=e.content),e.type==="session.failed"){const p=D(e.error);if(p===void 0)throw e.error;c=T(p);break}if(c!==void 0){const e=l.length===0?c:`
2
+
3
+ ${c}`;g=!0,l+=e,r=l,yield{type:"delta",content:e}}const u=r===void 0||r.trim().length===0?l:r;if(u.trim().length===0){const e=a.snapshot();e.toolCalls>0&&a.markStuck();const p=e.toolCalls>0?d.MODEL_EMPTY_FINAL:d.MODEL_PROTOCOL_EMPTY_RESPONSE;throw new C(p,"Agent completed without a final text response.",{category:"model",userMessage:"The model completed without a final text response.",retryable:!0,details:{toolCalls:e.toolCalls,toolCompletions:e.toolCompletions,toolNames:e.toolNames,finishReason:e.lastFinishReason}})}g||(yield{type:"delta",content:u}),yield{type:"completed",content:u},t.logger.info("Protocol agent request completed.",{model:n})}finally{await f.close()}}).run(h,w,y)).errorCount===0?0:1}export{oe as runAgentCommand};