@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,56 @@
1
+ export type ProjectMarker = {
2
+ readonly name: string;
3
+ readonly markers: readonly string[];
4
+ readonly extensions: readonly string[];
5
+ };
6
+ export type FrameworkMarker = {
7
+ readonly label: string;
8
+ readonly packages?: readonly string[];
9
+ readonly files?: readonly string[];
10
+ };
11
+ export declare const CONFIG_FILE_NAMES: readonly ["package.json", "tsconfig.json", "jsconfig.json", "pyproject.toml", "setup.cfg", "setup.py", "requirements.txt", "Pipfile", "Cargo.toml", "go.mod", "pom.xml", "build.gradle", "build.gradle.kts", "Gemfile", "composer.json", "Makefile", "CMakeLists.txt", "Dockerfile", "vitest.config.ts", "vitest.config.js", "jest.config.ts", "jest.config.js", "playwright.config.ts", "playwright.config.js", "pytest.ini", "tox.ini", "eslint.config.mjs", "vite.config.ts", "electron.vite.config.ts", "pnpm-workspace.yaml", "turbo.json"];
12
+ export declare const PROJECT_MARKERS: readonly ProjectMarker[];
13
+ export declare const FRAMEWORK_MARKERS: readonly FrameworkMarker[];
14
+ export declare const PACKAGE_MANAGERS: readonly [readonly ["package-lock.json", "npm"], readonly ["pnpm-lock.yaml", "pnpm"], readonly ["yarn.lock", "Yarn"], readonly ["bun.lockb", "Bun"], readonly ["bun.lock", "Bun"], readonly ["uv.lock", "uv"], readonly ["poetry.lock", "Poetry"], readonly ["Pipfile.lock", "Pipenv"], readonly ["Cargo.lock", "Cargo"], readonly ["go.sum", "Go modules"], readonly ["Gemfile.lock", "Bundler"], readonly ["composer.lock", "Composer"]];
15
+ export declare const SOURCE_ROOT_NAMES: readonly ["src", "app", "lib", "test", "tests", "packages", "apps", "cmd", "internal", "pkg", "crates", "components"];
16
+ export declare const TEST_RUNNER_MARKERS: readonly [{
17
+ readonly label: "Vitest";
18
+ readonly packages: readonly ["vitest"];
19
+ readonly scriptTokens: readonly ["vitest"];
20
+ readonly files: readonly ["vitest.config.ts", "vitest.config.js"];
21
+ }, {
22
+ readonly label: "Jest";
23
+ readonly packages: readonly ["jest"];
24
+ readonly scriptTokens: readonly ["jest"];
25
+ readonly files: readonly ["jest.config.ts", "jest.config.js"];
26
+ }, {
27
+ readonly label: "Playwright";
28
+ readonly packages: readonly ["@playwright/test"];
29
+ readonly scriptTokens: readonly ["playwright"];
30
+ readonly files: readonly ["playwright.config.ts", "playwright.config.js"];
31
+ }, {
32
+ readonly label: "pytest";
33
+ readonly packages: readonly [];
34
+ readonly scriptTokens: readonly ["pytest"];
35
+ readonly files: readonly ["pytest.ini", "tox.ini"];
36
+ }, {
37
+ readonly label: "Cargo test";
38
+ readonly packages: readonly [];
39
+ readonly scriptTokens: readonly [];
40
+ readonly files: readonly ["Cargo.toml"];
41
+ }, {
42
+ readonly label: "Go test";
43
+ readonly packages: readonly [];
44
+ readonly scriptTokens: readonly [];
45
+ readonly files: readonly ["go.mod"];
46
+ }, {
47
+ readonly label: "Maven test";
48
+ readonly packages: readonly [];
49
+ readonly scriptTokens: readonly ["mvn", "maven"];
50
+ readonly files: readonly ["pom.xml"];
51
+ }, {
52
+ readonly label: "Gradle test";
53
+ readonly packages: readonly [];
54
+ readonly scriptTokens: readonly ["gradle"];
55
+ readonly files: readonly ["build.gradle", "build.gradle.kts"];
56
+ }];
@@ -0,0 +1 @@
1
+ const e=["package.json","tsconfig.json","jsconfig.json","pyproject.toml","setup.cfg","setup.py","requirements.txt","Pipfile","Cargo.toml","go.mod","pom.xml","build.gradle","build.gradle.kts","Gemfile","composer.json","Makefile","CMakeLists.txt","Dockerfile","vitest.config.ts","vitest.config.js","jest.config.ts","jest.config.js","playwright.config.ts","playwright.config.js","pytest.ini","tox.ini","eslint.config.mjs","vite.config.ts","electron.vite.config.ts","pnpm-workspace.yaml","turbo.json"],s=[{name:"TypeScript",markers:["tsconfig.json"],extensions:[".ts",".tsx"]},{name:"JavaScript/JSX",markers:["package.json"],extensions:[".js",".jsx",".mjs",".cjs"]},{name:"Python",markers:["pyproject.toml","setup.py","requirements.txt","Pipfile"],extensions:[".py"]},{name:"Rust",markers:["Cargo.toml"],extensions:[".rs"]},{name:"Go",markers:["go.mod"],extensions:[".go"]},{name:"Java/Kotlin",markers:["pom.xml","build.gradle","build.gradle.kts"],extensions:[".java",".kt",".kts"]},{name:"Ruby",markers:["Gemfile"],extensions:[".rb"]},{name:"PHP",markers:["composer.json"],extensions:[".php"]},{name:"C/C++",markers:["CMakeLists.txt"],extensions:[".c",".h",".cc",".cpp",".cxx",".hpp"]},{name:"C#",markers:[],extensions:[".cs",".csproj",".sln"]}],t=[{label:"React",packages:["react","react-dom"]},{label:"Electron",packages:["electron"]},{label:"Vite",packages:["vite"]},{label:"Next.js",packages:["next"]},{label:"Express",packages:["express"]},{label:"Angular",packages:["@angular/core"]},{label:"Vue",packages:["vue"]},{label:"Svelte",packages:["svelte"]},{label:"Django",files:["manage.py"]},{label:"FastAPI",packages:["fastapi"]},{label:"Flask",packages:["flask"]},{label:"Rails",files:["bin/rails"]}],a=[["package-lock.json","npm"],["pnpm-lock.yaml","pnpm"],["yarn.lock","Yarn"],["bun.lockb","Bun"],["bun.lock","Bun"],["uv.lock","uv"],["poetry.lock","Poetry"],["Pipfile.lock","Pipenv"],["Cargo.lock","Cargo"],["go.sum","Go modules"],["Gemfile.lock","Bundler"],["composer.lock","Composer"]],o=["src","app","lib","test","tests","packages","apps","cmd","internal","pkg","crates","components"],l=[{label:"Vitest",packages:["vitest"],scriptTokens:["vitest"],files:["vitest.config.ts","vitest.config.js"]},{label:"Jest",packages:["jest"],scriptTokens:["jest"],files:["jest.config.ts","jest.config.js"]},{label:"Playwright",packages:["@playwright/test"],scriptTokens:["playwright"],files:["playwright.config.ts","playwright.config.js"]},{label:"pytest",packages:[],scriptTokens:["pytest"],files:["pytest.ini","tox.ini"]},{label:"Cargo test",packages:[],scriptTokens:[],files:["Cargo.toml"]},{label:"Go test",packages:[],scriptTokens:[],files:["go.mod"]},{label:"Maven test",packages:[],scriptTokens:["mvn","maven"],files:["pom.xml"]},{label:"Gradle test",packages:[],scriptTokens:["gradle"],files:["build.gradle","build.gradle.kts"]}];export{e as CONFIG_FILE_NAMES,t as FRAMEWORK_MARKERS,a as PACKAGE_MANAGERS,s as PROJECT_MARKERS,o as SOURCE_ROOT_NAMES,l as TEST_RUNNER_MARKERS};
@@ -0,0 +1,14 @@
1
+ export interface ProjectIntelligence {
2
+ packageManager?: string;
3
+ runtime?: string;
4
+ languages: readonly string[];
5
+ frameworks: readonly string[];
6
+ scripts: Readonly<Record<string, string>>;
7
+ testRunners: readonly string[];
8
+ sourceRoots: readonly string[];
9
+ configFiles: readonly string[];
10
+ }
11
+ /** Reads bounded repository metadata so the model can choose project-native verification commands. */
12
+ export declare class ProjectIntelligenceService {
13
+ discover(root: string): Promise<ProjectIntelligence>;
14
+ }
@@ -0,0 +1 @@
1
+ import f from"node:fs/promises";import c from"node:path";import{CONFIG_FILE_NAMES as h,FRAMEWORK_MARKERS as g,PACKAGE_MANAGERS as R,PROJECT_MARKERS as j,SOURCE_ROOT_NAMES as k,TEST_RUNNER_MARKERS as E}from"./project-intelligence-constants.js";class J{async discover(e){const t=await P(c.join(e,"package.json")),s={...o(t?.dependencies),...o(t?.devDependencies)},a=o(t?.scripts),i=await O(e),r=await A(e),u=_(t);return{...r===void 0?{}:{packageManager:r},...u===void 0?{}:{runtime:u},languages:await b(e,t,i),frameworks:await S(e,s),scripts:a,testRunners:await F(e,s,a),sourceRoots:i,configFiles:await M(e,h)}}}async function S(n,e){const t=[];for(const s of g)(s.packages?.some(a=>e[a]!==void 0)===!0||await l(n,s.files??[]))&&t.push(s.label);return t}async function F(n,e,t){const s=Object.values(t).join(" ").toLowerCase(),a=[];for(const i of E)(i.packages.some(r=>e[r]!==void 0)||i.scriptTokens.some(r=>s.includes(r))||await l(n,i.files))&&a.push(i.label);return a}async function M(n,e){return(await Promise.all(e.map(async t=>await d(c.join(n,t))?t:void 0))).filter(t=>t!==void 0)}async function A(n){for(const[e,t]of R)if(await d(c.join(n,e)))return t}async function O(n){const e=[];for(const t of k)await d(c.join(n,t))&&e.push(t);return e}async function b(n,e,t){const s={...o(e?.dependencies),...o(e?.devDependencies)},a=[],i=await T(n,t);for(const r of j){const u=await l(n,r.markers),p=r.name==="TypeScript"?s.typescript!==void 0:r.name==="JavaScript/JSX"?Object.keys(s).length>0:!1,m=i.some(y=>r.extensions.some(w=>y.toLowerCase().endsWith(w)));(u||p||m)&&a.push(r.name)}return a.length===0?["Unknown"]:a}async function T(n,e){const t=[];for(const s of[".",...e.slice(0,8)])try{const a=await f.readdir(c.join(n,s),{withFileTypes:!0});for(const i of a.slice(0,256))i.isFile()?t.push(i.name):i.isDirectory()&&s!=="."&&t.push(...await N(c.join(n,s,i.name)))}catch{}return t}async function N(n){try{return(await f.readdir(n,{withFileTypes:!0})).slice(0,256).filter(e=>e.isFile()).map(e=>e.name)}catch{return[]}}async function l(n,e){return(await Promise.all(e.map(s=>d(c.join(n,s))))).some(Boolean)}function _(n){const e=n?.engines;return typeof e=="object"&&e!==null&&typeof e.node=="string"?`Node ${e.node}`:void 0}async function P(n){try{const e=JSON.parse(await f.readFile(n,"utf8"));return typeof e=="object"&&e!==null?e:void 0}catch{return}}async function d(n){try{return await f.access(n),!0}catch{return!1}}function o(n){return typeof n!="object"||n===null?{}:Object.fromEntries(Object.entries(n).filter(e=>typeof e[1]=="string"))}export{J as ProjectIntelligenceService};
@@ -0,0 +1,51 @@
1
+ import type { ToolDefinition } from '@lotagate/sdk';
2
+ import type { ToolAuthorizationDecision, ToolApprovalRequest, ToolExecutionContext, ToolExecutor, ToolInfo, ToolResult } from '@lotagate/agent-sdk';
3
+ import type { ToolActivityObserver } from '../../ports/tool-activity.js';
4
+ export interface BrowserHostRequest {
5
+ version: 1;
6
+ type: 'host.request';
7
+ requestId: string;
8
+ tool: 'browser';
9
+ sessionId: string;
10
+ runId: string;
11
+ action: string;
12
+ params: Record<string, unknown>;
13
+ executionBoundary: 'sandbox' | 'host';
14
+ hostFallback: 'ask' | 'deny' | 'allow';
15
+ projectRoot?: string;
16
+ executionCwd?: string;
17
+ executionWorkspaceId?: string;
18
+ }
19
+ export interface BrowserHostResponse {
20
+ version: 1;
21
+ type: 'host.response';
22
+ requestId: string;
23
+ tool: 'browser';
24
+ ok: boolean;
25
+ environmentId?: string;
26
+ result?: unknown;
27
+ error?: {
28
+ code: string;
29
+ category: string;
30
+ message: string;
31
+ retryable: boolean;
32
+ };
33
+ executionBoundary?: 'sandbox' | 'host';
34
+ fallbackReason?: string;
35
+ }
36
+ export type BrowserHostInvoker = (request: BrowserHostRequest, signal?: AbortSignal) => Promise<BrowserHostResponse>;
37
+ export declare function browserToolDefinitions(): readonly ToolDefinition[];
38
+ export declare class BrowserHostToolExecutor implements ToolExecutor {
39
+ private readonly options;
40
+ constructor(options: {
41
+ request: BrowserHostInvoker;
42
+ executionBoundary: 'sandbox' | 'host';
43
+ hostFallback: 'ask' | 'deny' | 'allow';
44
+ onFallbackApproval?: (request: ToolApprovalRequest, reason: string) => boolean | ToolAuthorizationDecision | Promise<boolean | ToolAuthorizationDecision>;
45
+ onActivity?: ToolActivityObserver;
46
+ });
47
+ listTools(): readonly ToolDefinition[];
48
+ getToolInfo(toolName: string): ToolInfo | undefined;
49
+ execute(toolName: string, input: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolResult>;
50
+ private request;
51
+ }
@@ -0,0 +1,2 @@
1
+ import{randomUUID as k}from"node:crypto";import{imageContentBlockFromDataUrl as v,omitImageData as I}from"./tool-image-content.js";import{READ_ONLY_BROWSER_TOOLS as O}from"../security/tool-policy-registry.js";const f=[e("browser.navigate","Open an HTTP(S) URL in the agent browser.",{url:o("Destination URL."),tabId:o("Optional browser tab id.")},["url"]),e("browser.newTab","Open a new blank tab in the agent browser.",{},[]),e("browser.closeTab","Close the active browser tab.",{tabId:o("Optional browser tab id.")},[]),e("browser.selectTab","Make a browser tab active.",{tabId:o("Browser tab id.")},["tabId"]),e("browser.inspect","Inspect the current page DOM summary, text, headings, links, and visible interactive elements.",{tabId:o("Optional browser tab id.")},[]),e("browser.inspectElement","Inspect a page element including its DOM, attributes, bounds, and computed CSS.",{target:i(),tabId:o("Optional browser tab id.")},["target"]),e("browser.extractTable","Extract a bounded HTML table from the current page.",{target:i(),maxRows:l("Maximum number of data rows to return.")},["target"]),e("browser.drag","Drag one visible page target onto another.",{from:i(),to:i()},["from","to"]),e("browser.listFrames","List frames embedded in the current browser page.",{tabId:o("Optional browser tab id.")},[]),e("browser.console","Read recent browser console messages and page errors.",{tabId:o("Optional browser tab id."),limit:l("Maximum number of entries to return.")},[]),e("browser.network","Read recent browser network requests, HTTP failures, and request errors.",{tabId:o("Optional browser tab id."),limit:l("Maximum number of entries to return.")},[]),e("browser.accessibility","Inspect the page accessibility tree without exposing control values.",{tabId:o("Optional browser tab id.")},[]),e("browser.setViewport","Emulate a responsive browser viewport for the current tab.",{width:l("Viewport width in CSS pixels."),height:l("Viewport height in CSS pixels."),mobile:d("Whether to emulate a mobile layout."),deviceScaleFactor:l("Optional device scale factor.")},["width","height"]),e("browser.resetViewport","Reset the browser tab to its normal viewport.",{tabId:o("Optional browser tab id.")},[]),e("browser.screenshot","Capture the current browser tab as evidence.",{tabId:o("Optional browser tab id.")},[]),e("browser.click","Click a visible page element using an accessibility target, text, CSS selector, or coordinates.",{target:i()},["target"]),e("browser.focus","Focus a visible page field or control.",{target:i()},["target"]),e("browser.clear","Clear a visible editable page field.",{target:i()},["target"]),e("browser.hover","Move the browser pointer over a visible page element.",{target:i()},["target"]),e("browser.check","Check or uncheck a checkbox or radio input.",{target:i(),checked:d("Whether the control should be checked.")},["target","checked"]),e("browser.select","Select an option in a native HTML select control.",{target:i(),value:o("Option value or visible label.")},["target","value"]),e("browser.readField","Read a visible non-password form field value.",{target:i()},["target"]),e("browser.type","Enter text into a visible page field.",{target:i(),value:o("Text to enter.")},["target","value"]),e("browser.upload","Upload a workspace file through a visible file input.",{target:i(),path:o("Workspace-relative or absolute file path.")},["target","path"]),e("browser.download","Download an HTTP(S) resource to the Desktop downloads folder.",{url:o("HTTP(S) resource URL."),tabId:o("Optional browser tab id.")},["url"]),e("browser.exportPdf","Export the current browser page to a workspace PDF file.",{outputPath:o("Workspace-relative or absolute output path."),overwrite:d("Whether an existing output file may be replaced."),printBackground:d("Whether CSS backgrounds should be printed."),landscape:d("Whether to use landscape orientation."),pageSize:h(["A4","Letter"],"PDF paper size.")},["outputPath"]),e("browser.dialog","Read or respond to the active alert, confirm, or prompt dialog.",{action:h(["read","accept","dismiss"],"Dialog operation."),promptText:o("Optional text for a prompt dialog."),tabId:o("Optional browser tab id.")},["action"]),e("browser.press","Press a keyboard key in the current browser tab.",{key:o("Key name, for example Enter or Tab."),modifiers:S("Optional modifiers: Alt, Control, Shift, or Meta."),tabId:o("Optional browser tab id.")},["key"]),e("browser.scroll","Scroll the current browser tab.",{deltaX:l("Horizontal scroll amount."),deltaY:l("Vertical scroll amount."),tabId:o("Optional browser tab id.")},[]),e("browser.back","Navigate the current browser tab back.",{tabId:o("Optional browser tab id.")},[]),e("browser.forward","Navigate the current browser tab forward.",{tabId:o("Optional browser tab id.")},[]),e("browser.reload","Reload the current browser tab.",{tabId:o("Optional browser tab id.")},[]),e("browser.waitFor","Wait until a URL, text fragment, or CSS selector appears.",{condition:x(),timeoutMs:l("Maximum wait time in milliseconds.")},["condition"]),e("browser.tabs","List tabs in the agent browser session.",{},[])];function R(){return f}class U{options;constructor(r){this.options=r}listTools(){return R()}getToolInfo(r){if(!f.some(n=>g(n)===r))return;const s=O.has(r);return{toolName:r,source:"custom",executorId:"desktop-browser-host",metadata:{risk:s?"read":"unknown"}}}async execute(r,s,n){if(!f.some(a=>g(a)===r))return{content:`Unknown browser tool: ${r}`,isError:!0};const b=this.options.onActivity?.start({key:`${n.runId}:${r}`,toolName:r,source:"browser",label:E(r,s)});try{let a=await this.options.request(this.request(r,s,n),n.signal);if(!a.ok&&a.error?.code==="SANDBOX_FALLBACK_REQUIRED"&&this.options.hostFallback==="ask"){const p=this.getToolInfo(r),c=await this.options.onFallbackApproval?.({toolName:r,input:s,context:n,...p===void 0?{}:{toolInfo:p}},a.error.message)??!1;if(typeof c=="boolean"?c:c.decision==="allow")a=await this.options.request({...this.request(r,s,n),executionBoundary:"host",hostFallback:"deny"},n.signal);else if(typeof c!="boolean"&&c.decision==="redirect")return b?.complete(!0,{userRedirect:!0}),{content:c.message,isError:!0,metadata:{code:"USER_REDIRECTED_ACTION",boundary:this.options.executionBoundary}}}if(!a.ok){const p=a.error?.message??"Desktop rejected the browser action.";return b?.complete(!0),{content:p,isError:!0,metadata:{code:a.error?.code??"BROWSER_HOST_ERROR",retryable:a.error?.retryable??!1}}}const u=r==="browser.screenshot"&&B(a.result)?a.result:void 0,w=u===void 0?void 0:v(u.dataUrl);if(u!==void 0&&u.dataUrl!==void 0&&w===void 0)throw new Error("Desktop returned an invalid browser screenshot payload.");const m=r==="browser.screenshot"?I(a.result,"dataUrl"):a.result,y=T(m,n.maxResultBytes);return b?.complete(!1),{content:y,isError:!1,...w===void 0?{}:{contentBlocks:[w]},metadata:{browser:!0,boundary:a.executionBoundary??this.options.executionBoundary,...a.environmentId===void 0?{}:{environmentId:a.environmentId},...a.fallbackReason===void 0?{}:{fallbackReason:a.fallbackReason}}}}catch(a){return b?.complete(!0),{content:a instanceof Error?a.message:"Browser host request failed.",isError:!0}}}request(r,s,n){return{version:1,type:"host.request",requestId:k(),tool:"browser",sessionId:n.sessionId,runId:n.runId,action:r,params:s,executionBoundary:this.options.executionBoundary,hostFallback:this.options.hostFallback,...n.workspaceRoot===void 0?{}:{projectRoot:n.workspaceRoot},...n.cwd===void 0?{}:{executionCwd:n.cwd},...typeof n.metadata?.executionWorkspaceId=="string"?{executionWorkspaceId:n.metadata.executionWorkspaceId}:{}}}}function e(t,r,s,n){return{type:"function",function:{name:t,description:r,parameters:{type:"object",properties:s,required:n,additionalProperties:!1}}}}function o(t){return{type:"string",description:t}}function l(t){return{type:"number",description:t}}function d(t){return{type:"boolean",description:t}}function h(t,r){return{type:"string",enum:[...t],description:r}}function S(t){return{type:"array",items:{type:"string"},description:t}}function i(){return{type:"object",properties:{type:{type:"string",enum:["accessibility","text","css","coordinates"]},role:{type:"string"},name:{type:"string"},value:{type:"string"},selector:{type:"string"},x:{type:"number"},y:{type:"number"}},required:["type"],additionalProperties:!1}}function x(){return{type:"object",properties:{type:{type:"string",enum:["selector","text","url"]},value:{type:"string"}},required:["type","value"],additionalProperties:!1}}function g(t){return"function"in t?t.function.name:void 0}function T(t,r){const s=JSON.stringify(t??null);return Buffer.byteLength(s,"utf8")<=r?s:`${s.slice(0,Math.max(0,r-12))}
2
+ [truncated]`}function E(t,r){return t==="browser.navigate"?`Open ${typeof r.url=="string"?r.url:"URL"}`:t==="browser.type"?"Enter text in browser":t==="browser.click"?"Click page element":t.replace(/^browser\./u,"Browser ")}function B(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}export{U as BrowserHostToolExecutor,R as browserToolDefinitions};
@@ -0,0 +1,45 @@
1
+ import type { ToolDefinition } from '@lotagate/sdk';
2
+ import type { ToolExecutionContext, ToolExecutor, ToolInfo, ToolResult } from '@lotagate/agent-sdk';
3
+ import type { ToolActivityObserver } from '../../ports/tool-activity.js';
4
+ export type ComputerHostTool = 'computer';
5
+ export interface ComputerHostRequest {
6
+ version: 1;
7
+ type: 'host.request';
8
+ requestId: string;
9
+ tool: ComputerHostTool;
10
+ sessionId: string;
11
+ runId: string;
12
+ action: string;
13
+ params: Record<string, unknown>;
14
+ executionBoundary: 'host';
15
+ hostFallback: 'deny';
16
+ }
17
+ export interface ComputerHostResponse {
18
+ version: 1;
19
+ type: 'host.response';
20
+ requestId: string;
21
+ tool: ComputerHostTool;
22
+ ok: boolean;
23
+ result?: unknown;
24
+ error?: {
25
+ code: string;
26
+ category: string;
27
+ message: string;
28
+ retryable: boolean;
29
+ };
30
+ }
31
+ export type ComputerHostInvoker = (request: ComputerHostRequest, signal?: AbortSignal) => Promise<ComputerHostResponse>;
32
+ export declare function computerToolDefinitions(): readonly ToolDefinition[];
33
+ export declare function computerToolDefinitionsForOperations(operations: readonly string[]): readonly ToolDefinition[];
34
+ export declare class ComputerHostToolExecutor implements ToolExecutor {
35
+ private readonly options;
36
+ private readonly definitions;
37
+ constructor(options: {
38
+ request: ComputerHostInvoker;
39
+ operations?: readonly string[];
40
+ onActivity?: ToolActivityObserver;
41
+ });
42
+ listTools(): readonly ToolDefinition[];
43
+ getToolInfo(toolName: string): ToolInfo | undefined;
44
+ execute(toolName: string, input: Record<string, unknown>, context: ToolExecutionContext): Promise<ToolResult>;
45
+ }
@@ -0,0 +1,2 @@
1
+ import{randomUUID as g}from"node:crypto";import{imageContentBlockFromResult as h,omitImageData as y}from"./tool-image-content.js";import{READ_ONLY_COMPUTER_TOOLS as x}from"../security/tool-policy-registry.js";const s=[t("computer.listWindows","List visible desktop application windows that can be targeted.",{includeMinimized:w("Whether minimized windows should be included.")},[]),t("computer.inspect","Inspect accessible UI elements of a target desktop application window.",{windowId:e("Target window id."),query:v(),maxDepth:i("Maximum UI tree depth.")},["windowId"]),t("computer.screenshot","Capture the target application window or screen for visual verification.",{windowId:e("Target window id."),region:f()},["windowId"]),t("computer.readText","Read text or the current value from an inspected UI element.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),scope:c(["value","document","selection"],"Text source to read.")},["windowId","elementId"]),t("computer.readSelection","Read selected items from a selection control.",{windowId:e("Target window id."),elementId:e("Selection control element id.")},["windowId","elementId"]),t("computer.readGrid","Read a bounded rectangular region from a grid control.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),rowStart:i("Zero-based first row."),rowCount:i("Maximum rows to read."),columnStart:i("Zero-based first column."),columnCount:i("Maximum columns to read.")},["windowId","elementId"]),t("computer.recognizeText","Recognize visible text in an application screenshot.",{windowId:e("Target window id."),region:f(),language:e("Optional BCP-47 OCR language tag.")},["windowId"]),t("computer.focus","Bring an application window or inspected element to the foreground.",{windowId:e("Target window id."),elementId:e("Optional element id from computer.inspect.")},["windowId"]),t("computer.click","Click a visible target window element or validated point.",{windowId:e("Target window id."),elementId:e("Optional element id from computer.inspect."),point:m(),button:c(["left","right","middle"],"Mouse button."),clickCount:i("Number of clicks, one or two.")},["windowId"]),t("computer.type","Type text into the focused application control.",{windowId:e("Target window id."),text:e("Text to type."),elementId:e("Optional editable element id from computer.inspect.")},["windowId","text"]),t("computer.keypress","Press a keyboard key with optional modifiers in the target window.",{windowId:e("Target window id."),key:e("Key name, for example Enter or Tab."),modifiers:T("Optional modifiers: Alt, Control, Shift, or Meta.")},["windowId","key"]),t("computer.scroll","Scroll the target application.",{windowId:e("Target window id."),deltaX:i("Horizontal scroll amount."),deltaY:i("Vertical scroll amount."),point:m()},["windowId"]),t("computer.drag","Drag from one validated point or element to another within a target window.",{windowId:e("Target window id."),from:I(),to:I(),durationMs:i("Drag duration in milliseconds.")},["windowId","from","to"]),t("computer.selectText","Select an occurrence of text in an inspected text control.",{windowId:e("Target window id."),elementId:e("Text control element id."),text:e("Text to select."),occurrence:i("One-based occurrence to select.")},["windowId","elementId","text"]),t("computer.listDisplays","List connected displays and their work areas.",{},[]),t("computer.launch","Launch an allowlisted desktop application by app id.",{appId:e("Registered application id.")},["appId"]),t("computer.wait","Wait for a target window, UI element, text, or idle state.",{windowId:e("Optional target window id."),condition:c(["window","element","text","idle"],"Condition to wait for."),elementId:e("Optional element id."),text:e("Optional text to find."),timeoutMs:i("Maximum wait time in milliseconds."),idleMs:i("Minimum system idle time for the idle condition.")},["condition","timeoutMs"]),t("computer.move","Move the pointer to a target point or element, including hover interactions.",{windowId:e("Target window id."),elementId:e("Optional element id from computer.inspect."),point:m(),durationMs:i("Movement duration in milliseconds.")},["windowId"]),t("computer.setValue","Set the value of an editable or range UI Automation control.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),value:e("New control value.")},["windowId","elementId","value"]),t("computer.invoke","Invoke the default action of an inspected button or menu item.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect.")},["windowId","elementId"]),t("computer.select","Set the selection state of an inspected selectable UI element.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),mode:c(["replace","add","remove"],"Selection operation.")},["windowId","elementId"]),t("computer.setToggleState","Set an inspected toggle or checkbox to a specific state.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),state:c(["on","off","indeterminate"],"Desired toggle state.")},["windowId","elementId","state"]),t("computer.setExpandedState","Expand or collapse an inspected tree, menu, or group control.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),expanded:w("Whether the element should be expanded.")},["windowId","elementId","expanded"]),t("computer.scrollIntoView","Scroll an inspected element into the visible area of its container.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect.")},["windowId","elementId"]),t("computer.setWindowState","Set the target window visual state and optionally its screen bounds.",{windowId:e("Target window id."),state:c(["normal","minimized","maximized"],"Desired window state."),bounds:S()},["windowId","state"]),t("computer.closeWindow","Request a normal close of the target application window.",{windowId:e("Target window id.")},["windowId"]),t("computer.readClipboard","Read the current text clipboard contents.",{},[]),t("computer.writeClipboard","Replace the text clipboard contents.",{text:e("Text to place on the clipboard.")},["text"]),t("computer.waitForState","Wait until an inspected UI element exposes the requested property value.",{windowId:e("Target window id."),elementId:e("Element id from computer.inspect."),property:c(["name","value","isEnabled","isOffscreen","toggleState","expandCollapseState","selectionState"],"UI property to observe."),expected:e("Expected property value."),timeoutMs:i("Maximum wait time in milliseconds."),intervalMs:i("Polling interval in milliseconds.")},["windowId","elementId","property","expected","timeoutMs"]),t("computer.manageFileDialog","Set, confirm, or cancel a standard file dialog.",{windowId:e("File dialog window id."),action:c(["setPath","confirm","cancel"],"File dialog operation."),path:e("File path to enter when using setPath or confirm.")},["windowId","action"])];function R(){return s}function b(n){if(n.includes("*"))return s;const o=new Set(n);return s.filter(a=>{const r=u(a);return r!==void 0&&o.has(r)})}class U{options;definitions;constructor(o){this.options=o,this.definitions=o.operations===void 0?s:b(o.operations)}listTools(){return this.definitions}getToolInfo(o){if(!this.definitions.some(r=>u(r)===o))return;const a=x.has(o);return{toolName:o,source:"custom",executorId:"desktop-computer-host",metadata:{risk:a?"read":"unknown"}}}async execute(o,a,r){if(!this.definitions.some(d=>u(d)===o))return{content:`Computer capability is unavailable for ${o}.`,isError:!0,metadata:{code:"COMPUTER_CAPABILITY_UNAVAILABLE"}};const l=this.options.onActivity?.start({key:`${r.runId}:${o}`,toolName:o,source:"computer",label:E(o)});try{const d=await this.options.request({version:1,type:"host.request",requestId:g(),tool:"computer",sessionId:r.sessionId,runId:r.runId,action:o,params:a,executionBoundary:"host",hostFallback:"deny"},r.signal);if(!d.ok)return l?.complete(!0),{content:d.error?.message??"Desktop rejected the computer action.",isError:!0,metadata:{code:d.error?.code??"COMPUTER_HOST_ERROR",retryable:d.error?.retryable??!1}};l?.complete(!1);const p=o==="computer.screenshot"?h(d.result):void 0;return{content:O(p===void 0?d.result:y(d.result,"dataBase64"),r.maxResultBytes),isError:!1,...p===void 0?{}:{contentBlocks:[p]},metadata:{computer:!0}}}catch(d){return l?.complete(!0),{content:d instanceof Error?d.message:"Computer host request failed.",isError:!0}}}}function t(n,o,a,r){return{type:"function",function:{name:n,description:o,parameters:{type:"object",properties:a,required:r,additionalProperties:!1}}}}function e(n){return{type:"string",description:n}}function i(n){return{type:"number",description:n}}function w(n){return{type:"boolean",description:n}}function c(n,o){return{type:"string",enum:[...n],description:o}}function T(n){return{type:"array",items:{type:"string"},description:n}}function v(){return{type:"object",properties:{role:e("Exact UI Automation control type."),name:e("Case-insensitive text contained in the element name."),text:e("Case-insensitive text contained in the element name or help text.")},additionalProperties:!1,description:"Optional role, name, or text filter."}}function f(){return{type:"object",properties:{x:{type:"number",description:"Left offset within the window."},y:{type:"number",description:"Top offset within the window."},width:{type:"number",description:"Region width."},height:{type:"number",description:"Region height."}},required:["x","y","width","height"],additionalProperties:!1,description:"Optional region within the target window."}}function S(){return{type:"object",properties:{x:i("Screen left coordinate."),y:i("Screen top coordinate."),width:i("Window width."),height:i("Window height.")},required:["x","y","width","height"],additionalProperties:!1,description:"Optional screen bounds."}}function m(){return{type:"object",properties:{x:{type:"number"},y:{type:"number"}},required:["x","y"],additionalProperties:!1}}function I(){return{type:"object",properties:{elementId:{type:"string"},x:{type:"number"},y:{type:"number"}},additionalProperties:!1}}function u(n){return"function"in n?n.function.name:void 0}function O(n,o){const a=JSON.stringify(n??null);return Buffer.byteLength(a,"utf8")<=o?a:`${a.slice(0,Math.max(0,o-12))}
2
+ [truncated]`}function E(n){return n.replace(/^computer\./u,"Computer ")}export{U as ComputerHostToolExecutor,R as computerToolDefinitions,b as computerToolDefinitionsForOperations};
@@ -0,0 +1,9 @@
1
+ import type { Readable, Writable } from 'node:stream';
2
+ import type { CliRuntime } from '../../bootstrap/runtime-factory.js';
3
+ export { DESKTOP_PROTOCOL_VERSION } from './desktop-agent-contracts.js';
4
+ /**
5
+ * Local JSONL bridge for the Desktop application. It is deliberately kept in
6
+ * the CLI application layer: Desktop reuses CLI policy and runtime, while the
7
+ * public SDK packages remain independent libraries.
8
+ */
9
+ export declare function runDesktopAgentCommand(runtime: CliRuntime, cwd: string, input: Readable, output: Writable, signal?: AbortSignal): Promise<number>;
@@ -0,0 +1,3 @@
1
+ import{randomUUID as K}from"node:crypto";import{AuthenticationService as T}from"../auth/authentication-service.js";import{createLotaGateClient as L}from"../../infrastructure/sdk/lotagate-client-factory.js";import{loadExecutionConfig as P}from"../config/execution-config.js";import{prepareCliAgent as V,warmMcpRuntime as Y}from"../agent/cli-agent-execution-service.js";import{createContextManagement as it}from"../agent/context-compaction.js";import{persistContextCompaction as nt}from"../agent/context-compaction-persistence.js";import{CliAgentSessionStoreRegistry as rt}from"../agent/agent-session-store-registry.js";import{AgentRunTracker as ct}from"../agent/agent-run-tracker.js";import{formatContinuationCheckpoint as dt}from"../agent/continuation-checkpoint.js";import{CliTurnEventProjector as mt}from"../orchestration/cli-turn-event-projector.js";import{persistCliTurnEvent as pt}from"../orchestration/cli-turn-persistence.js";import{createTurnId as lt,recordTurnCompletion as ht,recordTurnFailure as ut,recordTurnStart as ft}from"../session/session-turn-lifecycle.js";import{ProjectSessionAccess as $}from"../session/project-session-access.js";import{permissionRuleForRequest as wt}from"../security/workspace-permission-policy.js";import{agentLimitNotice as gt,classifyAgentLimit as yt}from"../agent/agent-limit.js";import{CliError as g}from"../../domain/errors/cli-error.js";import{CLI_ERROR_CODES as y}from"../../domain/errors/error-codes.js";import{readLinesBounded as Et}from"./jsonl-protocol.js";import{RESOURCE_LIMITS as Q}from"../../domain/runtime/resource-limits.js";import{getDesktopCommandCatalog as kt}from"./desktop-command-catalog.js";import{COMMAND_REGISTRY as X}from"../commands/command-runtime.js";import{executeDesktopCommand as bt}from"./desktop-command-executor.js";import{DesktopAttachmentStore as It}from"./desktop-attachment-store.js";import{SubagentJobRegistry as vt}from"../orchestration/cli-subagent-service.js";import{subagentDesktopPayload as St}from"./desktop-orchestration-events.js";import{DesktopIntentEventWriter as Tt}from"./desktop-intent-event-writer.js";import{resolveModelContextWindow as xt}from"../model/model-context-window.js";import{ContextUsageService as Ct}from"../agent/context-usage-service.js";import{isCliAgentPreparationMutation as Mt}from"../agent/cli-agent-preparation-cache.js";import{JsonLineWriter as Nt}from"./json-line-writer.js";import{desktopApprovalMode as Pt,sessionResult as Z,toDesktopError as b}from"./desktop-protocol-helpers.js";import{DesktopApprovalBroker as Rt}from"./desktop-approval-broker.js";import{SessionExecutionWorkspaceService as Dt}from"../workspace/session-execution-workspace.js";import{buildUserMessage as At}from"../../infrastructure/clipboard/image-normalizer.js";import{isBrowserHostResponse as Bt,isComputerHostResponse as Ot,isDesktopHostResponse as Lt,parseDesktopRequest as _t}from"./desktop-agent-request-parser.js";import{desktopMcpEvent as q}from"./desktop-mcp-events.js";import{DesktopExtensionService as jt}from"./desktop-extension-service.js";import{DesktopExtensionRequestHandler as Ht}from"./desktop-extension-request-handler.js";import{DesktopHostBridge as Wt}from"./desktop-host-bridge.js";import{normalizeDesktopHostCapabilities as Ut}from"./desktop-host-capabilities.js";import{loadModelCatalog as tt}from"../model/model-catalog-service.js";import{SdkMediaGatewayClient as Gt}from"../../infrastructure/sdk/sdk-media-gateway-client.js";import{artifactIdsData as _,resolveSpeechModel as Ft}from"./desktop-agent-helpers.js";import{DESKTOP_PROTOCOL_VERSION as R,DESKTOP_SPEECH_MAX_BYTES as zt,DESKTOP_SPEECH_SYNTHESIS_TIMEOUT_MS as Jt,TITLE_GENERATION_TIMEOUT_MS as Kt}from"./desktop-agent-contracts.js";import{createIsolatedGuestPlatform as Vt}from"../../infrastructure/platform/host-platform.js";import{evaluateGatewayRequestBudget as Yt}from"../../domain/runtime/gateway-request-budget.js";import{DESKTOP_PROTOCOL_VERSION as Ke}from"./desktop-agent-contracts.js";async function Fe(j,t,e,s,o){return new $t(j,t,s).run(e,o)}class $t{runtime;cwd;writer;turns=new Map;activeTurnBySession=new Map;subagentJobs=new vt;sessionStores=new rt(Q.desktopSessionStoreMaxEntries);turnContexts=new Map;attachments=new It;approvalBroker=new Rt((t,e)=>this.writeEvent(t,e));commands=new Map;speechRequests=new Map;hostBridge;extensions=new jt;extensionRequests;intentEvents;executionWorkspaces;browserHostEnabled=!1;computerHostEnabled=!1;desktopHostEnabled=!1;hostCapabilities;stopping=!1;constructor(t,e,s){this.runtime=t,this.cwd=e,this.writer=new Nt(s),this.executionWorkspaces=t.executionWorkspaces??new Dt(t.paths.globalConfigDir,t.platform),this.hostBridge=new Wt(this.writer,()=>this.stopping),this.extensionRequests=new Ht(this.extensions,(o,a)=>this.respond(o,a),this.cwd),this.intentEvents=new Tt({writeEvent:(o,a)=>this.writeEvent(o,a),log:(o,a)=>this.logInfo(o,a)})}async run(t,e){let s=0;const o=()=>{this.stopping=!0;for(const a of this.turns.values())a.controller.abort(e?.reason);for(const a of this.commands.values())a.controller.abort(e?.reason);for(const a of this.speechRequests.values())a.abort(e?.reason);t.destroy()};e?.addEventListener("abort",o,{once:!0});try{for await(const a of Et(t,Q.desktopJsonlLineBytes)){if(a.trim().length===0)continue;let r;try{r=JSON.parse(a)}catch(m){s+=1,await this.writeError("unknown","protocol",b(m));continue}if(Bt(r)){this.hostBridge.resolveBrowser(r);continue}if(Lt(r)){this.hostBridge.resolveDesktop(r);continue}if(Ot(r)){this.hostBridge.resolveComputer(r);continue}let c;try{c=_t(r)}catch(m){s+=1,await this.writeError("unknown","protocol",b(m));continue}try{await this.handle(c)}catch(m){this.runtime.logger.error("CLI Desktop request failed.",{method:c.method,requestId:c.id,reason:m instanceof Error?m.message:String(m)}),s+=1,await this.writeError(c.id,c.method,b(m))}if(this.stopping)break}}catch(a){s+=1,await this.writeError("unknown","protocol",b(a))}finally{e?.removeEventListener("abort",o);for(const a of this.turns.values())a.controller.abort();await Promise.allSettled([...this.turns.values()].map(a=>a.operation));for(const a of this.commands.values())a.controller.abort();await Promise.allSettled([...this.commands.values()].map(a=>a.operation));for(const a of this.speechRequests.values())a.abort();await this.subagentJobs.close(),this.sessionStores.clear(),this.approvalBroker.close(),this.hostBridge.close(),this.attachments.clear(),await this.writer.flush(),this.writer.close()}return s===0?0:1}async handle(t){switch(t.method){case"initialize":return this.browserHostEnabled=t.params.browserHost===!0,this.computerHostEnabled=t.params.computerHost===!0,this.desktopHostEnabled=t.params.executionBroker===!0,this.hostCapabilities=Ut(t.params.hostCapabilities),this.respond(t,{protocol:"lotagate.desktop",version:R,capabilities:["sessions","streaming","tool-approval","project-trust","models","auth","commands","image-attachments","file-attachments","execution-context","tool-allowlist","approval-reviews","lifecycle-controls",...this.desktopHostEnabled?["execution-broker"]:[],"intent-runtime","host-evidence","conversational-progress","local-memory-commands","extensions","speech-synthesis",...this.browserHostEnabled?["browser-host"]:[],...this.computerHostEnabled?["computer-host"]:[]]});case"session.create":return this.createSession(t);case"title.generate":return this.generateTitle(t);case"session.list":return this.listSessions(t);case"session.resume":return this.resumeSession(t);case"extension.listPublicPlugins":case"extension.resolvePublicPluginSource":case"extension.readPublicPluginContribution":case"extension.readDetail":case"extension.readPluginIcon":return this.extensionRequests.handle(t);case"attachment.begin":return this.attachments.begin({id:t.params.attachmentId,...t.params.sessionId===void 0?{}:{sessionId:t.params.sessionId},name:t.params.name,mimeType:t.params.mimeType,sizeBytes:t.params.sizeBytes,...t.params.storageName===void 0?{}:{storageName:t.params.storageName}}),this.respond(t,{accepted:!0,attachmentId:t.params.attachmentId});case"attachment.chunk":return this.attachments.appendChunk(t.params.attachmentId,t.params.index,t.params.dataBase64),this.respond(t,{accepted:!0,attachmentId:t.params.attachmentId,index:t.params.index});case"attachment.complete":{const e=this.attachments.complete(t.params.attachmentId);if(e.sessionId.length===0)return this.respond(t,{accepted:!0,attachmentId:t.params.attachmentId});const s=await this.runtime.sessionStore.saveAttachment(e.sessionId,e.attachment,e.bytes);return this.attachments.replace(t.params.attachmentId,{...e,attachment:s}),this.respond(t,{accepted:!0,attachmentId:t.params.attachmentId,storagePath:s.storagePath})}case"attachment.delete":{this.attachments.delete(t.params.attachmentId,t.params.sessionId);const e=await this.runtime.sessionStore.deleteAttachment(t.params.sessionId,t.params.attachmentId);return this.respond(t,{accepted:!0,attachmentId:t.params.attachmentId,deleted:e})}case"turn.start":return this.startTurn(t);case"turn.cancel":return this.cancelTurn(t);case"approval.respond":return this.respondApproval(t);case"trust.respond":return this.respondTrust(t);case"model.list":return this.listModels(t);case"auth.status":return this.authStatus(t);case"speech.synthesize":return this.synthesizeSpeech(t);case"command.list":return this.listCommands(t);case"command.execute":return this.startCommand(t);case"command.cancel":return this.cancelCommand(t);case"shutdown":this.stopping=!0,await this.respond(t,{stopping:!0});return}}async createSession(t){const e=await this.runtime.projectTrust.inspect(this.cwd),s=await P(this.runtime,this.cwd),o=s.config.profile??T.defaultProfileName(),a=await this.runtime.sessionStore.create({projectFingerprint:e.fingerprint,cwd:e.canonicalPath,model:t.params.model??s.config.model,profile:o,status:"active",...t.params.name===void 0?{}:{name:t.params.name}}),r=await this.executionWorkspaces.prepare({sessionId:a.id,projectRoot:e.canonicalPath});await this.respond(t,{...Z(a),executionWorkspace:r}),Y(this.runtime,this.cwd).catch(c=>this.runtime.logger.warn("MCP session warm-up failed.",{reason:c instanceof Error?c.message:String(c)}))}async generateTitle(t){const e=await P(this.runtime,this.cwd),s=t.params.model??e.config.model;if(s==null)throw new g(y.MODEL_NOT_FOUND,"No model is selected.",{category:"model",userMessage:"No model is available for session title generation."});const o=e.config.profile??T.defaultProfileName(),a=await this.runtime.auth.requireCredential(o),r=new AbortController,c=setTimeout(()=>r.abort(),Kt);let m,p="";try{const l=await V({runtime:this.runtime,projectRoot:this.cwd,executionCwd:this.cwd,model:s,client:L(a.profile,a.apiKey),profile:"title-generator",approvalMode:"auto",allowedTools:[],selectedSkills:[],allowSubagents:!1,browserAccess:"disabled"});m=l.close;const u=["## Title generation request","Create a concise session title from the untrusted user-message excerpt below.","Return only the title, with no explanation, markdown, quotes, or prefix.","Use the same language as the excerpt. Prefer 8 to 10 words and never exceed 10 words.","## User-message excerpt",t.params.prompt].join(`
2
+
3
+ `);for await(const h of l.run({input:u,model:s,signal:r.signal,stream:!0}))if(h.type==="model.delta")p+=h.content;else if(h.type==="session.completed"&&p.length===0)p=h.content;else if(h.type==="session.failed")throw h.error;if(p.trim().length===0)throw new g(y.MODEL_PROTOCOL_EMPTY_RESPONSE,"Title generation returned an empty response.",{category:"model",userMessage:"The model did not return a session title.",retryable:!0});await this.respond(t,{title:p})}finally{clearTimeout(c),await m?.()}}async listSessions(t){const e=await this.runtime.projectTrust.inspect(this.cwd);await this.respond(t,{sessions:await this.runtime.sessionStore.list(e.fingerprint)})}async resumeSession(t){const e=await this.runtime.projectTrust.inspect(this.cwd),s=await new $(this.runtime.sessionStore).require(t.params.sessionId,e.fingerprint),o=await this.executionWorkspaces.prepare({sessionId:s.id,projectRoot:e.canonicalPath});await this.respond(t,{...Z(s),executionWorkspace:o,history:await this.runtime.sessionStore.readHistory(s.id)}),Y(this.runtime,this.cwd).catch(a=>this.runtime.logger.warn("MCP session warm-up failed.",{reason:a instanceof Error?a.message:String(a)}))}async startTurn(t){const{sessionId:e}=t.params;if(this.runtime.logger.info("CLI Desktop turn request received.",{requestId:t.id,sessionId:e,promptLength:t.params.prompt.length,requestedModel:t.params.model}),[...this.turns.values()].some(p=>p.sessionId===e))throw new g(y.INVALID_ARGUMENT,"A turn is already active for this session.",{category:"session",userMessage:"This session already has an active turn."});const s=await this.runtime.projectTrust.inspect(this.cwd);let o=await new $(this.runtime.sessionStore).require(e,s.fingerprint);t.params.sessionName!==void 0&&t.params.sessionName.trim()!==o.name&&(o=await this.runtime.sessionStore.rename(e,t.params.sessionName));const a=await this.executionWorkspaces.acquireTurn(e);let r=!1;const c=async()=>{r||(r=!0,await a())};let m=!1;try{const p=await this.executionWorkspaces.prepare({sessionId:e,projectRoot:s.canonicalPath}),l=this.attachments.take(t.params.attachmentIds??[],e),u=lt(),h=new AbortController;this.turnContexts.set(u,{...p,...t.params.taskId===void 0?{}:{taskId:t.params.taskId}}),this.activeTurnBySession.set(e,u);const x=this.executeTurn(t,o,s,p,u,h,l,c).catch(async C=>{await this.writeEvent(h.signal.aborted?"turn.cancelled":"turn.failed",{turnId:u,sessionId:e,...h.signal.aborted?{}:{error:b(C)}})}).finally(()=>{this.turns.delete(u),this.turnContexts.delete(u),this.activeTurnBySession.get(e)===u&&this.activeTurnBySession.delete(e),this.sessionStores.prune(this.activeTurnBySession.keys())});this.turns.set(u,{sessionId:e,controller:h,operation:x}),m=!0,await this.respond(t,{accepted:!0,turnId:u,sessionId:e})}finally{m||await c()}}async executeTurn(t,e,s,o,a,r,c,m){try{await this.executeTurnBody(t,e,s,o,a,r,c)}finally{await m()}}async executeTurnBody(t,e,s,o,a,r,c){const m=await P(this.runtime,this.cwd);if(!await this.runtime.projectTrust.isTrusted(s)){const n=K();if(await this.writeEvent("trust.requested",{trustRequestId:n,sessionId:e.id,path:s.canonicalPath}),!await this.approvalBroker.waitForTrust(n,r.signal))throw new g(y.PROJECT_TRUST_REQUIRED,"Project trust was not granted.",{category:"project",userMessage:"Trust this project in the Desktop application before running tools."});await this.runtime.projectTrust.grant(s),this.runtime.agentPreparation?.clear(s.canonicalPath),await this.runtime.workspaceSettings.ensureInitialized(s.canonicalPath)}const l=t.params.model??e.model??m.config.model;if(l==null)throw new g(y.MODEL_NOT_FOUND,"No model is selected.",{category:"model",userMessage:"Select a model before starting a turn."});const u=t.params.reasoningEffort??m.config.effort;this.runtime.logger.info("CLI Desktop turn model resolved.",{sessionId:e.id,turnId:a,requestedModel:t.params.model,sessionModel:e.model,resolvedModel:l});const h=e.profile??m.config.profile??T.defaultProfileName(),x=await this.runtime.auth.requireCredential(h),C=L(x.profile,x.apiKey),H=await xt(this.runtime,l,h),D=new ct,A=this.sessionStores.getOrCreate(e.id,this.activeTurnBySession.keys()),M=new Set,et=new Ct(this.runtime,s.canonicalPath),W=async()=>{try{const n=await et.buildForProject({sessionId:e.id,model:l,profileName:h,pluginNames:[],pendingAttachments:0,agentSessionStore:A});await this.writeEvent("usage.updated",{turnId:a,sessionId:e.id,model:l,...n.contextWindow===void 0?{}:{contextWindow:n.contextWindow},usage:{promptTokens:n.usedTokens,estimated:!0}})}catch(n){this.runtime.logger.warn("Desktop context usage update failed.",{sessionId:e.id,turnId:a,reason:n instanceof Error?n.message:String(n)})}},v=[],S=[];for(const n of c){const f=n.attachment.storagePath===void 0?await this.runtime.sessionStore.saveAttachment(e.id,n.attachment,n.bytes):n.attachment;S.push({...n,attachment:f})}await ft(this.runtime.sessionStore,e.id,a,t.params.prompt,S.map(n=>n.attachment.id)),await this.runtime.sessionStore.updateStatus(e.id,"active"),await this.writeEvent("turn.started",{turnId:a,sessionId:e.id,model:l});const at={onSubagentLifecycle:n=>this.writeEvent(`subagent.${n.type}`,St(n,a),{delivery:"best-effort"})},st={start:n=>{if(n.source!=="shell"&&n.source!=="computer"&&n.source!=="custom"&&n.toolName!=="filesystem.read"&&n.toolName!=="filesystem.write"&&n.toolName!=="filesystem.exists")return;const f={turnId:a,sessionId:e.id,actionId:n.key,toolName:n.toolName,displayName:n.label,...n.source==="shell"?{command:n.label}:{},kind:n.source??"tool",source:n.source},E=(w,I)=>{this.writeEvent(w,I,{delivery:"best-effort"}).catch(k=>this.runtime.logger.warn("Desktop tool activity event failed.",{event:w,reason:k instanceof Error?k.message:String(k)}))};return E("tool.activity.started",{...f,status:"running"}),{complete:(w,I)=>E("tool.activity.completed",{...f,...I??{},status:w?"failed":"completed",isError:w})}}};let B,O=!1;const U=setTimeout(()=>r.abort(),t.params.execution.timeoutMs);try{const n=t.params.execution,f=await V({runtime:this.runtime,projectRoot:s.canonicalPath,executionCwd:o.executionCwd,executionWorkspaceId:o.id,model:l,client:C,reasoningEffort:u,profile:"interactive-trusted",approvalMode:Pt(n.permissionPolicy),...n.allowedTools===void 0?{}:{allowedTools:n.allowedTools},...t.params.skills===void 0?{}:{selectedSkills:t.params.skills},browserAccess:n.browserAccess,subagentLifecycle:at,subagentJobs:this.subagentJobs,...this.browserHostEnabled?{browserHost:(i,d)=>this.hostBridge.requestBrowser(i,d)}:{},...this.desktopHostEnabled?{desktopHost:((i,d)=>this.hostBridge.requestDesktop(i,d))}:{},...this.computerHostEnabled?{computerHost:((i,d)=>this.hostBridge.requestComputer(i,d))}:{},onArtifacts:i=>{for(const d of i)M.add(d.id)},...this.hostCapabilities===void 0?{}:{hostCapabilities:this.hostCapabilities},executionBoundary:n.isolation,executionPlatform:n.isolation==="sandbox"?Vt():this.runtime.platform,browserExecution:n.browserExecution,hostFallback:n.hostFallback,...this.browserHostEnabled||this.desktopHostEnabled?{onExecutionFallbackApproval:(i,d)=>this.approvalBroker.waitForApproval(i,e.id,a,r.signal,"host",d)}:{},toolActivity:st,onIntentLifecycle:i=>this.intentEvents.write(i,e.id,a),contextManagement:it({client:C,model:l,...H===void 0?{}:{contextWindow:H},onCompactionStart:()=>this.writeEvent("context.compacting",{turnId:a,sessionId:e.id}),onSummaryFailure:i=>this.runtime.logger.warn("Context summarization failed; using fallback summary.",{reason:i instanceof Error?i.message:String(i)}),continuationContext:()=>dt({snapshot:D.snapshot()})}),agentSessionStore:A,prompt:(i,d)=>this.approvalBroker.waitForApproval(i,e.id,a,d??r.signal,n.isolation),rememberApproval:i=>this.runtime.workspaceSettings.rememberAllow(s.canonicalPath,wt(i.toolName,i.input)),audit:async i=>{const d={toolName:i.toolName,stage:i.stage,sessionId:i.sessionId,runId:i.runId,decision:i.decision,reason:i.reason,...i.source===void 0?{}:{source:i.source},...i.executorId===void 0?{}:{executorId:i.executorId},...i.ruleId===void 0?{}:{ruleId:i.ruleId},...i.skillName===void 0?{}:{skillName:i.skillName},...i.riskCategory===void 0?{}:{riskCategory:i.riskCategory}};this.runtime.logger.info("Tool authorization decision.",d),await this.runtime.sessionStore.appendEvent({type:"tool.approval",timestamp:new Date().toISOString(),sessionId:e.id,turnId:a,data:d})},onModelComplete:i=>{D.observeModel(i),i.usage!==void 0&&this.writeEvent("usage.updated",{turnId:a,sessionId:e.id,model:l,usage:i.usage},{delivery:"best-effort"}).catch(d=>this.runtime.logger.warn("Desktop usage event failed.",{reason:d instanceof Error?d.message:String(d)}))},onWrite:i=>{this.writeEvent("file.changed",{turnId:a,sessionId:e.id,change:i},{delivery:"best-effort"}).catch(d=>this.runtime.logger.warn("Desktop file event failed.",{reason:d instanceof Error?d.message:String(d)}))},mcpLifecycle:i=>this.writeMcpRuntimeEvent(i,e.id,a)});B=f.close;const E=new mt,w=await f.buildInput(t.params.prompt),I=await this.runtime.sessionStore.readHistory(e.id);A.hydrate(e.id,I.transcript,I.events,w.input);const k=Yt(w.input,S.map(({attachment:i,bytes:d})=>({byteLength:d.byteLength,mimeType:i.mimeType,name:i.name})));if(!k.isWithinLimit)throw new g(y.ATTACHMENT_TOO_LARGE,"The prompt and attachments exceed the Gateway JSON body limit.",{category:"attachment",userMessage:`The prompt and attachments exceed the ${k.limitBytes/1e6} MB decimal Gateway JSON limit. Remove an attachment or shorten the prompt and retry.`,details:{kind:"gateway-json-body",maxBytes:k.limitBytes,projectedBytes:k.projectedBytes}});const G=S.length===0?void 0:At(w.input,S),F=G?.content===null?void 0:G?.content,ot=await f.agent.initialize();for(const i of ot)(i.type==="mcp.server.status"||i.type==="mcp.tool.catalog.updated")&&await this.writeMcpEvent(i,e.id,a);for await(const i of f.run({input:w.input,userInput:w.userInput,...w.workspaceContext===void 0?{}:{workspaceContext:w.workspaceContext},...F===void 0?{}:{inputContent:F},model:l,sessionId:e.id,stream:!0,signal:r.signal,metadata:{taskId:t.params.taskId,turnId:a}})){D.observe(i),(i.type==="mcp.server.status"||i.type==="mcp.tool.catalog.updated")&&await this.writeMcpEvent(i,e.id,a),i.type==="context.compacted"&&(await nt(this.runtime,f,e.id,i.metrics,a),await W());const d=E.observe(i);for(const N of d)await this.emitProjected(N,e.id,a,v,M);if(i.type==="session.failed"){const N=yt(i.error);if(N===void 0)throw i.error;const z=gt(N);v.push(z);const J=`${a}:final`;await this.writeEvent("assistant.delta",{turnId:a,sessionId:e.id,segmentId:J,iteration:0,content:z}),await this.writeEvent("assistant.segment.completed",{turnId:a,sessionId:e.id,segmentId:J,iteration:0,phase:"final",..._(M)});break}}if(v.join("").trim().length===0)throw new g(y.MODEL_PROTOCOL_EMPTY_RESPONSE,"Agent completed without a final text response.",{category:"model",userMessage:"The model completed without a final text response.",retryable:!0});await this.executionWorkspaces.apply(e.id),O=!0,await ht(this.runtime.sessionStore,e.id,a,v.join("")),await this.runtime.sessionStore.updateStatus(e.id,"completed"),await W(),await this.writeEvent("turn.completed",{turnId:a,sessionId:e.id,content:v.join(""),..._(M)})}catch(n){if(!O)try{const E=await this.executionWorkspaces.apply(e.id);O=!0,E.appliedPaths.length>0&&this.runtime.logger.info("Applied session workspace changes after turn failure.",{sessionId:e.id,turnId:a,appliedPaths:E.appliedPaths})}catch(E){this.runtime.logger.error("Failed to apply session workspace changes after turn failure.",{sessionId:e.id,turnId:a,reason:E instanceof Error?E.message:String(E)})}const f=r.signal.aborted;throw await ut(this.runtime.sessionStore,e.id,a,n,f),await this.runtime.sessionStore.updateStatus(e.id,f?"cancelled":"failed"),n}finally{if(this.intentEvents.clear(a),U!==void 0&&clearTimeout(U),B!==void 0)try{await B()}catch(n){this.runtime.logger.warn("Desktop agent cleanup failed.",{reason:n instanceof Error?n.message:String(n)})}await this.executionWorkspaces.markReady(e.id)}}async emitProjected(t,e,s,o,a){t.type==="assistant.delta"?(o.push(t.content),await this.writeEvent("assistant.delta",{turnId:s,sessionId:e,segmentId:t.segmentId,iteration:t.iteration,content:t.content})):t.type==="assistant.replaced"?(o.splice(0,o.length,t.content),await this.writeEvent("assistant.replaced",{turnId:s,sessionId:e,segmentId:t.segmentId,iteration:t.iteration,content:t.content})):t.type==="assistant.segment.completed"?await this.writeEvent("assistant.segment.completed",{turnId:s,sessionId:e,segmentId:t.segmentId,iteration:t.iteration,phase:t.phase,...t.phase==="final"?_(a):{}}):t.type==="action.started"?await this.writeEvent("tool.started",{turnId:s,sessionId:e,actionId:t.actionId,toolName:t.toolName,displayName:t.displayName,kind:t.kind,...t.source===void 0?{}:{source:t.source}}):t.type==="action.completed"?await this.writeEvent("tool.completed",{turnId:s,sessionId:e,actionId:t.actionId,toolName:t.toolName,displayName:t.displayName,kind:t.kind,status:t.status,isError:t.isError}):t.type==="context.compacted"&&await this.writeEvent("context.compacted",{turnId:s,sessionId:e}),await pt(this.runtime.sessionStore,e,t,{turnId:s})}async writeMcpEvent(t,e,s){const o=q(t,e,s);await this.writeEvent(o.name,o.data)}async writeMcpRuntimeEvent(t,e,s){const o=q(t,e,s);await this.writeEvent(o.name,o.data)}async cancelTurn(t){const e=this.turns.get(t.params.turnId);if(e===void 0)throw new g(y.INVALID_ARGUMENT,"Turn is not active.",{category:"session",userMessage:"The requested turn is not active."});e.controller.abort(),await this.respond(t,{cancelled:!0,turnId:t.params.turnId}),await e.operation.catch(s=>this.runtime.logger.warn("Cancelled Desktop turn cleanup reported an error.",{turnId:t.params.turnId,reason:s instanceof Error?s.message:String(s)}))}async respondApproval(t){const e=t.params.decision==="redirect"?{decision:"redirect",message:t.params.message}:{decision:t.params.decision};if(!this.approvalBroker.respondApproval(t.params.approvalId,e))throw new g(y.INVALID_ARGUMENT,"Approval request is no longer active.",{category:"arguments",userMessage:"This approval request is no longer active."});await this.respond(t,{accepted:!0})}async respondTrust(t){if(!this.approvalBroker.respondTrust(t.params.trustRequestId,t.params.trusted))throw new g(y.INVALID_ARGUMENT,"Trust request is no longer active.",{category:"arguments",userMessage:"This trust request is no longer active."});await this.respond(t,{accepted:!0})}async listModels(t){const e=await tt(this.runtime,this.cwd);await this.respond(t,{models:e.data})}async authStatus(t){const s=(await this.runtime.configLoader.load(this.cwd,{includeProject:!1})).config.profile??T.defaultProfileName(),o=await this.runtime.credentialStore.get(s);await this.respond(t,{authenticated:o!==void 0,profile:s,...o===void 0?{}:{baseUrl:o.profile.baseUrl,credentialRef:o.profile.credentialRef}})}async synthesizeSpeech(t){const s=(await P(this.runtime,this.cwd)).config.profile??T.defaultProfileName(),o=await this.runtime.auth.requireCredential(s),a=await tt(this.runtime,this.cwd),r=Ft(t.params.model,a.data),c=new AbortController;this.speechRequests.set(t.id,c);const m=setTimeout(()=>c.abort(new Error("Desktop speech synthesis timed out.")),Jt);try{const p=await new Gt(L(o.profile,o.apiKey)).createSpeech({model:r,input:t.params.input,voice:t.params.voice,responseFormat:t.params.responseFormat??"mp3"},{signal:c.signal});if(p.bytes.byteLength===0||p.bytes.byteLength>zt)throw new g(y.MEDIA_RESPONSE_TOO_LARGE,"Generated speech exceeds the Desktop playback limit.",{category:"media",userMessage:"The generated speech is too large to play in the Desktop app."});await this.respond(t,{contentType:p.contentType??"audio/mpeg",bytesBase64:Buffer.from(p.bytes).toString("base64")})}finally{clearTimeout(m),this.speechRequests.get(t.id)===c&&this.speechRequests.delete(t.id)}}async listCommands(t){await this.respond(t,kt())}async startCommand(t){const s=X.get(t.params.actionId)?.desktop?.mutationKey;if(s!==void 0&&(this.turns.size>0||[...this.commands.values()].some(p=>p.mutationKey===s)))throw new g(y.INVALID_ARGUMENT,`Desktop command conflicts with an active ${s} operation.`,{category:"command",userMessage:"Wait for the active operation to finish before changing this resource."});const o=K(),a=new AbortController,r=typeof t.params.options.scope=="string"?t.params.options.scope:void 0;this.logInfo("CLI Desktop command started.",{commandId:o,actionId:t.params.actionId,...r===void 0?{}:{scope:r}});const c=Promise.resolve().then(()=>this.executeCommand(t,o,a)).catch(async p=>{if(a.signal.aborted){this.logWarn("CLI Desktop command cancelled.",{commandId:o,actionId:t.params.actionId}),await this.writeEvent("command.cancelled",{commandId:o,actionId:t.params.actionId});return}this.logError("CLI Desktop command failed.",{commandId:o,actionId:t.params.actionId,code:b(p).code}),await this.writeEvent("command.failed",{commandId:o,actionId:t.params.actionId,error:b(p)})}).finally(()=>this.commands.delete(o));this.commands.set(o,{controller:a,operation:c,...s===void 0?{}:{mutationKey:s}});const m={accepted:!0,commandId:o,actionId:t.params.actionId};await this.respond(t,m)}async executeCommand(t,e,s){await this.writeEvent("command.started",{commandId:e,actionId:t.params.actionId});const o=await bt({runtime:this.runtime,cwd:this.cwd,invocation:t.params,signal:s.signal,output:{write:(a,r)=>this.writeEvent("command.output",{commandId:e,actionId:t.params.actionId,content:a,...r===void 0?{}:{structured:r}})},activity:{started:(a,r)=>this.writeEvent("command.activity.started",{commandId:e,actionId:t.params.actionId,key:a,label:r}),completed:(a,r)=>this.writeEvent("command.activity.completed",{commandId:e,actionId:t.params.actionId,key:a,isError:r})},onActivityError:a=>this.runtime.logger.warn("Desktop command activity event failed.",{commandId:e,reason:a instanceof Error?a.message:String(a)})});if(o===0&&t.params.actionId==="session.delete"){const a=t.params.positionals[1];a!==void 0&&(await this.subagentJobs.closeSession(a),this.sessionStores.delete(a))}o===0&&Mt(t.params.actionId,X.get(t.params.actionId)?.desktop?.mutationKey)&&this.runtime.agentPreparation?.clear(),await this.writeEvent("command.completed",{commandId:e,actionId:t.params.actionId,exitCode:o,success:o===0}),this.logInfo("CLI Desktop command completed.",{commandId:e,actionId:t.params.actionId,exitCode:o,success:o===0})}logInfo(t,e){this.runtime.logger?.info(t,e)}logWarn(t,e){this.runtime.logger?.warn(t,e)}logError(t,e){this.runtime.logger?.error(t,e)}async cancelCommand(t){const e=this.commands.get(t.params.commandId);if(e===void 0)throw new g(y.INVALID_ARGUMENT,"Command is not active.",{category:"command",userMessage:"The requested command is not active."});e.controller.abort(),await this.respond(t,{accepted:!0,commandId:t.params.commandId})}async respond(t,e){await this.writer.write({version:R,id:t.id,type:"response",method:t.method,ok:!0,result:e})}async writeError(t,e,s){await this.writer.write({version:R,id:t,type:"response",method:e,ok:!1,error:s})}async writeEvent(t,e,s={}){const o=typeof e.turnId=="string"?e.turnId:void 0,a=o===void 0?void 0:this.turnContexts.get(o),r=a===void 0?{}:{projectRoot:a.projectRoot,executionCwd:a.executionCwd,executionWorkspaceId:a.id,...a.taskId===void 0?{}:{taskId:a.taskId}};await this.writer.write({version:R,type:"event",scope:typeof e.sessionId=="string"?"session":"control",event:t,data:{...r,...e}},s)}}export{Ke as DESKTOP_PROTOCOL_VERSION,Fe as runDesktopAgentCommand};
@@ -0,0 +1,34 @@
1
+ import type { DesktopHostWireMessage } from './desktop-host-bridge.js';
2
+ export declare const DESKTOP_PROTOCOL_VERSION: 1;
3
+ export declare const TITLE_GENERATION_TIMEOUT_MS = 25000;
4
+ export declare const DESKTOP_SPEECH_SYNTHESIS_TIMEOUT_MS = 60000;
5
+ export declare const DESKTOP_SPEECH_MAX_BYTES = 2500000;
6
+ export type DesktopResponse = {
7
+ version: 1;
8
+ id: string;
9
+ type: 'response';
10
+ method: string;
11
+ ok: true;
12
+ result?: unknown;
13
+ } | {
14
+ version: 1;
15
+ id: string;
16
+ type: 'response';
17
+ method: string;
18
+ ok: false;
19
+ error: DesktopError;
20
+ };
21
+ export type DesktopEvent = {
22
+ version: 1;
23
+ type: 'event';
24
+ scope: 'session' | 'control';
25
+ event: string;
26
+ data: Record<string, unknown>;
27
+ };
28
+ export type DesktopError = {
29
+ code: string;
30
+ category: string;
31
+ message: string;
32
+ retryable: boolean;
33
+ };
34
+ export type DesktopWireMessage = DesktopResponse | DesktopEvent | DesktopHostWireMessage;
@@ -0,0 +1 @@
1
+ const _=1,E=25e3,T=6e4,S=25e5;export{_ as DESKTOP_PROTOCOL_VERSION,S as DESKTOP_SPEECH_MAX_BYTES,T as DESKTOP_SPEECH_SYNTHESIS_TIMEOUT_MS,E as TITLE_GENERATION_TIMEOUT_MS};
@@ -0,0 +1,5 @@
1
+ export declare function artifactIdsData(artifactIds: ReadonlySet<string>): Record<string, unknown>;
2
+ export declare function resolveSpeechModel(requested: string | undefined, models: readonly {
3
+ id: string;
4
+ [key: string]: unknown;
5
+ }[]): string;
@@ -0,0 +1 @@
1
+ import{CliError as i}from"../../domain/errors/cli-error.js";import{CLI_ERROR_CODES as a}from"../../domain/errors/error-codes.js";function d(e){return e.size===0?{}:{artifactIds:[...e]}}function s(e,n){if(e!==void 0){const o=n.find(r=>r.id===e);if(o===void 0)throw new i(a.MODEL_NOT_FOUND,`Speech model is not available: ${e}`,{category:"model",userMessage:`Speech model is not available: ${e}.`});if(o.model_category!==void 0&&o.model_category!=="speech")throw new i(a.MODEL_NOT_FOUND,`Model is not a speech model: ${e}`,{category:"model",userMessage:`Model ${e} cannot synthesize speech.`});return e}const l=n.find(o=>o.model_category==="speech")?.id;if(l!==void 0)return l;throw new i(a.MODEL_NOT_FOUND,"No speech model is available.",{category:"model",userMessage:"No speech model is available for Live Chat."})}export{d as artifactIdsData,s as resolveSpeechModel};
@@ -0,0 +1,211 @@
1
+ import type { DesktopCommandInvocation } from './desktop-command-contract.js';
2
+ import { type DesktopExecutionPolicy } from './desktop-execution-policy.js';
3
+ import type { BrowserHostResponse } from './browser-host-tool-executor.js';
4
+ import type { DesktopHostExecutionResponse } from './desktop-host-tool-executor.js';
5
+ import type { ComputerHostResponse } from './computer-host-tool-executor.js';
6
+ type DesktopApprovalRequestDecision = {
7
+ approvalId: string;
8
+ decision: 'allow' | 'deny';
9
+ } | {
10
+ approvalId: string;
11
+ decision: 'redirect';
12
+ message: string;
13
+ };
14
+ export type DesktopRequest = {
15
+ version: 1;
16
+ id: string;
17
+ method: 'initialize';
18
+ params: Record<string, unknown>;
19
+ } | {
20
+ version: 1;
21
+ id: string;
22
+ method: 'session.create';
23
+ params: {
24
+ model?: string;
25
+ name?: string;
26
+ };
27
+ } | {
28
+ version: 1;
29
+ id: string;
30
+ method: 'session.list';
31
+ params: Record<string, unknown>;
32
+ } | {
33
+ version: 1;
34
+ id: string;
35
+ method: 'session.resume';
36
+ params: {
37
+ sessionId: string;
38
+ };
39
+ } | {
40
+ version: 1;
41
+ id: string;
42
+ method: 'extension.listPublicPlugins';
43
+ params: {
44
+ root: string;
45
+ };
46
+ } | {
47
+ version: 1;
48
+ id: string;
49
+ method: 'extension.resolvePublicPluginSource';
50
+ params: {
51
+ root: string;
52
+ name: string;
53
+ };
54
+ } | {
55
+ version: 1;
56
+ id: string;
57
+ method: 'extension.readPublicPluginContribution';
58
+ params: {
59
+ root: string;
60
+ pluginName: string;
61
+ kind: 'skill' | 'mcp' | 'hook';
62
+ sourceName: string;
63
+ };
64
+ } | {
65
+ version: 1;
66
+ id: string;
67
+ method: 'extension.readDetail';
68
+ params: {
69
+ kind: 'hook' | 'skill' | 'plugin' | 'mcp';
70
+ name: string;
71
+ scope?: 'user' | 'project' | 'plugin' | 'builtin';
72
+ pluginName?: string;
73
+ pluginScope?: 'user' | 'project';
74
+ sourceName?: string;
75
+ };
76
+ } | {
77
+ version: 1;
78
+ id: string;
79
+ method: 'extension.readPluginIcon';
80
+ params: {
81
+ name: string;
82
+ scope: 'user' | 'project';
83
+ };
84
+ } | {
85
+ version: 1;
86
+ id: string;
87
+ method: 'title.generate';
88
+ params: {
89
+ prompt: string;
90
+ model?: string;
91
+ };
92
+ } | {
93
+ version: 1;
94
+ id: string;
95
+ method: 'speech.synthesize';
96
+ params: {
97
+ input: string;
98
+ voice: string;
99
+ model?: string;
100
+ responseFormat?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
101
+ };
102
+ } | {
103
+ version: 1;
104
+ id: string;
105
+ method: 'attachment.begin';
106
+ params: {
107
+ attachmentId: string;
108
+ sessionId?: string;
109
+ name: string;
110
+ mimeType: string;
111
+ sizeBytes: number;
112
+ storageName?: string;
113
+ };
114
+ } | {
115
+ version: 1;
116
+ id: string;
117
+ method: 'attachment.chunk';
118
+ params: {
119
+ attachmentId: string;
120
+ index: number;
121
+ dataBase64: string;
122
+ };
123
+ } | {
124
+ version: 1;
125
+ id: string;
126
+ method: 'attachment.complete';
127
+ params: {
128
+ attachmentId: string;
129
+ };
130
+ } | {
131
+ version: 1;
132
+ id: string;
133
+ method: 'attachment.delete';
134
+ params: {
135
+ sessionId: string;
136
+ attachmentId: string;
137
+ };
138
+ } | {
139
+ version: 1;
140
+ id: string;
141
+ method: 'turn.start';
142
+ params: {
143
+ sessionId: string;
144
+ prompt: string;
145
+ model?: string;
146
+ reasoningEffort?: string;
147
+ runId?: string;
148
+ taskId?: string;
149
+ sessionName?: string;
150
+ attachmentIds?: string[];
151
+ skills?: string[];
152
+ execution: DesktopExecutionPolicy;
153
+ };
154
+ } | {
155
+ version: 1;
156
+ id: string;
157
+ method: 'turn.cancel';
158
+ params: {
159
+ turnId: string;
160
+ };
161
+ } | {
162
+ version: 1;
163
+ id: string;
164
+ method: 'approval.respond';
165
+ params: DesktopApprovalRequestDecision;
166
+ } | {
167
+ version: 1;
168
+ id: string;
169
+ method: 'trust.respond';
170
+ params: {
171
+ trustRequestId: string;
172
+ trusted: boolean;
173
+ };
174
+ } | {
175
+ version: 1;
176
+ id: string;
177
+ method: 'model.list';
178
+ params: Record<string, unknown>;
179
+ } | {
180
+ version: 1;
181
+ id: string;
182
+ method: 'auth.status';
183
+ params: Record<string, unknown>;
184
+ } | {
185
+ version: 1;
186
+ id: string;
187
+ method: 'command.list';
188
+ params: Record<string, unknown>;
189
+ } | {
190
+ version: 1;
191
+ id: string;
192
+ method: 'command.execute';
193
+ params: DesktopCommandInvocation;
194
+ } | {
195
+ version: 1;
196
+ id: string;
197
+ method: 'command.cancel';
198
+ params: {
199
+ commandId: string;
200
+ };
201
+ } | {
202
+ version: 1;
203
+ id: string;
204
+ method: 'shutdown';
205
+ params: Record<string, unknown>;
206
+ };
207
+ export declare function parseDesktopRequest(value: unknown): DesktopRequest;
208
+ export declare function isBrowserHostResponse(value: unknown): value is BrowserHostResponse;
209
+ export declare function isDesktopHostResponse(value: unknown): value is DesktopHostExecutionResponse;
210
+ export declare function isComputerHostResponse(value: unknown): value is ComputerHostResponse;
211
+ export {};
@@ -0,0 +1 @@
1
+ import{parseDesktopExecutionPolicy as y}from"./desktop-execution-policy.js";import{RESOURCE_LIMITS as i}from"../../domain/runtime/resource-limits.js";import{GATEWAY_MEDIA_LIMITS as h}from"../../domain/media/gateway-media-contract.js";function F(n){if(!a(n)||n.version!==1||!c(n.id)||!a(n.params)||typeof n.method!="string")throw o("Invalid Desktop protocol request.");const e=n.id,t=n.method,r=n.params;if(t==="initialize"||t==="session.list"||t==="model.list"||t==="auth.status"||t==="command.list"||t==="shutdown")return{version:1,id:e,method:t,params:r};if(t==="session.create")return{version:1,id:e,method:t,params:{...u(r,"model"),...u(r,"name")}};if(t==="session.resume")return{version:1,id:e,method:t,params:{sessionId:s(r,"sessionId")}};if(t==="extension.listPublicPlugins")return{version:1,id:e,method:t,params:{root:m(r,"root")}};if(t==="extension.resolvePublicPluginSource")return{version:1,id:e,method:t,params:{root:m(r,"root"),name:l(r,"name","public plugin")}};if(t==="extension.readPublicPluginContribution")return{version:1,id:e,method:t,params:{root:m(r,"root"),pluginName:l(r,"pluginName","plugin"),kind:b(r),sourceName:l(r,"sourceName","extension")}};if(t==="extension.readDetail")return{version:1,id:e,method:t,params:x(r)};if(t==="extension.readPluginIcon")return{version:1,id:e,method:t,params:{name:l(r,"name","plugin"),scope:B(r,"scope")}};if(t==="title.generate")return{version:1,id:e,method:t,params:{prompt:I(r),...u(r,"model")}};if(t==="speech.synthesize")return{version:1,id:e,method:t,params:{input:q(r),voice:k(r),...u(r,"model"),...S(r)}};if(t==="attachment.begin")return{version:1,id:e,method:t,params:{attachmentId:s(r,"attachmentId"),...N(r,"sessionId"),name:j(r),mimeType:$(r),sizeBytes:E(r),...L(r)}};if(t==="attachment.chunk")return{version:1,id:e,method:t,params:{attachmentId:s(r,"attachmentId"),index:R(r),dataBase64:D(r)}};if(t==="attachment.complete")return{version:1,id:e,method:t,params:{attachmentId:s(r,"attachmentId")}};if(t==="attachment.delete")return{version:1,id:e,method:t,params:{sessionId:s(r,"sessionId"),attachmentId:s(r,"attachmentId")}};if(t==="turn.start")return{version:1,id:e,method:t,params:{sessionId:s(r,"sessionId"),prompt:I(r),...u(r,"model"),...u(r,"reasoningEffort"),...u(r,"runId"),...u(r,"taskId"),...u(r,"sessionName"),...C(r),...K(r),execution:M(r)}};if(t==="turn.cancel")return{version:1,id:e,method:t,params:{turnId:s(r,"turnId")}};if(t==="approval.respond")return{version:1,id:e,method:t,params:P(r)};if(t==="trust.respond")return{version:1,id:e,method:t,params:{trustRequestId:s(r,"trustRequestId"),trusted:z(r,"trusted")}};if(t==="command.execute")return{version:1,id:e,method:t,params:v(r)};if(t==="command.cancel")return{version:1,id:e,method:t,params:{commandId:s(r,"commandId")}};throw o("Unsupported Desktop protocol method.")}function H(n){return!a(n)||n.version!==1||n.type!=="host.response"||n.tool!=="browser"||!c(n.requestId)||typeof n.ok!="boolean"?!1:n.error===void 0||a(n.error)}function O(n){return!a(n)||n.version!==1||n.type!=="host.response"||!["filesystem","shell","git","artifact"].includes(String(n.tool))||!c(n.requestId)||typeof n.ok!="boolean"?!1:n.error===void 0||a(n.error)}function U(n){return!a(n)||n.version!==1||n.type!=="host.response"||n.tool!=="computer"||!c(n.requestId)||typeof n.ok!="boolean"?!1:n.error===void 0||a(n.error)}function v(n){const e=s(n,"actionId"),t=n.positionals;if(!Array.isArray(t)||t.some(f=>typeof f!="string"||Buffer.byteLength(f,"utf8")>i.jsonlPromptBytes))throw o("Invalid command positionals.");const r=n.options;if(!a(r)||Object.entries(r).some(([f,p])=>!c(f)||typeof p!="string"&&typeof p!="boolean"||typeof p=="string"&&Buffer.byteLength(p,"utf8")>i.jsonlPromptBytes))throw o("Invalid command options.");const d=n.secrets;if(d===void 0)return{actionId:e,positionals:t,options:r};if(e!=="auth.login.direct"||!a(d)||Object.keys(d).some(f=>f!=="apiKey")||typeof d.apiKey!="string"||d.apiKey.length===0||Buffer.byteLength(d.apiKey,"utf8")>i.jsonlPromptBytes)throw o("Invalid command secrets.");return{actionId:e,positionals:t,options:r,secrets:{apiKey:d.apiKey}}}function s(n,e){const t=n[e];if(!c(t))throw o(`Invalid ${e}.`);return t}function m(n,e){const t=n[e];if(typeof t!="string"||t.trim().length===0||t.includes("\0")||Buffer.byteLength(t,"utf8")>i.jsonlPathBytes)throw o(`Invalid ${e}.`);return t}function l(n,e,t){const r=n[e];if(typeof r!="string"||!/^[a-z0-9][a-z0-9-]{0,63}$/u.test(r))throw o(`Invalid ${t} name.`);return r}function w(n,e){const t=n[e];if(typeof t!="string"||t.length===0||t.length>256||t.includes("\0")||!/^[a-z0-9][a-z0-9:_-]*$/u.test(t))throw o("Invalid extension name.");return t}function b(n){const e=n.kind;if(e!=="skill"&&e!=="mcp"&&e!=="hook")throw o("Invalid extension kind.");return e}function B(n,e){const t=n[e];if(t!=="user"&&t!=="project")throw o(`Invalid ${e}.`);return t}function x(n){const e=n.kind;if(e!=="hook"&&e!=="skill"&&e!=="plugin"&&e!=="mcp")throw o("Invalid extension kind.");const t=n.scope;if(t!==void 0&&t!=="user"&&t!=="project"&&t!=="plugin"&&t!=="builtin")throw o("Invalid extension scope.");const r=w(n,"name");return{kind:e,name:r,...t===void 0?{}:{scope:t},...g(n,"pluginName"),...A(n,"pluginScope"),...g(n,"sourceName")}}function g(n,e){const t=n[e];if(t===void 0)return{};if(typeof t!="string"||!/^[a-z0-9][a-z0-9-]{0,63}$/u.test(t))throw o(`Invalid ${e}.`);return{[e]:t}}function A(n,e){const t=n[e];if(t===void 0)return{};if(t!=="user"&&t!=="project")throw o(`Invalid ${e}.`);return{[e]:t}}function I(n){const e=n.prompt;if(typeof e!="string"||e.trim().length===0||Buffer.byteLength(e,"utf8")>i.jsonlPromptBytes)throw o("Invalid prompt.");return e}function q(n){const e=n.input;if(typeof e!="string"||e.trim().length===0||[...e].length>h.speechInputCharacters)throw o("Invalid speech input.");return e}function k(n){const e=n.voice;if(typeof e!="string"||e.trim().length===0||[...e].length>h.speechVoiceCharacters)throw o("Invalid speech voice.");return e}function S(n){const e=n.responseFormat;if(e===void 0)return{};if(e!=="mp3"&&e!=="opus"&&e!=="aac"&&e!=="flac"&&e!=="wav"&&e!=="pcm")throw o("Invalid speech response format.");return{responseFormat:e}}function z(n,e){if(typeof n[e]!="boolean")throw o(`Invalid ${e}.`);return n[e]}function P(n){const e=s(n,"approvalId"),t=n.decision;if(t!=="allow"&&t!=="deny"&&t!=="redirect")throw o("Invalid approval decision.");const r=n.message;if(r!==void 0&&(typeof r!="string"||r.trim().length===0||Buffer.byteLength(r,"utf8")>i.jsonlPromptBytes))throw o("Invalid approval message.");if(t==="redirect"&&r===void 0)throw o("Approval redirect requires a message.");if(t!=="redirect"&&r!==void 0)throw o("Approval message is only valid for redirect decisions.");return t==="redirect"?{approvalId:e,decision:t,message:r}:{approvalId:e,decision:t}}function u(n,e){const t=n[e];if(t===void 0)return{};if(typeof t!="string"||t.length===0||Buffer.byteLength(t,"utf8")>i.jsonlIdBytes)throw o(`Invalid ${e}.`);return{[e]:t}}function N(n,e){const t=n[e];if(t===void 0)return{};if(!c(t))throw o(`Invalid ${e}.`);return{[e]:t}}function j(n){const e=n.name;if(typeof e!="string"||e.length===0||e.length>200||e.includes("\0"))throw o("Invalid attachment name.");return e}function $(n){const e=n.mimeType;if(typeof e!="string"||!/^[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/u.test(e)||Buffer.byteLength(e,"utf8")>i.jsonlIdBytes)throw o("Invalid attachment MIME type.");return e}function E(n){const e=n.sizeBytes;if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0||e>i.maxAttachmentBytes)throw o("Invalid attachment size.");return e}function L(n){const e=n.storageName;if(e===void 0)return{};if(typeof e!="string"||e.length===0||e.length>200||e.includes("\0")||/[\\/]/u.test(e))throw o("Invalid attachment storage name.");return{storageName:e}}function R(n){const e=n.index;if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw o("Invalid attachment chunk index.");return e}function D(n){const e=n.dataBase64;if(typeof e!="string"||e.length===0||Buffer.byteLength(e,"utf8")>Math.ceil(i.desktopAttachmentChunkBytes/3)*4+4)throw o("Invalid attachment chunk.");return e}function C(n){const e=n.attachmentIds;if(e===void 0)return{};if(!Array.isArray(e)||e.length>i.pendingAttachments||e.some(t=>!c(t))||new Set(e).size!==e.length)throw o("Invalid attachment ids.");return{attachmentIds:e}}function K(n){const e=n.skills;if(e===void 0)return{};if(!Array.isArray(e)||e.length>32||e.some(t=>!c(t))||new Set(e).size!==e.length)throw o("Invalid skills.");return{skills:e}}function M(n){return y(n.execution)}function c(n){return typeof n=="string"&&n.length>0&&Buffer.byteLength(n,"utf8")<=i.jsonlIdBytes}function a(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function o(n){return new Error(n)}export{H as isBrowserHostResponse,U as isComputerHostResponse,O as isDesktopHostResponse,F as parseDesktopRequest};