@abot-ai/runtime 1.6.0 → 1.8.0

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 (750) hide show
  1. package/README.md +2 -0
  2. package/dist/src/bridge/request-steering.js +60 -15
  3. package/dist/src/capabilities/normal-invocation/contracts.d.ts +3 -0
  4. package/dist/src/capabilities/normal-invocation/output-channels.d.ts +10 -0
  5. package/dist/src/capabilities/normal-invocation/output-channels.js +29 -0
  6. package/dist/src/capabilities/normal-invocation/validator.js +4 -2
  7. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  8. package/dist/src/capabilities/tool-types.d.ts +1 -1
  9. package/dist/src/cli/abot.js +2 -0
  10. package/dist/src/cli/host-companion-bundle.mjs +8003 -6796
  11. package/dist/src/cli/host-companion-entry.js +5 -22
  12. package/dist/src/cli/host-companion-input.d.ts +3 -0
  13. package/dist/src/cli/host-companion-input.js +21 -0
  14. package/dist/src/cli/host-companion-lifecycle.d.ts +11 -0
  15. package/dist/src/cli/host-companion-lifecycle.js +32 -0
  16. package/dist/src/cli/host-companion-setup-target.d.ts +4 -0
  17. package/dist/src/cli/host-companion-setup-target.js +17 -0
  18. package/dist/src/cli/host-companion-startup.d.ts +2 -0
  19. package/dist/src/cli/host-companion-startup.js +7 -2
  20. package/dist/src/cli/host-companion.d.ts +6 -0
  21. package/dist/src/cli/host-companion.js +30 -27
  22. package/dist/src/cli/windows-companion-store-entry.d.ts +9 -0
  23. package/dist/src/cli/windows-companion-store-entry.js +67 -0
  24. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  25. package/dist/src/computer-access/collection-consent.js +47 -0
  26. package/dist/src/computer-access/command-output-capture.d.ts +48 -0
  27. package/dist/src/computer-access/command-output-capture.js +202 -0
  28. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  29. package/dist/src/computer-access/command-output-protection.js +59 -0
  30. package/dist/src/computer-access/command-output-retention.d.ts +5 -0
  31. package/dist/src/computer-access/command-output-retention.js +90 -0
  32. package/dist/src/computer-access/command-output.d.ts +7 -0
  33. package/dist/src/computer-access/command-output.js +1 -0
  34. package/dist/src/computer-access/commands.d.ts +1 -0
  35. package/dist/src/computer-access/commands.js +1 -1
  36. package/dist/src/computer-access/companion/command-output-protocol.d.ts +12 -0
  37. package/dist/src/computer-access/companion/command-output-protocol.js +28 -0
  38. package/dist/src/computer-access/companion/command-output.d.ts +14 -0
  39. package/dist/src/computer-access/companion/command-output.js +127 -0
  40. package/dist/src/computer-access/companion/install-link-macos.d.ts +7 -0
  41. package/dist/src/computer-access/companion/install-link-macos.js +49 -0
  42. package/dist/src/computer-access/companion/install-link-registration.d.ts +4 -0
  43. package/dist/src/computer-access/companion/install-link-registration.js +184 -0
  44. package/dist/src/computer-access/companion/install-link-windows.d.ts +4 -0
  45. package/dist/src/computer-access/companion/install-link-windows.js +65 -0
  46. package/dist/src/computer-access/companion/install-link.d.ts +9 -0
  47. package/dist/src/computer-access/companion/install-link.js +54 -0
  48. package/dist/src/computer-access/companion/native-messages.js +3 -0
  49. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  50. package/dist/src/computer-access/companion/native-session.d.ts +1 -0
  51. package/dist/src/computer-access/companion/native-session.js +20 -4
  52. package/dist/src/computer-access/companion/native-supervisor.js +1 -0
  53. package/dist/src/computer-access/companion/notification-windows.d.ts +1 -1
  54. package/dist/src/computer-access/companion/notification-windows.js +8 -3
  55. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  56. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  57. package/dist/src/computer-access/companion/observation-process.js +51 -25
  58. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  59. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  60. package/dist/src/computer-access/companion/protocol.d.ts +1 -1
  61. package/dist/src/computer-access/companion/protocol.js +6 -0
  62. package/dist/src/computer-access/companion/release-version.d.ts +1 -1
  63. package/dist/src/computer-access/companion/release-version.js +1 -1
  64. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  65. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  66. package/dist/src/computer-access/companion/windows-store/connection-error.d.ts +7 -0
  67. package/dist/src/computer-access/companion/windows-store/connection-error.js +19 -0
  68. package/dist/src/computer-access/companion/windows-store/connection-link.d.ts +13 -0
  69. package/dist/src/computer-access/companion/windows-store/connection-link.js +109 -0
  70. package/dist/src/computer-access/companion/windows-store/identity.d.ts +13 -0
  71. package/dist/src/computer-access/companion/windows-store/identity.js +13 -0
  72. package/dist/src/computer-access/companion/windows-store/lifecycle.d.ts +5 -0
  73. package/dist/src/computer-access/companion/windows-store/lifecycle.js +90 -0
  74. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  75. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  76. package/dist/src/computer-access/contracts.d.ts +1 -1
  77. package/dist/src/computer-access/handlers.d.ts +3 -1
  78. package/dist/src/computer-access/handlers.js +83 -11
  79. package/dist/src/computer-access/host-observation.d.ts +3 -3
  80. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  81. package/dist/src/computer-access/native-observation-connection.js +78 -0
  82. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  83. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  84. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  85. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  86. package/dist/src/computer-access/observation-source.d.ts +6 -0
  87. package/dist/src/computer-access/observation-source.js +10 -0
  88. package/dist/src/computer-access/process-capture.d.ts +6 -0
  89. package/dist/src/computer-access/process-capture.js +1 -0
  90. package/dist/src/computer-access/process-result.d.ts +2 -0
  91. package/dist/src/computer-access/process-result.js +14 -6
  92. package/dist/src/computer-access/process-runner.d.ts +2 -1
  93. package/dist/src/computer-access/process-runner.js +21 -13
  94. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  95. package/dist/src/computer-access/security/desktop-result.js +146 -0
  96. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  97. package/dist/src/computer-access/security/observed-error.js +10 -0
  98. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  99. package/dist/src/computer-access/security/secret-text.js +111 -0
  100. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  101. package/dist/src/computer-access/security/system-results.js +53 -0
  102. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  103. package/dist/src/computer-access/system-result-protection.js +1 -0
  104. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  105. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  106. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  107. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  108. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  109. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  110. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  111. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  112. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  113. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  114. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  115. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  116. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  117. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  118. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  119. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  120. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  121. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  122. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  123. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  124. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  125. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  126. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  127. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  128. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  129. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  130. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  131. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  132. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  133. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  134. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  135. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  136. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  137. package/dist/src/model-gateway/server/configuration.d.ts +2 -0
  138. package/dist/src/model-gateway/server/configuration.js +73 -21
  139. package/dist/src/model-gateway/server.js +5 -1
  140. package/dist/src/plugin-contract/index.d.ts +1 -0
  141. package/dist/src/plugin-contract/index.js +1 -0
  142. package/dist/src/plugin-contract/install-source.d.ts +13 -0
  143. package/dist/src/plugin-contract/install-source.js +99 -0
  144. package/dist/src/plugin-contract/manifest.d.ts +4 -1
  145. package/dist/src/plugin-contract/manifest.js +1 -0
  146. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  147. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  148. package/dist/src/plugin-sdk/computer-access.d.ts +12 -0
  149. package/dist/src/plugin-sdk/computer-access.js +6 -0
  150. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  151. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  152. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  153. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  154. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  155. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  156. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  157. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  158. package/dist/src/plugin-sdk/files.js +4 -0
  159. package/dist/src/plugin-sdk/index.d.ts +1 -0
  160. package/dist/src/plugin-sdk/index.js +1 -0
  161. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  162. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  163. package/dist/src/runtime/adapters/in-memory-session-store.js +6 -16
  164. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  165. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  166. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  167. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  168. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  169. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  170. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  171. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  172. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  173. package/dist/src/runtime/admin/config-control.js +2 -1
  174. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  175. package/dist/src/runtime/automations/catalog.js +1 -0
  176. package/dist/src/runtime/automations/model-dependency-projection.d.ts +2 -0
  177. package/dist/src/runtime/automations/service.d.ts +2 -0
  178. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.d.ts +10 -5
  179. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.js +8 -7
  180. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.d.ts +2 -2
  181. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.js +2 -2
  182. package/dist/src/runtime/capabilities/automation-builder/tool-contract.d.ts +2 -2
  183. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -1
  184. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +11 -5
  185. package/dist/src/runtime/capabilities/automations/tool-module.js +1 -1
  186. package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +3 -1
  187. package/dist/src/runtime/capabilities/request-permission-catalog.js +21 -2
  188. package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +2 -1
  189. package/dist/src/runtime/capabilities/request-permission-tool-registry.js +18 -10
  190. package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +2 -0
  191. package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +1 -1
  192. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +6 -0
  193. package/dist/src/runtime/config/builders.js +6 -5
  194. package/dist/src/runtime/config/effective-model-config-validation.js +4 -35
  195. package/dist/src/runtime/config/fields.js +15 -0
  196. package/dist/src/runtime/config/model-context-capacity.d.ts +20 -0
  197. package/dist/src/runtime/config/model-context-capacity.js +55 -0
  198. package/dist/src/runtime/config/model-execution-policy.d.ts +5 -1
  199. package/dist/src/runtime/config/model-execution-policy.js +16 -0
  200. package/dist/src/runtime/config/model-plugin-config.d.ts +8 -0
  201. package/dist/src/runtime/config/model-plugin-config.js +40 -0
  202. package/dist/src/runtime/config/schema.js +5 -1
  203. package/dist/src/runtime/config/validation/model-profile-validation.js +2 -0
  204. package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +3 -1
  205. package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +3 -1
  206. package/dist/src/runtime/config/validation/runtime-root-section-validation.js +11 -4
  207. package/dist/src/runtime/config/validation/web-ui-config-validation.js +3 -2
  208. package/dist/src/runtime/config/web-ui.d.ts +5 -0
  209. package/dist/src/runtime/config/web-ui.js +5 -0
  210. package/dist/src/runtime/config.js +2 -0
  211. package/dist/src/runtime/local-application.d.ts +2 -0
  212. package/dist/src/runtime/local-host/app-owner.js +50 -6
  213. package/dist/src/runtime/local-host/app-request-control.d.ts +3 -1
  214. package/dist/src/runtime/local-host/app-request-control.js +91 -11
  215. package/dist/src/runtime/local-host/client-requests.js +32 -5
  216. package/dist/src/runtime/local-host/client-services.d.ts +2 -0
  217. package/dist/src/runtime/local-host/local-request-diagnostics.d.ts +9 -0
  218. package/dist/src/runtime/local-host/local-request-diagnostics.js +47 -0
  219. package/dist/src/runtime/local-host/saved-approvals.js +23 -2
  220. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  221. package/dist/src/runtime/model/model-selection.js +4 -1
  222. package/dist/src/runtime/observability/request-control-diagnostics.d.ts +6 -0
  223. package/dist/src/runtime/observability/request-control-diagnostics.js +52 -0
  224. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  225. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  226. package/dist/src/runtime/passive-learning/service.js +2 -3
  227. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  228. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  229. package/dist/src/runtime/plugins/configuration-context.d.ts +9 -0
  230. package/dist/src/runtime/plugins/configuration-context.js +42 -0
  231. package/dist/src/runtime/plugins/configuration-settings.d.ts +2 -0
  232. package/dist/src/runtime/plugins/configuration-settings.js +26 -0
  233. package/dist/src/runtime/plugins/configuration-store.d.ts +23 -0
  234. package/dist/src/runtime/plugins/configuration-store.js +100 -0
  235. package/dist/src/runtime/plugins/configuration-write.d.ts +5 -0
  236. package/dist/src/runtime/plugins/configuration-write.js +58 -0
  237. package/dist/src/runtime/plugins/installation/archive.d.ts +2 -0
  238. package/dist/src/runtime/plugins/installation/archive.js +107 -0
  239. package/dist/src/runtime/plugins/installation/github-download.d.ts +9 -0
  240. package/dist/src/runtime/plugins/installation/github-download.js +72 -0
  241. package/dist/src/runtime/plugins/installation/installed-package.d.ts +9 -0
  242. package/dist/src/runtime/plugins/installation/installed-package.js +66 -0
  243. package/dist/src/runtime/plugins/installation/package.d.ts +53 -0
  244. package/dist/src/runtime/plugins/installation/package.js +81 -0
  245. package/dist/src/runtime/plugins/installation/portable-path.d.ts +2 -0
  246. package/dist/src/runtime/plugins/installation/portable-path.js +10 -0
  247. package/dist/src/runtime/plugins/installation/publication.d.ts +10 -0
  248. package/dist/src/runtime/plugins/installation/publication.js +17 -0
  249. package/dist/src/runtime/plugins/installation/service.d.ts +48 -0
  250. package/dist/src/runtime/plugins/installation/service.js +80 -0
  251. package/dist/src/runtime/plugins/loader.js +34 -38
  252. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  253. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  254. package/dist/src/runtime/plugins/manifest-projection.js +1 -0
  255. package/dist/src/runtime/plugins/manifest-validator.js +12 -1
  256. package/dist/src/runtime/plugins/module-cache.d.ts +2 -0
  257. package/dist/src/runtime/plugins/module-cache.js +19 -0
  258. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  259. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  260. package/dist/src/runtime/plugins/selection.d.ts +2 -0
  261. package/dist/src/runtime/plugins/selection.js +16 -11
  262. package/dist/src/runtime/ports.d.ts +6 -4
  263. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  264. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  265. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  266. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  267. package/dist/src/runtime/request/dependencies.d.ts +2 -1
  268. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +1 -1
  269. package/dist/src/runtime/request/handler.js +8 -0
  270. package/dist/src/runtime/request/prepared-execution.js +9 -1
  271. package/dist/src/runtime/request/request-steering.d.ts +4 -0
  272. package/dist/src/runtime/request/request-steering.js +37 -12
  273. package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -0
  274. package/dist/src/runtime/request/worker-capability-composition.js +4 -1
  275. package/dist/src/runtime/scheduler/journal-index-state.d.ts +1 -1
  276. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  277. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  278. package/dist/src/runtime/steps/execution-agent/format.js +2 -3
  279. package/dist/src/runtime/steps/execution-agent/input.js +1 -1
  280. package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
  281. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  282. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
  283. package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
  284. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  285. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  286. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  287. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  288. package/dist/src/sessions/assistant-initiative-message.d.ts +3 -0
  289. package/dist/src/sessions/assistant-initiative-message.js +12 -0
  290. package/dist/src/sessions/assistant-initiative.d.ts +2 -2
  291. package/dist/src/sessions/assistant-initiative.js +1 -7
  292. package/dist/src/sessions/durable-session-commit.d.ts +2 -1
  293. package/dist/src/sessions/durable-session-commit.js +9 -4
  294. package/dist/src/sessions/metadata/projection.d.ts +15 -0
  295. package/dist/src/sessions/metadata/projection.js +55 -0
  296. package/dist/src/sessions/metadata/publication.d.ts +12 -0
  297. package/dist/src/sessions/metadata/publication.js +78 -0
  298. package/dist/src/sessions/metadata/source-receipt.d.ts +5 -0
  299. package/dist/src/sessions/metadata/source-receipt.js +42 -0
  300. package/dist/src/sessions/metadata/store.d.ts +7 -0
  301. package/dist/src/sessions/metadata/store.js +119 -0
  302. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  303. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  304. package/dist/src/sessions/record/projection.d.ts +3 -1
  305. package/dist/src/sessions/record/projection.js +26 -18
  306. package/dist/src/sessions/request-lifecycle/service.js +3 -3
  307. package/dist/src/sessions/session-service.d.ts +2 -4
  308. package/dist/src/sessions/session-service.js +4 -16
  309. package/dist/src/sessions/session-store.d.ts +2 -1
  310. package/dist/src/sessions/session-store.js +11 -5
  311. package/dist/src/sessions/snapshot.d.ts +17 -0
  312. package/dist/src/sessions/snapshot.js +105 -0
  313. package/dist/src/sessions/types.d.ts +2 -0
  314. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  315. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  316. package/dist/src/shared/tool-selection.d.ts +2 -0
  317. package/dist/src/shared/tool-selection.js +7 -0
  318. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  319. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  320. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  321. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  322. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  323. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  324. package/dist/src/shared/windows-job-object.d.ts +2 -0
  325. package/dist/src/shared/windows-job-object.js +66 -0
  326. package/dist/src/web-ui/app/ARCHITECTURE.md +14 -0
  327. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  328. package/dist/src/web-ui/app/app-state.js +0 -7
  329. package/dist/src/web-ui/app/app.js +59 -159
  330. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  331. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  332. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  333. package/dist/src/web-ui/app/components/config-workspace/config-model.js +2 -0
  334. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +136 -0
  335. package/dist/src/web-ui/app/components/config-workspace/model-plugin-selection.js +180 -0
  336. package/dist/src/web-ui/app/components/config-workspace/model-plugin-view-state.js +114 -0
  337. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +3 -0
  338. package/dist/src/web-ui/app/components/config-workspace/model-summary.js +39 -0
  339. package/dist/src/web-ui/app/components/config-workspace/summary-rendering.js +30 -0
  340. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +37 -0
  341. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +24 -2
  342. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +9 -1
  343. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +23 -67
  344. package/dist/src/web-ui/app/components/config-workspace.js +11 -2
  345. package/dist/src/web-ui/app/components/conversation-view.js +36 -5
  346. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +2 -1
  347. package/dist/src/web-ui/app/components/dashboard/workspace.js +2 -1
  348. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  349. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  350. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  351. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  352. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  353. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  354. package/dist/src/web-ui/app/components/operations-summary.js +105 -0
  355. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  356. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  357. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  358. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  359. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  360. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  361. package/dist/src/web-ui/app/components/passive-learning/home.js +8 -11
  362. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  363. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  364. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  365. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  366. package/dist/src/web-ui/app/components/plugins/configuration-draft.js +34 -0
  367. package/dist/src/web-ui/app/components/plugins/configuration-editor.js +147 -0
  368. package/dist/src/web-ui/app/components/plugins/configuration-fields.js +103 -0
  369. package/dist/src/web-ui/app/components/plugins/configuration-retained-secrets.js +20 -0
  370. package/dist/src/web-ui/app/components/plugins/configuration-settings.js +108 -0
  371. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +45 -0
  372. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  373. package/dist/src/web-ui/app/components/plugins/installation.js +213 -0
  374. package/dist/src/web-ui/app/components/plugins/manager.js +160 -6
  375. package/dist/src/web-ui/app/components/plugins/removal.js +130 -0
  376. package/dist/src/web-ui/app/components/plugins/rendering.js +17 -2
  377. package/dist/src/web-ui/app/components/plugins/summary.js +54 -0
  378. package/dist/src/web-ui/app/components/plugins/tabs.js +31 -0
  379. package/dist/src/web-ui/app/components/plugins/view-state.js +3 -1
  380. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  381. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  382. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +5 -2
  383. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +9 -1
  384. package/dist/src/web-ui/app/components/runtime-setup/context-window-feedback.js +71 -0
  385. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +9 -4
  386. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  387. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  388. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  389. package/dist/src/web-ui/app/components/runtime-setup-guide.js +15 -3
  390. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  391. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  392. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  393. package/dist/src/web-ui/app/components/spark-chat/empty-state.js +1 -0
  394. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  395. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -0
  396. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  397. package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
  398. package/dist/src/web-ui/app/components/system-host/connection-card.js +35 -0
  399. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  400. package/dist/src/web-ui/app/components/system-host/macos-setup.js +1 -1
  401. package/dist/src/web-ui/app/components/system-host/manager.js +45 -12
  402. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  403. package/dist/src/web-ui/app/components/system-host/rendering.js +114 -106
  404. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +293 -0
  405. package/dist/src/web-ui/app/components/workspace-shell.js +6 -0
  406. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  407. package/dist/src/web-ui/app/computer-access-feature.js +22 -5
  408. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  409. package/dist/src/web-ui/app/configuration-feature.js +44 -3
  410. package/dist/src/web-ui/app/controllers/app-event-bindings.js +41 -105
  411. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  412. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  413. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  414. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  415. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  416. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  417. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  418. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  419. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  420. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  421. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  422. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  423. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  424. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  425. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  426. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  427. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  428. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  429. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  430. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  431. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +1 -0
  432. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +7 -3
  433. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +91 -0
  434. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +10 -5
  435. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +97 -162
  436. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  437. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  438. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  439. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  440. package/dist/src/web-ui/app/controllers/history-pagination.js +111 -0
  441. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  442. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  443. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  444. package/dist/src/web-ui/app/controllers/operations-controller.d.ts +12 -0
  445. package/dist/src/web-ui/app/controllers/operations-controller.js +28 -21
  446. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  447. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  448. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  449. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  450. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.d.ts +1 -0
  451. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +11 -0
  452. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  453. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  454. package/dist/src/web-ui/app/controllers/session-controller.js +43 -19
  455. package/dist/src/web-ui/app/controllers/session-list-pagination.js +71 -0
  456. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  457. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +17 -17
  458. package/dist/src/web-ui/app/controllers/spark-chat-reading.js +1 -0
  459. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +26 -7
  460. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  461. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  462. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  463. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +21 -19
  464. package/dist/src/web-ui/app/dashboard-feature.js +4 -3
  465. package/dist/src/web-ui/app/index.html +6 -2
  466. package/dist/src/web-ui/app/lib/history-page-messages.js +49 -0
  467. package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -0
  468. package/dist/src/web-ui/app/lib/request-lifecycle-view.js +8 -0
  469. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  470. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  471. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  472. package/dist/src/web-ui/app/lib/workspace-route.d.ts +3 -0
  473. package/dist/src/web-ui/app/lib/workspace-route.js +4 -0
  474. package/dist/src/web-ui/app/passive-learning-feature.js +16 -4
  475. package/dist/src/web-ui/app/runtime-onboarding-feature.js +3 -0
  476. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  477. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  478. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  479. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  480. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  481. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  482. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +20 -0
  483. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  484. package/dist/src/web-ui/app/services/runtime-web-client/plugin-configuration.js +19 -0
  485. package/dist/src/web-ui/app/services/runtime-web-client/spark-chat.js +4 -4
  486. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +4 -0
  487. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +8 -1
  488. package/dist/src/web-ui/app/services/runtime-web-client.js +14 -3
  489. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  490. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  491. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  492. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  493. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  494. package/dist/src/web-ui/app/spark-chat-feature.js +84 -21
  495. package/dist/src/web-ui/app/styles/11-product-links.css +30 -0
  496. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  497. package/dist/src/web-ui/app/styles/41-plugin-configuration.css +79 -0
  498. package/dist/src/web-ui/app/styles/41-plugin-discovery.css +132 -0
  499. package/dist/src/web-ui/app/styles/41-plugin-management.css +14 -0
  500. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +174 -0
  501. package/dist/src/web-ui/app/styles/46-system-host.css +61 -107
  502. package/dist/src/web-ui/app/styles/47-config-controls.css +13 -1
  503. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  504. package/dist/src/web-ui/app/styles/54-spark-chat.css +33 -1
  505. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  506. package/dist/src/web-ui/app/styles.css +6 -0
  507. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  508. package/dist/src/web-ui/client-state/contracts.js +13 -0
  509. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  510. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  511. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  512. package/dist/src/web-ui/client-state/preferences.js +84 -0
  513. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  514. package/dist/src/web-ui/client-state/queue.js +43 -0
  515. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  516. package/dist/src/web-ui/client-state/routes.js +58 -0
  517. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  518. package/dist/src/web-ui/client-state/store.js +88 -0
  519. package/dist/src/web-ui/local-runtime/api-router.js +11 -6
  520. package/dist/src/web-ui/local-runtime/approval-request-attachment.js +14 -5
  521. package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +1 -1
  522. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +11 -3
  523. package/dist/src/web-ui/local-runtime/contracts.d.ts +4 -3
  524. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +5 -1
  525. package/dist/src/web-ui/local-runtime/environment-registry.js +53 -11
  526. package/dist/src/web-ui/local-runtime/history-pagination.d.ts +16 -0
  527. package/dist/src/web-ui/local-runtime/history-pagination.js +20 -0
  528. package/dist/src/web-ui/local-runtime/http.js +11 -2
  529. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  530. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  531. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  532. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  533. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  534. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  535. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  536. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  537. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.d.ts +16 -0
  538. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.js +68 -0
  539. package/dist/src/web-ui/local-runtime/plugin-installation-routes.d.ts +16 -0
  540. package/dist/src/web-ui/local-runtime/plugin-installation-routes.js +96 -0
  541. package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +8 -1
  542. package/dist/src/web-ui/local-runtime/plugin-management-routes.js +17 -0
  543. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.d.ts +7 -0
  544. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.js +17 -0
  545. package/dist/src/web-ui/local-runtime/plugin-removal-routes.d.ts +18 -0
  546. package/dist/src/web-ui/local-runtime/plugin-removal-routes.js +60 -0
  547. package/dist/src/web-ui/local-runtime/realtime-controller.js +41 -2
  548. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  549. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  550. package/dist/src/web-ui/local-runtime/request-cancellation-route.js +28 -1
  551. package/dist/src/web-ui/local-runtime/request-control-observation.d.ts +19 -0
  552. package/dist/src/web-ui/local-runtime/request-control-observation.js +80 -0
  553. package/dist/src/web-ui/local-runtime/request-execution.js +66 -34
  554. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  555. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  556. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +13 -0
  557. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +21 -0
  558. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  559. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  560. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  561. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  562. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  563. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  564. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  565. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  566. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  567. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  568. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +2 -0
  569. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  570. package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +9 -2
  571. package/dist/src/web-ui/local-runtime/session-routes.d.ts +1 -0
  572. package/dist/src/web-ui/local-runtime/session-routes.js +16 -4
  573. package/dist/src/web-ui/local-runtime/spark-chat-routes.js +4 -3
  574. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  575. package/dist/src/web-ui/plugin-capability-selection.js +4 -1
  576. package/dist/src/web-ui/plugin-configuration-input.d.ts +12 -0
  577. package/dist/src/web-ui/plugin-configuration-input.js +68 -0
  578. package/dist/src/web-ui/plugin-configuration-retained-secrets.d.ts +9 -0
  579. package/dist/src/web-ui/plugin-configuration-retained-secrets.js +48 -0
  580. package/dist/src/web-ui/plugin-configuration-service.d.ts +52 -0
  581. package/dist/src/web-ui/plugin-configuration-service.js +66 -0
  582. package/dist/src/web-ui/plugin-configuration-view.d.ts +25 -0
  583. package/dist/src/web-ui/plugin-configuration-view.js +45 -0
  584. package/dist/src/web-ui/plugin-disabled-selection.d.ts +7 -0
  585. package/dist/src/web-ui/plugin-disabled-selection.js +17 -0
  586. package/dist/src/web-ui/plugin-management-catalog.d.ts +5 -1
  587. package/dist/src/web-ui/plugin-management-catalog.js +13 -1
  588. package/dist/src/web-ui/plugin-management-selection.js +22 -9
  589. package/dist/src/web-ui/plugin-management-service.d.ts +6 -1
  590. package/dist/src/web-ui/plugin-management-service.js +11 -7
  591. package/dist/src/web-ui/plugin-removal-error.d.ts +7 -0
  592. package/dist/src/web-ui/plugin-removal-error.js +16 -0
  593. package/dist/src/web-ui/plugin-removal-service.d.ts +31 -0
  594. package/dist/src/web-ui/plugin-removal-service.js +109 -0
  595. package/dist/src/web-ui/runtime-setup-gateway.d.ts +6 -2
  596. package/dist/src/web-ui/runtime-setup-gateway.js +30 -10
  597. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  598. package/dist/src/web-ui/server-readiness.js +36 -0
  599. package/dist/src/web-ui/server.d.ts +2 -0
  600. package/dist/src/web-ui/server.js +29 -3
  601. package/dist/src/web-ui/session-read-state/overview.d.ts +42 -0
  602. package/dist/src/web-ui/session-read-state/overview.js +16 -0
  603. package/dist/src/web-ui/session-read-state/pagination.d.ts +15 -0
  604. package/dist/src/web-ui/session-read-state/pagination.js +42 -0
  605. package/dist/src/web-ui/session-read-state/projection.d.ts +4 -3
  606. package/dist/src/web-ui/session-read-state/service.d.ts +213 -20
  607. package/dist/src/web-ui/session-read-state/service.js +25 -23
  608. package/dist/src/web-ui/session-read-state/visible-messages.d.ts +3 -3
  609. package/dist/src/web-ui/system-host-service.js +13 -2
  610. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  611. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  612. package/dist/src/web-ui/system-host-setup/companion-linux.js +1 -1
  613. package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +1 -1
  614. package/dist/src/web-ui/system-host-setup/installer-contract.js +2 -2
  615. package/dist/src/web-ui/system-host-setup/installers.js +0 -7
  616. package/dist/src/web-ui/system-host-setup/local-connection.d.ts +4 -1
  617. package/dist/src/web-ui/system-host-setup/local-connection.js +10 -17
  618. package/dist/src/web-ui/system-host-setup/routes.d.ts +2 -0
  619. package/dist/src/web-ui/system-host-setup/routes.js +32 -9
  620. package/dist/src/web-ui/system-host-setup/setup-mutation.d.ts +9 -0
  621. package/dist/src/web-ui/system-host-setup/setup-mutation.js +27 -0
  622. package/dist/src/web-ui/system-host-setup/windows-store-route.d.ts +13 -0
  623. package/dist/src/web-ui/system-host-setup/windows-store-route.js +68 -0
  624. package/docs/configuration.md +46 -0
  625. package/docs/installation.md +88 -28
  626. package/docs/plugins.md +310 -6
  627. package/docs/projects-and-full-plus.md +2 -6
  628. package/docs/runtime-library.md +0 -1
  629. package/docs/tool-execution-result-evidence-contract.md +57 -0
  630. package/docs/windows-companion-store.md +132 -0
  631. package/package.json +6 -4
  632. package/plugins/capability-brief/plugin.json +4 -0
  633. package/plugins/code-outline/README.md +20 -0
  634. package/plugins/code-outline/plugin.json +1 -0
  635. package/plugins/code-outline/source/index.ts +16 -20
  636. package/plugins/code-outline/source/read-failure.ts +40 -0
  637. package/plugins/code-outline/src/index.cjs +614 -29
  638. package/plugins/document-reader/README.md +33 -0
  639. package/plugins/document-reader/plugin.json +2 -0
  640. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  641. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  642. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  643. package/plugins/document-reader/source/pdf-process.ts +207 -0
  644. package/plugins/document-reader/source/pdf-result.ts +79 -0
  645. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  646. package/plugins/document-reader/source/pdf.ts +4 -1
  647. package/plugins/document-reader/source/read-failure.ts +37 -0
  648. package/plugins/document-reader/source/reader.ts +3 -19
  649. package/plugins/document-reader/src/index.cjs +995 -211
  650. package/plugins/exec/README.md +19 -0
  651. package/plugins/exec/plugin.json +7 -3
  652. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  653. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  654. package/plugins/exec/source/filesystem-observer.ts +8 -79
  655. package/plugins/exec/source/output-files.ts +12 -6
  656. package/plugins/exec/source/paths.ts +3 -1
  657. package/plugins/exec/source/process-manager.ts +8 -24
  658. package/plugins/exec/source/shell-platform.ts +19 -3
  659. package/plugins/exec/source/shell-process.ts +55 -0
  660. package/plugins/exec/source/windows-job-source.ts +1 -0
  661. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  662. package/plugins/exec/src/index.cjs +252 -96
  663. package/plugins/filesystem/README.md +65 -0
  664. package/plugins/filesystem/plugin.json +8 -2
  665. package/plugins/filesystem/source/atomic-write.ts +2 -0
  666. package/plugins/filesystem/source/bounded-io.ts +80 -306
  667. package/plugins/filesystem/source/directory-sample.ts +2 -0
  668. package/plugins/filesystem/source/errors.ts +14 -0
  669. package/plugins/filesystem/source/file-observation.ts +151 -0
  670. package/plugins/filesystem/source/file-version.ts +41 -0
  671. package/plugins/filesystem/source/index.ts +6 -0
  672. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  673. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  674. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  675. package/plugins/filesystem/source/windows/operations.ts +197 -0
  676. package/plugins/filesystem/source/windows/process.ts +214 -0
  677. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  678. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  679. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  680. package/plugins/filesystem/source/windows/source.ts +42 -0
  681. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  682. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  683. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  684. package/plugins/filesystem/src/index.cjs +1208 -322
  685. package/plugins/json-inspector/README.md +18 -0
  686. package/plugins/json-inspector/plugin.json +1 -0
  687. package/plugins/json-inspector/source/index.ts +16 -19
  688. package/plugins/json-inspector/source/read-failure.ts +42 -0
  689. package/plugins/json-inspector/src/index.cjs +612 -27
  690. package/plugins/local-search/README.md +29 -0
  691. package/plugins/local-search/plugin.json +2 -0
  692. package/plugins/local-search/source/errors.ts +2 -0
  693. package/plugins/local-search/source/paths.ts +3 -0
  694. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  695. package/plugins/local-search/source/ripgrep.ts +3 -3
  696. package/plugins/local-search/source/windows-authority.ts +99 -0
  697. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  698. package/plugins/local-search/source/windows-search-process.ts +91 -0
  699. package/plugins/local-search/source/windows-search-script.ts +52 -0
  700. package/plugins/local-search/src/index.cjs +595 -26
  701. package/plugins/memory/plugin.json +4 -0
  702. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  703. package/plugins/memory/source/lock-owner-file.ts +71 -0
  704. package/plugins/memory/source/lock-path-observation.ts +26 -0
  705. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  706. package/plugins/memory/source/store-lock.ts +12 -7
  707. package/plugins/memory/source/store.ts +3 -2
  708. package/plugins/memory/src/index.cjs +174 -25
  709. package/plugins/project-orientation/README.md +23 -0
  710. package/plugins/project-orientation/plugin.json +1 -0
  711. package/plugins/project-orientation/source/index.ts +12 -9
  712. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  713. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  714. package/plugins/project-orientation/source/tree.ts +6 -0
  715. package/plugins/project-orientation/src/index.cjs +647 -31
  716. package/plugins/system/README.md +81 -5
  717. package/plugins/system/plugin.json +10 -1
  718. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  719. package/plugins/system/source/command-working-directory.ts +47 -0
  720. package/plugins/system/source/companion-command-output.ts +82 -0
  721. package/plugins/system/source/computer/handlers.ts +13 -9
  722. package/plugins/system/source/computer/observation-result.ts +10 -5
  723. package/plugins/system/source/computer/request-computers.ts +10 -3
  724. package/plugins/system/source/computer/request-modules.ts +3 -6
  725. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  726. package/plugins/system/source/host-dispatch.ts +21 -1
  727. package/plugins/system/source/index.ts +14 -6
  728. package/plugins/system/source/local-command-output-retention.ts +16 -0
  729. package/plugins/system/source/local-command-output.ts +69 -0
  730. package/plugins/system/source/request-system-modules.ts +14 -2
  731. package/plugins/system/source/request-target-snapshot.ts +2 -1
  732. package/plugins/system/source/security/desktop-result.ts +177 -0
  733. package/plugins/system/source/security/observed-error.ts +10 -0
  734. package/plugins/system/source/security/secret-text.ts +118 -0
  735. package/plugins/system/source/security/system-results.ts +62 -0
  736. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  737. package/plugins/system/src/index.cjs +1207 -86
  738. package/plugins/system-probe/plugin.json +8 -2
  739. package/plugins/system-probe/source/disk-path.ts +8 -0
  740. package/plugins/system-probe/source/index.ts +10 -5
  741. package/plugins/system-probe/source/machine-load.ts +33 -0
  742. package/plugins/system-probe/source/metrics.ts +6 -8
  743. package/plugins/system-probe/src/index.cjs +49 -16
  744. package/plugins/web/README.md +2 -2
  745. package/plugins/web/plugin.json +8 -0
  746. package/runtime.config.schema.json +25 -1
  747. package/src/runtime/README.md +12 -2
  748. package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +0 -2
  749. package/dist/src/web-ui/system-host-setup/companion-windows.js +0 -108
  750. package/docs/publishing.md +0 -167
@@ -0,0 +1,184 @@
1
+ import { execFile } from "node:child_process";
2
+ import { lstat, mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import { dirname, join, posix } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { ensurePrivateRuntimeDirectory } from "../../runtime/local-host/private-directory.js";
6
+ import { renderWindowsInstallLinkLauncher, windowsInstallLinkLauncherPath, windowsInstallLinkRegistryScript, } from "./install-link-windows.js";
7
+ import { renderMacInstallLinkHandler, requireAvailableMacInstallScheme, MAC_INSTALL_LINK_PLIST_SCRIPT, MAC_INSTALL_LINK_BUNDLE_ID, } from "./install-link-macos.js";
8
+ const OWNER = "ABot managed installation links";
9
+ const executeFile = promisify(execFile);
10
+ function desktopArgument(value) {
11
+ if (/[\r\n\0]/u.test(value))
12
+ throw new Error("Unsupported Companion path.");
13
+ return ('"' +
14
+ value
15
+ .replaceAll("\\", "\\\\")
16
+ .replaceAll('"', '\\"')
17
+ .replaceAll("$", "\\$")
18
+ .replaceAll("`", "\\`")
19
+ .replaceAll("%", "%%") +
20
+ '"');
21
+ }
22
+ export function renderLinuxInstallLinkDesktop(options) {
23
+ return `[Desktop Entry]
24
+ # ${OWNER}
25
+ Type=Application
26
+ Name=ABot Install
27
+ Exec=${desktopArgument(options.nodePath)} ${desktopArgument(options.cliPath)} host open-link %u
28
+ Terminal=false
29
+ NoDisplay=true
30
+ MimeType=x-scheme-handler/abot;
31
+ `;
32
+ }
33
+ function registrationDirectory(options) {
34
+ return join(options.stateDir, "install-links");
35
+ }
36
+ async function run(options, file, args) {
37
+ if (options.execute)
38
+ return options.execute(file, args);
39
+ await executeFile(file, [...args], {
40
+ windowsHide: true,
41
+ timeout: 30_000,
42
+ maxBuffer: 16_384,
43
+ });
44
+ }
45
+ async function existingOwnedDirectory(path) {
46
+ const stat = await lstat(path).catch((error) => {
47
+ if (error.code === "ENOENT")
48
+ return undefined;
49
+ throw error;
50
+ });
51
+ if (!stat)
52
+ return false;
53
+ if (!stat.isDirectory() || stat.isSymbolicLink())
54
+ throw new Error("Installation-link directory is not owned.");
55
+ if ((await readFile(join(path, ".owner"), "utf8")) !== OWNER)
56
+ throw new Error("Installation-link directory is not owned.");
57
+ return true;
58
+ }
59
+ function hasAbsoluteLinuxDataHome(value) {
60
+ if (!value)
61
+ return false;
62
+ return posix.isAbsolute(value);
63
+ }
64
+ function linuxDesktopPath(options) {
65
+ const dataHome = process.env.XDG_DATA_HOME;
66
+ if (hasAbsoluteLinuxDataHome(dataHome))
67
+ return join(dataHome, "applications", "com.abot.install-links.desktop");
68
+ return join(options.homeDir, ".local", "share", "applications", "com.abot.install-links.desktop");
69
+ }
70
+ async function requireOwnedLinuxRegistration(path) {
71
+ const stat = await lstat(path).catch((error) => {
72
+ if (error.code === "ENOENT")
73
+ return undefined;
74
+ throw error;
75
+ });
76
+ if (!stat)
77
+ return;
78
+ if (!stat.isFile() ||
79
+ stat.isSymbolicLink() ||
80
+ !(await readFile(path, "utf8")).includes("# " + OWNER))
81
+ throw new Error("Installation-link desktop registration is not owned.");
82
+ }
83
+ function isAvailableLinuxInstallScheme(handler) {
84
+ if (!handler)
85
+ return true;
86
+ return handler === "com.abot.install-links.desktop";
87
+ }
88
+ async function requireAvailableLinuxInstallScheme() {
89
+ const { stdout } = await executeFile("xdg-mime", ["query", "default", "x-scheme-handler/abot"], { timeout: 30_000, maxBuffer: 16_384 });
90
+ if (!isAvailableLinuxInstallScheme(stdout.trim()))
91
+ throw new Error("The abot URL scheme belongs to another application.");
92
+ }
93
+ export async function installCompanionInstallLinks(options) {
94
+ const directory = registrationDirectory(options);
95
+ if (!(await existingOwnedDirectory(directory))) {
96
+ await ensurePrivateRuntimeDirectory(directory);
97
+ await writeFile(join(directory, ".owner"), OWNER, {
98
+ flag: "wx",
99
+ mode: 0o600,
100
+ });
101
+ }
102
+ if (options.platform === "win32") {
103
+ const launcher = windowsInstallLinkLauncherPath(options);
104
+ await writeFile(launcher, renderWindowsInstallLinkLauncher(options), {
105
+ mode: 0o600,
106
+ });
107
+ await run(options, "powershell.exe", [
108
+ "-NoProfile",
109
+ "-NonInteractive",
110
+ "-EncodedCommand",
111
+ Buffer.from(windowsInstallLinkRegistryScript("install", launcher), "utf16le").toString("base64"),
112
+ ]);
113
+ return;
114
+ }
115
+ if (options.platform === "linux") {
116
+ const desktop = linuxDesktopPath(options);
117
+ await requireOwnedLinuxRegistration(desktop);
118
+ await requireAvailableLinuxInstallScheme();
119
+ await mkdir(dirname(desktop), { recursive: true, mode: 0o700 });
120
+ await writeFile(desktop, renderLinuxInstallLinkDesktop(options), {
121
+ mode: 0o600,
122
+ });
123
+ await run(options, "xdg-mime", [
124
+ "default",
125
+ "com.abot.install-links.desktop",
126
+ "x-scheme-handler/abot",
127
+ ]);
128
+ return;
129
+ }
130
+ if (options.platform === "darwin") {
131
+ await requireAvailableMacInstallScheme();
132
+ const source = join(directory, "handler.js");
133
+ const app = join(directory, "ABot Install.app");
134
+ await writeFile(source, renderMacInstallLinkHandler(options), {
135
+ mode: 0o600,
136
+ });
137
+ await rm(app, { recursive: true, force: true });
138
+ await run(options, "/usr/bin/osacompile", [
139
+ "-l",
140
+ "JavaScript",
141
+ "-o",
142
+ app,
143
+ source,
144
+ ]);
145
+ await run(options, "/usr/bin/osascript", [
146
+ "-l",
147
+ "JavaScript",
148
+ "-e",
149
+ MAC_INSTALL_LINK_PLIST_SCRIPT,
150
+ join(app, "Contents", "Info.plist"),
151
+ ]);
152
+ await run(options, "/usr/bin/codesign", [
153
+ "--force",
154
+ "--sign",
155
+ "-",
156
+ "--identifier",
157
+ MAC_INSTALL_LINK_BUNDLE_ID,
158
+ app,
159
+ ]);
160
+ await run(options, "/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister", ["-f", app]);
161
+ return;
162
+ }
163
+ throw new Error("Installation links are not supported on this platform.");
164
+ }
165
+ export async function uninstallCompanionInstallLinks(options) {
166
+ const directory = registrationDirectory(options);
167
+ if (!(await existingOwnedDirectory(directory)))
168
+ return;
169
+ if (options.platform === "win32")
170
+ await run(options, "powershell.exe", [
171
+ "-NoProfile",
172
+ "-NonInteractive",
173
+ "-EncodedCommand",
174
+ Buffer.from(windowsInstallLinkRegistryScript("remove", windowsInstallLinkLauncherPath(options)), "utf16le").toString("base64"),
175
+ ]);
176
+ if (options.platform === "linux") {
177
+ const desktop = linuxDesktopPath(options);
178
+ await requireOwnedLinuxRegistration(desktop);
179
+ await rm(desktop, { force: true });
180
+ }
181
+ if (options.platform === "darwin")
182
+ await run(options, "/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister", ["-u", join(directory, "ABot Install.app")]);
183
+ await rm(directory, { recursive: true });
184
+ }
@@ -0,0 +1,4 @@
1
+ import type { NativeAutostartOptions } from "./autostart.js";
2
+ export declare function renderWindowsInstallLinkLauncher(options: NativeAutostartOptions): string;
3
+ export declare function windowsInstallLinkRegistryScript(action: "install" | "remove", launcher: string): string;
4
+ export declare function windowsInstallLinkLauncherPath(options: NativeAutostartOptions): string;
@@ -0,0 +1,65 @@
1
+ import { join } from "node:path";
2
+ function vbsText(value) {
3
+ if (/[\r\n\0]/u.test(value))
4
+ throw new Error("Unsupported Companion path.");
5
+ return '"' + value.replaceAll('"', '""') + '"';
6
+ }
7
+ export function renderWindowsInstallLinkLauncher(options) {
8
+ if (/["\r\n\0]/u.test(options.nodePath + options.cliPath))
9
+ throw new Error("Unsupported Companion path.");
10
+ const prefix = `"${options.nodePath}" "${options.cliPath}" host open-link --encoded `;
11
+ return [
12
+ "' ABot managed installation links",
13
+ "If WScript.Arguments.Count <> 1 Then WScript.Quit 1",
14
+ "value = WScript.Arguments(0)",
15
+ "If InStr(value, Chr(34)) > 0 Or InStr(value, vbCr) > 0 Or InStr(value, vbLf) > 0 Then WScript.Quit 1",
16
+ "If Len(value) > 2048 Then WScript.Quit 1",
17
+ 'Set stream = CreateObject("ADODB.Stream")',
18
+ "stream.Type = 2",
19
+ 'stream.Charset = "utf-8"',
20
+ "stream.Open",
21
+ "stream.WriteText value",
22
+ "stream.Position = 0",
23
+ "stream.Type = 1",
24
+ "stream.Position = 3",
25
+ 'Set document = CreateObject("Msxml2.DOMDocument.6.0")',
26
+ 'Set encoded = document.createElement("encoded")',
27
+ 'encoded.dataType = "bin.base64"',
28
+ "encoded.nodeTypedValue = stream.Read",
29
+ "stream.Close",
30
+ 'value = Replace(Replace(encoded.text, vbCr, ""), vbLf, "")',
31
+ 'Set shell = CreateObject("WScript.Shell")',
32
+ `shell.Run ${vbsText(prefix)} & value, 0, False`,
33
+ "",
34
+ ].join("\r\n");
35
+ }
36
+ export function windowsInstallLinkRegistryScript(action, launcher) {
37
+ const quoted = (value) => "'" + value.replaceAll("'", "''") + "'";
38
+ const command = `wscript.exe "${launcher}" "%1"`;
39
+ return `
40
+ $ErrorActionPreference = 'Stop'
41
+ $key = 'HKCU:\\Software\\Classes\\abot'
42
+ $expected = ${quoted(launcher)}
43
+ $exists = Test-Path -LiteralPath $key
44
+ function Assert-OwnedInstallLinkRegistration([string]$path) {
45
+ if (!(Test-Path -LiteralPath $path)) { return }
46
+ $owner = (Get-ItemProperty -LiteralPath $path -Name ABotInstallLinkOwner -ErrorAction SilentlyContinue).ABotInstallLinkOwner
47
+ if ($owner -ne $expected) { throw 'The abot protocol belongs to another application.' }
48
+ }
49
+ Assert-OwnedInstallLinkRegistration $key
50
+ ${action === "remove"
51
+ ? "if ($exists) { Remove-Item -LiteralPath $key -Recurse -Force }"
52
+ : `
53
+ Assert-OwnedInstallLinkRegistration 'Registry::HKEY_CLASSES_ROOT\\abot'
54
+ New-Item -Path $key -Force | Out-Null
55
+ Set-Item -LiteralPath $key -Value 'URL:ABot installation'
56
+ New-ItemProperty -LiteralPath $key -Name 'URL Protocol' -Value '' -PropertyType String -Force | Out-Null
57
+ New-ItemProperty -LiteralPath $key -Name ABotInstallLinkOwner -Value $expected -PropertyType String -Force | Out-Null
58
+ New-Item -Path ($key + '\\shell\\open\\command') -Force | Out-Null
59
+ Set-Item -LiteralPath ($key + '\\shell\\open\\command') -Value ${quoted(command)}
60
+ `}
61
+ `;
62
+ }
63
+ export function windowsInstallLinkLauncherPath(options) {
64
+ return join(options.stateDir, "install-links", "open-link.vbs");
65
+ }
@@ -0,0 +1,9 @@
1
+ import type { NativeHostState } from "./native-state.js";
2
+ export declare function pluginInstallReviewUrl(link: string, runtimeUrl: string): string;
3
+ /** The saved pairing owns the destination. Incoming links cannot select a host. */
4
+ export declare function openPluginInstallLink(state: Pick<NativeHostState, "read">, link: string, open?: typeof openReviewBrowser): Promise<void>;
5
+ declare function openReviewBrowser(url: string): Promise<void>;
6
+ /** Windows Script Host expands percent-delimited environment variables in Run().
7
+ * The launcher sends base64 so a website URL can never interpolate local values. */
8
+ export declare function parsePluginInstallArguments(args: readonly string[]): string;
9
+ export {};
@@ -0,0 +1,54 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { parsePluginInstallLink } from "../../plugin-contract/install-source.js";
4
+ import { notificationRuntimeOrigin } from "./notification-protocol.js";
5
+ export function pluginInstallReviewUrl(link, runtimeUrl) {
6
+ const source = parsePluginInstallLink(link);
7
+ const url = new URL("/plugins", notificationRuntimeOrigin(runtimeUrl));
8
+ url.searchParams.set("tab", "discover");
9
+ url.searchParams.set("pluginSource", source.repository);
10
+ if (source.ref)
11
+ url.searchParams.set("pluginRef", source.ref);
12
+ if (source.path)
13
+ url.searchParams.set("pluginPath", source.path);
14
+ return url.toString();
15
+ }
16
+ /** The saved pairing owns the destination. Incoming links cannot select a host. */
17
+ export async function openPluginInstallLink(state, link, open = openReviewBrowser) {
18
+ parsePluginInstallLink(link);
19
+ const connection = await state.read();
20
+ if (!connection)
21
+ throw new Error("Connect Computer Access before opening an ABot installation link.");
22
+ await open(pluginInstallReviewUrl(link, connection.url));
23
+ }
24
+ async function openReviewBrowser(url) {
25
+ const execute = promisify(execFile);
26
+ const options = { windowsHide: true, timeout: 10_000, maxBuffer: 16_384 };
27
+ if (process.platform === "win32") {
28
+ await execute("rundll32.exe", ["url.dll,FileProtocolHandler", url], options);
29
+ return;
30
+ }
31
+ if (process.platform === "darwin") {
32
+ await execute("/usr/bin/open", [url], options);
33
+ return;
34
+ }
35
+ if (process.platform === "linux") {
36
+ await execute("xdg-open", [url], options);
37
+ return;
38
+ }
39
+ throw new Error("ABot installation links are not supported on this platform.");
40
+ }
41
+ /** Windows Script Host expands percent-delimited environment variables in Run().
42
+ * The launcher sends base64 so a website URL can never interpolate local values. */
43
+ export function parsePluginInstallArguments(args) {
44
+ if (args.length === 1)
45
+ return args[0];
46
+ if (args.length !== 2 || args[0] !== "--encoded")
47
+ throw new Error("Usage: abot host open-link <abot://install link>");
48
+ const encoded = args[1];
49
+ if (encoded.length > 12_000 || !/^[A-Za-z0-9+/]+={0,2}$/u.test(encoded))
50
+ throw new Error("Invalid encoded installation link.");
51
+ const decoded = Buffer.from(encoded, "base64").toString("utf8");
52
+ parsePluginInstallLink(decoded);
53
+ return decoded;
54
+ }
@@ -62,6 +62,9 @@ const NATIVE_OPERATION_FIELDS = {
62
62
  desktop_notification: ["target", "notificationId", "title", "body", "url"],
63
63
  system_targets: [],
64
64
  system_command: ["target", "command", "cwd", "elevated", "timeout_ms"],
65
+ system_command_capture: ["target", "command", "cwd", "elevated", "timeout_ms", "outputRetentionMs"],
66
+ system_command_output: ["target", "captureId", "stream", "offset"],
67
+ system_command_output_close: ["target", "captureId"],
65
68
  system_applications: ["target", "query", "limit"],
66
69
  system_launch: ["target", "application_id", "arguments"],
67
70
  computer_execute: ["target", "sessionId", "request"],
@@ -1,4 +1,5 @@
1
1
  import { failureResult, successResult, } from "../../plugin-sdk/index.js";
2
+ import { redactSecretText } from "../security/secret-text.js";
2
3
  import { readDesktopNotification, } from "./notification-protocol.js";
3
4
  import { defaultNotificationLocations, } from "./notification-locations.js";
4
5
  import { sendWindowsNotification } from "./notification-windows.js";
@@ -49,7 +50,7 @@ export function createNotificationSession(platform, runtimeUrl, ready, renderer,
49
50
  ? "notification_outcome_unknown"
50
51
  : "notification_native_failed",
51
52
  message: error instanceof Error
52
- ? error.message.slice(0, 1000)
53
+ ? redactSecretText(error.message).slice(0, 1000)
53
54
  : "Desktop notification submission failed.",
54
55
  });
55
56
  }
@@ -76,7 +77,7 @@ export async function createNativeNotificationSession(platform, runtimeUrl, loca
76
77
  if (platform === "macos" && session.ready)
77
78
  await stopMacNotificationApp(locations, runNotificationProcess).catch((error) => {
78
79
  console.warn("Desktop notification helper could not stop: " +
79
- (error instanceof Error ? error.message : String(error)));
80
+ redactSecretText(error instanceof Error ? error.message : String(error)));
80
81
  });
81
82
  },
82
83
  }, (refreshSignal) => hasDesktopNotificationSupport(platform, locations, runNotificationProcess, refreshSignal));
@@ -14,6 +14,7 @@ export type NativeSessionOptions = Readonly<{
14
14
  onReady(hostId: string): void | Promise<void>;
15
15
  resolveHost?: NativeHostResolver;
16
16
  handlers?: Record<string, ToolImplementation>;
17
+ commandOutputStateDir?: string;
17
18
  heartbeatMs?: number;
18
19
  operationLimit?: number;
19
20
  observationCollector?: ObservationCollectorFactory;
@@ -1,4 +1,9 @@
1
1
  import WebSocket from "ws";
2
+ import { CompanionCommandOutput } from "./command-output.js";
3
+ import { SYSTEM_OUTPUT_CAPABILITY } from "./command-output-protocol.js";
4
+ import { HOST_SECRET_PROTECTION_CAPABILITY } from "./secret-protection-protocol.js";
5
+ import { systemResultProtection } from "../security/system-results.js";
6
+ import { redactSecretText } from "../security/secret-text.js";
2
7
  import { createNativePermissionHandlers } from "./native-permissions.js";
3
8
  import { MACOS_PERMISSION_CAPABILITY } from "./permission-protocol.js";
4
9
  import { nativeLoopbackSocketOptions } from "./native-loopback-lookup.js";
@@ -41,8 +46,11 @@ export async function connectNativeHost(options) {
41
46
  await ownedNotifications?.close();
42
47
  options.signal.throwIfAborted();
43
48
  }
49
+ const commandOutput = options.commandOutputStateDir && !options.handlers
50
+ ? new CompanionCommandOutput(options.commandOutputStateDir) : undefined;
44
51
  const handlers = options.handlers ?? {
45
- ...createSystemHandlers(),
52
+ ...commandOutput?.handlers(),
53
+ ...createSystemHandlers(undefined, undefined, undefined, systemResultProtection),
46
54
  ...computers.handlers(),
47
55
  ...notifications.handlers(),
48
56
  ...createNativePermissionHandlers(options.identity.os),
@@ -101,6 +109,7 @@ export async function connectNativeHost(options) {
101
109
  clearTimeout(retirement);
102
110
  observations.close();
103
111
  void computers.close();
112
+ commandOutput?.close();
104
113
  if (!options.notifications)
105
114
  void notifications.close();
106
115
  for (const controller of active.values())
@@ -148,6 +157,8 @@ export async function connectNativeHost(options) {
148
157
  return false;
149
158
  if (computers.hasActiveSessions())
150
159
  return false;
160
+ if (commandOutput?.hasTransfers())
161
+ return false;
151
162
  if (advertisedNotificationReady)
152
163
  return false;
153
164
  return notifications.ready;
@@ -165,11 +176,14 @@ export async function connectNativeHost(options) {
165
176
  throw new Error("Unbound native operation.");
166
177
  if (seen.has(message.id))
167
178
  throw new Error("Repeated native operation identity.");
168
- if (seen.size >= (options.operationLimit ?? 4_096)) {
179
+ const readsCommandOutput = message.operation === "system_command_output" || message.operation === "system_command_output_close";
180
+ if (!readsCommandOutput && seen.size >= (options.operationLimit ?? 4_096)) {
169
181
  retireConnection(message.id);
170
182
  return;
171
183
  }
172
- seen.add(message.id);
184
+ // Reading stored bytes is idempotent and must not retire a large transfer.
185
+ if (!readsCommandOutput)
186
+ seen.add(message.id);
173
187
  if (active.size >= 4) {
174
188
  sendResult(message.id, operationFailure("The host companion is busy.", "system_host_busy"));
175
189
  return;
@@ -180,7 +194,7 @@ export async function connectNativeHost(options) {
180
194
  catch (error) {
181
195
  if (!(error instanceof NativeOperationInputError))
182
196
  throw error;
183
- sendResult(message.id, operationFailure(error.message, error.code));
197
+ sendResult(message.id, operationFailure(redactSecretText(error.message), error.code));
184
198
  return;
185
199
  }
186
200
  const handler = handlers[message.operation];
@@ -244,8 +258,10 @@ export async function connectNativeHost(options) {
244
258
  version: HOST_PROTOCOL_VERSION,
245
259
  identity: options.identity,
246
260
  capabilities: [
261
+ ...(options.handlers ? [] : [HOST_SECRET_PROTECTION_CAPABILITY]),
247
262
  OBSERVATION_CAPABILITY,
248
263
  COMPUTER_CAPABILITY,
264
+ ...(commandOutput ? [SYSTEM_OUTPUT_CAPABILITY] : []),
249
265
  ...(options.identity.os === "macos" ? [MACOS_PERMISSION_CAPABILITY] : []),
250
266
  ...(advertisedNotificationReady
251
267
  ? [DESKTOP_NOTIFICATION_CAPABILITY]
@@ -102,6 +102,7 @@ export async function runNativeHostSupervisor(options) {
102
102
  url: initial.url,
103
103
  authorization: initial.credential,
104
104
  hostId: initial.hostId,
105
+ commandOutputStateDir: options.state.directory,
105
106
  identity: options.identity,
106
107
  signal: controller.signal,
107
108
  notifications: notificationSession,
@@ -2,4 +2,4 @@ import type { DesktopNotification } from "./notification-protocol.js";
2
2
  import { type NotificationProcessRunner } from "./notification-process.js";
3
3
  export declare const WINDOWS_NOTIFICATION_IDENTITY_SCRIPT: string;
4
4
  export declare function powershellNotificationArguments(script: string): string[];
5
- export declare function sendWindowsNotification(notification: DesktopNotification, signal?: AbortSignal, run?: NotificationProcessRunner): Promise<void>;
5
+ export declare function sendWindowsNotification(notification: DesktopNotification, signal?: AbortSignal, run?: NotificationProcessRunner, appUserModelId?: string): Promise<void>;
@@ -11,7 +11,9 @@ $Payload = [Console]::In.ReadToEnd() | ConvertFrom-Json
11
11
  [void][Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime]
12
12
  [void][Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime]
13
13
  [void][Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime]
14
- $Notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('${NOTIFICATION_APP_ID}')
14
+ $ApplicationId = '${NOTIFICATION_APP_ID}'
15
+ if ($Payload.appUserModelId) { $ApplicationId = [string]$Payload.appUserModelId }
16
+ $Notifier = [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($ApplicationId)
15
17
  # Win32 Setting is unavailable until the first toast; Show honors Windows notification settings.
16
18
  $Xml = New-Object Windows.Data.Xml.Dom.XmlDocument
17
19
  $Xml.LoadXml('<toast activationType="protocol"><visual><binding template="ToastGeneric"><text/><text/></binding></visual><audio silent="true"/></toast>')
@@ -127,11 +129,14 @@ export function powershellNotificationArguments(script) {
127
129
  Buffer.from(script, "utf16le").toString("base64"),
128
130
  ];
129
131
  }
130
- export async function sendWindowsNotification(notification, signal, run = runNotificationProcess) {
132
+ export async function sendWindowsNotification(notification, signal, run = runNotificationProcess, appUserModelId) {
131
133
  await run({
132
134
  file: "powershell.exe",
133
135
  args: powershellNotificationArguments(WINDOWS_NOTIFICATION_SCRIPT),
134
- input: JSON.stringify(notification),
136
+ input: JSON.stringify({
137
+ ...notification,
138
+ ...(appUserModelId ? { appUserModelId } : {}),
139
+ }),
135
140
  signal,
136
141
  });
137
142
  }
@@ -1,32 +1,8 @@
1
1
  import { createHash, createHmac, randomBytes, randomUUID } from "node:crypto";
2
2
  import { isHostRecord } from "./protocol.js";
3
+ import { isOwnApplicationObservation } from "../../shared/passive-observation-self-exclusion.js";
3
4
  import { redactObservationSource, redactObservationText, } from "./observation-redaction.js";
4
5
  import { isPassiveCollectorEvent, isObservationOwner, OBSERVATION_CONTENT_LIMIT, OBSERVATION_WIRE_LIMIT, } from "./observation-protocol.js";
5
- // Include the previous title so tabs opened before an update are also excluded.
6
- const OWN_WEB_UI_TITLES = ["ABot Runtime — Workspace", "ABot Runtime"];
7
- const BROWSER_WINDOW_NAMES = [
8
- "Mozilla Firefox",
9
- "Mozilla Firefox (Private Browsing)",
10
- "Google Chrome",
11
- "Chromium",
12
- "Microsoft Edge",
13
- "Brave",
14
- "Safari",
15
- ];
16
- const BROWSER_WINDOW_SUFFIXES = BROWSER_WINDOW_NAMES.flatMap((browser) => [
17
- ` — ${browser}`,
18
- ` - ${browser}`,
19
- ]);
20
- function isOwnWebUiWindowTitle(title) {
21
- if (typeof title !== "string")
22
- return false;
23
- if (OWN_WEB_UI_TITLES.includes(title))
24
- return true;
25
- const suffix = BROWSER_WINDOW_SUFFIXES.find((candidate) => title.endsWith(candidate));
26
- if (!suffix)
27
- return false;
28
- return OWN_WEB_UI_TITLES.includes(title.slice(0, -suffix.length));
29
- }
30
6
  function hasBoundedSourceMetadata(source) {
31
7
  if (!isObservationOwner(source.app))
32
8
  return false;
@@ -111,7 +87,7 @@ export class ObservationFilter {
111
87
  };
112
88
  if (!hasBoundedSourceMetadata(rawSource))
113
89
  return undefined;
114
- if (isOwnWebUiWindowTitle(rawSource.title)) {
90
+ if (isOwnApplicationObservation(rawSource)) {
115
91
  this.lastSource = undefined;
116
92
  return undefined;
117
93
  }
@@ -11,6 +11,8 @@ export declare function desktopCollectorCommand(platform: string): {
11
11
  export declare function startDesktopCollector(options: {
12
12
  excludedApplications: readonly string[];
13
13
  onEvent(event: PassiveCollectorEvent): void;
14
+ /** Confirms helper exit or that no helper was created; close alone does not confirm either. */
15
+ onStopped?(): void;
14
16
  platform?: string;
15
17
  spawnProcess?: typeof spawn;
16
18
  }): DesktopCollector;
@@ -34,12 +34,19 @@ export function startDesktopCollector(options) {
34
34
  const command = desktopCollectorCommand(options.platform ?? process.platform);
35
35
  let child;
36
36
  let closed = false;
37
+ let stopped = false;
38
+ const confirmStopped = () => {
39
+ if (stopped)
40
+ return;
41
+ stopped = true;
42
+ options.onStopped?.();
43
+ };
37
44
  let received = Buffer.alloc(0);
38
45
  let terminalStatus = false;
39
46
  const filter = new ObservationFilter(options.excludedApplications);
40
47
  const close = () => {
41
48
  closed = true;
42
- if (!child?.pid)
49
+ if (stopped || !child?.pid)
43
50
  return;
44
51
  // POSIX language launchers can spawn an interpreter; stop the entire owned process group.
45
52
  if (process.platform !== "win32") {
@@ -59,6 +66,7 @@ export function startDesktopCollector(options) {
59
66
  state: "unavailable",
60
67
  reason: "platform_unsupported",
61
68
  });
69
+ confirmStopped();
62
70
  return { close };
63
71
  }
64
72
  if (process.platform === "darwin") {
@@ -77,19 +85,28 @@ export function startDesktopCollector(options) {
77
85
  state: "unavailable",
78
86
  reason: "macos_swift_tools_unavailable",
79
87
  });
88
+ confirmStopped();
80
89
  return { close };
81
90
  }
82
91
  }
83
92
  options.onEvent({ type: "status", state: "starting" });
84
- child = (options.spawnProcess ?? spawn)(command.file, command.args, {
85
- windowsHide: true,
86
- detached: process.platform !== "win32",
87
- stdio: ["pipe", "pipe", "pipe"],
88
- env: {
89
- ...process.env,
90
- ABOT_OBSERVATION_EXCLUSIONS: JSON.stringify(options.excludedApplications),
91
- },
92
- });
93
+ try {
94
+ child = (options.spawnProcess ?? spawn)(command.file, command.args, {
95
+ windowsHide: true,
96
+ detached: process.platform !== "win32",
97
+ stdio: ["pipe", "pipe", "pipe"],
98
+ env: {
99
+ ...process.env,
100
+ ABOT_OBSERVATION_EXCLUSIONS: JSON.stringify(options.excludedApplications),
101
+ },
102
+ });
103
+ }
104
+ catch {
105
+ options.onEvent({ type: "status", state: "failed", reason: "collector_start_failed" });
106
+ closed = true;
107
+ confirmStopped();
108
+ return { close };
109
+ }
93
110
  child.stdin?.on("error", () => { });
94
111
  child.stdin?.end(command.input);
95
112
  // Compiler/dependency diagnostics can contain local paths. Never forward them into model or general logs.
@@ -130,25 +147,34 @@ export function startDesktopCollector(options) {
130
147
  }
131
148
  });
132
149
  child.once("error", () => {
133
- if (closed)
134
- return;
135
- options.onEvent({
136
- type: "status",
137
- state: "unavailable",
138
- reason: "collector_dependency_unavailable",
139
- });
140
- close();
141
- });
142
- child.once("exit", (code) => {
143
- if (closed)
144
- return;
145
- if (!terminalStatus)
150
+ try {
151
+ if (closed)
152
+ return;
146
153
  options.onEvent({
147
154
  type: "status",
148
155
  state: "unavailable",
149
- reason: code === 0 ? "collector_stopped" : "collector_start_failed",
156
+ reason: "collector_dependency_unavailable",
150
157
  });
151
- close();
158
+ close();
159
+ }
160
+ finally {
161
+ if (!child?.pid)
162
+ confirmStopped();
163
+ }
164
+ });
165
+ child.once("exit", (code) => {
166
+ try {
167
+ if (!closed && !terminalStatus)
168
+ options.onEvent({
169
+ type: "status",
170
+ state: "unavailable",
171
+ reason: code === 0 ? "collector_stopped" : "collector_start_failed",
172
+ });
173
+ }
174
+ finally {
175
+ closed = true;
176
+ confirmStopped();
177
+ }
152
178
  });
153
179
  return { close };
154
180
  }