@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
@@ -25,6 +25,7 @@ export function renderConnectionField({
25
25
  value = "",
26
26
  placeholder = "",
27
27
  help = "",
28
+ error = "",
28
29
  required = true,
29
30
  readonly = false,
30
31
  min = "",
@@ -32,8 +33,9 @@ export function renderConnectionField({
32
33
  idPrefix = "runtimeSetup",
33
34
  }) {
34
35
  return `<label class="runtime-setup-field"><span>${label}</span>
35
- <input type="${type}" data-runtime-setup-field="${field}" value="${escapeAttribute(value)}" placeholder="${escapeAttribute(placeholder)}" autocomplete="${type === "password" ? "new-password" : "off"}" spellcheck="false" ${min ? `min="${escapeAttribute(min)}"` : ""} ${step ? `step="${escapeAttribute(step)}"` : ""} ${required ? "required" : ""} ${readonly ? "readonly" : ""} aria-describedby="${idPrefix}Help-${field}" />
36
+ <input type="${type}" data-runtime-setup-field="${field}" value="${escapeAttribute(value)}" placeholder="${escapeAttribute(placeholder)}" autocomplete="${type === "password" ? "new-password" : "off"}" spellcheck="false" ${min ? `min="${escapeAttribute(min)}"` : ""} ${step ? `step="${escapeAttribute(step)}"` : ""} ${required ? "required" : ""} ${readonly ? "readonly" : ""} ${error ? 'aria-invalid="true"' : ""} aria-describedby="${idPrefix}Help-${field}${error ? ` ${idPrefix}Error-${field}` : ""}" />
36
37
  <small id="${idPrefix}Help-${field}">${help}</small>
38
+ ${error ? `<small id="${idPrefix}Error-${field}" class="runtime-setup-feedback error" role="alert">${escapeHtml(error)}</small>` : ""}
37
39
  </label>`;
38
40
  }
39
41
 
@@ -60,7 +62,8 @@ export function renderConnectionFields(state) {
60
62
  label: "Context window (tokens)",
61
63
  type: "number",
62
64
  value: state.contextWindowTokens,
63
- min: "1",
65
+ min: state.contextWindowFeedback?.minimumTokens || "1",
66
+ error: state.contextWindowFeedback?.message,
64
67
  step: "1",
65
68
  readonly: !canEditSetupConnection(state),
66
69
  help: "Use a value supported by your model. Larger windows need more memory with Ollama. You can change this later in Models.",
@@ -1,5 +1,6 @@
1
1
  import { textOf } from "../../lib/text-format.js";
2
2
  import { normalizeProvider } from "./validation.js";
3
+ import { readSetupContextWindowFeedback } from "./context-window-feedback.js";
3
4
 
4
5
  export function selectSetupProvider(state, value) {
5
6
  const provider = normalizeProvider(value);
@@ -36,7 +37,14 @@ export function setupConnectionSubmitLabel(state, apiKey = "") {
36
37
  : "Save connection";
37
38
  }
38
39
 
39
- export function setupConnectionSaveError(error) {
40
+ export function receiveSetupConnectionSaveError(state, error) {
41
+ state.contextWindowFeedback = readSetupContextWindowFeedback(error);
42
+ state.error = "";
43
+ if (state.contextWindowFeedback) return;
44
+ state.error = setupConnectionSaveError(error);
45
+ }
46
+
47
+ function setupConnectionSaveError(error) {
40
48
  if (error?.payload?.error === "setup_configuration_changed")
41
49
  return "Your connection changed in another window. Refresh this page before editing it again.";
42
50
  return "Could not save your connection. Check the model and connection details, then try again.";
@@ -0,0 +1,71 @@
1
+ function hasPositiveContextTokenCount(value) {
2
+ if (!Number.isSafeInteger(value)) return false;
3
+ return value > 0;
4
+ }
5
+
6
+ function hasSupportedContextConstraint(details) {
7
+ if (details?.field !== "contextWindowTokens") return false;
8
+ for (const field of ["declaredTokens", "effectiveTokens", "minimumTokens"]) {
9
+ if (!hasPositiveContextTokenCount(details[field])) return false;
10
+ }
11
+ if (!Number.isSafeInteger(details.reservedTokens)) return false;
12
+ if (details.reservedTokens < 0) return false;
13
+ if (details.effectiveTokens > details.reservedTokens) return false;
14
+ if (details.effectiveTokens > details.declaredTokens) return false;
15
+ if (details.minimumTokens <= details.reservedTokens) return false;
16
+ if (details.allocationTokens === undefined) return true;
17
+ if (!hasPositiveContextTokenCount(details.allocationTokens)) return false;
18
+ return details.effectiveTokens <= details.allocationTokens;
19
+ }
20
+
21
+ function hasInsufficientContextAllocation(details) {
22
+ if (details.allocationTokens === undefined) return false;
23
+ return details.allocationTokens < details.minimumTokens;
24
+ }
25
+
26
+ function formatContextConstraintMessage(details) {
27
+ const tokens = (value) => value.toLocaleString("en-US");
28
+ const capacity = `The effective context window is ${tokens(details.effectiveTokens)} tokens, but the current configuration reserves ${tokens(details.reservedTokens)} tokens.`;
29
+ const minimum = `Use a context window of at least ${tokens(details.minimumTokens)} tokens supported by your model, or adjust the configured reserves.`;
30
+ if (!hasInsufficientContextAllocation(details))
31
+ return `${capacity} ${minimum}`;
32
+ return `${capacity} ${minimum} The configured Ollama allocation (num_ctx) is ${tokens(details.allocationTokens)} tokens. It must also reach that minimum; increasing this field alone is insufficient.`;
33
+ }
34
+
35
+ /** Only numeric details from this known contract become user-visible feedback. */
36
+ export function readSetupContextWindowFeedback(error) {
37
+ if (error?.status !== 400) return null;
38
+ const payload = error.payload;
39
+ if (payload?.ok !== false) return null;
40
+ if (payload.error !== "context_window_too_small") return null;
41
+ if (!hasSupportedContextConstraint(payload.contextWindow)) return null;
42
+ return {
43
+ minimumTokens: payload.contextWindow.minimumTokens,
44
+ message: formatContextConstraintMessage(payload.contextWindow),
45
+ };
46
+ }
47
+
48
+ /** A server constraint belongs to the rejected candidate, never later edits. */
49
+ export function clearSetupContextWindowFeedback(state, container) {
50
+ if (!state.contextWindowFeedback) return;
51
+ state.contextWindowFeedback = null;
52
+ const field = container.querySelector(
53
+ '[data-runtime-setup-field="context-window"]',
54
+ );
55
+ field?.removeAttribute?.("aria-invalid");
56
+ field?.setAttribute?.("aria-describedby", "runtimeSetupHelp-context-window");
57
+ field?.setAttribute?.("min", "1");
58
+ container.querySelector("#runtimeSetupError-context-window")?.remove?.();
59
+ }
60
+
61
+ export function focusSetupContextWindowFeedback(
62
+ container,
63
+ feedback,
64
+ restoreFocus,
65
+ ) {
66
+ if (!feedback) return;
67
+ if (!restoreFocus) return;
68
+ container
69
+ .querySelector('[data-runtime-setup-field="context-window"]')
70
+ ?.focus?.();
71
+ }
@@ -2,6 +2,7 @@ import { createEmbeddingSetupStep } from "./embedding.js";
2
2
  import { createSetupPluginStep } from "./plugins.js";
3
3
  import { createSystemHostConnectionManager } from "../system-host/manager.js";
4
4
  import { hostSetupIsReady } from "../system-host/rendering.js";
5
+ import { isNativeWindowsLocalAccess } from "../system-host/native-windows-access.js";
5
6
 
6
7
  /** Optional setup steps retain their owning services and never apply the Runtime. */
7
8
  export function createSetupOptionalSteps({
@@ -16,6 +17,7 @@ export function createSetupOptionalSteps({
16
17
  loadHostConnection,
17
18
  connectLocalHost,
18
19
  createHostPairing,
20
+ requestHostStoreConnection,
19
21
  requestHostPermissions,
20
22
  downloadHostSetup,
21
23
  revokeHostConnection,
@@ -48,6 +50,7 @@ export function createSetupOptionalSteps({
48
50
  loadConnection: loadHostConnection,
49
51
  connectLocal: connectLocalHost,
50
52
  createPairing: createHostPairing,
53
+ requestStoreConnection: requestHostStoreConnection,
51
54
  requestPermissions: requestHostPermissions,
52
55
  downloadSetup: downloadHostSetup,
53
56
  revokeConnection: revokeHostConnection,
@@ -55,9 +58,10 @@ export function createSetupOptionalSteps({
55
58
  })
56
59
  : null;
57
60
  const readyStep = computer ? 5 : 4;
58
- function hasFreshComputerReadiness() {
61
+ function hasFreshComputerSetup() {
59
62
  if (!computer) return false;
60
63
  if (computer.state.busy || computer.state.statusUnavailable) return false;
64
+ if (isNativeWindowsLocalAccess(computer.state.snapshot)) return true;
61
65
  return hostSetupIsReady(computer.state.snapshot);
62
66
  }
63
67
  function projection(step) {
@@ -69,7 +73,8 @@ export function createSetupOptionalSteps({
69
73
  plugins: plugins.state.snapshot,
70
74
  hasComputerStep: Boolean(computer),
71
75
  readyStep,
72
- computer: hasFreshComputerReadiness() ? computer.state.snapshot : null,
76
+ computer: hasFreshComputerSetup() ? computer.state.snapshot : null,
77
+ nativeWindowsAccess: hasFreshComputerSetup() && isNativeWindowsLocalAccess(computer.state.snapshot),
73
78
  };
74
79
  if (step === 2)
75
80
  return {
@@ -88,7 +93,7 @@ export function createSetupOptionalSteps({
88
93
  return {
89
94
  ...common,
90
95
  content: `<div data-onboarding-computer>${computer.markup()}</div>`,
91
- canContinue: hasFreshComputerReadiness(),
96
+ canContinue: hasFreshComputerSetup(),
92
97
  };
93
98
  return common;
94
99
  }
@@ -109,7 +114,7 @@ export function createSetupOptionalSteps({
109
114
  }
110
115
  function canContinueComputer(step) {
111
116
  if (step !== 4) return false;
112
- return hasFreshComputerReadiness();
117
+ return hasFreshComputerSetup();
113
118
  }
114
119
  return {
115
120
  embedding,
@@ -1,3 +1,4 @@
1
+ import { renderPluginPlatformNotice } from "../plugins/compatibility.js";
1
2
  import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
2
3
 
3
4
  function blockReason(plugin, capability) {
@@ -33,6 +34,7 @@ function renderPluginCard(plugin, busy) {
33
34
  return `<li class="runtime-plugin-card">
34
35
  ${checkbox(plugin, null, busy)}
35
36
  <p class="runtime-plugin-summary" title="${escapeAttribute(plugin.description || "")}">${escapeHtml(plugin.description || "Installed Runtime plugin.")}</p>
37
+ ${renderPluginPlatformNotice(plugin.compatibility)}
36
38
  <div class="runtime-plugin-tools-heading"><span>Tools</span><span>${plugin.selectedCapabilityCount} of ${capabilities.length} selected</span></div>
37
39
  <ul class="runtime-plugin-capabilities" aria-label="${escapeAttribute(`Tools in ${plugin.id}`)}">${capabilities.map((capability) => `<li>${checkbox(plugin, capability, busy)}</li>`).join("")}</ul>
38
40
  </li>`;
@@ -144,7 +146,7 @@ export function createSetupPluginStep({
144
146
  state.snapshot?.selection?.enabled === false ||
145
147
  state.snapshot?.selection?.deny?.includes("*");
146
148
  return `<div class="runtime-setup-plugins">
147
- <p class="runtime-setup-feedback">All installed plugins start enabled in a new setup. Turn off anything you do not need.</p>
149
+ <p class="runtime-setup-feedback">All installed plugins start selected in a new setup. Host compatibility determines which plugins can load. Turn off anything you do not need.</p>
148
150
  ${globalBlocked ? '<p class="runtime-setup-feedback">An existing global policy blocks plugins. Your saved policy is preserved.</p>' : ""}
149
151
  ${state.error ? `<p class="runtime-setup-feedback error" role="alert">${escapeHtml(state.error)}</p><button type="button" class="runtime-setup-inline-action" data-runtime-setup-action="plugins-reload">Reload selection</button>` : state.message ? `<p class="runtime-setup-feedback" role="status">${escapeHtml(state.message)}</p>` : ""}
150
152
  ${state.busy ? '<p class="runtime-setup-feedback" role="status">Saving or loading plugin selection…</p>' : ""}
@@ -28,7 +28,7 @@ function readyMarkup(state, optional) {
28
28
  <div><dt>Model</dt><dd>${escapeHtml(state.modelId)}</dd></div>
29
29
  <div><dt>Context window</dt><dd>${escapeHtml(formatContextWindowTokens(state.contextWindowTokens))}</dd></div>
30
30
  <div><dt>Embedding</dt><dd>${escapeHtml(optional.memory?.enabled ? optional.memory.model || "Configured" : "Set up later")}</dd></div>
31
- <div><dt>Plugins</dt><dd>${selectedPlugins} enabled</dd></div>
31
+ <div><dt>Plugins</dt><dd>${selectedPlugins} selected</dd></div>
32
32
  </dl></div>`;
33
33
  }
34
34
 
@@ -79,7 +79,7 @@ function footerMarkup(state, availability, optional) {
79
79
  if (state.step === 3)
80
80
  return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back" ${disabled}>Back</button><button type="submit" class="runtime-setup-action" ${busy || !optional.canContinue ? "disabled" : ""}>Continue</button>`;
81
81
  if (state.step === 4 && optional.hasComputerStep)
82
- return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back">Back</button><div class="runtime-setup-footer-actions"><button type="button" class="runtime-setup-secondary" data-runtime-setup-action="skip-computer">Skip for now</button><button type="submit" class="runtime-setup-action" ${!optional.canContinue ? "disabled" : ""}>Continue</button></div>`;
82
+ return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back">Back</button><div class="runtime-setup-footer-actions">${optional.nativeWindowsAccess ? "" : '<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="skip-computer">Skip for now</button>'}<button type="submit" class="runtime-setup-action" ${!optional.canContinue ? "disabled" : ""}>Continue</button></div>`;
83
83
  const secondary =
84
84
  state.step === 1 && canEditSetupConnection(state)
85
85
  ? `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back" ${disabled}>Back</button>`
@@ -112,11 +112,13 @@ export function renderRuntimeSetup(state, availability, optional = {}) {
112
112
  const steps = [...STEP_LABELS];
113
113
  if (optional.hasComputerStep) {
114
114
  steps.splice(4, 0, "Computer");
115
- titles.splice(4, 0, "Set up computer access");
115
+ titles.splice(4, 0, optional.nativeWindowsAccess ? "Your Windows computer" : "Set up computer access");
116
116
  descriptions.splice(
117
117
  4,
118
118
  0,
119
- "Optional. Use applications on your computer, or set up access later in Settings.",
119
+ optional.nativeWindowsAccess
120
+ ? ""
121
+ : "Optional. Use applications on your computer, or set up access later in Settings.",
120
122
  );
121
123
  }
122
124
  const content =
@@ -73,6 +73,7 @@ export interface RuntimeSetupGuideDependencies {
73
73
  readonly loadHostConnection?: () => Promise<Record<string, unknown>>;
74
74
  readonly connectLocalHost?: () => Promise<Record<string, unknown>>;
75
75
  readonly createHostPairing?: () => Promise<Record<string, unknown>>;
76
+ readonly requestHostStoreConnection?: () => Promise<Record<string, unknown>>;
76
77
  readonly requestHostPermissions?: (input: Record<string, unknown>) => Promise<Record<string, unknown>>;
77
78
  readonly downloadHostSetup?: (
78
79
  platform: "windows" | "macos" | "linux",
@@ -13,7 +13,7 @@ import {
13
13
  hasSetupConnectionChanges,
14
14
  receiveSetupConnection,
15
15
  selectSetupProvider,
16
- setupConnectionSaveError,
16
+ receiveSetupConnectionSaveError,
17
17
  setupConnectionSubmitLabel,
18
18
  updateSetupConnectionField,
19
19
  } from "./runtime-setup/connection-state.js";
@@ -23,6 +23,10 @@ import {
23
23
  validateConnectionFields,
24
24
  showConnectionFieldError,
25
25
  } from "./runtime-setup/connection-form.js";
26
+ import {
27
+ clearSetupContextWindowFeedback,
28
+ focusSetupContextWindowFeedback,
29
+ } from "./runtime-setup/context-window-feedback.js";
26
30
  import {
27
31
  DEFAULT_OLLAMA_BASE_URL,
28
32
  normalizeProvider,
@@ -48,6 +52,7 @@ export function createRuntimeSetupGuide({
48
52
  loadHostConnection,
49
53
  connectLocalHost,
50
54
  createHostPairing,
55
+ requestHostStoreConnection,
51
56
  requestHostPermissions,
52
57
  downloadHostSetup,
53
58
  revokeHostConnection,
@@ -82,12 +87,13 @@ export function createRuntimeSetupGuide({
82
87
  const optionalSteps = createSetupOptionalSteps({
83
88
  container, getEnvironmentId, getPreferredProvider: () => state.provider,
84
89
  loadEmbeddingStatus, discoverEmbeddingModels, saveEmbedding, loadPlugins,
85
- setPlugin, loadHostConnection, connectLocalHost, createHostPairing, requestHostPermissions, downloadHostSetup, revokeHostConnection,
90
+ setPlugin, loadHostConnection, connectLocalHost, createHostPairing, requestHostStoreConnection, requestHostPermissions, downloadHostSetup, revokeHostConnection,
86
91
  onChange: paint, goToStep,
87
92
  });
88
93
  const { embedding, plugins, readyStep } = optionalSteps;
89
94
 
90
95
  function goToStep(step) {
96
+ clearSetupContextWindowFeedback(state, container);
91
97
  state.step = step;
92
98
  state.error = "";
93
99
  paint({ focus: true });
@@ -100,6 +106,7 @@ export function createRuntimeSetupGuide({
100
106
  }
101
107
 
102
108
  function reset() {
109
+ clearSetupContextWindowFeedback(state, container);
103
110
  revision += 1;
104
111
  optionalSteps.reset();
105
112
  viewState.reset();
@@ -153,6 +160,7 @@ export function createRuntimeSetupGuide({
153
160
 
154
161
  async function loadOptions() {
155
162
  if (state.loading) return;
163
+ clearSetupContextWindowFeedback(state, container);
156
164
  const operationRevision = ++revision;
157
165
  const operationEnvironment = getEnvironmentId();
158
166
  state.loading = true;
@@ -217,6 +225,7 @@ export function createRuntimeSetupGuide({
217
225
  async function submitConnection() {
218
226
  const input = connectionInput();
219
227
  if (!input) return;
228
+ clearSetupContextWindowFeedback(state, container);
220
229
  const connectionChanged = hasSetupConnectionChanges(state);
221
230
  const operationRevision = ++revision;
222
231
  const operationEnvironment = getEnvironmentId();
@@ -247,12 +256,13 @@ export function createRuntimeSetupGuide({
247
256
  state.step = 2;
248
257
  } catch (error) {
249
258
  if (!operationIsCurrent(operationRevision, operationEnvironment)) return;
250
- state.error = setupConnectionSaveError(error);
259
+ receiveSetupConnectionSaveError(state, error);
251
260
  } finally {
252
261
  delete input.apiKey;
253
262
  if (operationIsCurrent(operationRevision, operationEnvironment)) {
254
263
  state.saving = false;
255
264
  paint({ focus: true });
265
+ focusSetupContextWindowFeedback(container, state.contextWindowFeedback, viewState.canRestoreFocus());
256
266
  if (state.step === 2) void embedding.load();
257
267
  }
258
268
  }
@@ -392,6 +402,7 @@ export function createRuntimeSetupGuide({
392
402
  embedding.input(field.dataset.runtimeSetupField, textOf(field.value));
393
403
  return;
394
404
  }
405
+ clearSetupContextWindowFeedback(state, container);
395
406
  field.removeAttribute?.("aria-invalid");
396
407
  updateSetupConnectionField(
397
408
  state,
@@ -420,6 +431,7 @@ export function createRuntimeSetupGuide({
420
431
  field?.dataset.runtimeSetupField !== "provider"
421
432
  )
422
433
  return;
434
+ clearSetupContextWindowFeedback(state, container);
423
435
  selectSetupProvider(state, field.value);
424
436
  state.error = "";
425
437
  paint();
@@ -1,3 +1,4 @@
1
+ import { renderReasoningModeField, syncReasoningModeField, retainedReasoningMode } from "../../lib/reasoning-controls.js";
1
2
  import { escapeHtml } from "../../lib/text-format.js";
2
3
  import { SCHEDULE_WEEKDAYS } from "../../lib/schedule-presentation.js";
3
4
  import { scheduleErrorMessage } from "../../lib/schedule-errors.js";
@@ -88,12 +89,7 @@ export function createScheduleForm({
88
89
  <label>Task prompt<textarea name="prompt" rows="5" required dir="auto" placeholder="What should ABot do when this schedule runs?">${escapeHtml(values.prompt || "")}</textarea></label>
89
90
  <div class="schedule-form-grid">${scheduleFields(values)}</div>
90
91
  <div class="schedule-form-grid"><label>Model<select name="modelProfileId" required><option value="">Choose a model</option>${options(modelOptions, values.modelProfileId)}</select></label>
91
- <label>Mode<select name="agentMode">${options(
92
- modes
93
- .filter((mode) => mode !== "auto")
94
- .map((mode) => ({ value: mode, label: mode })),
95
- values.agentMode || "reasoning",
96
- )}</select></label></div>
92
+ ${renderReasoningModeField(values.agentMode || "reasoning", models.find((model) => model.id === values.modelProfileId), modes.filter((mode) => mode !== "auto"))}</div>
97
93
  <label>Tool access<select name="toolPermissionMode">${options(
98
94
  [
99
95
  { value: "full_access", label: "Full" },
@@ -116,6 +112,12 @@ export function createScheduleForm({
116
112
  }
117
113
  }
118
114
 
115
+ const readInput = () => {
116
+ const data = new FormData(form);
117
+ data.set("agentMode", retainedReasoningMode(form, values.agentMode || "reasoning"));
118
+ return scheduleFormInput(data, job?.schedule);
119
+ };
120
+ fields.namedItem("modelProfileId").addEventListener("change", () => syncReasoningModeField(form, models, modes.filter((mode) => mode !== "auto")));
119
121
  let initialInput;
120
122
  form.querySelector("[data-cancel]").addEventListener("click", onCancel);
121
123
  fields.namedItem("kind").addEventListener("change", syncKind);
@@ -125,7 +127,7 @@ export function createScheduleForm({
125
127
  submit.disabled = true;
126
128
  feedback.hidden = true;
127
129
  try {
128
- const currentInput = scheduleFormInput(new FormData(form), job?.schedule);
130
+ const currentInput = readInput();
129
131
  const input = job
130
132
  ? scheduleUpdateInput(currentInput, initialInput)
131
133
  : currentInput;
@@ -137,7 +139,7 @@ export function createScheduleForm({
137
139
  }
138
140
  });
139
141
  syncKind();
140
- if (job) initialInput = scheduleFormInput(new FormData(form), job.schedule);
142
+ if (job) initialInput = readInput();
141
143
  const initialFields = JSON.stringify([...new FormData(form)]);
142
144
  function trackScheduleDraft() {
143
145
  form.dataset.dirty = String(
@@ -48,12 +48,31 @@ export function createSchedulesWorkspace({
48
48
  });
49
49
 
50
50
  function prepareLeave() {
51
- if (!actions.snapshot().editor) return true;
52
- if (!canDiscardScheduleDraft()) return false;
53
- actions.cancelEdit();
51
+ const prepared = prepareEnvironmentChange();
52
+ if (!prepared) return false;
53
+ prepared();
54
54
  return true;
55
55
  }
56
56
 
57
+ function prepareEnvironmentChange() {
58
+ const editor = actions.snapshot().editor;
59
+ if (editor && !canDiscardScheduleDraft()) return null;
60
+ const form = details.querySelector(".schedule-editor");
61
+ const fingerprint = scheduleDraftFingerprint(form);
62
+ const commit = () => { if (editor) actions.cancelEdit(); };
63
+ commit.canCommit = () => {
64
+ if (actions.snapshot().mutation) return false;
65
+ if (actions.snapshot().editor !== editor) return false;
66
+ if (details.querySelector(".schedule-editor") !== form) return false;
67
+ return scheduleDraftFingerprint(form) === fingerprint;
68
+ };
69
+ return commit;
70
+ }
71
+
72
+ function scheduleDraftFingerprint(form) {
73
+ return form ? JSON.stringify([...new FormData(form)]) : "";
74
+ }
75
+
57
76
  function canDiscardScheduleDraft() {
58
77
  const form = details.querySelector(".schedule-editor");
59
78
  if (form?.dataset.dirty !== "true") return true;
@@ -156,5 +175,5 @@ export function createSchedulesWorkspace({
156
175
  editorIdentity = null;
157
176
  renderScheduleDetails({ root: details, snapshot, actions });
158
177
  }
159
- return { render, prepareLeave };
178
+ return { render, prepareLeave, prepareEnvironmentChange };
160
179
  }
@@ -7,7 +7,7 @@ export function renderSessionSidebarSections({
7
7
  if (showingArchived) {
8
8
  const notice = document.createElement("p");
9
9
  notice.className = "session-archive-notice";
10
- notice.textContent = "Archived in this browser and environment. Restore a conversation from its menu.";
10
+ notice.textContent = "Archived in this ABot installation and environment. Restore a conversation from its menu.";
11
11
  root.appendChild(notice);
12
12
  }
13
13
  const pinned = sessions.filter((session) => isPinned(session.id));
@@ -35,7 +35,7 @@ export function renderSessionSidebarSections({
35
35
  const toggle = document.createElement("button");
36
36
  toggle.type = "button";
37
37
  toggle.className = "session-archive-toggle";
38
- toggle.title = "Conversations archived in this browser and environment";
38
+ toggle.title = "Conversations archived in this ABot installation and environment";
39
39
  toggle.textContent = showingArchived ? "Back to conversations" : `Archived (${archivedCount})`;
40
40
  toggle.setAttribute("aria-pressed", String(showingArchived));
41
41
  toggle.addEventListener("click", onToggleArchived);
@@ -35,6 +35,7 @@ export function createSparkChatEmptyState({ getConfiguration, onOpenModelSetting
35
35
  if (model.needsModel) {
36
36
  const action = documentRoot.createElement("button");
37
37
  action.setAttribute("type", "button");
38
+ action.className = "spark-setup-button";
38
39
  action.textContent = "Choose model";
39
40
  action.addEventListener("click", onOpenModelSettings);
40
41
  empty.append(action);
@@ -12,7 +12,7 @@ function sameSourceMessage(current, source) {
12
12
 
13
13
  export function createSparkHandoffActions({
14
14
  getScope, getMessages, client, captureNavigation, onOpened, onChange = () => {},
15
- notify, documentRoot = document,
15
+ notify, documentRoot = document, canOpen = () => true,
16
16
  }) {
17
17
  const pending = new Set();
18
18
  function createNode(message) {
@@ -25,7 +25,12 @@ export function createSparkHandoffActions({
25
25
  button.type = "button";
26
26
  button.className = "spark-handoff-button";
27
27
  button.textContent = "Open a session about this";
28
- button.disabled = !message.sparkHandoffAvailable || pending.has(identity);
28
+ function canStartHandoff() {
29
+ if (!canOpen()) return false;
30
+ if (!message.sparkHandoffAvailable) return false;
31
+ return !pending.has(identity);
32
+ }
33
+ button.disabled = !canStartHandoff();
29
34
  row.appendChild(button);
30
35
  if (!message.sparkHandoffAvailable) {
31
36
  const explanation = documentRoot.createElement("p");
@@ -39,7 +44,8 @@ export function createSparkHandoffActions({
39
44
  return getMessages().some((candidate) => sameSourceMessage(candidate, message));
40
45
  }
41
46
  async function open() {
42
- if (button.disabled || pending.has(identity) || !sourceIsCurrent()) return;
47
+ if (!canStartHandoff()) return;
48
+ if (!sourceIsCurrent()) return;
43
49
  const navigate = captureNavigation();
44
50
  pending.add(identity); button.disabled = true;
45
51
  try {
@@ -48,6 +48,7 @@ export function createSparkChatPanel({ documentRoot = document, launcherAnchor }
48
48
  dom.launcherButton.insertAdjacentHTML("beforeend", '<span class="spark-launcher-label">SPARK</span>');
49
49
  const panel = root.querySelector(".spark-chat-panel");
50
50
  const notice = root.querySelector(".spark-message-notice");
51
+ dom.launcherButton.hidden = true;
51
52
  const placement = createSparkChatPlacement({ root, launcher: dom.launcherButton, panel, notice, dockAnchor: launcherSlot });
52
53
  dom.launcherButton.title = "Open SPARK · Drag to move · Alt + arrows to move · Alt + Home to return to sidebar";
53
54
  let timer;
@@ -1,14 +1,11 @@
1
1
  import { createSparkPlacementMotion } from "./motion.js";
2
+ import { workspaceStorage } from "../../services/workspace-state.js";
2
3
 
3
4
  const storageKey = "abot.spark.launcher.position.v1";
4
5
  const margin = 12;
5
6
  const dragThreshold = 5;
6
7
  const positionGrid = 16;
7
8
 
8
- function readBrowserStorage(windowRoot) {
9
- try { return windowRoot.localStorage; } catch { return null; }
10
- }
11
-
12
9
  function readPosition(storage) {
13
10
  try {
14
11
  const value = JSON.parse(storage?.getItem(storageKey) ?? "null");
@@ -31,9 +28,9 @@ function hasMovedPastDragThreshold(pointer, event) {
31
28
  return Math.hypot(event.clientX - pointer.x, event.clientY - pointer.y) >= dragThreshold;
32
29
  }
33
30
 
34
- /** Browser-only launcher placement; conversation and environment state stay untouched. */
31
+ /** Installation-owned launcher placement, clamped to the current screen. */
35
32
  export function createSparkChatPlacement({ root, launcher, panel, notice, dockAnchor, storage, windowRoot = window }) {
36
- const positionStorage = storage === undefined ? readBrowserStorage(windowRoot) : storage;
33
+ const positionStorage = storage === undefined ? workspaceStorage() : storage;
37
34
  let position = readPosition(positionStorage);
38
35
  let pointer = null;
39
36
  let suppressClick = false;
@@ -45,7 +42,7 @@ export function createSparkChatPlacement({ root, launcher, panel, notice, dockAn
45
42
  try {
46
43
  if (position) positionStorage?.setItem(storageKey, JSON.stringify(position));
47
44
  else positionStorage?.removeItem(storageKey);
48
- } catch { /* Placement remains usable when browser storage is unavailable. */ }
45
+ } catch { /* The shared storage owner reports persistence failures. */ }
49
46
  }
50
47
 
51
48
  function placePopup(node, anchor) {
@@ -1,3 +1,4 @@
1
+ import { canChooseReasoning, reasoningModeOptions } from "../../lib/reasoning-controls.js";
1
2
  import { supportsFullPlus } from "../../lib/tool-permission-mode.js";
2
3
 
3
4
  export function createSparkChatSettings({ root, onSave, onClear, onOpen, onResetPosition, onOpenModelSettings, getAgentMode, onAgentModeChange, getWebConfig, documentRoot = document }) {
@@ -29,11 +30,12 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
29
30
  const feedback = card.querySelector("[data-spark-settings-feedback]");
30
31
  let saved = "ask";
31
32
  let ready = false;
33
+ let reasoningEnabled = false;
32
34
  let busy = false;
33
35
  let environmentId;
34
36
  function controls() {
35
37
  select.disabled = busy || !ready;
36
- agentModeSelect.disabled = !ready;
38
+ agentModeSelect.disabled = !ready || !reasoningEnabled;
37
39
  save.disabled = busy || !ready || select.value === saved;
38
40
  clear.disabled = busy || !ready;
39
41
  }
@@ -52,7 +54,7 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
52
54
  finally { if (environment === environmentId) { busy = false; controls(); } }
53
55
  }
54
56
  select.addEventListener("change", controls);
55
- agentModeSelect.addEventListener("change", () => onAgentModeChange(agentModeSelect.value));
57
+ agentModeSelect.addEventListener("change", () => { if (reasoningEnabled) onAgentModeChange(agentModeSelect.value); });
56
58
  card.querySelector("form").addEventListener("submit", (event) => {
57
59
  event.preventDefault();
58
60
  if (save.disabled) return;
@@ -73,7 +75,9 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
73
75
  environmentId = nextEnvironmentId; busy = false; ready = false; feedback.textContent = "";
74
76
  select.value = configuration?.toolPermissionMode || "ask";
75
77
  }
76
- agentModeSelect.value = getAgentMode();
78
+ reasoningEnabled = canChooseReasoning(configuration);
79
+ agentModeSelect.innerHTML = reasoningModeOptions(getAgentMode(), reasoningEnabled);
80
+ agentModeSelect.title = reasoningEnabled ? "Reasoning depth" : "Enable reasoning controls for this model in Models.";
77
81
  const next = configuration?.toolPermissionMode || "ask";
78
82
  if (!ready || select.value === saved || busy) select.value = next;
79
83
  saved = next; ready = Boolean(configuration?.sessionId);
@@ -0,0 +1,35 @@
1
+ import { escapeHtml } from "../../lib/text-format.js";
2
+
3
+ export function renderComputerMetadata(snapshot, disabled = false) {
4
+ const identity = snapshot?.identity || {};
5
+ const os = { windows: "Windows", macos: "macOS", linux: "Linux" }[identity.os] || identity.os;
6
+ const summary = [identity.name, os, identity.user]
7
+ .filter((value) => typeof value === "string" && value.length > 0).join(" · ");
8
+ if (!summary && !snapshot?.paired) return "";
9
+ return `<div class="system-host-card-computer"><span>${escapeHtml(summary)}</span>${snapshot?.paired ? `<button type="button" data-system-host-revoke title="Disconnect this computer. Saved insights are kept." ${disabled ? "disabled" : ""}>Remove this computer</button>` : ""}</div>`;
10
+ }
11
+
12
+ function renderConnectionStatus(status, ready, compact = false) {
13
+ return `<span class="system-host-card-status" role="status" ${compact ? `aria-label="${escapeHtml(status)}"` : ""} data-tone="${ready ? "ready" : "unavailable"}"><i aria-hidden="true"></i>${compact ? "" : escapeHtml(status)}</span>`;
14
+ }
15
+
16
+ /** Platform actions are supplied by their existing owners; this module renders the shared layout. */
17
+ export function renderConnectionCard({
18
+ title, status, ready, disabled = false, compact = false, description = "",
19
+ actions = "", help = "", metadata = "", error = "", message = "", details = "", attributes = "",
20
+ }) {
21
+ if (compact) return `<section class="system-host-panel system-host-card system-host-card-ready" aria-label="Computer access" ${attributes}>
22
+ <h2 class="system-host-card-ready-title">${renderConnectionStatus(status, ready, true)}${escapeHtml(title)}</h2>
23
+ ${metadata}
24
+ ${details}
25
+ </section>`;
26
+ return `<section class="system-host-panel system-host-card" aria-label="Computer access" aria-busy="${disabled ? "true" : "false"}" ${attributes}>
27
+ <div class="system-host-card-heading"><h2>${escapeHtml(title)}</h2>${renderConnectionStatus(status, ready)}</div>
28
+ ${description ? `<p class="system-host-card-description">${escapeHtml(description)}</p>` : ""}
29
+ ${actions ? `<div class="system-host-card-action">${actions}</div>` : ""}
30
+ ${help ? `<p class="system-host-card-hint">${escapeHtml(help)}</p>` : ""}
31
+ ${error || message ? `<p class="${error ? "error-text" : "system-host-card-message"}" role="${error ? "alert" : "status"}" aria-live="polite">${escapeHtml(error || message)}</p>` : ""}
32
+ ${metadata}
33
+ ${details}
34
+ </section>`;
35
+ }
@@ -6,6 +6,7 @@ function hasManagedMacPermissionRuntime(version) {
6
6
  }
7
7
 
8
8
  export function macCompanionPermissionPath(snapshot) {
9
+ if (snapshot?.collectionSource?.mode === "native") return "";
9
10
  if (!snapshot?.paired) return "";
10
11
  if (snapshot.identity?.os !== "macos") return "";
11
12
  if (!hasManagedMacPermissionRuntime(snapshot.companion?.installedVersion))
@@ -20,6 +21,7 @@ export function macCompanionPermissionPath(snapshot) {
20
21
 
21
22
  /** The managed companion keeps its macOS permission subject at one private path. */
22
23
  export function renderMacPermissionGuide(snapshot) {
24
+ if (snapshot?.collectionSource?.mode === "native") return "";
23
25
  if (!snapshot?.paired) return "";
24
26
  if (snapshot.identity?.os !== "macos") return "";
25
27
  const version = snapshot.companion?.installedVersion;