@ashx-j/lunr 0.2.26 → 0.2.27

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 (639) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/LICENSE +22 -0
  3. package/dist/builtin-extensions/ashxj-thinking.d.ts +1 -1
  4. package/dist/builtin-extensions/ashxj-thinking.d.ts.map +1 -1
  5. package/dist/builtin-extensions/ashxj-thinking.js +1 -1
  6. package/dist/builtin-extensions/ashxj-thinking.js.map +1 -1
  7. package/dist/builtin-extensions/ashxj-tui.d.ts +11 -1
  8. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  9. package/dist/builtin-extensions/ashxj-tui.js +6 -10
  10. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  11. package/dist/builtin-extensions/lunr-cron.d.ts +4 -5
  12. package/dist/builtin-extensions/lunr-cron.d.ts.map +1 -1
  13. package/dist/builtin-extensions/lunr-cron.js +94 -108
  14. package/dist/builtin-extensions/lunr-cron.js.map +1 -1
  15. package/dist/builtin-extensions/lunr-local-providers/local-servers.d.ts.map +1 -1
  16. package/dist/builtin-extensions/lunr-local-providers/local-servers.js +3 -1
  17. package/dist/builtin-extensions/lunr-local-providers/local-servers.js.map +1 -1
  18. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.d.ts.map +1 -1
  19. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js +2 -2
  20. package/dist/builtin-extensions/narumiruna-pi-goal/src/commands.js.map +1 -1
  21. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.d.ts.map +1 -1
  22. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js +1 -1
  23. package/dist/builtin-extensions/narumiruna-pi-goal/src/goal.js.map +1 -1
  24. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.d.ts.map +1 -1
  25. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js +1 -1
  26. package/dist/builtin-extensions/narumiruna-pi-goal/src/runtime.js.map +1 -1
  27. package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
  28. package/dist/builtin-extensions/pi-intercom/index.js +2 -2
  29. package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
  30. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts +1 -1
  31. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.d.ts.map +1 -1
  32. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js +1 -1
  33. package/dist/builtin-extensions/pi-lsp-extension/bemol-extension/index.js.map +1 -1
  34. package/dist/builtin-extensions/pi-lsp-extension/src/index.d.ts.map +1 -1
  35. package/dist/builtin-extensions/pi-lsp-extension/src/index.js +1 -15
  36. package/dist/builtin-extensions/pi-lsp-extension/src/index.js.map +1 -1
  37. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts +6 -0
  38. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js +187 -132
  40. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-client.js.map +1 -1
  41. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts +8 -0
  42. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js +142 -112
  44. package/dist/builtin-extensions/pi-lsp-extension/src/lsp-manager.js.map +1 -1
  45. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts +12 -1
  46. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js +14 -7
  48. package/dist/builtin-extensions/pi-lsp-extension/src/tools/code-rewrite.js.map +1 -1
  49. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts +11 -3
  50. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js +67 -41
  52. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/rewrite-engine.js.map +1 -1
  53. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts +4 -2
  54. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.d.ts.map +1 -1
  55. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js +3 -0
  56. package/dist/builtin-extensions/pi-lsp-extension/src/tree-sitter/search-engine.js.map +1 -1
  57. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts +2 -1
  58. package/dist/builtin-extensions/pi-mcp-adapter/commands.d.ts.map +1 -1
  59. package/dist/builtin-extensions/pi-mcp-adapter/commands.js +6 -6
  60. package/dist/builtin-extensions/pi-mcp-adapter/commands.js.map +1 -1
  61. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts +1 -1
  62. package/dist/builtin-extensions/pi-mcp-adapter/config.d.ts.map +1 -1
  63. package/dist/builtin-extensions/pi-mcp-adapter/config.js +11 -5
  64. package/dist/builtin-extensions/pi-mcp-adapter/config.js.map +1 -1
  65. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.d.ts.map +1 -1
  66. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js +2 -2
  67. package/dist/builtin-extensions/pi-mcp-adapter/direct-tool-executor.js.map +1 -1
  68. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.d.ts.map +1 -1
  69. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js +1 -1
  70. package/dist/builtin-extensions/pi-mcp-adapter/host-html-template.js.map +1 -1
  71. package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
  72. package/dist/builtin-extensions/pi-mcp-adapter/index.js +48 -40
  73. package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
  74. package/dist/builtin-extensions/pi-mcp-adapter/init.d.ts.map +1 -1
  75. package/dist/builtin-extensions/pi-mcp-adapter/init.js +3 -1
  76. package/dist/builtin-extensions/pi-mcp-adapter/init.js.map +1 -1
  77. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts +12 -40
  78. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.d.ts.map +1 -1
  79. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js +166 -235
  80. package/dist/builtin-extensions/pi-mcp-adapter/mcp-auth-flow.js.map +1 -1
  81. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts +5 -0
  82. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.d.ts.map +1 -1
  83. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js +43 -13
  84. package/dist/builtin-extensions/pi-mcp-adapter/mcp-callback-server.js.map +1 -1
  85. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts +14 -3
  86. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.d.ts.map +1 -1
  87. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js +73 -21
  88. package/dist/builtin-extensions/pi-mcp-adapter/mcp-oauth-provider.js.map +1 -1
  89. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.d.ts.map +1 -1
  90. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js +4 -4
  91. package/dist/builtin-extensions/pi-mcp-adapter/proxy-modes.js.map +1 -1
  92. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.d.ts.map +1 -1
  93. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js +2 -2
  94. package/dist/builtin-extensions/pi-mcp-adapter/server-manager.js.map +1 -1
  95. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts +2 -0
  96. package/dist/builtin-extensions/pi-mcp-adapter/state.d.ts.map +1 -1
  97. package/dist/builtin-extensions/pi-mcp-adapter/state.js.map +1 -1
  98. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts +1 -1
  99. package/dist/builtin-extensions/pi-ollama-cloud/index.d.ts.map +1 -1
  100. package/dist/builtin-extensions/pi-ollama-cloud/index.js +1 -1
  101. package/dist/builtin-extensions/pi-ollama-cloud/index.js.map +1 -1
  102. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts +11 -5
  103. package/dist/builtin-extensions/pi-ollama-cloud/models.d.ts.map +1 -1
  104. package/dist/builtin-extensions/pi-ollama-cloud/models.js +12 -32
  105. package/dist/builtin-extensions/pi-ollama-cloud/models.js.map +1 -1
  106. package/dist/builtin-extensions/pi-prompt-template-model/index.d.ts.map +1 -1
  107. package/dist/builtin-extensions/pi-prompt-template-model/index.js +5 -3
  108. package/dist/builtin-extensions/pi-prompt-template-model/index.js.map +1 -1
  109. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts +2 -1
  110. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.d.ts.map +1 -1
  111. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js +21 -12
  112. package/dist/builtin-extensions/pi-prompt-template-model/prompt-loader.js.map +1 -1
  113. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.d.ts.map +1 -1
  114. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js +7 -24
  115. package/dist/builtin-extensions/pi-prompt-template-model/tool-manager.js.map +1 -1
  116. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  117. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +39 -77
  118. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  119. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts +1 -1
  120. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.d.ts.map +1 -1
  121. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js +15 -31
  122. package/dist/builtin-extensions/pi-subagents/src/runs/background/notify.js.map +1 -1
  123. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.d.ts.map +1 -1
  124. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js +7 -2
  125. package/dist/builtin-extensions/pi-subagents/src/runs/background/result-watcher.js.map +1 -1
  126. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  127. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +10 -2
  128. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  129. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  130. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +8 -1
  131. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  132. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  133. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +106 -24
  134. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  135. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  136. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +25 -5
  137. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  138. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +1 -1
  139. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  140. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +1 -1
  141. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  142. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +7 -8
  143. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  144. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js +60 -32
  145. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  146. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts +1 -1
  147. package/dist/builtin-extensions/pi-subagents/src/shared/utils.d.ts.map +1 -1
  148. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js +15 -5
  149. package/dist/builtin-extensions/pi-subagents/src/shared/utils.js.map +1 -1
  150. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.d.ts.map +1 -1
  151. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js +4 -3
  152. package/dist/builtin-extensions/pi-subagents/src/slash/prompt-workflows.js.map +1 -1
  153. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts +1 -1
  154. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  155. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +17 -8
  156. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  157. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.d.ts.map +1 -1
  158. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js +3 -3
  159. package/dist/builtin-extensions/pi-subagents/src/watchdog/review.js.map +1 -1
  160. package/dist/builtin-extensions/pi-tps.d.ts.map +1 -1
  161. package/dist/builtin-extensions/pi-tps.js +20 -17
  162. package/dist/builtin-extensions/pi-tps.js.map +1 -1
  163. package/dist/builtin-extensions/pi-web-access/activity.d.ts +1 -0
  164. package/dist/builtin-extensions/pi-web-access/activity.d.ts.map +1 -1
  165. package/dist/builtin-extensions/pi-web-access/activity.js +27 -5
  166. package/dist/builtin-extensions/pi-web-access/activity.js.map +1 -1
  167. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts +3 -0
  168. package/dist/builtin-extensions/pi-web-access/bounded-body.d.ts.map +1 -0
  169. package/dist/builtin-extensions/pi-web-access/bounded-body.js +43 -0
  170. package/dist/builtin-extensions/pi-web-access/bounded-body.js.map +1 -0
  171. package/dist/builtin-extensions/pi-web-access/content-page.d.ts +24 -0
  172. package/dist/builtin-extensions/pi-web-access/content-page.d.ts.map +1 -0
  173. package/dist/builtin-extensions/pi-web-access/content-page.js +57 -0
  174. package/dist/builtin-extensions/pi-web-access/content-page.js.map +1 -0
  175. package/dist/builtin-extensions/pi-web-access/extract.d.ts.map +1 -1
  176. package/dist/builtin-extensions/pi-web-access/extract.js +7 -2
  177. package/dist/builtin-extensions/pi-web-access/extract.js.map +1 -1
  178. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts +0 -1
  179. package/dist/builtin-extensions/pi-web-access/github-extract.d.ts.map +1 -1
  180. package/dist/builtin-extensions/pi-web-access/github-extract.js +147 -36
  181. package/dist/builtin-extensions/pi-web-access/github-extract.js.map +1 -1
  182. package/dist/builtin-extensions/pi-web-access/index.d.ts.map +1 -1
  183. package/dist/builtin-extensions/pi-web-access/index.js +48 -73
  184. package/dist/builtin-extensions/pi-web-access/index.js.map +1 -1
  185. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts +12 -4
  186. package/dist/builtin-extensions/pi-web-access/session-cleanup.d.ts.map +1 -1
  187. package/dist/builtin-extensions/pi-web-access/session-cleanup.js +35 -12
  188. package/dist/builtin-extensions/pi-web-access/session-cleanup.js.map +1 -1
  189. package/dist/builtin-extensions/pi-web-access/storage.d.ts +9 -6
  190. package/dist/builtin-extensions/pi-web-access/storage.d.ts.map +1 -1
  191. package/dist/builtin-extensions/pi-web-access/storage.js +36 -24
  192. package/dist/builtin-extensions/pi-web-access/storage.js.map +1 -1
  193. package/dist/builtin-extensions/simple-pi-memory.d.ts +1 -1
  194. package/dist/builtin-extensions/simple-pi-memory.d.ts.map +1 -1
  195. package/dist/builtin-extensions/simple-pi-memory.js +1 -1
  196. package/dist/builtin-extensions/simple-pi-memory.js.map +1 -1
  197. package/dist/cli/install-cli.d.ts.map +1 -1
  198. package/dist/cli/install-cli.js +38 -30
  199. package/dist/cli/install-cli.js.map +1 -1
  200. package/dist/core/agent-session-runtime.d.ts +13 -0
  201. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  202. package/dist/core/agent-session-runtime.js +75 -11
  203. package/dist/core/agent-session-runtime.js.map +1 -1
  204. package/dist/core/agent-session-services.d.ts +1 -0
  205. package/dist/core/agent-session-services.d.ts.map +1 -1
  206. package/dist/core/agent-session-services.js +1 -0
  207. package/dist/core/agent-session-services.js.map +1 -1
  208. package/dist/core/agent-session.d.ts +40 -6
  209. package/dist/core/agent-session.d.ts.map +1 -1
  210. package/dist/core/agent-session.js +309 -76
  211. package/dist/core/agent-session.js.map +1 -1
  212. package/dist/core/browser/runtime.d.ts +2 -0
  213. package/dist/core/browser/runtime.d.ts.map +1 -1
  214. package/dist/core/browser/runtime.js +80 -45
  215. package/dist/core/browser/runtime.js.map +1 -1
  216. package/dist/core/browser/setup.d.ts.map +1 -1
  217. package/dist/core/browser/setup.js +12 -1
  218. package/dist/core/browser/setup.js.map +1 -1
  219. package/dist/core/computer-use/adapter.d.ts.map +1 -1
  220. package/dist/core/computer-use/adapter.js +7 -2
  221. package/dist/core/computer-use/adapter.js.map +1 -1
  222. package/dist/core/computer-use/image.d.ts.map +1 -1
  223. package/dist/core/computer-use/image.js +17 -5
  224. package/dist/core/computer-use/image.js.map +1 -1
  225. package/dist/core/computer-use/schemas.d.ts.map +1 -1
  226. package/dist/core/computer-use/schemas.js +23 -6
  227. package/dist/core/computer-use/schemas.js.map +1 -1
  228. package/dist/core/computer-use/workflow.d.ts.map +1 -1
  229. package/dist/core/computer-use/workflow.js +459 -119
  230. package/dist/core/computer-use/workflow.js.map +1 -1
  231. package/dist/core/cron/jobs.d.ts +26 -8
  232. package/dist/core/cron/jobs.d.ts.map +1 -1
  233. package/dist/core/cron/jobs.js +357 -232
  234. package/dist/core/cron/jobs.js.map +1 -1
  235. package/dist/core/cron/origin-context.d.ts +1 -0
  236. package/dist/core/cron/origin-context.d.ts.map +1 -1
  237. package/dist/core/cron/origin-context.js.map +1 -1
  238. package/dist/core/cron/scheduler.d.ts +22 -17
  239. package/dist/core/cron/scheduler.d.ts.map +1 -1
  240. package/dist/core/cron/scheduler.js +153 -73
  241. package/dist/core/cron/scheduler.js.map +1 -1
  242. package/dist/core/extensions/index.d.ts +1 -1
  243. package/dist/core/extensions/index.d.ts.map +1 -1
  244. package/dist/core/extensions/index.js.map +1 -1
  245. package/dist/core/extensions/runner.d.ts +1 -0
  246. package/dist/core/extensions/runner.d.ts.map +1 -1
  247. package/dist/core/extensions/runner.js +8 -0
  248. package/dist/core/extensions/runner.js.map +1 -1
  249. package/dist/core/extensions/types.d.ts +8 -0
  250. package/dist/core/extensions/types.d.ts.map +1 -1
  251. package/dist/core/extensions/types.js.map +1 -1
  252. package/dist/core/footer-data-provider.d.ts +4 -0
  253. package/dist/core/footer-data-provider.d.ts.map +1 -1
  254. package/dist/core/footer-data-provider.js +22 -1
  255. package/dist/core/footer-data-provider.js.map +1 -1
  256. package/dist/core/large-subagent-launch.d.ts +1 -1
  257. package/dist/core/large-subagent-launch.d.ts.map +1 -1
  258. package/dist/core/large-subagent-launch.js +7 -7
  259. package/dist/core/large-subagent-launch.js.map +1 -1
  260. package/dist/core/model-registry.d.ts +2 -0
  261. package/dist/core/model-registry.d.ts.map +1 -1
  262. package/dist/core/model-registry.js +5 -0
  263. package/dist/core/model-registry.js.map +1 -1
  264. package/dist/core/model-runtime.d.ts +4 -1
  265. package/dist/core/model-runtime.d.ts.map +1 -1
  266. package/dist/core/model-runtime.js +40 -4
  267. package/dist/core/model-runtime.js.map +1 -1
  268. package/dist/core/package-manager.d.ts.map +1 -1
  269. package/dist/core/package-manager.js.map +1 -1
  270. package/dist/core/permissions.d.ts +3 -3
  271. package/dist/core/permissions.d.ts.map +1 -1
  272. package/dist/core/permissions.js +11 -35
  273. package/dist/core/permissions.js.map +1 -1
  274. package/dist/core/plan-mode.d.ts +5 -13
  275. package/dist/core/plan-mode.d.ts.map +1 -1
  276. package/dist/core/plan-mode.js +126 -116
  277. package/dist/core/plan-mode.js.map +1 -1
  278. package/dist/core/project-trust.d.ts.map +1 -1
  279. package/dist/core/project-trust.js +1 -1
  280. package/dist/core/project-trust.js.map +1 -1
  281. package/dist/core/prompt-resource-bridge.d.ts +12 -0
  282. package/dist/core/prompt-resource-bridge.d.ts.map +1 -0
  283. package/dist/core/prompt-resource-bridge.js +9 -0
  284. package/dist/core/prompt-resource-bridge.js.map +1 -0
  285. package/dist/core/protected-targets.d.ts +6 -0
  286. package/dist/core/protected-targets.d.ts.map +1 -0
  287. package/dist/core/protected-targets.js +45 -0
  288. package/dist/core/protected-targets.js.map +1 -0
  289. package/dist/core/resource-loader.d.ts.map +1 -1
  290. package/dist/core/resource-loader.js +7 -0
  291. package/dist/core/resource-loader.js.map +1 -1
  292. package/dist/core/rollback.d.ts +19 -3
  293. package/dist/core/rollback.d.ts.map +1 -1
  294. package/dist/core/rollback.js +172 -56
  295. package/dist/core/rollback.js.map +1 -1
  296. package/dist/core/runtime-credentials.d.ts +3 -0
  297. package/dist/core/runtime-credentials.d.ts.map +1 -1
  298. package/dist/core/runtime-credentials.js +14 -1
  299. package/dist/core/runtime-credentials.js.map +1 -1
  300. package/dist/core/sdk.d.ts +3 -0
  301. package/dist/core/sdk.d.ts.map +1 -1
  302. package/dist/core/sdk.js +1 -0
  303. package/dist/core/sdk.js.map +1 -1
  304. package/dist/core/session-manager.d.ts +6 -0
  305. package/dist/core/session-manager.d.ts.map +1 -1
  306. package/dist/core/session-manager.js +95 -32
  307. package/dist/core/session-manager.js.map +1 -1
  308. package/dist/core/session-ownership.d.ts.map +1 -1
  309. package/dist/core/session-ownership.js +8 -3
  310. package/dist/core/session-ownership.js.map +1 -1
  311. package/dist/core/session-retention.d.ts.map +1 -1
  312. package/dist/core/session-retention.js +18 -7
  313. package/dist/core/session-retention.js.map +1 -1
  314. package/dist/core/session-startup-settings.d.ts +10 -0
  315. package/dist/core/session-startup-settings.d.ts.map +1 -0
  316. package/dist/core/session-startup-settings.js +70 -0
  317. package/dist/core/session-startup-settings.js.map +1 -0
  318. package/dist/core/subscriptions.d.ts +16 -7
  319. package/dist/core/subscriptions.d.ts.map +1 -1
  320. package/dist/core/subscriptions.js +96 -55
  321. package/dist/core/subscriptions.js.map +1 -1
  322. package/dist/core/trust-manager.d.ts +2 -1
  323. package/dist/core/trust-manager.d.ts.map +1 -1
  324. package/dist/core/trust-manager.js +6 -1
  325. package/dist/core/trust-manager.js.map +1 -1
  326. package/dist/core/update-check.d.ts.map +1 -1
  327. package/dist/core/update-check.js.map +1 -1
  328. package/dist/core/usage-adapters/kimi-coding.d.ts +2 -2
  329. package/dist/core/usage-adapters/kimi-coding.d.ts.map +1 -1
  330. package/dist/core/usage-adapters/kimi-coding.js +2 -2
  331. package/dist/core/usage-adapters/kimi-coding.js.map +1 -1
  332. package/dist/core/usage-adapters/openai-codex.d.ts +3 -2
  333. package/dist/core/usage-adapters/openai-codex.d.ts.map +1 -1
  334. package/dist/core/usage-adapters/openai-codex.js +3 -3
  335. package/dist/core/usage-adapters/openai-codex.js.map +1 -1
  336. package/dist/core/usage-adapters/xai.d.ts +2 -2
  337. package/dist/core/usage-adapters/xai.d.ts.map +1 -1
  338. package/dist/core/usage-adapters/xai.js +3 -3
  339. package/dist/core/usage-adapters/xai.js.map +1 -1
  340. package/dist/core/usage-adapters/zai.d.ts +2 -2
  341. package/dist/core/usage-adapters/zai.d.ts.map +1 -1
  342. package/dist/core/usage-adapters/zai.js +2 -2
  343. package/dist/core/usage-adapters/zai.js.map +1 -1
  344. package/dist/core/usage-service.d.ts +9 -2
  345. package/dist/core/usage-service.d.ts.map +1 -1
  346. package/dist/core/usage-service.js +95 -50
  347. package/dist/core/usage-service.js.map +1 -1
  348. package/dist/gateway/agent-bridge.d.ts +9 -1
  349. package/dist/gateway/agent-bridge.d.ts.map +1 -1
  350. package/dist/gateway/agent-bridge.js +91 -37
  351. package/dist/gateway/agent-bridge.js.map +1 -1
  352. package/dist/gateway/buttons.d.ts +8 -1
  353. package/dist/gateway/buttons.d.ts.map +1 -1
  354. package/dist/gateway/buttons.js +76 -18
  355. package/dist/gateway/buttons.js.map +1 -1
  356. package/dist/gateway/commands.d.ts +1 -0
  357. package/dist/gateway/commands.d.ts.map +1 -1
  358. package/dist/gateway/commands.js +10 -4
  359. package/dist/gateway/commands.js.map +1 -1
  360. package/dist/gateway/cron.d.ts +12 -11
  361. package/dist/gateway/cron.d.ts.map +1 -1
  362. package/dist/gateway/cron.js +65 -56
  363. package/dist/gateway/cron.js.map +1 -1
  364. package/dist/gateway/index.d.ts.map +1 -1
  365. package/dist/gateway/index.js +2 -1
  366. package/dist/gateway/index.js.map +1 -1
  367. package/dist/gateway/mobile-commands.d.ts +1 -0
  368. package/dist/gateway/mobile-commands.d.ts.map +1 -1
  369. package/dist/gateway/mobile-commands.js +56 -14
  370. package/dist/gateway/mobile-commands.js.map +1 -1
  371. package/dist/gateway/presenter.d.ts +12 -2
  372. package/dist/gateway/presenter.d.ts.map +1 -1
  373. package/dist/gateway/presenter.js +73 -38
  374. package/dist/gateway/presenter.js.map +1 -1
  375. package/dist/gateway/router.d.ts +2 -2
  376. package/dist/gateway/router.d.ts.map +1 -1
  377. package/dist/gateway/router.js +17 -2
  378. package/dist/gateway/router.js.map +1 -1
  379. package/dist/gateway/service.d.ts +2 -0
  380. package/dist/gateway/service.d.ts.map +1 -1
  381. package/dist/gateway/service.js +153 -0
  382. package/dist/gateway/service.js.map +1 -1
  383. package/dist/main.d.ts.map +1 -1
  384. package/dist/main.js +86 -33
  385. package/dist/main.js.map +1 -1
  386. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  387. package/dist/modes/interactive/components/assistant-message.js +6 -4
  388. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  389. package/dist/modes/interactive/components/copyable-text.d.ts.map +1 -1
  390. package/dist/modes/interactive/components/copyable-text.js +3 -2
  391. package/dist/modes/interactive/components/copyable-text.js.map +1 -1
  392. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  393. package/dist/modes/interactive/components/extension-editor.js +1 -1
  394. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  395. package/dist/modes/interactive/interactive-mode.d.ts +2 -2
  396. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  397. package/dist/modes/interactive/interactive-mode.js +96 -109
  398. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  399. package/dist/modes/interactive/smooth-streaming.d.ts.map +1 -1
  400. package/dist/modes/interactive/smooth-streaming.js.map +1 -1
  401. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  402. package/dist/modes/rpc/rpc-mode.js +2 -1
  403. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  404. package/dist/node-runtime/{adapter-VFG7WNPX.js → adapter-247RTYLS.js} +4 -5
  405. package/dist/node-runtime/agent-session-services-KDMSPQDY.js +53 -0
  406. package/dist/node-runtime/{brave-UWDA3I22.js → brave-2AFFAXNN.js} +1 -1
  407. package/dist/node-runtime/{builtin-extensions-I2HIFEMY.js → builtin-extensions-OX6KELNX.js} +8 -7
  408. package/dist/node-runtime/{chunk-QH6YL7VK.js → chunk-252ZVPPF.js} +3 -3
  409. package/dist/node-runtime/{chunk-PCEW76PM.js → chunk-2OIPYKLZ.js} +6 -6
  410. package/dist/node-runtime/{chunk-XBWPBZBN.js → chunk-2SWW7KMW.js} +1 -1
  411. package/dist/node-runtime/{chunk-UQUCFAJ3.js → chunk-2VIW3IMF.js} +40 -7
  412. package/dist/node-runtime/{chunk-UOEDI7RP.js → chunk-4KNKQGHM.js} +2 -2
  413. package/dist/node-runtime/{chunk-FQMM2EZ2.js → chunk-64XTQNLA.js} +29 -7
  414. package/dist/node-runtime/{chunk-SPVDBUOS.js → chunk-6O3IW3IA.js} +2 -2
  415. package/dist/node-runtime/{chunk-5ZQXRPMC.js → chunk-6ZZHGUSA.js} +2 -2
  416. package/dist/node-runtime/chunk-A2WO6WIN.js +1197 -0
  417. package/dist/node-runtime/{chunk-WIF24I7G.js → chunk-APVM5NEU.js} +149 -144
  418. package/dist/node-runtime/{chunk-RCR3XAQY.js → chunk-AYHH7YSD.js} +177 -144
  419. package/dist/node-runtime/{chunk-LWYIVUGV.js → chunk-B2IBAXNX.js} +48 -31
  420. package/dist/node-runtime/{chunk-M3LZLQW2.js → chunk-BDRGN3L2.js} +1 -0
  421. package/dist/node-runtime/{chunk-GJ2RDBRL.js → chunk-BYC6RKCN.js} +4 -2
  422. package/dist/node-runtime/{chunk-UVWCDQYF.js → chunk-C3P6Q3B2.js} +455 -278
  423. package/dist/node-runtime/{chunk-SN2KSMPQ.js → chunk-DQSCFU7R.js} +13 -7
  424. package/dist/node-runtime/{chunk-4SBQAI4T.js → chunk-EBLAZVSA.js} +2058 -73
  425. package/dist/node-runtime/{chunk-2KIPT4HJ.js → chunk-EPR2F3GU.js} +68 -20
  426. package/dist/node-runtime/{chunk-CSFI6YXL.js → chunk-ES6PBSIE.js} +1 -1
  427. package/dist/node-runtime/{chunk-IF24A3FH.js → chunk-EVM653DD.js} +4 -4
  428. package/dist/node-runtime/{chunk-HTFRRDSF.js → chunk-F2SMQ6ES.js} +3 -2
  429. package/dist/node-runtime/chunk-F2V2F4ZG.js +114 -0
  430. package/dist/node-runtime/{chunk-IKU6Y7DL.js → chunk-FE3WZI7F.js} +9 -6
  431. package/dist/node-runtime/{chunk-GYIXXQAO.js → chunk-FIRA54AC.js} +2 -5
  432. package/dist/node-runtime/{chunk-6VYZ5UFP.js → chunk-FLGEEH27.js} +1 -1
  433. package/dist/node-runtime/{chunk-5EFIU3OM.js → chunk-FTKEZL27.js} +1 -1
  434. package/dist/node-runtime/{chunk-RGQAEOM5.js → chunk-FYIFPFXE.js} +23 -6
  435. package/dist/node-runtime/{chunk-HMBGROQK.js → chunk-GLDXBBL6.js} +3 -3
  436. package/dist/node-runtime/{chunk-KWA4OC2J.js → chunk-H6YBCWKG.js} +1 -1
  437. package/dist/node-runtime/{chunk-2MI5OPMN.js → chunk-HNNHHJAB.js} +68 -50
  438. package/dist/node-runtime/{chunk-I74LN5JG.js → chunk-HUD2RFJW.js} +2 -2
  439. package/dist/node-runtime/{chunk-I54LGHWM.js → chunk-I2H5QMWW.js} +3 -3
  440. package/dist/node-runtime/{chunk-XHIRAZ26.js → chunk-IAZSK7KK.js} +1 -1
  441. package/dist/node-runtime/{chunk-X3PGBLQ7.js → chunk-IHHTWSXN.js} +9 -9
  442. package/dist/node-runtime/{chunk-DAPBPCBP.js → chunk-IPP5BIV5.js} +25 -3
  443. package/dist/node-runtime/{chunk-QFWG2RVL.js → chunk-IXG6F4NT.js} +11 -0
  444. package/dist/node-runtime/{chunk-RDDAZOMU.js → chunk-JL4HYQXK.js} +1 -1
  445. package/dist/node-runtime/{chunk-CDVHZOOK.js → chunk-JQYNHAKX.js} +1 -1
  446. package/dist/node-runtime/{chunk-L24TPBS4.js → chunk-JWEVT363.js} +37 -29
  447. package/dist/node-runtime/{chunk-2HMIRK7W.js → chunk-LHV3V67B.js} +5 -5
  448. package/dist/node-runtime/{chunk-UAEOTO52.js → chunk-MNQXDFPV.js} +6 -2
  449. package/dist/node-runtime/{chunk-T4DA4XE7.js → chunk-MQPKUHRN.js} +162 -82
  450. package/dist/node-runtime/{chunk-MPKSOJBT.js → chunk-NHATCSOI.js} +4 -7
  451. package/dist/node-runtime/{chunk-RMQZU2YU.js → chunk-NNNR3QIY.js} +1 -1
  452. package/dist/node-runtime/{chunk-RWTKOC3B.js → chunk-QBTJG3UM.js} +1 -1
  453. package/dist/node-runtime/{chunk-P7XBVXGT.js → chunk-QNVMKNNN.js} +18 -14
  454. package/dist/node-runtime/{chunk-GS42T6MX.js → chunk-QW3AAHWN.js} +1 -1
  455. package/dist/node-runtime/{chunk-DVQSHCVP.js → chunk-R4WSB2MQ.js} +5 -5
  456. package/dist/node-runtime/{chunk-B4HP6ZWM.js → chunk-RHCGYWO7.js} +1 -1
  457. package/dist/node-runtime/{chunk-2CFDTH5B.js → chunk-RLGY2QIL.js} +45 -59
  458. package/dist/node-runtime/{chunk-KKUTQQV7.js → chunk-RYRGL7P4.js} +1 -1
  459. package/dist/node-runtime/{chunk-5Q4A37RB.js → chunk-TCT6PCUR.js} +32 -11
  460. package/dist/node-runtime/{chunk-D5UCKPBQ.js → chunk-UBWW2PID.js} +1 -1
  461. package/dist/node-runtime/{chunk-E75WFZ33.js → chunk-UNUZICC4.js} +3 -3
  462. package/dist/node-runtime/{chunk-RAK2QA2B.js → chunk-UYRKUKFE.js} +4 -4
  463. package/dist/node-runtime/{chunk-LWJXTA6Z.js → chunk-VSUEAI7O.js} +1377 -45
  464. package/dist/node-runtime/{chunk-NAY6UUQZ.js → chunk-WDIVLMOH.js} +1 -1
  465. package/dist/node-runtime/{chunk-E24EO34J.js → chunk-WPXUR3HE.js} +1 -1
  466. package/dist/node-runtime/{chunk-SLVOAQOY.js → chunk-WXYNALHD.js} +113 -1
  467. package/dist/node-runtime/{chunk-KJ6DWS3K.js → chunk-XEOCUEUJ.js} +121 -60
  468. package/dist/node-runtime/chunk-YD3IZAZ7.js +47 -0
  469. package/dist/node-runtime/chunk-YSB6URMT.js +41 -0
  470. package/dist/node-runtime/{chunk-LJTIVM7I.js → chunk-ZDJUR45D.js} +427 -126
  471. package/dist/node-runtime/{chunk-YWOJIGFY.js → chunk-ZEVFBFNF.js} +95 -142
  472. package/dist/node-runtime/{chunk-5B6VKFEV.js → chunk-ZIQUS5QO.js} +1 -1
  473. package/dist/node-runtime/cli-runtime.js +4 -4
  474. package/dist/node-runtime/{command-FSBU2EVZ.js → command-3HMSY6W2.js} +5 -5
  475. package/dist/node-runtime/{commands-EMBQQVVT.js → commands-D6A6H4TS.js} +11 -18
  476. package/dist/node-runtime/{commands-NAAL7KNT.js → commands-OCSSEEWJ.js} +16 -16
  477. package/dist/node-runtime/{config-QDD5PUE2.js → config-CU7M7BTK.js} +1 -1
  478. package/dist/node-runtime/{config-D4QUPAHX.js → config-DS7XLMEM.js} +2 -2
  479. package/dist/node-runtime/{direct-tool-executor-4D7UXYU4.js → direct-tool-executor-2QJXVQD2.js} +6 -11
  480. package/dist/node-runtime/{exa-LL64QZR2.js → exa-6VBZNPGE.js} +1 -1
  481. package/dist/node-runtime/{export-html-VM4J2MNR.js → export-html-BRWF5AHI.js} +4 -4
  482. package/dist/node-runtime/{extension-input-E7BJZ35H.js → extension-input-VBBMX7YV.js} +5 -5
  483. package/dist/node-runtime/{extension-selector-WU42XDTU.js → extension-selector-T5AOG5XB.js} +5 -5
  484. package/dist/node-runtime/{extract-EQJE7FZZ.js → extract-BFX2N35A.js} +3 -3
  485. package/dist/node-runtime/{gateway-DQM333YV.js → gateway-6623C2U3.js} +51 -42
  486. package/dist/node-runtime/{gemini-search-35OCRFLN.js → gemini-search-C66QHDT6.js} +2 -2
  487. package/dist/node-runtime/{gemini-url-context-UQY3PHHW.js → gemini-url-context-T7DEK73R.js} +3 -3
  488. package/dist/node-runtime/{github-extract-F64RZOEA.js → github-extract-HOGE3D6F.js} +107 -38
  489. package/dist/node-runtime/{goal-NJEE5CTU.js → goal-AIHEDUYA.js} +5 -5
  490. package/dist/node-runtime/index.js +50 -48
  491. package/dist/node-runtime/{init-P5AUV77I.js → init-JBQJIPYI.js} +3 -6
  492. package/dist/node-runtime/{install-cli-NN4YAU44.js → install-cli-INGHIVBY.js} +30 -25
  493. package/dist/node-runtime/interactive-mode-FM5DNUSW.js +74 -0
  494. package/dist/node-runtime/{interactive-view-NGFAMHPW.js → interactive-view-K33PM4OS.js} +8 -8
  495. package/dist/node-runtime/{lsp-manager-3ASUSO4T.js → lsp-manager-S554V5HR.js} +240 -155
  496. package/dist/node-runtime/{lunr-browser-IR7TL3J7.js → lunr-browser-H4FDOR3C.js} +7 -7
  497. package/dist/node-runtime/{lunr-computer-use-Y23CCDIJ.js → lunr-computer-use-VDP2QNRQ.js} +9 -9
  498. package/dist/node-runtime/{lunr-cron-USHC4LXH.js → lunr-cron-LKVA5CZZ.js} +93 -80
  499. package/dist/node-runtime/main.js +42 -41
  500. package/dist/node-runtime/{mobile-commands-O5LCHL32.js → mobile-commands-XT3NQXLD.js} +12 -12
  501. package/dist/node-runtime/{model-runtime-OO5HFLWE.js → model-runtime-MZ2JMDV4.js} +4 -4
  502. package/dist/node-runtime/{openai-search-B3MSNCQA.js → openai-search-K72LJDYN.js} +1 -1
  503. package/dist/node-runtime/{package-manager-cli-Q7BL6KZO.js → package-manager-cli-CYM262SI.js} +20 -20
  504. package/dist/node-runtime/{parallel-AI2MNSCU.js → parallel-X724NCNU.js} +1 -1
  505. package/dist/node-runtime/{perplexity-QVJW3I35.js → perplexity-RDHQHVMK.js} +2 -2
  506. package/dist/node-runtime/{pi-intercom-QM53RLTS.js → pi-intercom-NHHEPBMI.js} +2 -2
  507. package/dist/node-runtime/{pi-mcp-adapter-3PHF4KZ4.js → pi-mcp-adapter-PP3GQJQ2.js} +98 -94
  508. package/dist/node-runtime/{pi-ollama-cloud-2F3Y2QNM.js → pi-ollama-cloud-4MNWIMFN.js} +11 -24
  509. package/dist/node-runtime/{pi-prompt-template-model-QWTCGLJU.js → pi-prompt-template-model-FTGELLS5.js} +32 -36
  510. package/dist/node-runtime/{pi-subagents-7IBSSGEW.js → pi-subagents-LT3CTO4E.js} +98 -106
  511. package/dist/node-runtime/{pi-web-access-WTGMNZ32.js → pi-web-access-Z3LP246C.js} +144 -108
  512. package/dist/node-runtime/{print-mode-XQ76CYMT.js → print-mode-2XHN5SUA.js} +3 -3
  513. package/dist/node-runtime/{process-registry-4FAKZQOL.js → process-registry-Q4QWIU33.js} +3 -3
  514. package/dist/node-runtime/{proxy-modes-5FAPSZEZ.js → proxy-modes-VEGC6QG5.js} +8 -15
  515. package/dist/node-runtime/rpc-entry.js +42 -41
  516. package/dist/node-runtime/{rpc-mode-O3XV4SID.js → rpc-mode-32DHJPEJ.js} +4 -4
  517. package/dist/node-runtime/{runtime-4VA6JKNF.js → runtime-EDUUGAQD.js} +56 -46
  518. package/dist/node-runtime/{runtime-EFPPD2UW.js → runtime-UGXM4NPQ.js} +2 -2
  519. package/dist/node-runtime/{runtime-bridges-7WVCLI76.js → runtime-bridges-DNKMNJCF.js} +7 -7
  520. package/dist/node-runtime/{service-MDQIPQ26.js → service-IHLGFLBT.js} +6 -4
  521. package/dist/node-runtime/{session-handoff-GWARVEWT.js → session-handoff-LNSPDTKY.js} +4 -4
  522. package/dist/node-runtime/{session-manager-JB5J6XBN.js → session-manager-YIFIAVGC.js} +3 -3
  523. package/dist/node-runtime/{session-selector-GIM4DHQ2.js → session-selector-I73U3EIO.js} +7 -7
  524. package/dist/node-runtime/{settings-manager-DJDM5AHM.js → settings-manager-P2TKGYTR.js} +5 -5
  525. package/dist/node-runtime/{setup-JBKOLJ6F.js → setup-H7CCELIL.js} +15 -1
  526. package/dist/node-runtime/{setup-PFBWRNUI.js → setup-OLQ4GXWS.js} +17 -17
  527. package/dist/node-runtime/{src-IVPNZ2BX.js → src-6RV4PXKJ.js} +64 -36
  528. package/dist/node-runtime/{subagent-executor-LPZ4BHWE.js → subagent-executor-Q5F7DBVM.js} +119 -58
  529. package/dist/node-runtime/{tavily-WEZFVFP7.js → tavily-KZBFYQB6.js} +1 -1
  530. package/dist/node-runtime/{theme-UOO5RVFN.js → theme-YLVZKKZD.js} +2 -2
  531. package/dist/node-runtime/{trust-manager-MMISNCYO.js → trust-manager-ZCU76D23.js} +2 -2
  532. package/dist/node-runtime/{update-cli-HNMOTNGX.js → update-cli-F3XXJANQ.js} +6 -6
  533. package/dist/node-runtime/{usage-service-LFB2SWYV.js → usage-service-CPAGBED5.js} +1 -1
  534. package/dist/node-runtime/{video-extract-OOZHR7SU.js → video-extract-UPKYIBW3.js} +3 -3
  535. package/dist/node-runtime/{workflow-OHPBEFO4.js → workflow-ICDI4N3J.js} +208 -78
  536. package/dist/node-runtime/{youtube-extract-FNPAUNHU.js → youtube-extract-77NT7FWH.js} +4 -4
  537. package/dist/utils/clipboard-image.d.ts.map +1 -1
  538. package/dist/utils/clipboard-image.js.map +1 -1
  539. package/dist/utils/exif-orientation.d.ts.map +1 -1
  540. package/dist/utils/exif-orientation.js +25 -10
  541. package/dist/utils/exif-orientation.js.map +1 -1
  542. package/dist/utils/image-resize-core.d.ts.map +1 -1
  543. package/dist/utils/image-resize-core.js +2 -0
  544. package/dist/utils/image-resize-core.js.map +1 -1
  545. package/dist/utils/paths.d.ts +4 -0
  546. package/dist/utils/paths.d.ts.map +1 -1
  547. package/dist/utils/paths.js +33 -2
  548. package/dist/utils/paths.js.map +1 -1
  549. package/dist/utils/sanitize-terminal-text.d.ts +7 -0
  550. package/dist/utils/sanitize-terminal-text.d.ts.map +1 -0
  551. package/dist/utils/sanitize-terminal-text.js +67 -0
  552. package/dist/utils/sanitize-terminal-text.js.map +1 -0
  553. package/docs/browser.md +1 -1
  554. package/docs/custom-provider.md +3 -3
  555. package/docs/extensions.md +8 -4
  556. package/docs/features.md +15 -7
  557. package/docs/keybindings.md +1 -1
  558. package/docs/models.md +5 -5
  559. package/docs/packages.md +1 -1
  560. package/docs/providers.md +2 -2
  561. package/docs/rpc.md +7 -7
  562. package/docs/security.md +10 -5
  563. package/docs/sessions.md +2 -2
  564. package/docs/skills.md +1 -1
  565. package/docs/terminal-setup.md +7 -7
  566. package/docs/themes.md +1 -1
  567. package/docs/usage.md +1 -1
  568. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  569. package/examples/extensions/bash-spawn-hook.ts +1 -1
  570. package/examples/extensions/built-in-tool-renderer.ts +1 -1
  571. package/examples/extensions/claude-rules.ts +1 -1
  572. package/examples/extensions/commands.ts +1 -1
  573. package/examples/extensions/custom-compaction.ts +1 -1
  574. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  575. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  576. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  577. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  578. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  579. package/examples/extensions/doom-overlay/index.ts +1 -1
  580. package/examples/extensions/git-merge-and-resolve.ts +2 -2
  581. package/examples/extensions/gondolin/index.ts +1 -1
  582. package/examples/extensions/gondolin/package-lock.json +2 -2
  583. package/examples/extensions/gondolin/package.json +1 -1
  584. package/examples/extensions/hidden-thinking-label.ts +1 -1
  585. package/examples/extensions/inline-bash.ts +2 -2
  586. package/examples/extensions/input-transform-streaming.ts +2 -2
  587. package/examples/extensions/input-transform.ts +2 -2
  588. package/examples/extensions/interactive-shell.ts +1 -1
  589. package/examples/extensions/kimi-deferred-tools.ts +1 -1
  590. package/examples/extensions/mac-system-theme.ts +1 -1
  591. package/examples/extensions/minimal-mode.ts +1 -1
  592. package/examples/extensions/modal-editor.ts +1 -1
  593. package/examples/extensions/model-status.ts +1 -1
  594. package/examples/extensions/notify.ts +3 -3
  595. package/examples/extensions/overlay-qa-tests.ts +1 -1
  596. package/examples/extensions/overlay-test.ts +1 -1
  597. package/examples/extensions/pirate.ts +1 -1
  598. package/examples/extensions/preset.ts +3 -3
  599. package/examples/extensions/project-trust.ts +4 -4
  600. package/examples/extensions/prompt-customizer.ts +1 -1
  601. package/examples/extensions/rainbow-editor.ts +1 -1
  602. package/examples/extensions/rpc-demo.ts +1 -1
  603. package/examples/extensions/sandbox/index.ts +7 -7
  604. package/examples/extensions/sandbox/package-lock.json +2 -2
  605. package/examples/extensions/sandbox/package.json +1 -1
  606. package/examples/extensions/shutdown-command.ts +5 -5
  607. package/examples/extensions/ssh.ts +2 -2
  608. package/examples/extensions/subagent/README.md +3 -3
  609. package/examples/extensions/subagent/index.ts +2 -2
  610. package/examples/extensions/titlebar-spinner.ts +1 -1
  611. package/examples/extensions/tool-override.ts +1 -1
  612. package/examples/extensions/tools.ts +1 -1
  613. package/examples/extensions/with-deps/package-lock.json +2 -2
  614. package/examples/extensions/with-deps/package.json +1 -1
  615. package/examples/extensions/working-indicator.ts +1 -1
  616. package/examples/extensions/working-message-test.ts +1 -1
  617. package/examples/sdk/01-minimal.ts +1 -1
  618. package/examples/sdk/03-custom-prompt.ts +1 -1
  619. package/examples/sdk/04-skills.ts +1 -1
  620. package/examples/sdk/06-extensions.ts +2 -2
  621. package/examples/sdk/08-prompt-templates.ts +1 -1
  622. package/install-lock/package-lock.json +24 -24
  623. package/install-lock/package.json +2 -2
  624. package/npm-shrinkwrap.json +60 -24
  625. package/package.json +9 -9
  626. package/dist/modes/interactive/components/exit-card.d.ts +0 -22
  627. package/dist/modes/interactive/components/exit-card.d.ts.map +0 -1
  628. package/dist/modes/interactive/components/exit-card.js +0 -69
  629. package/dist/modes/interactive/components/exit-card.js.map +0 -1
  630. package/dist/node-runtime/agent-session-services-5YXS2PLF.js +0 -51
  631. package/dist/node-runtime/chunk-2IDTZAG5.js +0 -1415
  632. package/dist/node-runtime/chunk-3MISGG4S.js +0 -769
  633. package/dist/node-runtime/chunk-4HXHDDCF.js +0 -16
  634. package/dist/node-runtime/chunk-5B5QN3ZQ.js +0 -356
  635. package/dist/node-runtime/chunk-7IQGBKBJ.js +0 -2033
  636. package/dist/node-runtime/chunk-AUXVGBO4.js +0 -19
  637. package/dist/node-runtime/chunk-PTFBPO3C.js +0 -50
  638. package/dist/node-runtime/interactive-mode-YOHZVMKX.js +0 -74
  639. package/dist/node-runtime/mcp-auth-flow-QVLFVLEO.js +0 -33
@@ -5,7 +5,9 @@ import { prepareComputerImage, screenshotDimensions } from "./image.js";
5
5
  import { DesktopLease } from "./lease.js";
6
6
  import { computerSchemas } from "./schemas.js";
7
7
  export function driverData(reply) {
8
- if (reply.structuredContent && typeof reply.structuredContent === "object" && !Array.isArray(reply.structuredContent))
8
+ if (reply.structuredContent &&
9
+ typeof reply.structuredContent === "object" &&
10
+ !Array.isArray(reply.structuredContent))
9
11
  return Object.fromEntries(Object.entries(reply.structuredContent));
10
12
  if (Array.isArray(reply.content))
11
13
  for (const item of reply.content) {
@@ -40,16 +42,32 @@ export function driverRefused(reply) {
40
42
  const data = driverData(reply);
41
43
  const acknowledged = data.activated === true || data.success === true || data.verified === true || data.effect === "confirmed";
42
44
  const uncertain = [data.status, data.effect].some((value) => value === "partial" || value === "unverifiable");
43
- return reply.isError === true || plainLaunchReason(reply) !== undefined ||
45
+ return (reply.isError === true ||
46
+ plainLaunchReason(reply) !== undefined ||
44
47
  (data.refusal !== undefined && data.refusal !== null && data.refusal !== false) ||
45
48
  (data.error !== undefined && data.error !== null && data.error !== false) ||
46
- data.effect === "refused" || data.status === "refused" || data.status === "failed" || data.success === false ||
47
- ["window_target_mismatch", "window_target_not_found", "background_unavailable", "foreground_unavailable", "type_text_incomplete", "verification_failed"].includes(String(data.code)) ||
48
- (data.status !== undefined && !acknowledged && !uncertain && !["ok", "success", "completed"].includes(String(data.status))) ||
49
- (data.code !== undefined && data.code !== 0 && !acknowledged && !uncertain);
49
+ data.effect === "refused" ||
50
+ data.status === "refused" ||
51
+ data.status === "failed" ||
52
+ data.success === false ||
53
+ [
54
+ "window_target_mismatch",
55
+ "window_target_not_found",
56
+ "background_unavailable",
57
+ "foreground_unavailable",
58
+ "type_text_incomplete",
59
+ "verification_failed",
60
+ ].includes(String(data.code)) ||
61
+ (data.status !== undefined &&
62
+ !acknowledged &&
63
+ !uncertain &&
64
+ !["ok", "success", "completed"].includes(String(data.status))) ||
65
+ (data.code !== undefined && data.code !== 0 && !acknowledged && !uncertain));
50
66
  }
51
67
  function record(value) {
52
- return value !== null && typeof value === "object" && !Array.isArray(value) ? Object.fromEntries(Object.entries(value)) : {};
68
+ return value !== null && typeof value === "object" && !Array.isArray(value)
69
+ ? Object.fromEntries(Object.entries(value))
70
+ : {};
53
71
  }
54
72
  function select(data, keys) {
55
73
  const result = {};
@@ -59,7 +77,9 @@ function select(data, keys) {
59
77
  result[key] = value.slice(0, 240);
60
78
  else if (["active", "running", "is_on_screen", "minimized"].includes(key) && typeof value === "boolean")
61
79
  result[key] = value;
62
- else if (["pid", "window_id", "x", "y", "width", "height"].includes(key) && typeof value === "number" && Number.isSafeInteger(value))
80
+ else if (["pid", "window_id", "x", "y", "width", "height"].includes(key) &&
81
+ typeof value === "number" &&
82
+ Number.isSafeInteger(value))
63
83
  result[key] = value;
64
84
  }
65
85
  return result;
@@ -69,24 +89,46 @@ function typingRecovery(data, text) {
69
89
  return {};
70
90
  const requested = data.requested_chars;
71
91
  const delivered = data.delivered_chars;
72
- if (typeof requested !== "number" || !Number.isSafeInteger(requested) || requested < 0 ||
73
- requested > 20000 || requested !== Array.from(text).length)
92
+ if (typeof requested !== "number" ||
93
+ !Number.isSafeInteger(requested) ||
94
+ requested < 0 ||
95
+ requested > 20000 ||
96
+ requested !== Array.from(text).length)
74
97
  return {};
75
98
  const validDelivered = typeof delivered === "number" && Number.isSafeInteger(delivered) && delivered >= 0 && delivered <= requested;
76
99
  return {
77
100
  requested_chars: requested,
78
101
  delivered_chars: validDelivered ? delivered : undefined,
79
- retryable: validDelivered && data.retry_from_character === delivered && typeof data.retryable === "boolean" ? data.retryable : undefined,
102
+ retryable: validDelivered && data.retry_from_character === delivered && typeof data.retryable === "boolean"
103
+ ? data.retryable
104
+ : undefined,
80
105
  retry_from_character: validDelivered && data.retry_from_character === delivered ? delivered : undefined,
81
106
  };
82
107
  }
83
- const nativeCodes = new Set(["background_unavailable", "background_occluded", "background_uipi_blocked", "window_target_mismatch", "window_target_not_found", "type_text_incomplete", "foreground_unavailable", "foreground_rejected", "stale_target", "target_not_found", "verification_failed", "tool_invocation_failed"]);
108
+ const nativeCodes = new Set([
109
+ "background_unavailable",
110
+ "background_occluded",
111
+ "background_uipi_blocked",
112
+ "window_target_mismatch",
113
+ "window_target_not_found",
114
+ "type_text_incomplete",
115
+ "foreground_unavailable",
116
+ "foreground_rejected",
117
+ "stale_target",
118
+ "target_not_found",
119
+ "verification_failed",
120
+ "tool_invocation_failed",
121
+ ]);
84
122
  function safeCode(value) {
85
123
  return typeof value === "string" && nativeCodes.has(value) ? value : undefined;
86
124
  }
87
125
  function nativeReason(reply) {
88
126
  const data = driverData(reply);
89
- const code = safeCode(data.code) ?? safeCode(record(data.refusal).code) ?? safeCode(record(data.error).code) ?? safeCode(data.refusal) ?? safeCode(data.error);
127
+ const code = safeCode(data.code) ??
128
+ safeCode(record(data.refusal).code) ??
129
+ safeCode(record(data.error).code) ??
130
+ safeCode(data.refusal) ??
131
+ safeCode(data.error);
90
132
  if (code)
91
133
  return code;
92
134
  if (plainLaunchReason(reply))
@@ -101,13 +143,22 @@ function outcome(reply, text) {
101
143
  phase: refused || partial ? "native_result" : "native_request",
102
144
  code: refused || partial ? nativeReason(reply) : undefined,
103
145
  native_code: safeCode(data.code) ?? safeCode(record(data.refusal).code) ?? safeCode(record(data.error).code),
104
- status: typeof data.status === "string" && ["ok", "success", "completed", "partial", "refused", "failed"].includes(data.status) ? data.status : undefined,
105
- effect: typeof data.effect === "string" && ["confirmed", "partial", "unverifiable", "refused"].includes(data.effect) ? data.effect : undefined,
146
+ status: typeof data.status === "string" &&
147
+ ["ok", "success", "completed", "partial", "refused", "failed"].includes(data.status)
148
+ ? data.status
149
+ : undefined,
150
+ effect: typeof data.effect === "string" && ["confirmed", "partial", "unverifiable", "refused"].includes(data.effect)
151
+ ? data.effect
152
+ : undefined,
106
153
  verified: typeof data.verified === "boolean" ? data.verified : undefined,
107
154
  success: typeof data.success === "boolean" ? data.success : undefined,
108
155
  activated: typeof data.activated === "boolean" ? data.activated : undefined,
109
156
  escalation: record(data.escalation).recommended === "foreground" ? "foreground" : undefined,
110
- input: partial && typingRecovery(data, text).delivered_chars !== undefined ? "partial" : refused || partial ? "uncertain" : "dispatched",
157
+ input: partial && typingRecovery(data, text).delivered_chars !== undefined
158
+ ? "partial"
159
+ : refused || partial
160
+ ? "uncertain"
161
+ : "dispatched",
111
162
  applicationEffect: "unverified",
112
163
  ...typingRecovery(data, text),
113
164
  };
@@ -133,7 +184,10 @@ function abortable(pending, signal) {
133
184
  const freshActionGuidance = "Get a fresh capture of the exact target before any next action, including window focus. Copy its token exactly. No input was sent by this call; earlier calls may have had an effect.";
134
185
  class CaptureError extends Error {
135
186
  code;
136
- constructor(code) { super(code); this.code = code; }
187
+ constructor(code) {
188
+ super(code);
189
+ this.code = code;
190
+ }
137
191
  }
138
192
  class ObservationError extends Error {
139
193
  code;
@@ -148,13 +202,19 @@ function targetFrom(input) {
148
202
  throw new Error("Desktop target cannot include pid/window_id.");
149
203
  return { desktop: true };
150
204
  }
151
- if (typeof input.pid !== "number" || !Number.isInteger(input.pid) || input.pid < 1 ||
152
- typeof input.window_id !== "number" || !Number.isInteger(input.window_id) || input.window_id < 1)
205
+ if (typeof input.pid !== "number" ||
206
+ !Number.isInteger(input.pid) ||
207
+ input.pid < 1 ||
208
+ typeof input.window_id !== "number" ||
209
+ !Number.isInteger(input.window_id) ||
210
+ input.window_id < 1)
153
211
  throw new Error("Window target requires positive integer pid and window_id.");
154
212
  return { pid: input.pid, window_id: input.window_id };
155
213
  }
156
214
  function sameTarget(a, b) {
157
- return a.desktop === true ? b.desktop === true : b.desktop !== true && a.pid === b.pid && a.window_id === b.window_id;
215
+ return a.desktop === true
216
+ ? b.desktop === true
217
+ : b.desktop !== true && a.pid === b.pid && a.window_id === b.window_id;
158
218
  }
159
219
  export class ComputerWorkflow {
160
220
  observation;
@@ -182,7 +242,15 @@ export class ComputerWorkflow {
182
242
  }
183
243
  async capture(target, signal, previous, crop) {
184
244
  const time = Date.now();
185
- const reply = await abortable(this.driver.call(target.desktop ? "get_desktop_state" : "get_window_state", target.desktop ? {} : { pid: target.pid, window_id: target.window_id, include_accessibility_tree: false, include_screenshot: true, max_dimension: 2560 }, signal), signal);
245
+ const reply = await abortable(this.driver.call(target.desktop ? "get_desktop_state" : "get_window_state", target.desktop
246
+ ? {}
247
+ : {
248
+ pid: target.pid,
249
+ window_id: target.window_id,
250
+ include_accessibility_tree: false,
251
+ include_screenshot: true,
252
+ max_dimension: 2560,
253
+ }, signal), signal);
186
254
  if (driverRefused(reply))
187
255
  throw new CaptureError(nativeReason(reply));
188
256
  const data = driverData(reply);
@@ -197,10 +265,17 @@ export class ComputerWorkflow {
197
265
  catch {
198
266
  throw new CaptureError("image_decode_failed");
199
267
  }
200
- if (data.screenshot_frame_valid === false || data.screenshot_error != null || dimensions.width !== data.screenshot_width || dimensions.height !== data.screenshot_height)
268
+ if (data.screenshot_frame_valid === false ||
269
+ data.screenshot_error != null ||
270
+ dimensions.width !== data.screenshot_width ||
271
+ dimensions.height !== data.screenshot_height)
201
272
  throw new CaptureError("image_frame_invalid");
202
273
  const geometry = JSON.stringify(select(record(data.window_bounds), ["x", "y", "width", "height"]));
203
- if (crop && previous && (previous.sourceWidth !== dimensions.width || previous.sourceHeight !== dimensions.height || previous.geometry !== geometry))
274
+ if (crop &&
275
+ previous &&
276
+ (previous.sourceWidth !== dimensions.width ||
277
+ previous.sourceHeight !== dimensions.height ||
278
+ previous.geometry !== geometry))
204
279
  throw new CaptureError("target_geometry_changed");
205
280
  let prepared;
206
281
  try {
@@ -219,20 +294,41 @@ export class ComputerWorkflow {
219
294
  const { width, height, region, sourceWidth, sourceHeight, scaleX, scaleY, target, token } = observation;
220
295
  const failed = extra.failed === true;
221
296
  return {
222
- content: [{ type: "text", text: JSON.stringify({
223
- ...extra, observation: token, target, captured_at: observation.time, expires_at: observation.time + 30000, image: { width, height },
297
+ content: [
298
+ {
299
+ type: "text",
300
+ text: JSON.stringify({
301
+ ...extra,
302
+ observation: token,
303
+ target,
304
+ captured_at: observation.time,
305
+ expires_at: observation.time + 30000,
306
+ image: { width, height },
224
307
  mapping: { sourceWidth, sourceHeight, ...region, scaleX, scaleY },
225
308
  coordinates: "Use returned-image pixels; mapping is applied automatically.",
226
- }) }, observation.image],
227
- details: { observation: token, computer: { failed, workflow: "ready" } }, isError: failed,
309
+ }),
310
+ },
311
+ observation.image,
312
+ ],
313
+ details: { observation: token, computer: { failed, workflow: "ready" } },
314
+ isError: failed,
228
315
  };
229
316
  }
230
317
  crop(input, previous) {
231
318
  const crop = record(input.crop);
232
319
  const { x, y, width, height } = crop;
233
- if (typeof x !== "number" || typeof y !== "number" || typeof width !== "number" || typeof height !== "number" ||
234
- ![x, y, width, height].every(Number.isFinite) || x < 0 || y < 0 || width <= 0 || height <= 0 ||
235
- x + width > previous.width || y + height > previous.height || Object.keys(crop).some((key) => !["x", "y", "width", "height"].includes(key)))
320
+ if (typeof x !== "number" ||
321
+ typeof y !== "number" ||
322
+ typeof width !== "number" ||
323
+ typeof height !== "number" ||
324
+ ![x, y, width, height].every(Number.isFinite) ||
325
+ x < 0 ||
326
+ y < 0 ||
327
+ width <= 0 ||
328
+ height <= 0 ||
329
+ x + width > previous.width ||
330
+ y + height > previous.height ||
331
+ Object.keys(crop).some((key) => !["x", "y", "width", "height"].includes(key)))
236
332
  throw new Error("Crop must fit the latest returned image.");
237
333
  const left = Math.floor(previous.region.x + x * previous.scaleX);
238
334
  const top = Math.floor(previous.region.y + y * previous.scaleY);
@@ -241,7 +337,9 @@ export class ComputerWorkflow {
241
337
  return { x: left, y: top, width: right - left, height: bottom - top };
242
338
  }
243
339
  action(name, input, previous) {
244
- const args = previous.target.desktop ? { scope: "desktop" } : { pid: previous.target.pid, window_id: previous.target.window_id };
340
+ const args = previous.target.desktop
341
+ ? { scope: "desktop" }
342
+ : { pid: previous.target.pid, window_id: previous.target.window_id };
245
343
  if (previous.target.desktop && input.foreground !== true)
246
344
  throw new Error("Desktop input requires foreground=true.");
247
345
  if (name !== "computer_window" && name !== "computer_hover")
@@ -253,9 +351,14 @@ export class ComputerWorkflow {
253
351
  if (value === undefined)
254
352
  continue;
255
353
  const horizontal = key.endsWith("x");
256
- if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || value >= (horizontal ? previous.width : previous.height))
354
+ if (typeof value !== "number" ||
355
+ !Number.isFinite(value) ||
356
+ value < 0 ||
357
+ value >= (horizontal ? previous.width : previous.height))
257
358
  throw new Error("Coordinate outside the observed image.");
258
- args[key] = (horizontal ? previous.region.x : previous.region.y) + value * (horizontal ? previous.scaleX : previous.scaleY);
359
+ args[key] =
360
+ (horizontal ? previous.region.x : previous.region.y) +
361
+ value * (horizontal ? previous.scaleX : previous.scaleY);
259
362
  }
260
363
  if ((input.x === undefined) !== (input.y === undefined))
261
364
  throw new Error("Provide a complete x/y pair.");
@@ -264,8 +367,12 @@ export class ComputerWorkflow {
264
367
  let operation;
265
368
  switch (name) {
266
369
  case "computer_hover":
267
- if (process.platform !== "win32" || !previous.target.desktop || input.desktop !== true || input.foreground !== true ||
268
- input.x === undefined || input.y === undefined)
370
+ if (process.platform !== "win32" ||
371
+ !previous.target.desktop ||
372
+ input.desktop !== true ||
373
+ input.foreground !== true ||
374
+ input.x === undefined ||
375
+ input.y === undefined)
269
376
  throw new Error("Hover requires a Windows foreground desktop image and x/y coordinates.");
270
377
  operation = "move_cursor";
271
378
  break;
@@ -274,7 +381,9 @@ export class ComputerWorkflow {
274
381
  if (input.x === undefined || input.y === undefined)
275
382
  throw new Error("This action requires x/y image coordinates.");
276
383
  operation = name === "computer_click" ? "click" : "scroll";
277
- for (const key of name === "computer_click" ? ["button", "count", "modifier"] : ["direction", "amount", "by"])
384
+ for (const key of name === "computer_click"
385
+ ? ["button", "count", "modifier"]
386
+ : ["direction", "amount", "by"])
278
387
  if (input[key] !== undefined)
279
388
  args[key] = input[key];
280
389
  break;
@@ -289,9 +398,14 @@ export class ComputerWorkflow {
289
398
  const keys = Array.isArray(input.keys) ? input.keys : undefined;
290
399
  const last = keys?.at(-1);
291
400
  const modifiers = new Set(["ctrl", "control", "shift", "alt", "win", "windows", "cmd", "command"]);
292
- const foregroundShortcut = process.platform === "win32" && input.foreground === true && input.x === undefined &&
293
- keys !== undefined && keys.length >= 2 && keys.slice(0, -1).every((key) => typeof key === "string" && modifiers.has(key.toLowerCase())) &&
294
- typeof last === "string" && !modifiers.has(last.toLowerCase());
401
+ const foregroundShortcut = process.platform === "win32" &&
402
+ input.foreground === true &&
403
+ input.x === undefined &&
404
+ keys !== undefined &&
405
+ keys.length >= 2 &&
406
+ keys.slice(0, -1).every((key) => typeof key === "string" && modifiers.has(key.toLowerCase())) &&
407
+ typeof last === "string" &&
408
+ !modifiers.has(last.toLowerCase());
295
409
  // Pinned Windows hotkey routes XAML through UIA before honoring foreground; press_key honors SendInput.
296
410
  operation = input.keys === undefined || foregroundShortcut ? "press_key" : "hotkey";
297
411
  if (foregroundShortcut) {
@@ -312,23 +426,32 @@ export class ComputerWorkflow {
312
426
  if (input.action === "frame") {
313
427
  for (const key of ["x", "y", "width", "height"]) {
314
428
  const value = input[key];
315
- if (typeof value !== "number" || !Number.isFinite(value) || (["width", "height"].includes(key) && value <= 0))
429
+ if (typeof value !== "number" ||
430
+ !Number.isFinite(value) ||
431
+ (["width", "height"].includes(key) && value <= 0))
316
432
  throw new Error("Frame requires valid x/y/width/height.");
317
433
  args[key] = value;
318
434
  }
319
435
  operation = "set_window_frame";
320
436
  }
321
- else if (input.action === "focus" && ["x", "y", "width", "height"].every((key) => input[key] === undefined))
437
+ else if (input.action === "focus" &&
438
+ ["x", "y", "width", "height"].every((key) => input[key] === undefined))
322
439
  operation = "bring_to_front";
323
440
  else
324
441
  throw new Error("Use frame or focus. Minimize/restore uses a fresh image click on the visible control.");
325
442
  break;
326
- default: throw new Error("Unknown computer action.");
443
+ default:
444
+ throw new Error("Unknown computer action.");
327
445
  }
328
446
  return { operation, args };
329
447
  }
330
448
  async execute(name, input, signal) {
331
- const combined = AbortSignal.any([this.abort.signal, this.lease.signal, AbortSignal.timeout(90000), ...(signal ? [signal] : [])]);
449
+ const combined = AbortSignal.any([
450
+ this.abort.signal,
451
+ this.lease.signal,
452
+ AbortSignal.timeout(90000),
453
+ ...(signal ? [signal] : []),
454
+ ]);
332
455
  let inputDispatched = false;
333
456
  let failureCode = "workflow_unavailable";
334
457
  let phase = "validation";
@@ -350,13 +473,20 @@ export class ComputerWorkflow {
350
473
  if (name === "computer_apps" || name === "computer_launch") {
351
474
  const operation = name === "computer_launch" ? "launch_app" : input.pid === undefined ? "list_apps" : "list_windows";
352
475
  operationName = operation;
353
- if (input.include_windows !== undefined && (name !== "computer_apps" || typeof input.include_windows !== "boolean" || (input.include_windows && (input.pid !== undefined || typeof input.query !== "string" || !input.query.trim()))))
476
+ if (input.include_windows !== undefined &&
477
+ (name !== "computer_apps" ||
478
+ typeof input.include_windows !== "boolean" ||
479
+ (input.include_windows &&
480
+ (input.pid !== undefined || typeof input.query !== "string" || !input.query.trim()))))
354
481
  throw new Error("include_windows requires a named app query without pid.");
355
- if (input.pid !== undefined && (typeof input.pid !== "number" || !Number.isSafeInteger(input.pid) || input.pid < 1))
482
+ if (input.pid !== undefined &&
483
+ (typeof input.pid !== "number" || !Number.isSafeInteger(input.pid) || input.pid < 1))
356
484
  throw new Error("Window lookup requires a positive pid.");
357
- if (name === "computer_launch" && (typeof input.name !== "string" || !input.name.trim() || input.name.length > 500))
485
+ if (name === "computer_launch" &&
486
+ (typeof input.name !== "string" || !input.name.trim() || input.name.length > 500))
358
487
  throw new Error("Launch requires a nonblank name.");
359
- if (input.query !== undefined && (typeof input.query !== "string" || !input.query.trim() || Array.from(input.query).length > 240))
488
+ if (input.query !== undefined &&
489
+ (typeof input.query !== "string" || !input.query.trim() || Array.from(input.query).length > 240))
360
490
  throw new Error("Discovery query must be a nonblank string of at most 240 characters.");
361
491
  const query = typeof input.query === "string" ? input.query.trim() : undefined;
362
492
  const needle = query?.toLowerCase();
@@ -371,32 +501,65 @@ export class ComputerWorkflow {
371
501
  const reply = await abortable(this.driver.call(operation, args, combined), combined);
372
502
  const data = driverData(reply);
373
503
  const discovered = data.apps ?? data.windows;
374
- const rows = Array.isArray(discovered) && needle ? discovered.filter((row) => {
375
- const item = record(row);
376
- return [item.name, item.app_name, item.title].some((value) => typeof value === "string" && value.toLowerCase().includes(needle));
377
- }) : discovered;
378
- const metadata = Array.isArray(rows) ? rows.slice(offset, offset + 50).map((row) => {
379
- const item = record(row);
380
- return { ...select(item, ["pid", "window_id", "name", "app_name", "title", "active", "running", "is_on_screen", "minimized"]),
381
- bounds: item.bounds ? select(record(item.bounds), ["x", "y", "width", "height"]) : undefined };
382
- }) : undefined;
504
+ const rows = Array.isArray(discovered) && needle
505
+ ? discovered.filter((row) => {
506
+ const item = record(row);
507
+ return [item.name, item.app_name, item.title].some((value) => typeof value === "string" && value.toLowerCase().includes(needle));
508
+ })
509
+ : discovered;
510
+ const metadata = Array.isArray(rows)
511
+ ? rows.slice(offset, offset + 50).map((row) => {
512
+ const item = record(row);
513
+ return {
514
+ ...select(item, [
515
+ "pid",
516
+ "window_id",
517
+ "name",
518
+ "app_name",
519
+ "title",
520
+ "active",
521
+ "running",
522
+ "is_on_screen",
523
+ "minimized",
524
+ ]),
525
+ bounds: item.bounds ? select(record(item.bounds), ["x", "y", "width", "height"]) : undefined,
526
+ };
527
+ })
528
+ : undefined;
383
529
  const remaining = Array.isArray(rows) ? Math.max(0, rows.length - offset - (metadata?.length ?? 0)) : 0;
384
530
  const failed = driverRefused(reply);
385
531
  const pid = typeof data.pid === "number" && Number.isSafeInteger(data.pid) && data.pid > 0 ? data.pid : undefined;
386
- const launchWindows = Array.isArray(data.windows) ? data.windows.slice(0, 50).map((row) => {
387
- const item = record(row);
388
- return { ...select(item, ["window_id", "title", "is_on_screen", "minimized"]), bounds: item.bounds ? select(record(item.bounds), ["x", "y", "width", "height"]) : undefined };
389
- }) : [];
390
- const returnedId = data.window_id ?? (Array.isArray(data.windows) && data.windows.length === 1 ? record(data.windows[0]).window_id : undefined);
391
- const windowId = typeof returnedId === "number" && Number.isSafeInteger(returnedId) && returnedId > 0 ? returnedId : undefined;
532
+ const launchWindows = Array.isArray(data.windows)
533
+ ? data.windows.slice(0, 50).map((row) => {
534
+ const item = record(row);
535
+ return {
536
+ ...select(item, ["window_id", "title", "is_on_screen", "minimized"]),
537
+ bounds: item.bounds ? select(record(item.bounds), ["x", "y", "width", "height"]) : undefined,
538
+ };
539
+ })
540
+ : [];
541
+ const returnedId = data.window_id ??
542
+ (Array.isArray(data.windows) && data.windows.length === 1
543
+ ? record(data.windows[0]).window_id
544
+ : undefined);
545
+ const windowId = typeof returnedId === "number" && Number.isSafeInteger(returnedId) && returnedId > 0
546
+ ? returnedId
547
+ : undefined;
392
548
  let windowsByPid;
393
- let guidance = remaining ? "Pass next_offset as offset with the same pid and query. Lists refresh per call." : input.pid !== undefined
394
- ? "Use computer_observe({pid,window_id}) for an exact returned window."
395
- : "App query filters app identities, not every window title. Use computer_apps({pid}) to find windows for a running app.";
549
+ let guidance = remaining
550
+ ? "Pass next_offset as offset with the same pid and query. Lists refresh per call."
551
+ : input.pid !== undefined
552
+ ? "Use computer_observe({pid,window_id}) for an exact returned window."
553
+ : "App query filters app identities, not every window title. Use computer_apps({pid}) to find windows for a running app.";
396
554
  if (name === "computer_apps" && input.include_windows === true && !failed) {
397
- const pids = [...new Set((Array.isArray(rows) ? rows : []).map((row) => record(row).pid).filter((value) => typeof value === "number" && Number.isSafeInteger(value) && value > 0))];
555
+ const pids = [
556
+ ...new Set((Array.isArray(rows) ? rows : [])
557
+ .map((row) => record(row).pid)
558
+ .filter((value) => typeof value === "number" && Number.isSafeInteger(value) && value > 0)),
559
+ ];
398
560
  if (pids.length > 5)
399
- guidance = "More than five running processes matched. Narrow the query or choose one positive pid with computer_apps({pid}); no arbitrary process was selected.";
561
+ guidance =
562
+ "More than five running processes matched. Narrow the query or choose one positive pid with computer_apps({pid}); no arbitrary process was selected.";
400
563
  else {
401
564
  windowsByPid = [];
402
565
  let budget = 50;
@@ -406,16 +569,40 @@ export class ComputerWorkflow {
406
569
  const windowsReply = await abortable(this.driver.call("list_windows", { pid: matchingPid }, combined), combined);
407
570
  const windows = driverData(windowsReply).windows;
408
571
  if (driverRefused(windowsReply) || !Array.isArray(windows)) {
409
- windowsByPid.push({ pid: matchingPid, error: driverRefused(windowsReply) ? nativeReason(windowsReply) : "windows_unavailable" });
572
+ windowsByPid.push({
573
+ pid: matchingPid,
574
+ error: driverRefused(windowsReply)
575
+ ? nativeReason(windowsReply)
576
+ : "windows_unavailable",
577
+ });
410
578
  continue;
411
579
  }
412
580
  const subset = windows.slice(0, budget).map((row) => {
413
581
  const item = record(row);
414
- return { ...select(item, ["pid", "window_id", "name", "app_name", "title", "active", "running", "is_on_screen", "minimized"]),
415
- bounds: item.bounds ? select(record(item.bounds), ["x", "y", "width", "height"]) : undefined };
582
+ return {
583
+ ...select(item, [
584
+ "pid",
585
+ "window_id",
586
+ "name",
587
+ "app_name",
588
+ "title",
589
+ "active",
590
+ "running",
591
+ "is_on_screen",
592
+ "minimized",
593
+ ]),
594
+ bounds: item.bounds
595
+ ? select(record(item.bounds), ["x", "y", "width", "height"])
596
+ : undefined,
597
+ };
416
598
  });
417
599
  const omitted = windows.length - subset.length;
418
- windowsByPid.push({ pid: matchingPid, windows: subset, omitted: omitted || undefined, next_offset: omitted ? subset.length : undefined });
600
+ windowsByPid.push({
601
+ pid: matchingPid,
602
+ windows: subset,
603
+ omitted: omitted || undefined,
604
+ next_offset: omitted ? subset.length : undefined,
605
+ });
419
606
  budget -= subset.length;
420
607
  }
421
608
  catch (error) {
@@ -426,23 +613,50 @@ export class ComputerWorkflow {
426
613
  windowsByPid.push({ pid: matchingPid, error: "window_lookup_failed" });
427
614
  }
428
615
  }
429
- guidance = "Use computer_observe({pid,window_id}) for a returned window. For omitted windows use computer_apps({pid,offset:next_offset}). Per-PID failures need a targeted lookup.";
616
+ guidance =
617
+ "Use computer_observe({pid,window_id}) for a returned window. For omitted windows use computer_apps({pid,offset:next_offset}). Per-PID failures need a targeted lookup.";
430
618
  }
431
619
  }
432
620
  if (name === "computer_launch")
433
- guidance = pid && windowId && !failed
434
- ? `Use computer_observe({pid:${pid},window_id:${windowId}}) before input.`
435
- : `Launch ${failed ? "may have completed despite an unsuccessful reply" : "returned no exact window"}. Use computer_apps({${pid ? `pid:${pid}` : `query:${JSON.stringify(input.name)}`}}) before another launch or input.`;
436
- return { content: [{ type: "text", text: JSON.stringify({
437
- kind: name === "computer_launch" ? "launch" : input.pid === undefined ? "apps" : "windows", operation,
438
- ...(name === "computer_launch" ? outcome(reply) : { phase: "native_result", code: failed ? nativeReason(reply) : undefined }),
621
+ guidance =
622
+ pid && windowId && !failed
623
+ ? `Use computer_observe({pid:${pid},window_id:${windowId}}) before input.`
624
+ : `Launch ${failed ? "may have completed despite an unsuccessful reply" : "returned no exact window"}. Use computer_apps({${pid ? `pid:${pid}` : `query:${JSON.stringify(input.name)}`}}) before another launch or input.`;
625
+ return {
626
+ content: [
627
+ {
628
+ type: "text",
629
+ text: JSON.stringify({
630
+ kind: name === "computer_launch" ? "launch" : input.pid === undefined ? "apps" : "windows",
631
+ operation,
632
+ ...(name === "computer_launch"
633
+ ? outcome(reply)
634
+ : { phase: "native_result", code: failed ? nativeReason(reply) : undefined }),
439
635
  input: name === "computer_launch" ? "not_applicable" : undefined,
440
- launch: name === "computer_launch" ? plainLaunchReason(reply) === "app_lookup_unavailable" ? "not_started" : failed ? "completion_uncertain" : "acknowledged" : undefined,
441
- ...select(data, ["pid", "window_id", "name", "title"]), window_id: name === "computer_launch" ? windowId : select(data, ["window_id"]).window_id,
442
- windows: name === "computer_launch" ? launchWindows : undefined, items: name === "computer_launch" ? undefined : metadata,
443
- windows_by_pid: windowsByPid, query, offset, total: Array.isArray(rows) ? rows.length : undefined,
444
- omitted: remaining || undefined, next_offset: remaining ? offset + 50 : undefined, guidance,
445
- }) }], details: { computer: { failed, workflow: "ready" } }, isError: failed };
636
+ launch: name === "computer_launch"
637
+ ? plainLaunchReason(reply) === "app_lookup_unavailable"
638
+ ? "not_started"
639
+ : failed
640
+ ? "completion_uncertain"
641
+ : "acknowledged"
642
+ : undefined,
643
+ ...select(data, ["pid", "window_id", "name", "title"]),
644
+ window_id: name === "computer_launch" ? windowId : select(data, ["window_id"]).window_id,
645
+ windows: name === "computer_launch" ? launchWindows : undefined,
646
+ items: name === "computer_launch" ? undefined : metadata,
647
+ windows_by_pid: windowsByPid,
648
+ query,
649
+ offset,
650
+ total: Array.isArray(rows) ? rows.length : undefined,
651
+ omitted: remaining || undefined,
652
+ next_offset: remaining ? offset + 50 : undefined,
653
+ guidance,
654
+ }),
655
+ },
656
+ ],
657
+ details: { computer: { failed, workflow: "ready" } },
658
+ isError: failed,
659
+ };
446
660
  }
447
661
  const target = targetFrom(input);
448
662
  actionTarget = target;
@@ -456,18 +670,38 @@ export class ComputerWorkflow {
456
670
  this.lastCapture = { fingerprint: captured.fingerprint, target, repeats };
457
671
  if (repeats >= 3)
458
672
  return {
459
- content: [{ type: "text", text: JSON.stringify({ phase: "observation_capture", code: "unchanged_polling_limit", guidance: "Three captures are unchanged. Stop polling and reconsider the target or approach. No input token issued." }) }],
460
- details: { computer: { failed: true, workflow: "stopped" } }, isError: true,
673
+ content: [
674
+ {
675
+ type: "text",
676
+ text: JSON.stringify({
677
+ phase: "observation_capture",
678
+ code: "unchanged_polling_limit",
679
+ guidance: "Three captures are unchanged. Stop polling and reconsider the target or approach. No input token issued.",
680
+ }),
681
+ },
682
+ ],
683
+ details: { computer: { failed: true, workflow: "stopped" } },
684
+ isError: true,
461
685
  };
462
686
  return this.imageResult(captured, { unchanged });
463
687
  }
464
688
  const grounded = this.fresh(input, previous);
465
689
  const { operation, args } = this.action(name, input, grounded);
466
690
  const { button = "left", count = 1, modifier = [], ...clickArgs } = args;
467
- const signature = JSON.stringify({ operation, args: operation === "click"
468
- ? { ...clickArgs, button, count, modifier: Array.isArray(modifier) ? [...new Set(modifier)].sort() : modifier }
469
- : args });
470
- if (this.lastAction?.unchanged && this.lastAction.signature === signature && this.lastAction.fingerprint === grounded.fingerprint)
691
+ const signature = JSON.stringify({
692
+ operation,
693
+ args: operation === "click"
694
+ ? {
695
+ ...clickArgs,
696
+ button,
697
+ count,
698
+ modifier: Array.isArray(modifier) ? [...new Set(modifier)].sort() : modifier,
699
+ }
700
+ : args,
701
+ });
702
+ if (this.lastAction?.unchanged &&
703
+ this.lastAction.signature === signature &&
704
+ this.lastAction.fingerprint === grounded.fingerprint)
471
705
  throw new Error("The identical action had no visible change. Choose a different grounded action; never retry blindly.");
472
706
  combined.throwIfAborted();
473
707
  inputDispatched = true;
@@ -488,22 +722,59 @@ export class ComputerWorkflow {
488
722
  const after = await this.capture(target, combined);
489
723
  const unchanged = after.fingerprint === grounded.fingerprint;
490
724
  this.lastAction = { signature, fingerprint: after.fingerprint, unchanged };
491
- this.lastCapture = { fingerprint: after.fingerprint, target, repeats: failed && this.lastCapture?.fingerprint === after.fingerprint && sameTarget(this.lastCapture.target, target)
492
- ? this.lastCapture.repeats : 0 };
493
- return this.imageResult(after, { kind: "action", operation, target, ...actionOutcome, failed, unchanged,
494
- guidance: ["Inspect the post-action image before another action. No visible change does not prove failure; never repeat blindly.",
495
- backgroundUnavailable ? "After this fresh capture, foreground input may be considered if permitted, not another background shortcut." : undefined,
496
- recoveryGuidance].filter(Boolean).join(" ") });
725
+ this.lastCapture = {
726
+ fingerprint: after.fingerprint,
727
+ target,
728
+ repeats: failed &&
729
+ this.lastCapture?.fingerprint === after.fingerprint &&
730
+ sameTarget(this.lastCapture.target, target)
731
+ ? this.lastCapture.repeats
732
+ : 0,
733
+ };
734
+ return this.imageResult(after, {
735
+ kind: "action",
736
+ operation,
737
+ target,
738
+ ...actionOutcome,
739
+ failed,
740
+ unchanged,
741
+ guidance: [
742
+ "Inspect the post-action image before another action. No visible change does not prove failure; never repeat blindly.",
743
+ backgroundUnavailable
744
+ ? "After this fresh capture, foreground input may be considered if permitted, not another background shortcut."
745
+ : undefined,
746
+ recoveryGuidance,
747
+ ]
748
+ .filter(Boolean)
749
+ .join(" "),
750
+ });
497
751
  }
498
752
  catch (error) {
499
753
  combined.throwIfAborted();
500
754
  if (!(error instanceof CaptureError))
501
755
  throw error;
502
756
  this.lastAction = { signature, fingerprint: grounded.fingerprint, unchanged: true };
503
- return { content: [{ type: "text", text: JSON.stringify({ kind: "action", operation, target, ...actionOutcome, phase: "post_action_capture",
504
- capture_error: error.code, observation: "unavailable", guidance: `Input may have taken effect. ${["target_not_found", "window_target_not_found", "window_target_mismatch"].includes(error.code)
505
- ? "Use computer_apps({pid}) or observe the desktop to find the target." : "Get a fresh capture of the exact target"} before another action; never repeat blindly. ${recoveryGuidance ?? ""}`,
506
- }) }], details: { computer: { failed: true, workflow: "ready" } }, isError: true };
757
+ return {
758
+ content: [
759
+ {
760
+ type: "text",
761
+ text: JSON.stringify({
762
+ kind: "action",
763
+ operation,
764
+ target,
765
+ ...actionOutcome,
766
+ phase: "post_action_capture",
767
+ capture_error: error.code,
768
+ observation: "unavailable",
769
+ guidance: `Input may have taken effect. ${["target_not_found", "window_target_not_found", "window_target_mismatch"].includes(error.code)
770
+ ? "Use computer_apps({pid}) or observe the desktop to find the target."
771
+ : "Get a fresh capture of the exact target"} before another action; never repeat blindly. ${recoveryGuidance ?? ""}`,
772
+ }),
773
+ },
774
+ ],
775
+ details: { computer: { failed: true, workflow: "ready" } },
776
+ isError: true,
777
+ };
507
778
  }
508
779
  }, combined);
509
780
  if (result.details.computer.workflow !== "ready")
@@ -516,34 +787,103 @@ export class ComputerWorkflow {
516
787
  inputDispatched = error.dispatched;
517
788
  }
518
789
  const failurePhase = currentPhase();
519
- const fatal = combined.aborted || this.abort.signal.aborted || this.lease.signal.aborted || error instanceof DriverCallError ||
520
- !(error instanceof ObservationError || error instanceof CaptureError || failurePhase === "validation" || failurePhase === "observation_capture" && !inputDispatched);
521
- const code = error instanceof ObservationError || error instanceof CaptureError ? error.code
522
- : inputDispatched && failurePhase === "post_action_capture" ? "capture_transport_failed"
523
- : error instanceof DriverCallError ? error.dispatched ? "input_dispatch_failed" : "adapter_preflight_failed"
524
- : inputDispatched ? "input_dispatch_failed" : failurePhase === "validation" ? "invalid_arguments" : failureCode;
525
- const message = name === "computer_launch" ? inputDispatched ? "Launch request began; activation may have occurred." : "No launch request was sent by this call."
526
- : inputDispatched ? "Input may have taken effect; request began." : "No input was sent by this call.";
527
- const guidance = inputDispatched ? name === "computer_launch"
528
- ? `Use computer_apps({query:${JSON.stringify(input.name)}) before considering another launch.`
529
- : `Get a fresh capture of the exact target before another action. Input may have taken effect; inspect the field before deciding and never repeat blindly. ${actionOutcome?.retry_from_character !== undefined ? "Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16." : ""}`
790
+ const fatal = combined.aborted ||
791
+ this.abort.signal.aborted ||
792
+ this.lease.signal.aborted ||
793
+ error instanceof DriverCallError ||
794
+ !(error instanceof ObservationError ||
795
+ error instanceof CaptureError ||
796
+ failurePhase === "validation" ||
797
+ (failurePhase === "observation_capture" && !inputDispatched));
798
+ const code = error instanceof ObservationError || error instanceof CaptureError
799
+ ? error.code
800
+ : inputDispatched && failurePhase === "post_action_capture"
801
+ ? "capture_transport_failed"
802
+ : error instanceof DriverCallError
803
+ ? error.dispatched
804
+ ? "input_dispatch_failed"
805
+ : "adapter_preflight_failed"
806
+ : inputDispatched
807
+ ? "input_dispatch_failed"
808
+ : failurePhase === "validation"
809
+ ? "invalid_arguments"
810
+ : failureCode;
811
+ const message = name === "computer_launch"
812
+ ? inputDispatched
813
+ ? "Launch request began; activation may have occurred."
814
+ : "No launch request was sent by this call."
815
+ : inputDispatched
816
+ ? "Input may have taken effect; request began."
817
+ : "No input was sent by this call.";
818
+ const guidance = inputDispatched
819
+ ? name === "computer_launch"
820
+ ? `Use computer_apps({query:${JSON.stringify(input.name)}) before considering another launch.`
821
+ : `Get a fresh capture of the exact target before another action. Input may have taken effect; inspect the field before deciding and never repeat blindly. ${actionOutcome?.retry_from_character !== undefined ? "Verify the field in a fresh image before considering any remaining suffix. retry_from_character is a zero-based Unicode code-point offset, not UTF-16." : ""}`
530
822
  : freshActionGuidance;
531
- const result = { content: [{ type: "text", text: JSON.stringify({ kind: name === "computer_apps" ? "apps" : name === "computer_launch" ? "launch" : name === "computer_observe" ? "observation" : "action",
532
- operation: operationName, target: actionTarget, ...actionOutcome, action_outcome: actionOutcome, phase: failurePhase, code,
533
- input: name === "computer_apps" ? undefined : name === "computer_launch" ? "not_applicable" : inputDispatched ? "uncertain" : "not_dispatched",
534
- request: name === "computer_launch" ? inputDispatched ? "sent" : "not_sent" : undefined, applicationEffect: "unverified",
535
- observation: "unavailable", capture_error: failurePhase === "post_action_capture" ? code : undefined, message, guidance }) }], details: { computer: { failed: true, workflow: fatal ? "stopped" : "ready" } }, isError: true };
823
+ const result = {
824
+ content: [
825
+ {
826
+ type: "text",
827
+ text: JSON.stringify({
828
+ kind: name === "computer_apps"
829
+ ? "apps"
830
+ : name === "computer_launch"
831
+ ? "launch"
832
+ : name === "computer_observe"
833
+ ? "observation"
834
+ : "action",
835
+ operation: operationName,
836
+ target: actionTarget,
837
+ ...actionOutcome,
838
+ action_outcome: actionOutcome,
839
+ phase: failurePhase,
840
+ code,
841
+ input: name === "computer_apps"
842
+ ? undefined
843
+ : name === "computer_launch"
844
+ ? "not_applicable"
845
+ : inputDispatched
846
+ ? "uncertain"
847
+ : "not_dispatched",
848
+ request: name === "computer_launch" ? (inputDispatched ? "sent" : "not_sent") : undefined,
849
+ applicationEffect: "unverified",
850
+ observation: "unavailable",
851
+ capture_error: failurePhase === "post_action_capture" ? code : undefined,
852
+ message,
853
+ guidance,
854
+ }),
855
+ },
856
+ ],
857
+ details: { computer: { failed: true, workflow: fatal ? "stopped" : "ready" } },
858
+ isError: true,
859
+ };
536
860
  return fatal ? this.finish(result) : result;
537
861
  }
538
862
  }
539
863
  async finish(result) {
540
864
  try {
541
865
  await this.close();
542
- return { ...result, details: { ...result.details, computer: { failed: result.details.computer.failed, workflow: "stopped" } } };
866
+ return {
867
+ ...result,
868
+ details: { ...result.details, computer: { failed: result.details.computer.failed, workflow: "stopped" } },
869
+ };
543
870
  }
544
871
  catch {
545
- return { content: [...result.content, { type: "text", text: JSON.stringify({ phase: "cleanup", cleanup: "unconfirmed", guidance: "Desktop ownership retained until shutdown is confirmed." }) }],
546
- details: { ...result.details, computer: { failed: true, workflow: "cleanup_unconfirmed" } }, isError: true };
872
+ return {
873
+ content: [
874
+ ...result.content,
875
+ {
876
+ type: "text",
877
+ text: JSON.stringify({
878
+ phase: "cleanup",
879
+ cleanup: "unconfirmed",
880
+ guidance: "Desktop ownership retained until shutdown is confirmed.",
881
+ }),
882
+ },
883
+ ],
884
+ details: { ...result.details, computer: { failed: true, workflow: "cleanup_unconfirmed" } },
885
+ isError: true,
886
+ };
547
887
  }
548
888
  }
549
889
  close() {