@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
@@ -18,6 +18,9 @@
18
18
  @import url("./styles/30-inspector-config.css");
19
19
  @import url("./styles/40-config-workspace.css");
20
20
  @import url("./styles/41-plugin-management.css");
21
+ @import url("./styles/42-model-plugin-permissions.css");
22
+ @import url("./styles/41-plugin-discovery.css");
23
+ @import url("./styles/41-plugin-configuration.css");
21
24
  @import url("./styles/42-runtime-setup-plugins.css");
22
25
  @import url("./styles/43-model-setup.css");
23
26
  @import url("./styles/44-model-provider-cards.css");
@@ -40,6 +43,7 @@
40
43
  @import url("./styles/45-bridge-setup.css");
41
44
  @import url("./styles/46-system-host.css");
42
45
  @import url("./styles/11-workspace-header-width.css");
46
+ @import url("./styles/11-product-links.css");
43
47
  @import url("./styles/28-tool-approval-card.css");
44
48
  @import url("./styles/14-startup-screen.css");
45
49
  @import url("./styles/93-compact-viewport.css");
@@ -49,6 +53,7 @@
49
53
  @import url("./styles/43-co-worker-applications.css");
50
54
  @import url("./styles/48-notifications.css");
51
55
  @import url("./styles/49-macos-permission.css");
56
+ @import url("./styles/49-collection-consent.css");
52
57
  @import url("./styles/50-automations.css");
53
58
  @import url("./styles/51-automation-editor-actions.css");
54
59
  @import url("./styles/51-automation-templates.css");
@@ -57,3 +62,4 @@
57
62
  @import url("./styles/53-automation-schema-inputs.css");
58
63
  @import url("./styles/54-spark-chat.css");
59
64
  @import url("./styles/94-automations-responsive.css");
65
+ @import url("./styles/64-workspace-storage.css");
@@ -0,0 +1,15 @@
1
+ /** Installation-owned UI state. These records never become model context. */
2
+ export type ClientPreferences = Record<string, string>;
3
+ export type ClientState = {
4
+ version: 1;
5
+ revision: number;
6
+ introductionSeen: boolean;
7
+ preferences: ClientPreferences;
8
+ queue: string;
9
+ };
10
+ export declare function emptyClientState(): ClientState;
11
+ export declare class ClientStateError extends Error {
12
+ readonly code: string;
13
+ readonly status: number;
14
+ constructor(code: string, message: string, status?: number);
15
+ }
@@ -0,0 +1,13 @@
1
+ export function emptyClientState() {
2
+ return { version: 1, revision: 0, introductionSeen: false,
3
+ preferences: { "abot-web.lastToolPermissionMode": "ask" }, queue: "" };
4
+ }
5
+ export class ClientStateError extends Error {
6
+ code;
7
+ status;
8
+ constructor(code, message, status = 400) {
9
+ super(message);
10
+ this.code = code;
11
+ this.status = status;
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ export declare function isPreferenceObject(value: unknown): value is Record<string, unknown>;
2
+ export declare function assertPreferenceShape(key: string, value: unknown): void;
@@ -0,0 +1,80 @@
1
+ import { ClientStateError } from "./contracts.js";
2
+ const modes = new Set(["ask", "full_access", "full_plus"]);
3
+ export function isPreferenceObject(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value);
5
+ }
6
+ function isStringList(value) {
7
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
8
+ }
9
+ function hasOnlyFields(value, fields) {
10
+ return Object.keys(value).every((key) => fields.includes(key));
11
+ }
12
+ function isSessionMode(value) {
13
+ if (!isPreferenceObject(value))
14
+ return false;
15
+ if (!hasOnlyFields(value, ["toolPermissionMode", "savedAt"]))
16
+ return false;
17
+ if (typeof value.toolPermissionMode !== "string" || !modes.has(value.toolPermissionMode))
18
+ return false;
19
+ return Number.isFinite(value.savedAt);
20
+ }
21
+ function isSidebarPreference(value) {
22
+ if (!isPreferenceObject(value))
23
+ return false;
24
+ if (!hasOnlyFields(value, ["archivedSessionIds", "orderedSessionIds"]))
25
+ return false;
26
+ return isStringList(value.archivedSessionIds) && isStringList(value.orderedSessionIds);
27
+ }
28
+ function isLauncherPosition(value) {
29
+ if (!isPreferenceObject(value))
30
+ return false;
31
+ if (!hasOnlyFields(value, ["x", "y"]))
32
+ return false;
33
+ return Number.isFinite(value.x) && Number.isFinite(value.y);
34
+ }
35
+ function isGuidancePreference(value) {
36
+ if (!isPreferenceObject(value))
37
+ return false;
38
+ if (!hasOnlyFields(value, ["offeredOn", "dismissed", "reviewed"]))
39
+ return false;
40
+ if (value.offeredOn !== undefined && typeof value.offeredOn !== "string")
41
+ return false;
42
+ if (value.dismissed !== undefined && (!isStringList(value.dismissed) || value.dismissed.length > 8))
43
+ return false;
44
+ if (value.reviewed === undefined)
45
+ return true;
46
+ if (!Array.isArray(value.reviewed) || value.reviewed.length > 200)
47
+ return false;
48
+ const seen = new Set();
49
+ for (const item of value.reviewed) {
50
+ if (!isPreferenceObject(item))
51
+ return false;
52
+ if (!hasOnlyFields(item, ["id", "updatedAt"]))
53
+ return false;
54
+ if (typeof item.id !== "string" || typeof item.updatedAt !== "string")
55
+ return false;
56
+ if (seen.has(item.id))
57
+ return false;
58
+ seen.add(item.id);
59
+ }
60
+ return true;
61
+ }
62
+ function hasPreferenceShape(key, value) {
63
+ if (key === "abot-web.pinnedSessions")
64
+ return isStringList(value);
65
+ if (key === "abot.spark.launcher.position.v1")
66
+ return isLauncherPosition(value);
67
+ if (key.startsWith("abot-web.homeGuidance."))
68
+ return isGuidancePreference(value);
69
+ if (!isPreferenceObject(value))
70
+ return false;
71
+ if (key === "abot-web.sessionModes")
72
+ return Object.values(value).every(isSessionMode);
73
+ if (key === "abot-web.sessionSidebarByEnvironment")
74
+ return Object.values(value).every(isSidebarPreference);
75
+ return Object.values(value).every((item) => typeof item === "string");
76
+ }
77
+ export function assertPreferenceShape(key, value) {
78
+ if (!hasPreferenceShape(key, value))
79
+ throw new ClientStateError("invalid_preferences", "Invalid workspace preferences or unbounded memory review receipts.");
80
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClientPreferences } from "./contracts.js";
2
+ export declare function decodePreference(key: string, value: unknown): unknown;
3
+ export declare function updatePreference(preferences: ClientPreferences, input: Record<string, unknown>): void;
@@ -0,0 +1,84 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { ClientStateError } from "./contracts.js";
3
+ import { assertPreferenceShape, isPreferenceObject as isObject } from "./preference-shapes.js";
4
+ const scalarKeys = new Set(["abot-web.environmentId", "abot-web.lastToolPermissionMode"]);
5
+ const jsonKeys = new Set([
6
+ "abot-web.pinnedSessions", "abot-web.currentSessionByEnvironment", "abot-web.sessionModes",
7
+ "abot-web.sessionModels", "abot-web.lastModelByEnvironment", "abot-web.sessionSidebarByEnvironment",
8
+ "abot.spark.launcher.position.v1",
9
+ ]);
10
+ const modes = new Set(["ask", "full_access", "full_plus"]);
11
+ function assertBoundedJson(value, depth = 0) {
12
+ if (depth > 8)
13
+ throw new ClientStateError("invalid_preferences", "Workspace preferences are too deeply nested.");
14
+ if (!value || typeof value !== "object")
15
+ return;
16
+ for (const child of Object.values(value)) {
17
+ assertBoundedJson(child, depth + 1);
18
+ }
19
+ }
20
+ function isGuidanceKey(key) {
21
+ // encodeURIComponent leaves these punctuation characters unescaped. The
22
+ // request and state byte limits bound keys without restricting profile IDs.
23
+ return /^abot-web\.homeGuidance\.(?:[A-Za-z0-9_.!~*'()-]|%[0-9A-Fa-f]{2})+$/.test(key);
24
+ }
25
+ export function decodePreference(key, value) {
26
+ if (!scalarKeys.has(key) && !jsonKeys.has(key) && !isGuidanceKey(key))
27
+ throw new ClientStateError("invalid_preferences", "Unknown workspace preference.");
28
+ if (value === null)
29
+ return undefined;
30
+ if (typeof value !== "string" || value.length > 524_288)
31
+ throw new ClientStateError("invalid_preferences", "Invalid workspace preference value.");
32
+ if (scalarKeys.has(key)) {
33
+ if (key.endsWith("lastToolPermissionMode") && !modes.has(value))
34
+ throw new ClientStateError("invalid_preferences", "Select Ask, Full or Full+.");
35
+ return value;
36
+ }
37
+ let decoded;
38
+ try {
39
+ decoded = JSON.parse(value);
40
+ }
41
+ catch {
42
+ throw new ClientStateError("invalid_preferences", "Workspace preferences must contain JSON.");
43
+ }
44
+ assertBoundedJson(decoded);
45
+ assertPreferenceShape(key, decoded);
46
+ return decoded;
47
+ }
48
+ function ownPreferenceField(record, key) {
49
+ return Object.hasOwn(record, key) ? record[key] : undefined;
50
+ }
51
+ function mergeChangedFields(before, after, current) {
52
+ if (isDeepStrictEqual(before, after))
53
+ return current;
54
+ if (before === undefined && isObject(after) && isObject(current))
55
+ return mergeChangedFields({}, after, current);
56
+ if (isObject(before) && isObject(after) && isObject(current)) {
57
+ const result = Object.assign(Object.create(null), current);
58
+ for (const key of new Set([...Object.keys(before), ...Object.keys(after)])) {
59
+ const next = mergeChangedFields(ownPreferenceField(before, key), ownPreferenceField(after, key), ownPreferenceField(current, key));
60
+ if (next === undefined)
61
+ delete result[key];
62
+ else
63
+ result[key] = next;
64
+ }
65
+ return result;
66
+ }
67
+ if (!isDeepStrictEqual(current, before) && !isDeepStrictEqual(current, after))
68
+ throw new ClientStateError("preferences_changed", "These settings changed in another window. Reload before saving again.", 409);
69
+ return after;
70
+ }
71
+ export function updatePreference(preferences, input) {
72
+ const key = typeof input.key === "string" ? input.key : "";
73
+ const before = decodePreference(key, input.before);
74
+ const after = decodePreference(key, input.value);
75
+ const current = decodePreference(key, preferences[key] ?? null);
76
+ const merged = mergeChangedFields(before, after, current);
77
+ if (merged === undefined) {
78
+ delete preferences[key];
79
+ return;
80
+ }
81
+ const value = scalarKeys.has(key) ? String(merged) : JSON.stringify(merged);
82
+ decodePreference(key, value);
83
+ preferences[key] = value;
84
+ }
@@ -0,0 +1,3 @@
1
+ import { type ClientState } from "./contracts.js";
2
+ /** Runs within the store transaction: a queue item can be released by only one caller. */
3
+ export declare function changeClientQueue(state: ClientState, input: Record<string, unknown>): unknown;
@@ -0,0 +1,43 @@
1
+ import { createSessionComposerQueue } from "../app/lib/session-composer-queue.js";
2
+ import { ClientStateError } from "./contracts.js";
3
+ function queueScope(input) {
4
+ if (!input || typeof input !== "object")
5
+ throw new ClientStateError("invalid_queue_scope", "A conversation is required.");
6
+ const scope = input;
7
+ for (const value of [scope.environmentId, scope.sessionId]) {
8
+ if (typeof value !== "string" || !value.trim())
9
+ throw new ClientStateError("invalid_queue_scope", "Invalid conversation identity.");
10
+ }
11
+ return { environmentId: scope.environmentId, sessionId: scope.sessionId };
12
+ }
13
+ /** Runs within the store transaction: a queue item can be released by only one caller. */
14
+ export function changeClientQueue(state, input) {
15
+ const scope = queueScope(input.scope);
16
+ const ownerId = typeof input.ownerId === "string" && input.ownerId.length <= 128 ? input.ownerId : null;
17
+ const requiresRecoveryOwner = ["claim", "begin", "uncertain"].includes(String(input.action));
18
+ if (requiresRecoveryOwner && !ownerId)
19
+ throw new ClientStateError("invalid_queue_owner", "A window identity is required to recover a queued message.");
20
+ const queue = createSessionComposerQueue({ ownerId, storage: {
21
+ getItem: () => state.queue || null,
22
+ setItem: (_key, value) => { state.queue = value; },
23
+ } });
24
+ const token = typeof input.releaseToken === "string" ? input.releaseToken : "";
25
+ const requestId = typeof input.requestId === "string" ? input.requestId : "";
26
+ if (input.action === "claim")
27
+ return queue.claimBlockedRelease(scope, token, { takeover: input.takeover === true });
28
+ if (input.action === "begin")
29
+ return queue.beginBlockedSend(scope, token);
30
+ if (input.action === "uncertain")
31
+ return queue.markBlockedUncertain(scope, token);
32
+ if (input.action === "enqueue")
33
+ return queue.enqueue(scope, input.item);
34
+ if (input.action === "release")
35
+ return queue.releaseForTerminal(scope, requestId);
36
+ if (input.action === "bind")
37
+ return queue.bindReleasedSuccess(scope, token, requestId);
38
+ if (input.action === "rebind")
39
+ return queue.rebindBlocked(scope, requestId);
40
+ if (input.action === "update")
41
+ return queue.updateBlockedRelease(scope, token, input.item);
42
+ throw new ClientStateError("invalid_queue_action", "Unknown message queue operation.");
43
+ }
@@ -0,0 +1,7 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ export declare class WebClientStateRoutes {
3
+ private readonly changed;
4
+ private readonly store;
5
+ constructor(rootDir: string, changed?: () => void);
6
+ handle(request: IncomingMessage, response: ServerResponse, pathname: string): Promise<boolean>;
7
+ }
@@ -0,0 +1,58 @@
1
+ import { acceptConfigMutationRequest } from "../local-runtime/config-mutation-request.js";
2
+ import { readBody, readJsonBody, sendJson } from "../local-runtime/http.js";
3
+ import { ClientStateError } from "./contracts.js";
4
+ import { updatePreference } from "./preferences.js";
5
+ import { WebClientStateStore } from "./store.js";
6
+ import { changeClientQueue } from "./queue.js";
7
+ export class WebClientStateRoutes {
8
+ changed;
9
+ store;
10
+ constructor(rootDir, changed = () => { }) {
11
+ this.changed = changed;
12
+ this.store = new WebClientStateStore(rootDir);
13
+ }
14
+ async handle(request, response, pathname) {
15
+ if (pathname !== "/web-ui-state")
16
+ return false;
17
+ response.setHeader("cache-control", "no-store");
18
+ try {
19
+ if (request.method === "GET") {
20
+ const { state } = await this.store.transaction(() => null);
21
+ sendJson(response, 200, { ok: true, state });
22
+ return true;
23
+ }
24
+ if (request.method !== "POST") {
25
+ sendJson(response, 405, { ok: false, error: "method_not_allowed" });
26
+ return true;
27
+ }
28
+ if (!acceptConfigMutationRequest(request, response))
29
+ return true;
30
+ const input = readJsonBody(await readBody(request, { maxBytes: 1024 * 1024 }));
31
+ const saved = await this.store.transaction((state) => {
32
+ if (input.kind === "preference") {
33
+ updatePreference(state.preferences, input);
34
+ return null;
35
+ }
36
+ if (input.kind === "queue")
37
+ return changeClientQueue(state, input);
38
+ if (input.kind === "introduction") {
39
+ state.introductionSeen = true;
40
+ return null;
41
+ }
42
+ throw new ClientStateError("invalid_state_operation", "Unknown workspace state operation.");
43
+ });
44
+ sendJson(response, 200, { ok: true, ...saved });
45
+ try {
46
+ this.changed();
47
+ }
48
+ catch { /* Persistence already succeeded; clients also refresh on focus. */ }
49
+ }
50
+ catch (error) {
51
+ const known = error instanceof ClientStateError;
52
+ sendJson(response, known ? error.status : 500, { ok: false,
53
+ error: known ? error.code : "workspace_state_unavailable",
54
+ message: known ? error.message : "Workspace settings could not be saved or loaded. Existing data was preserved. Reload before continuing." });
55
+ }
56
+ return true;
57
+ }
58
+ }
@@ -0,0 +1,14 @@
1
+ import { type ClientState } from "./contracts.js";
2
+ /** One installation; independent of listener ports, browser profiles and operating system. */
3
+ export declare class WebClientStateStore {
4
+ private initialization?;
5
+ readonly directory: string;
6
+ readonly path: string;
7
+ constructor(rootDir: string);
8
+ private load;
9
+ private save;
10
+ transaction<T>(operation: (state: ClientState) => T): Promise<{
11
+ result: T;
12
+ state: ClientState;
13
+ }>;
14
+ }
@@ -0,0 +1,88 @@
1
+ import { open, readFile, rm, lstat } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { withFileLock } from "../../runtime/adapters/long-term-memory/file-lock.js";
5
+ import { ensurePrivateRuntimeDirectory } from "../../runtime/local-host/private-directory.js";
6
+ import { replacePreparedSessionFile } from "../../sessions/prepared-session-replacement.js";
7
+ import { isPersistedStore } from "../app/lib/session-composer-queue.js";
8
+ import { ClientStateError, emptyClientState } from "./contracts.js";
9
+ import { decodePreference } from "./preferences.js";
10
+ const maxStateBytes = 8 * 1024 * 1024;
11
+ function decodeState(raw) {
12
+ const state = JSON.parse(raw);
13
+ if (state?.version !== 1 || !Number.isSafeInteger(state.revision) || state.revision < 0 ||
14
+ typeof state.introductionSeen !== "boolean" || !state.preferences ||
15
+ typeof state.preferences !== "object" || Array.isArray(state.preferences) || typeof state.queue !== "string")
16
+ throw new Error("Workspace state is invalid. Its existing file has been preserved.");
17
+ for (const [key, value] of Object.entries(state.preferences))
18
+ decodePreference(key, value);
19
+ if (state.queue && !isPersistedStore(JSON.parse(state.queue)))
20
+ throw new Error("Saved message queue is invalid. Its existing file has been preserved.");
21
+ return state;
22
+ }
23
+ /** One installation; independent of listener ports, browser profiles and operating system. */
24
+ export class WebClientStateStore {
25
+ initialization;
26
+ directory;
27
+ path;
28
+ constructor(rootDir) {
29
+ this.directory = resolve(rootDir, ".runtime", "web-ui", "client-state");
30
+ this.path = join(this.directory, "state.json");
31
+ }
32
+ async load() {
33
+ try {
34
+ const info = await lstat(this.path);
35
+ if (!info.isFile() || info.isSymbolicLink() || info.size > maxStateBytes)
36
+ throw new Error("Workspace state must be a bounded regular file.");
37
+ return decodeState(await readFile(this.path, "utf8"));
38
+ }
39
+ catch (error) {
40
+ if (error && typeof error === "object" && "code" in error && error.code === "ENOENT")
41
+ return emptyClientState();
42
+ throw error;
43
+ }
44
+ }
45
+ async save(state) {
46
+ const raw = JSON.stringify(state);
47
+ if (Buffer.byteLength(raw) > maxStateBytes)
48
+ throw new ClientStateError("workspace_storage_full", "Workspace settings and queued messages exceed their storage limit. No saved data was discarded.", 413);
49
+ decodeState(raw);
50
+ const temporary = `${this.path}.${randomUUID()}.tmp`;
51
+ try {
52
+ const file = await open(temporary, "wx", 0o600);
53
+ try {
54
+ await file.writeFile(raw);
55
+ await file.sync();
56
+ }
57
+ finally {
58
+ await file.close();
59
+ }
60
+ await replacePreparedSessionFile(temporary, this.path);
61
+ }
62
+ finally {
63
+ await rm(temporary, { force: true });
64
+ }
65
+ }
66
+ async transaction(operation) {
67
+ const initializing = this.initialization ??= ensurePrivateRuntimeDirectory(this.directory);
68
+ try {
69
+ await initializing;
70
+ }
71
+ catch (error) {
72
+ // A later explicit reload may try again after the directory is repaired.
73
+ if (this.initialization === initializing)
74
+ this.initialization = undefined;
75
+ throw error;
76
+ }
77
+ return withFileLock(join(this.directory, "state.lock"), async () => {
78
+ const state = await this.load();
79
+ const before = JSON.stringify(state);
80
+ const result = operation(state);
81
+ if (JSON.stringify(state) !== before) {
82
+ state.revision += 1;
83
+ await this.save(state);
84
+ }
85
+ return { result, state };
86
+ });
87
+ }
88
+ }
@@ -88,6 +88,11 @@ export class LocalRuntimeApiRouter {
88
88
  }));
89
89
  this.plugins = new PluginManagementRoutes({
90
90
  rootDir: options.rootDir ?? process.cwd(),
91
+ requireMutationIdle: () => this.environments.requirePluginMutationIdle(this.requests.healthDetails().length > 0),
92
+ removalRuntime: {
93
+ applyConfiguration: (revision) => this.applyWhenRequestsIdle(revision),
94
+ requireInactive: (pluginId, capabilities) => this.environments.requirePluginInactive(pluginId, capabilities),
95
+ },
91
96
  getConfigPath: () => options.configPath ?? process.env.LLM_RUNTIME_CONFIG_FILE,
92
97
  });
93
98
  this.readStates = new WebSessionReadStates((id) => this.environments.get(id));
@@ -101,7 +106,7 @@ export class LocalRuntimeApiRouter {
101
106
  }));
102
107
  this.memoryManagement = new LongTermMemoryManagementRoutes((environmentId) => this.environments.get(environmentId).services.longTermMemory);
103
108
  }
104
- async applyWhenRequestsIdle() {
109
+ async applyWhenRequestsIdle(expectedRevision) {
105
110
  const hasAcknowledgedRequests = this.requests.healthDetails().length > 0;
106
111
  if (hasAcknowledgedRequests) {
107
112
  return {
@@ -109,7 +114,7 @@ export class LocalRuntimeApiRouter {
109
114
  message: "Your agent is working. Wait for active conversations and Jobs to finish, then apply again.",
110
115
  };
111
116
  }
112
- return this.environments.applyConfiguration();
117
+ return this.environments.applyConfiguration(expectedRevision);
113
118
  }
114
119
  async initializeSessionReadState(environmentIds) {
115
120
  for (const id of environmentIds) {
@@ -222,7 +227,7 @@ export class LocalRuntimeApiRouter {
222
227
  response: res,
223
228
  }))
224
229
  return;
225
- if (await this.plugins.handle({ method, route, body, response: res }))
230
+ if (await this.plugins.handle({ method, route, body, request: req, response: res }))
226
231
  return;
227
232
  if (segments[0] === "schedules")
228
233
  await this.initializeSessionReadState([environmentId]);
@@ -320,10 +325,10 @@ export class LocalRuntimeApiRouter {
320
325
  });
321
326
  return;
322
327
  }
323
- if ((method === "GET" && route === "chat/sessions") ||
328
+ if (((method === "GET" && route === "chat/sessions") || (method === "POST" && route === "chat/sessions/page")) ||
324
329
  (method === "POST" && route === "chat/messages")) {
325
330
  const setupRequirement = this.environments.setupRequirement(environmentId);
326
- if (setupRequirement && method === "GET") {
331
+ if (setupRequirement && route !== "chat/messages") {
327
332
  sendJson(res, 200, {
328
333
  ok: true,
329
334
  sessions: [],
@@ -350,7 +355,7 @@ export class LocalRuntimeApiRouter {
350
355
  if (await this.sessions.handle({
351
356
  method,
352
357
  segments,
353
- body,
358
+ url, body,
354
359
  environmentId,
355
360
  environment,
356
361
  response: res,
@@ -1,4 +1,5 @@
1
1
  import { createRequestSteeringInbox } from "../../runtime/request/request-steering.js";
2
+ import { traceWebProjection } from "./request-control-observation.js";
2
3
  function hasMatchingRequestView(active, input) {
3
4
  if (active.environmentId !== input.environmentId)
4
5
  return false;
@@ -22,9 +23,13 @@ export async function attachApprovalRequest(input) {
22
23
  lastEventName: "tool.approval.required",
23
24
  events: [...input.events],
24
25
  finalState: null,
25
- requestSteering: createRequestSteeringInbox({ requestId }),
26
+ requestSteering: createRequestSteeringInbox({
27
+ requestId,
28
+ diagnostics: { origin: "web_projection" },
29
+ }),
26
30
  };
27
31
  activeRequests.set(requestId, active);
32
+ traceWebProjection("projection.opened", requestId, active, "approval_attachment");
28
33
  }
29
34
  if (pending.run)
30
35
  return;
@@ -37,8 +42,10 @@ export async function attachApprovalRequest(input) {
37
42
  resolve();
38
43
  })
39
44
  .catch((error) => {
40
- if (createdProjection && activeRequests.get(requestId) === projection)
41
- activeRequests.delete(requestId);
45
+ if (createdProjection && activeRequests.get(requestId) === projection) {
46
+ const removed = activeRequests.delete(requestId);
47
+ traceWebProjection("projection.removed", requestId, projection, "attachment_error", removed);
48
+ }
42
49
  if (accepted)
43
50
  input.publish(JSON.stringify({
44
51
  type: "control",
@@ -51,8 +58,10 @@ export async function attachApprovalRequest(input) {
51
58
  .finally(() => {
52
59
  if (!projection.finalState)
53
60
  return;
54
- if (activeRequests.get(requestId) === projection)
55
- activeRequests.delete(requestId);
61
+ if (activeRequests.get(requestId) === projection) {
62
+ const removed = activeRequests.delete(requestId);
63
+ traceWebProjection("projection.removed", requestId, projection, "attachment_terminal_settled", removed);
64
+ }
56
65
  });
57
66
  });
58
67
  }
@@ -4,4 +4,4 @@ export type ConfigurationActivationPreparation = {
4
4
  restoreConfiguration(): void;
5
5
  };
6
6
  /** Cooperating root and linked-file saves wait for activation or restoration to finish. */
7
- export declare function withConfigurationActivationSource(configPath: string, operation: (preparation: ConfigurationActivationPreparation) => Promise<RuntimeSetupActivation>): Promise<RuntimeSetupActivation>;
7
+ export declare function withConfigurationActivationSource(configPath: string, operation: (preparation: ConfigurationActivationPreparation) => Promise<RuntimeSetupActivation>, expectedRevision?: string, pluginRootDir?: string): Promise<RuntimeSetupActivation>;
@@ -1,4 +1,6 @@
1
- import { withConfigFileTransaction } from "../../runtime/adapters/config-file-transaction.js";
1
+ import { requireRuntimeSetupEditSettled } from "./runtime-setup-edit-recovery.js";
2
+ import { withPluginConfigurationLock } from "../../runtime/plugins/configuration-write.js";
3
+ import { ConfigFileConflictError, withConfigFileTransaction, } from "../../runtime/adapters/config-file-transaction.js";
2
4
  import { resolveRequestRunnerConfigReference } from "../../runtime/config/request-runner-config.js";
3
5
  import { invalidateRequestRunnerConfig } from "../../runtime/config/runner/loader.js";
4
6
  function restoreUnappliedRequestRunner(activation, preparation) {
@@ -7,8 +9,12 @@ function restoreUnappliedRequestRunner(activation, preparation) {
7
9
  preparation.restoreConfiguration();
8
10
  }
9
11
  /** Cooperating root and linked-file saves wait for activation or restoration to finish. */
10
- export function withConfigurationActivationSource(configPath, operation) {
12
+ export function withConfigurationActivationSource(configPath, operation, expectedRevision, pluginRootDir) {
11
13
  return withConfigFileTransaction(configPath, async (transaction) => {
14
+ requireRuntimeSetupEditSettled(pluginRootDir ?? process.cwd());
15
+ if (expectedRevision !== undefined &&
16
+ transaction.snapshot.revision !== expectedRevision)
17
+ throw new ConfigFileConflictError();
12
18
  const runner = resolveRequestRunnerConfigReference({
13
19
  fileConfig: transaction.snapshot.config,
14
20
  mainConfigPath: configPath,
@@ -24,7 +30,9 @@ export function withConfigurationActivationSource(configPath, operation) {
24
30
  },
25
31
  };
26
32
  try {
27
- const activation = await operation(preparation);
33
+ const activation = await (pluginRootDir
34
+ ? withPluginConfigurationLock(pluginRootDir, () => operation(preparation))
35
+ : operation(preparation));
28
36
  restoreUnappliedRequestRunner(activation, preparation);
29
37
  return activation;
30
38
  }
@@ -1,4 +1,4 @@
1
- import type { RuntimeSetupGatewayRestorePoint } from "../runtime-setup-gateway.js";
1
+ import type { AppliedGatewayConfigurations, RuntimeSetupGatewayRestorePoint } from "../runtime-setup-gateway.js";
2
2
  import type { WebUiEnvironmentConfig } from "../environment-config.js";
3
3
  import type { RuntimeSetupActivation } from "./runtime-setup-input.js";
4
4
  import type { LocalRuntimeApplication } from "../../runtime/local-application.js";
@@ -11,9 +11,10 @@ export type LocalRuntimeBackendOptions = {
11
11
  defaultEnvironmentId: string;
12
12
  resolveEnvironmentConfig?: (configPath?: string) => WebUiEnvironmentConfig;
13
13
  providerAdapters?: ModelProviderAdapterRegistry;
14
- onRuntimeSetup?: (configPath: string) => Promise<RuntimeSetupActivation>;
14
+ captureRuntimeSetupConfiguration?: (configPath?: string) => string | null;
15
+ onRuntimeSetup?: (configPath: string, applied?: AppliedGatewayConfigurations) => Promise<RuntimeSetupActivation>;
15
16
  createRuntimeSetupRestorePoint?: () => RuntimeSetupGatewayRestorePoint;
16
- checkRuntimeSetupActivation?: (configPath: string) => Promise<RuntimeSetupActivation>;
17
+ checkRuntimeSetupActivation?: (configPath: string, applied?: AppliedGatewayConfigurations) => Promise<RuntimeSetupActivation>;
17
18
  };
18
19
  export type ResolvedLocalRuntimeBackendOptions = Omit<LocalRuntimeBackendOptions, "providerAdapters"> & {
19
20
  providerAdapters: ModelProviderAdapterRegistry;
@@ -7,6 +7,7 @@ export declare class RuntimeEnvironmentRegistry {
7
7
  private readonly options;
8
8
  private readonly schedulerBindings;
9
9
  private readonly environments;
10
+ private readonly gatewayConfigurations;
10
11
  private stopped;
11
12
  private readonly desiredEnvironmentIds;
12
13
  private applying;
@@ -23,13 +24,16 @@ export declare class RuntimeEnvironmentRegistry {
23
24
  status(): Promise<import("../../computer-access/native-permission-contract.js").NativePermissionStatus>;
24
25
  prepare(input: import("../../computer-access/native-permission-contract.js").NativePermissionInput): Promise<import("../../computer-access/native-permission-contract.js").NativePermissionResult>;
25
26
  }> | undefined;
26
- applyConfiguration(): Promise<RuntimeSetupActivation>;
27
+ requirePluginInactive(pluginId: string, capabilityIds: readonly string[]): void;
28
+ requirePluginMutationIdle(hasAcknowledgedRequests?: boolean): void;
29
+ applyConfiguration(expectedRevision?: string): Promise<RuntimeSetupActivation>;
27
30
  private applySavedConfiguration;
28
31
  private checkGatewayActivation;
29
32
  configure(configPath: string): void;
30
33
  modelCatalog(environmentId: string): RuntimeModelCatalogState;
31
34
  setupRequirement(environmentId: string): RuntimeSetupRequirement | null;
32
35
  get(environmentId: string): RuntimeEnvironment;
36
+ private captureGatewayConfiguration;
33
37
  private createEnvironment;
34
38
  start(environmentIds: readonly string[]): Promise<void>;
35
39
  private startEnvironment;