@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,293 @@
1
+ import { escapeHtml } from "../../lib/text-format.js";
2
+ import { renderConnectionCard, renderComputerMetadata } from "./connection-card.js";
3
+
4
+ const companionStoreUrl = "https://apps.microsoft.com/detail/9PK2FDQQLQS9";
5
+
6
+ export function windowsStoreSetupIsAvailable(snapshot) {
7
+ const readiness = snapshot?.readiness;
8
+ if (readiness?.ready === true) return false;
9
+ if (!readiness?.platforms?.includes("windows")) return false;
10
+ if (readiness.restartRequired === true) return false;
11
+ return ["setup_required", "companion"].includes(readiness.route);
12
+ }
13
+
14
+ export function windowsStorePanelIsAvailable(snapshot) {
15
+ if (windowsStoreSetupIsAvailable(snapshot)) return true;
16
+ if (snapshot?.readiness?.restartRequired === true) return false;
17
+ if (snapshot?.readiness?.route !== "companion") return false;
18
+ if (snapshot.readiness.ready !== true) return false;
19
+ return snapshot.identity?.os === "windows";
20
+ }
21
+
22
+ function windowsCompanionCanReconnect(snapshot) {
23
+ if (!windowsStoreSetupIsAvailable(snapshot)) return false;
24
+ if (snapshot?.paired !== true) return false;
25
+ return snapshot.connected === false;
26
+ }
27
+
28
+ function hasConfirmedUnpairedConnection(snapshot) {
29
+ if (snapshot?.ok === false) return false;
30
+ if (snapshot?.paired !== false) return false;
31
+ return snapshot.connected === false;
32
+ }
33
+
34
+ function storeInvitationIsCurrent(invitation) {
35
+ if (!invitation) return false;
36
+ return Date.parse(invitation.expiresAt) > Date.now();
37
+ }
38
+
39
+ function storeRepairConfirmationIsCurrent(snapshot, attempt) {
40
+ if (!windowsCompanionCanReconnect(snapshot)) return false;
41
+ return attempt?.phase === "confirm-repair";
42
+ }
43
+
44
+ function storeConnectionStage(snapshot, invitation, attempt) {
45
+ if (snapshot?.readiness?.ready === true) return "ready";
46
+ if (attempt?.phase === "repairing") return "repairing";
47
+ if (storeRepairConfirmationIsCurrent(snapshot, attempt)) return "confirm-repair";
48
+ if (windowsCompanionCanReconnect(snapshot)) return "reconnect";
49
+ if (attempt?.expiresAt && Date.parse(attempt.expiresAt) <= Date.now()) return "expired";
50
+ if (attempt?.phase === "preparing") return "preparing";
51
+ if (attempt?.phase === "waiting") return "waiting";
52
+ if (storeInvitationIsCurrent(invitation)) return "open";
53
+ if (attempt?.phase === "expired") return "expired";
54
+ return "start";
55
+ }
56
+
57
+ function connectionButton(label, disabled, secondary = false) {
58
+ return `<button type="button" class="system-host-card-${secondary ? "secondary" : "primary"}" data-system-host-store-connect ${disabled ? "disabled" : ""}>${label}</button>`;
59
+ }
60
+
61
+ function companionLaunchLink(invitation, secondary = false) {
62
+ return `<a class="system-host-card-${secondary ? "secondary" : "primary"}" href="${escapeHtml(invitation.launchUrl)}" data-system-host-store-launch rel="noreferrer">${secondary ? "Open Companion again" : "Open Companion"}</a>`;
63
+ }
64
+
65
+ function connectionStageContent(stage, snapshot, invitation, disabled) {
66
+ if (stage === "ready") return {
67
+ status: "Connected", step: "Your computer is ready", copy: "You can use computer tools from your ABot chat.",
68
+ };
69
+ if (stage === "reconnect") return {
70
+ status: "Offline", step: "Your computer is offline", copy: `Open Companion on ${snapshot?.identity?.name || "your computer"} to reconnect.`,
71
+ action: `<a class="system-host-card-primary" href="abot-companion://open" data-system-host-store-open-existing rel="noreferrer">Open Companion</a><button type="button" class="system-host-card-secondary" data-system-host-store-repair ${disabled ? "disabled" : ""}>Set up again</button>`,
72
+ help: "Removed the connection in Companion? Choose Set up again.",
73
+ };
74
+ if (stage === "confirm-repair") return {
75
+ status: "Confirm reset", step: "Set up this computer again?", copy: "The previous connection will be removed. You’ll approve a new connection in Companion.",
76
+ action: `<button type="button" class="system-host-card-primary" data-system-host-store-repair-confirm ${disabled ? "disabled" : ""}>Continue</button><button type="button" class="system-host-card-secondary" data-system-host-store-repair-cancel ${disabled ? "disabled" : ""}>Cancel</button>`,
77
+ help: "Your conversations and saved insights will be kept.",
78
+ };
79
+ if (stage === "repairing") return {
80
+ status: "Preparing", step: "Setting up this computer again", copy: "Removing the previous connection before preparing your new connection…",
81
+ action: '<button type="button" class="system-host-card-primary" disabled>Preparing connection…</button>',
82
+ };
83
+ if (stage === "preparing") return {
84
+ status: "Preparing", step: "Connect your Windows computer", copy: "Preparing your connection…",
85
+ action: connectionButton("Preparing connection…", true),
86
+ };
87
+ if (stage === "open") return {
88
+ status: "Waiting for you", step: "Approve the connection in Companion", copy: "Open the app and check the ABot address. This page will confirm when your computer is connected.",
89
+ action: companionLaunchLink(invitation),
90
+ help: "Your browser may ask permission to open the app.",
91
+ };
92
+ if (stage === "waiting") return {
93
+ status: "Waiting for approval", step: "Approve the connection in Companion", copy: "Check the ABot address and approve the connection in the app. This page will confirm when your computer is connected.",
94
+ help: "If Companion did not open, use the option below.",
95
+ action: storeInvitationIsCurrent(invitation)
96
+ ? companionLaunchLink(invitation, true)
97
+ : connectionButton("Start connection again", disabled, true),
98
+ };
99
+ if (stage === "expired") return {
100
+ status: "Expired", step: "Connection link expired", copy: "Connect again to get a fresh invitation.",
101
+ action: connectionButton("Connect again", disabled),
102
+ };
103
+ const update = snapshot?.readiness?.companionUpdateRequired === true;
104
+ return {
105
+ status: update ? "Update needed" : "Not connected",
106
+ step: update ? "Update Companion" : "Connect your Windows computer",
107
+ copy: update ? "Update Companion from Microsoft Store, then return here to reconnect."
108
+ : "Companion lets ABot work with files, apps and desktop tools on this computer.",
109
+ action: `<a class="system-host-card-primary" href="${companionStoreUrl}" target="_blank" rel="noopener noreferrer"><svg class="system-host-store-icon" width="18" height="18" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M4 7h16v14H4ZM8 7V5a4 4 0 0 1 8 0v2" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 10h3v3H8Zm5 0h3v3h-3Zm-5 5h3v3H8Zm5 0h3v3h-3Z" fill="currentColor"/></svg><span>${update ? "Update in Microsoft Store" : "Install from Microsoft Store"}</span></a>${connectionButton(update ? "I already updated it" : "I already have it", disabled, true)}`,
110
+ help: update ? "Your saved connection is kept during an update." : "Install once from Microsoft Store, then return here to connect.",
111
+ };
112
+ }
113
+
114
+ function storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable) {
115
+ if (statusUnavailable) return {
116
+ status: "Status unavailable", step: "Check your computer connection",
117
+ copy: "The current connection status could not be checked. Refresh to try again.",
118
+ };
119
+ if (disabled && stage === "ready") return {
120
+ status: "Checking", step: "Checking your computer connection",
121
+ copy: "Waiting for the current connection status…",
122
+ };
123
+ return connectionStageContent(stage, snapshot, invitation, disabled);
124
+ }
125
+
126
+ function shouldRenderReadyWindowsSummary(compact, ready, error, message, otherSetup) {
127
+ if (!compact || !ready) return false;
128
+ if (error || message || otherSetup) return false;
129
+ return true;
130
+ }
131
+
132
+ export function renderWindowsStoreSetup({ snapshot, invitation, attempt, disabled, statusUnavailable, error, message, compact, otherSetup = "" }) {
133
+ if (!windowsStorePanelIsAvailable(snapshot)) return "";
134
+ const stage = storeConnectionStage(snapshot, invitation, attempt);
135
+ const content = storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable);
136
+ const ready = stage === "ready" && !statusUnavailable && !disabled;
137
+ const summary = shouldRenderReadyWindowsSummary(compact, ready, error, message, otherSetup);
138
+ const refresh = statusUnavailable || error ? '<button type="button" class="system-host-card-secondary" data-system-host-refresh' + (disabled ? " disabled" : "") + '>Refresh status</button>' : "";
139
+ return renderConnectionCard({
140
+ title: content.step, status: content.status, ready, disabled,
141
+ compact: summary,
142
+ description: content.copy, actions: content.action, help: content.help, error, message,
143
+ metadata: ["ready", "reconnect"].includes(stage) ? renderComputerMetadata(snapshot, disabled) : "",
144
+ details: summary ? "" : (ready ? '<p class="system-host-card-access-note">Computer actions follow your permission settings. Spark collection is managed separately.</p>' : "") + refresh + otherSetup,
145
+ attributes: `data-system-host-store-setup data-system-host-store-stage="${stage}"`,
146
+ });
147
+ }
148
+
149
+ function readStoreInvitation(receipt) {
150
+ if (!storeInvitationIsCurrent(receipt)) throw new Error("store_invitation_expired");
151
+ const launch = new URL(receipt.launchUrl);
152
+ if (launch.protocol !== "abot-companion:") throw new Error("store_invitation_invalid");
153
+ if (launch.hostname !== "connect") throw new Error("store_invitation_invalid");
154
+ if (launch.username || launch.password || launch.port || launch.hash) throw new Error("store_invitation_invalid");
155
+ if (launch.pathname !== "" && launch.pathname !== "/") throw new Error("store_invitation_invalid");
156
+ if (!/^[A-Za-z0-9_-]+$/.test(launch.searchParams.get("invitation") || "")) throw new Error("store_invitation_invalid");
157
+ if (receipt.storeUrl !== companionStoreUrl) throw new Error("store_invitation_invalid");
158
+ return { launchUrl: launch.href, expiresAt: receipt.expiresAt };
159
+ }
160
+
161
+ /** The invitation exists only on the active surface, until readiness or expiry. */
162
+ export function createWindowsStoreConnectionActions({
163
+ state,
164
+ requestStoreConnection,
165
+ revokeConnection,
166
+ receiveUnpairedConnection,
167
+ canInstallOnPlatform,
168
+ beginRequest,
169
+ finishRequest,
170
+ isCurrentResponse,
171
+ getSurfaceRevision,
172
+ getEnvironmentId = () => "",
173
+ isVisible,
174
+ notify,
175
+ scheduleExpiration = setTimeout,
176
+ cancelExpiration = clearTimeout,
177
+ }) {
178
+ let expirationTimer;
179
+ function clear({ preserveWaiting = false } = {}) {
180
+ if (expirationTimer !== undefined) cancelExpiration(expirationTimer);
181
+ expirationTimer = undefined;
182
+ if (state.windowsStoreInvitation) state.message = "";
183
+ state.windowsStoreInvitation = null;
184
+ if (preserveWaiting && state.windowsStoreAttempt?.phase === "waiting") return;
185
+ state.windowsStoreAttempt = null;
186
+ }
187
+ function canApplyStoreResponse(operation, surface, environment) {
188
+ if (!isCurrentResponse(operation)) return false;
189
+ if (surface !== getSurfaceRevision()) return false;
190
+ if (environment !== getEnvironmentId()) return false;
191
+ return isVisible();
192
+ }
193
+ function receiveStoreInvitation(receipt) {
194
+ state.windowsStoreInvitation = readStoreInvitation(receipt);
195
+ state.windowsStoreAttempt = { phase: "open", expiresAt: receipt.expiresAt };
196
+ state.downloaded = null;
197
+ state.manualMac = null;
198
+ state.message = "";
199
+ expirationTimer = scheduleExpiration(() => {
200
+ clear();
201
+ state.windowsStoreAttempt = { phase: "expired" };
202
+ notify();
203
+ }, Date.parse(receipt.expiresAt) - Date.now());
204
+ }
205
+ async function connectWindowsStore() {
206
+ if (typeof requestStoreConnection !== "function") return false;
207
+ if (!canInstallOnPlatform("windows")) return false;
208
+ if (!windowsStoreSetupIsAvailable(state.snapshot)) return false;
209
+ if (windowsCompanionCanReconnect(state.snapshot)) return false;
210
+ if (storeInvitationIsCurrent(state.windowsStoreInvitation)) return false;
211
+ clear();
212
+ const operation = beginRequest();
213
+ const surface = getSurfaceRevision();
214
+ const environment = getEnvironmentId();
215
+ state.windowsStoreAttempt = { phase: "preparing" };
216
+ notify();
217
+ try {
218
+ const receipt = await requestStoreConnection();
219
+ if (!canApplyStoreResponse(operation, surface, environment)) return false;
220
+ receiveStoreInvitation(receipt);
221
+ return true;
222
+ } catch {
223
+ if (!canApplyStoreResponse(operation, surface, environment)) return false;
224
+ clear();
225
+ state.actionError = "The Companion connection link could not be created. Refresh status and try again.";
226
+ return false;
227
+ } finally {
228
+ finishRequest(operation);
229
+ }
230
+ }
231
+ function canRepairWindowsPairing() {
232
+ if (!canInstallOnPlatform("windows")) return false;
233
+ return windowsCompanionCanReconnect(state.snapshot);
234
+ }
235
+ function beginWindowsStoreRepair() {
236
+ if (!canRepairWindowsPairing()) return false;
237
+ clear();
238
+ state.windowsStoreAttempt = { phase: "confirm-repair" };
239
+ state.actionError = "";
240
+ notify();
241
+ return true;
242
+ }
243
+ function cancelWindowsStoreRepair() {
244
+ if (state.busy) return false;
245
+ if (state.windowsStoreAttempt?.phase !== "confirm-repair") return false;
246
+ clear();
247
+ notify();
248
+ return true;
249
+ }
250
+ async function confirmWindowsStoreRepair() {
251
+ if (!canRepairWindowsPairing()) return false;
252
+ if (state.windowsStoreAttempt?.phase !== "confirm-repair") return false;
253
+ if (typeof revokeConnection !== "function" || typeof requestStoreConnection !== "function") return false;
254
+ const operation = beginRequest();
255
+ const surface = getSurfaceRevision();
256
+ const environment = getEnvironmentId();
257
+ state.windowsStoreAttempt = { phase: "repairing" };
258
+ notify();
259
+ let revoked = false;
260
+ try {
261
+ const snapshot = await revokeConnection();
262
+ if (!canApplyStoreResponse(operation, surface, environment)) return false;
263
+ if (!hasConfirmedUnpairedConnection(snapshot)) throw new Error("unpair_not_confirmed");
264
+ receiveUnpairedConnection(snapshot);
265
+ revoked = true;
266
+ if (!windowsStoreSetupIsAvailable(snapshot)) throw new Error("store_setup_unavailable");
267
+ state.windowsStoreAttempt = { phase: "preparing" };
268
+ state.message = "";
269
+ notify();
270
+ const receipt = await requestStoreConnection();
271
+ if (!canApplyStoreResponse(operation, surface, environment)) return false;
272
+ receiveStoreInvitation(receipt);
273
+ return true;
274
+ } catch {
275
+ if (!canApplyStoreResponse(operation, surface, environment)) return false;
276
+ clear();
277
+ state.message = "";
278
+ state.actionError = revoked
279
+ ? "The previous pairing was removed, but a new connection link could not be created. Connect again to continue."
280
+ : "The previous pairing could not be removed. No new connection was created. Refresh status and try again.";
281
+ return false;
282
+ } finally {
283
+ finishRequest(operation);
284
+ }
285
+ }
286
+ function markLaunchRequested() {
287
+ if (!storeInvitationIsCurrent(state.windowsStoreInvitation)) return;
288
+ state.windowsStoreAttempt = { phase: "waiting", expiresAt: state.windowsStoreInvitation.expiresAt };
289
+ // Leave the anchor intact until the browser has dispatched its native protocol.
290
+ setTimeout(notify, 0);
291
+ }
292
+ return { connectWindowsStore, beginWindowsStoreRepair, cancelWindowsStoreRepair, confirmWindowsStoreRepair, markLaunchRequested, clear };
293
+ }
@@ -29,6 +29,7 @@ export function createWorkspaceShell({
29
29
  };
30
30
  let navigationRevision = 0;
31
31
  const workspaceListeners = new Set();
32
+ const runtimeAvailabilityListeners = new Set();
32
33
  const workspaceGuards = new Set();
33
34
  function notifyWorkspaceListeners(workspace) {
34
35
  onWorkspaceChange(workspace);
@@ -406,6 +407,7 @@ export function createWorkspaceShell({
406
407
  workspaceAccess.update(availability);
407
408
  if (!workspaceAccess.isAvailable(shellState.workspace))
408
409
  activateWorkspace("home", { focus: false });
410
+ for (const listener of runtimeAvailabilityListeners) listener();
409
411
  }
410
412
 
411
413
  function load() {
@@ -421,6 +423,10 @@ export function createWorkspaceShell({
421
423
  runtimeAvailabilityChanged,
422
424
  workspaceUnavailableMessage: workspaceAccess.unavailableMessage,
423
425
  navigationRevision: () => navigationRevision,
426
+ subscribeRuntimeAvailabilityChange(listener) {
427
+ runtimeAvailabilityListeners.add(listener);
428
+ return () => runtimeAvailabilityListeners.delete(listener);
429
+ },
424
430
  subscribeWorkspaceChange(listener) {
425
431
  workspaceListeners.add(listener);
426
432
  return () => workspaceListeners.delete(listener);
@@ -0,0 +1,37 @@
1
+ export async function acknowledgeWorkspaceStorage(storage, documentRoot = document) {
2
+ if (storage.snapshot().introductionSeen) return;
3
+ const dialog = documentRoot.createElement("dialog");
4
+ dialog.className = "workspace-storage-notice";
5
+ dialog.innerHTML = `<h2>Your workspace settings stay with ABot</h2>
6
+ <p>Settings and queued messages are now saved with this ABot installation, across browsers and app restarts.</p>
7
+ <p>This is a one-time fresh start. Previous browser-only pins, archives, model choices, memory review markers and queued messages are not imported.</p>
8
+ <p>Your conversations, memories, configuration and read status are kept. Tool permissions start in <strong>Ask</strong>; you can change them in the composer.</p>
9
+ <p role="alert" hidden></p><button type="button" class="primary">Continue</button>`;
10
+ documentRoot.body.append(dialog);
11
+ dialog.addEventListener("cancel", (event) => event.preventDefault());
12
+ dialog.showModal();
13
+ await new Promise((resolve) => {
14
+ const button = dialog.querySelector("button");
15
+ button.addEventListener("click", async () => {
16
+ button.disabled = true;
17
+ try { await storage.execute({ kind: "introduction" }); dialog.close(); dialog.remove(); resolve(); }
18
+ catch (error) {
19
+ const notice = dialog.querySelector('[role="alert"]');
20
+ notice.textContent = `${error.message} Reload to try again.`;
21
+ notice.hidden = false;
22
+ }
23
+ });
24
+ });
25
+ }
26
+
27
+ export function showWorkspaceStorageFailure(error, documentRoot = document) {
28
+ let notice = documentRoot.querySelector("[data-workspace-storage-error]");
29
+ if (!notice) {
30
+ notice = documentRoot.createElement("div");
31
+ notice.dataset.workspaceStorageError = "";
32
+ notice.setAttribute("role", "alert");
33
+ notice.className = "workspace-storage-failure";
34
+ documentRoot.body.append(notice);
35
+ }
36
+ notice.textContent = `${error.message} Changes are not confirmed. Reload before sending more messages.`;
37
+ }
@@ -1,11 +1,12 @@
1
1
  import { createSystemHostConnectionManager } from "./components/system-host/manager.js";
2
2
  import { createSystemHostSetupNotice } from "./components/system-host/setup-notice.js";
3
3
 
4
- /** One connection owner, always first on Home and shared with the chat notice. */
4
+ /** One connection owner for configured Home and its shared chat notice. */
5
5
  export function createComputerAccessFeature({
6
6
  dom,
7
7
  runtimeClient,
8
8
  getEnvironmentId = () => "",
9
+ isComputerAccessAvailable = () => true,
9
10
  onChange = () => {},
10
11
  }) {
11
12
  const documentRoot = dom.homeDashboardRoot?.ownerDocument;
@@ -18,6 +19,7 @@ export function createComputerAccessFeature({
18
19
  loadConnection: () => runtimeClient.getSystemHostConnection(),
19
20
  connectLocal: () => runtimeClient.connectLocalSystemHost(),
20
21
  createPairing: () => runtimeClient.createSystemHostPairing(),
22
+ requestStoreConnection: () => runtimeClient.requestSystemHostStoreConnection(),
21
23
  requestPermissions: (input) => runtimeClient.requestSystemHostPermissions(input),
22
24
  downloadSetup: (platform) =>
23
25
  runtimeClient.downloadSystemHostSetup(platform),
@@ -30,6 +32,7 @@ export function createComputerAccessFeature({
30
32
  });
31
33
 
32
34
  function open() {
35
+ if (!isComputerAccessAvailable()) return false;
33
36
  dom.homeWorkspaceButton?.click();
34
37
  if (dom.homeWorkspacePanel?.hidden !== false || !root) return false;
35
38
  connection.openManagement();
@@ -38,16 +41,29 @@ export function createComputerAccessFeature({
38
41
  return true;
39
42
  }
40
43
 
44
+ function runtimeAvailabilityChanged() {
45
+ const ready = isComputerAccessAvailable();
46
+ if (root) root.hidden = !ready;
47
+ connection.setActive(ready);
48
+ notice?.render();
49
+ }
50
+
51
+ function load(background) {
52
+ if (!isComputerAccessAvailable()) return Promise.resolve(false);
53
+ return connection.load(background);
54
+ }
55
+
41
56
  notice = createSystemHostSetupNotice({
42
57
  container: dom.chatPanel?.querySelector(".composer-dock"),
43
58
  conversationRegion: dom.messagesList,
44
59
  getConnectionState: () => connection.state,
45
- supportsConnection: () => runtimeClient.supportsSystemHostConnection(),
46
- refreshConnection: () => connection.load(true),
60
+ supportsConnection: () => isComputerAccessAvailable() && runtimeClient.supportsSystemHostConnection(),
61
+ refreshConnection: () => load(true),
47
62
  onOpen: open,
48
63
  });
49
64
  if (root) {
50
65
  root.className = "home-computer-access";
66
+ root.hidden = !isComputerAccessAvailable();
51
67
  root.setAttribute("tabindex", "-1");
52
68
  root.setAttribute("aria-label", "Computer access");
53
69
  dom.homeDashboardRoot.parentElement?.insertBefore(
@@ -55,13 +71,14 @@ export function createComputerAccessFeature({
55
71
  dom.homeDashboardRoot,
56
72
  );
57
73
  connection.mount(root);
58
- connection.setActive(true);
74
+ runtimeAvailabilityChanged();
59
75
  }
60
76
  dom.environmentSelect?.addEventListener("change", connection.environmentChanged);
61
77
  return {
62
78
  state: connection.state,
63
- load: connection.load,
79
+ load,
64
80
  open,
81
+ runtimeAvailabilityChanged,
65
82
  dispose() {
66
83
  dom.environmentSelect?.removeEventListener("change", connection.environmentChanged);
67
84
  notice.dispose();
@@ -6,6 +6,7 @@ export function createAppliedEnvironmentProjection({
6
6
  dom,
7
7
  selection,
8
8
  loadWebConfig,
9
+ changeEnvironment,
9
10
  }) {
10
11
  let generation = 0;
11
12
  let pending = null;
@@ -23,11 +24,10 @@ export function createAppliedEnvironmentProjection({
23
24
  );
24
25
  }
25
26
 
26
- function restoreProjection(config, selected) {
27
+ function applyProjection(config, selected) {
27
28
  state.config = config;
28
29
  selection.renderEnvironmentOptions();
29
30
  dom.environmentSelect.value = selected;
30
- selection.renderAgentPicker();
31
31
  }
32
32
 
33
33
  function preferredEnvironmentId(options, selected, defaultId) {
@@ -36,45 +36,36 @@ export function createAppliedEnvironmentProjection({
36
36
  return options[0]?.value || "";
37
37
  }
38
38
 
39
- function changeProjectedEnvironment(
40
- next,
41
- previousConfig,
42
- previousEnvironment,
43
- ) {
44
- const ChangeEvent = dom.environmentSelect.ownerDocument.defaultView.Event;
45
- dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
46
- if (dom.environmentSelect.value === next) return true;
47
- restoreProjection(previousConfig, previousEnvironment);
48
- // Existing listeners also own composer/environment presentation after a refusal.
49
- dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
50
- return false;
51
- }
52
-
53
- function flush() {
39
+ async function flush() {
54
40
  if (!pending) return "unchanged";
55
- const previousConfig = state.config;
56
41
  const previousEnvironment = selection.selectedEnvironmentId();
57
- state.config = pending;
58
- selection.renderEnvironmentOptions();
42
+ const projected = pending;
43
+ const revision = generation;
59
44
  const next = preferredEnvironmentId(
60
- selection.environmentOptions(),
45
+ selection.configuredEnvironmentOptions(projected),
61
46
  previousEnvironment,
62
- textOf(pending.defaultEnvironmentId).trim(),
47
+ textOf(projected.defaultEnvironmentId).trim(),
63
48
  );
64
- if (!next) {
65
- restoreProjection(previousConfig, previousEnvironment);
66
- return "blocked";
67
- }
68
- dom.environmentSelect.value = next;
69
- const unchanged = next === previousEnvironment;
70
- if (unchanged) {
49
+ if (!next) return "blocked";
50
+ if (next === previousEnvironment) {
51
+ applyProjection(projected, next);
71
52
  pending = null;
72
53
  selection.renderAgentPicker();
73
54
  return "unchanged";
74
55
  }
75
- if (!changeProjectedEnvironment(next, previousConfig, previousEnvironment))
76
- return "blocked";
77
- pending = null;
56
+ // Keep the old catalog and selected option until draft preparation commits.
57
+ const commitEnvironmentOptions = () => {
58
+ applyProjection(projected, next);
59
+ pending = null;
60
+ };
61
+ commitEnvironmentOptions.canCommit = () => {
62
+ if (revision !== generation) return false;
63
+ return pending === projected;
64
+ };
65
+ let accepted = false;
66
+ try { accepted = await changeEnvironment(next, { commitEnvironmentOptions }); }
67
+ catch { /* The old catalog remains active when draft persistence fails. */ }
68
+ if (!accepted) return "blocked";
78
69
  selection.renderAgentPicker();
79
70
  return "changed";
80
71
  }
@@ -87,6 +78,7 @@ export function createConfigurationFeature({
87
78
  state,
88
79
  selection,
89
80
  onConfigurationApplied,
81
+ changeEnvironment,
90
82
  ...options
91
83
  }) {
92
84
  const projection = createAppliedEnvironmentProjection({
@@ -94,6 +86,7 @@ export function createConfigurationFeature({
94
86
  dom: options.dom,
95
87
  selection,
96
88
  loadWebConfig: () => options.runtimeClient.loadWebConfig(),
89
+ changeEnvironment,
97
90
  });
98
91
  const workspace = createWorkspaceFeature({
99
92
  ...options,
@@ -101,13 +94,13 @@ export function createConfigurationFeature({
101
94
  const currentStillConfigured = await projection.prepare();
102
95
  if (currentStillConfigured) await onConfigurationApplied();
103
96
  },
104
- onConfigurationSettled: () => projection.flush() !== "blocked",
97
+ onConfigurationSettled: async () => await projection.flush() !== "blocked",
105
98
  });
106
99
  return {
107
100
  ...workspace,
108
101
  async reloadAppliedEnvironmentModels() {
109
102
  await projection.prepare();
110
- const result = projection.flush();
103
+ const result = await projection.flush();
111
104
  if (result === "blocked") return false;
112
105
  if (result === "changed") return true;
113
106
  const refreshed = await workspace.load();
@@ -15,11 +15,13 @@ export function createConfigurationFeature({
15
15
  runtimeClient,
16
16
  selectedEnvironmentId,
17
17
  recordControlEvent,
18
+ getOperationsSummary,
18
19
  onNavigationChange = () => {},
19
20
  onConfigurationApplied = async () => {},
20
21
  onConfigurationSettled = () => true,
21
22
  getLearningSnapshot = () => null,
22
23
  isRuntimeReady = () => true,
24
+ isComputerAccessAvailable = () => true,
23
25
  }) {
24
26
  let configWorkspace;
25
27
  let activation;
@@ -72,9 +74,26 @@ export function createConfigurationFeature({
72
74
  });
73
75
 
74
76
  const pluginManager = createPluginManager({
77
+ onSummaryChange: () => configWorkspace?.syncSummary(),
75
78
  getEnvironmentId: selectedEnvironmentId,
79
+ loadConfiguration: (id, environment) =>
80
+ runtimeClient.getPluginConfiguration(id, environment),
81
+ saveConfiguration: (id, input, environment) =>
82
+ runtimeClient.savePluginConfiguration(id, input, environment),
76
83
  onConfigurationSaved: () => activation?.markPending(),
84
+ onConfigurationSettled,
77
85
  loadPlugins: () => runtimeClient.getRuntimePlugins(),
86
+ inspectPlugin: (input, environment) =>
87
+ runtimeClient.inspectRuntimePlugin(input, environment),
88
+ removePlugin: (input, environment) =>
89
+ runtimeClient.removeRuntimePlugin(input, environment),
90
+ onConfigurationApplied: async () => {
91
+ activation?.markApplied();
92
+ await onConfigurationApplied();
93
+ },
94
+ installPlugin: (input, environment) =>
95
+ runtimeClient.installRuntimePlugin(input, environment),
96
+ onNavigationChange,
78
97
  setPlugin: (input) => runtimeClient.setRuntimePlugin(input),
79
98
  beginRuntimeMutation: (subject) =>
80
99
  configWorkspace?.beginExternalRuntimeMutation(subject) ?? false,
@@ -90,6 +109,7 @@ export function createConfigurationFeature({
90
109
  dom,
91
110
  runtimeClient,
92
111
  getEnvironmentId: selectedEnvironmentId,
112
+ isComputerAccessAvailable,
93
113
  onChange: () => homeSetupSuggestion?.render(),
94
114
  });
95
115
  homeSetupSuggestion = createHomeGuidance({
@@ -99,7 +119,7 @@ export function createConfigurationFeature({
99
119
  getEnvironmentId: selectedEnvironmentId,
100
120
  getLearningSnapshot,
101
121
  isRuntimeReady,
102
- // Computer access is permanently visible above the Home suggestions.
122
+ // Configured Home owns computer access above the suggestions.
103
123
  getConnectionState: () => null,
104
124
  supportsConnection: () => false,
105
125
  refreshConnection: () => {},
@@ -115,6 +135,7 @@ export function createConfigurationFeature({
115
135
  },
116
136
  });
117
137
  configWorkspace = createConfigWorkspace({
138
+ getOperationsSummary,
118
139
  onNavigationChange,
119
140
  onRemoveModel: (model) => {
120
141
  if (modelSetup?.isOpen()) return;
@@ -127,6 +148,8 @@ export function createConfigurationFeature({
127
148
  },
128
149
  loadDashboard: () =>
129
150
  runtimeClient.loadConfigDashboard(selectedEnvironmentId()),
151
+ loadModelPlugins: () =>
152
+ runtimeClient.getRuntimePlugins(selectedEnvironmentId()),
130
153
  saveFile: async ({ kind, id, config, expectedRevision }) => {
131
154
  const result = await runtimeClient.saveConfigFile({
132
155
  environmentId: selectedEnvironmentId(),
@@ -231,21 +254,39 @@ export function createConfigurationFeature({
231
254
  const prepareDiscardChanges = configWorkspace.prepareDiscardChanges;
232
255
  return {
233
256
  ...configWorkspace,
257
+ activePluginTab: pluginManager.activeTab,
258
+ openPluginRoute: pluginManager.openRoute,
234
259
  openComputerSetup: computerAccess.open,
235
260
  refreshComputerAccess: computerAccess.load,
236
- renderHomeGuidance: () => homeSetupSuggestion.render(),
261
+ renderHomeGuidance: () => {
262
+ computerAccess.runtimeAvailabilityChanged();
263
+ homeSetupSuggestion.render();
264
+ },
237
265
  showActivityMemories: () => {
238
266
  memoryWorkspace.activate("memories");
239
267
  void longTermMemoryController.setOriginFilter("passive_observation");
240
268
  longTermMemoryManager.focus();
241
269
  },
242
270
  prepareDiscardChanges: (...args) => {
271
+ if (pluginManager.hasConfigurationDraft()) {
272
+ dom.configStatus.textContent =
273
+ "Finish or cancel plugin configuration before leaving.";
274
+ return null;
275
+ }
243
276
  if (modelSetup.isOpen()) {
244
277
  dom.configStatus.textContent =
245
278
  "Finish or cancel model setup before leaving configuration.";
246
279
  return null;
247
280
  }
248
- return prepareDiscardChanges(...args);
281
+ const prepared = prepareDiscardChanges(...args);
282
+ if (typeof prepared !== "function") return prepared;
283
+ const commit = () => prepared();
284
+ commit.canCommit = () => {
285
+ if (pluginManager.hasConfigurationDraft()) return false;
286
+ if (modelSetup.isOpen()) return false;
287
+ return prepared.canCommit?.() !== false;
288
+ };
289
+ return commit;
249
290
  },
250
291
  };
251
292
  }