@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
@@ -3,20 +3,22 @@ import {
3
3
  configRequiresRawRepair,
4
4
  } from "./raw-config-repair.js";
5
5
  import { renderModelSetupEntry } from "./model-setup-entry.js";
6
- import { escapeHtml, textOf } from "../../lib/text-format.js";
6
+ import { textOf } from "../../lib/text-format.js";
7
7
  import { CONFIG_CATEGORIES } from "./config-model.js";
8
+ import { modelSummary } from "./model-summary.js";
9
+ import { renderConfigurationSummary, syncConfigurationSummary } from "./summary-rendering.js";
8
10
 
9
11
  export function createConfigWorkspaceView({
12
+ modelPluginViewState,
10
13
  onNavigationChange = () => {},
11
14
  state,
12
15
  dom,
13
16
  eventTarget,
14
17
  pluginManagement,
18
+ getOperationsSummary = () => ({ label: "System summary", items: [{ label: "System", value: "Not loaded" }] }),
15
19
  configFileEntries,
16
20
  configFileKey,
17
- countObjectKeys,
18
21
  dashboardIsBusy,
19
- dirtyFiles,
20
22
  ensureRawSelection,
21
23
  fileStatusText,
22
24
  hasPendingFileChanges,
@@ -53,17 +55,6 @@ export function createConfigWorkspaceView({
53
55
  return requestRunner?.config?.schemaVersion === 2;
54
56
  }
55
57
 
56
- function configuredStepTargetCountLabel(count, sparseOverrides) {
57
- const noun = sparseOverrides ? "override" : "mapping";
58
- return `${count} ${count === 1 ? noun : `${noun}s`}`;
59
- }
60
-
61
- function configChangeSummary(count) {
62
- if (count === 0) return "All saved";
63
- const fileLabel = count === 1 ? "file" : "files";
64
- return `${count} unsaved ${fileLabel}`;
65
- }
66
-
67
58
  function requestPipelineContent(requestRunner) {
68
59
  if (!requestRunner) {
69
60
  return '<div class="empty-state compact">No request runner config found</div>';
@@ -95,6 +86,7 @@ export function createConfigWorkspaceView({
95
86
  const unavailable =
96
87
  '<div class="empty-state">No config dashboard data</div>';
97
88
  dom.configDashboard.innerHTML =
89
+ renderConfigurationSummary(currentSummary()) +
98
90
  '<div class="config-category-panels">' +
99
91
  CONFIG_CATEGORIES.map((category) =>
100
92
  renderCategoryPanel(
@@ -129,16 +121,17 @@ export function createConfigWorkspaceView({
129
121
  }
130
122
  dom.configDashboard.setAttribute("aria-busy", busy ? "true" : "false");
131
123
  dom.refreshConfigButton.disabled = busy;
124
+ syncDashboardSummary();
132
125
  }
133
126
 
134
127
  function renderConfigDashboard() {
128
+ modelPluginViewState?.capture();
135
129
  const dashboard = state.configDashboard;
136
130
  if (!dashboard?.files) {
137
131
  renderUnavailableDashboard();
138
132
  return;
139
133
  }
140
134
  const runtime = dashboard.files.runtime;
141
- const requestRunner = dashboard.files.requestRunner;
142
135
  const models = Array.isArray(dashboard.files.models)
143
136
  ? dashboard.files.models
144
137
  : [];
@@ -146,18 +139,6 @@ export function createConfigWorkspaceView({
146
139
  state.selectedConfigModelId = models[0]?.id || "";
147
140
  }
148
141
  ensureRawSelection();
149
- const registeredStepCount = Array.isArray(dashboard.modelSteps)
150
- ? dashboard.modelSteps.length
151
- : 0;
152
- const configuredStepTargetCount = requestRunner
153
- ? countObjectKeys(requestRunner.config?.models?.defaults?.steps)
154
- : 0;
155
- const sparseOverrides = requestRunnerUsesSparseOverrides(requestRunner);
156
- const configuredStepTargetLabel = configuredStepTargetCountLabel(
157
- configuredStepTargetCount,
158
- sparseOverrides,
159
- );
160
- const dirtyCount = dirtyFiles().length;
161
142
  const repairNeeded = configFileEntries().some((file) =>
162
143
  configRequiresRawRepair(
163
144
  file,
@@ -165,39 +146,7 @@ export function createConfigWorkspaceView({
165
146
  ),
166
147
  );
167
148
  dom.configDashboard.innerHTML = `
168
- <dl class="config-summary" aria-label="Configuration summary">
169
- <div class="config-summary-item">
170
- <dt>Runtime</dt>
171
- <dd class="config-summary-value">${escapeHtml(
172
- runtime?.exists ? "Ready" : "Missing",
173
- )}</dd>
174
- </div>
175
- <div class="config-summary-item">
176
- <dt>Pipeline</dt>
177
- <dd class="config-summary-value">
178
- <span data-config-registered-step-count>${escapeHtml(
179
- `${registeredStepCount} registered`,
180
- )}</span>
181
- <span aria-hidden="true"> · </span>
182
- <span data-config-step-target-count>${escapeHtml(
183
- configuredStepTargetLabel,
184
- )}</span>
185
- </dd>
186
- </div>
187
- <div class="config-summary-item">
188
- <dt>Models</dt>
189
- <dd class="config-summary-value">${escapeHtml(String(models.length))}</dd>
190
- </div>
191
- <div class="config-summary-item config-summary-changes">
192
- <dt>Changes</dt>
193
- <dd
194
- class="config-summary-value ${dirtyCount ? "dirty" : ""}"
195
- data-config-summary-status
196
- role="status"
197
- aria-live="polite"
198
- >${escapeHtml(configChangeSummary(dirtyCount))}</dd>
199
- </div>
200
- </dl>
149
+ ${renderConfigurationSummary(currentSummary())}
201
150
  ${
202
151
  repairNeeded
203
152
  ? `<section class="config-category-panel" aria-label="Repair configuration file">${renderConfigMap()}</section>`
@@ -224,6 +173,7 @@ export function createConfigWorkspaceView({
224
173
  );
225
174
  syncDirtyPresentation({ syncRawEditor: true });
226
175
  syncDashboardInteractivity();
176
+ modelPluginViewState?.restore();
227
177
  }
228
178
 
229
179
  function syncActiveCategory() {
@@ -240,6 +190,7 @@ export function createConfigWorkspaceView({
240
190
  if (!CONFIG_CATEGORIES.includes(category)) return;
241
191
  state.activeCategory = category;
242
192
  syncActiveCategory();
193
+ syncDashboardSummary();
243
194
  onNavigationChange();
244
195
  }
245
196
 
@@ -300,14 +251,18 @@ export function createConfigWorkspaceView({
300
251
  }
301
252
  }
302
253
 
254
+ function currentSummary() {
255
+ if (state.activeCategory === "plugins") {
256
+ return pluginManagement?.summary?.() ?? {
257
+ label: "Plugins summary", items: [{ label: "Plugins", value: "Not loaded" }],
258
+ };
259
+ }
260
+ if (state.activeCategory === "operations") return getOperationsSummary();
261
+ return modelSummary(state, hasPendingFileChanges);
262
+ }
263
+
303
264
  function syncDashboardSummary() {
304
- const status = dom.configDashboard.querySelector(
305
- "[data-config-summary-status]",
306
- );
307
- if (!status) return;
308
- const count = dirtyFiles().length;
309
- status.textContent = configChangeSummary(count);
310
- status.classList.toggle("dirty", count > 0);
265
+ syncConfigurationSummary(dom.configDashboard, currentSummary());
311
266
  }
312
267
 
313
268
  function syncRawControls(options = {}) {
@@ -365,6 +320,7 @@ export function createConfigWorkspaceView({
365
320
  renderConfigDashboard,
366
321
  setWorkspaceStatus,
367
322
  syncDashboardInteractivity,
323
+ syncDashboardSummary,
368
324
  syncDirtyPresentation,
369
325
  };
370
326
  }
@@ -1,3 +1,4 @@
1
+ import { createModelPluginViewState } from "./config-workspace/model-plugin-view-state.js";
1
2
  import { createConfigCalibrationDisclosure } from "./config-workspace/calibration-disclosure.js";
2
3
  import { createConfigDashboardRendering } from "./config-workspace/dashboard-rendering.js";
3
4
  import { createConfigFieldRendering } from "./config-workspace/field-rendering.js";
@@ -22,10 +23,12 @@ export {
22
23
  export function createConfigWorkspace({
23
24
  dom,
24
25
  loadDashboard,
26
+ loadModelPlugins,
25
27
  saveFile,
26
28
  memorySetup,
27
29
  memoryManagement,
28
30
  pluginManagement,
31
+ getOperationsSummary,
29
32
  onAddModel,
30
33
  onRemoveModel,
31
34
  onNavigationChange = () => {},
@@ -35,6 +38,7 @@ export function createConfigWorkspace({
35
38
  }) {
36
39
  const workspaceModel = createConfigWorkspaceModel();
37
40
  const { state } = workspaceModel;
41
+ const modelPluginViewState = createModelPluginViewState(dom.configDashboard);
38
42
  const calibrationDisclosure = createConfigCalibrationDisclosure({
39
43
  state,
40
44
  root: dom.configDashboard,
@@ -61,6 +65,7 @@ export function createConfigWorkspace({
61
65
  });
62
66
 
63
67
  const modelRendering = createConfigModelRendering({
68
+ modelPluginViewState,
64
69
  state,
65
70
  calibrationProfileLabel: fieldRendering.calibrationProfileLabel,
66
71
  configFileKey: workspaceModel.configFileKey,
@@ -87,6 +92,7 @@ export function createConfigWorkspace({
87
92
  });
88
93
 
89
94
  const workspaceView = createConfigWorkspaceView({
95
+ modelPluginViewState,
90
96
  onNavigationChange: () => {
91
97
  navigationRevision += 1;
92
98
  onNavigationChange();
@@ -95,11 +101,10 @@ export function createConfigWorkspace({
95
101
  dom,
96
102
  eventTarget,
97
103
  pluginManagement,
104
+ getOperationsSummary,
98
105
  configFileEntries: workspaceModel.configFileEntries,
99
106
  configFileKey: workspaceModel.configFileKey,
100
- countObjectKeys: fieldRendering.countObjectKeys,
101
107
  dashboardIsBusy: workspaceModel.dashboardIsBusy,
102
- dirtyFiles: workspaceModel.dirtyFiles,
103
108
  ensureRawSelection: workspaceModel.ensureRawSelection,
104
109
  fileStatusText: fieldRendering.fileStatusText,
105
110
  hasPendingFileChanges: workspaceModel.hasPendingFileChanges,
@@ -115,6 +120,7 @@ export function createConfigWorkspace({
115
120
  });
116
121
 
117
122
  const workspaceMutations = createConfigWorkspaceMutations({
123
+ modelPluginViewState,
118
124
  state,
119
125
  dom,
120
126
  confirmDiscard,
@@ -137,6 +143,7 @@ export function createConfigWorkspace({
137
143
  state,
138
144
  dom,
139
145
  loadDashboard,
146
+ loadModelPlugins,
140
147
  saveFile,
141
148
  memorySetup,
142
149
  memoryManagement,
@@ -160,6 +167,7 @@ export function createConfigWorkspace({
160
167
  });
161
168
 
162
169
  const workspaceEvents = createConfigWorkspaceEvents({
170
+ modelPluginViewState,
163
171
  onAddModel,
164
172
  onRemoveModel,
165
173
  state,
@@ -190,6 +198,7 @@ export function createConfigWorkspace({
190
198
 
191
199
  return {
192
200
  activeCategory: () => state.activeCategory,
201
+ syncSummary: workspaceView.syncDashboardSummary,
193
202
  setActive: calibrationDisclosure.setActive,
194
203
  setWorkspace: (workspace) => {
195
204
  const category = configurationCategoryForWorkspace(workspace);
@@ -81,6 +81,8 @@ export function createConversationView({
81
81
  if (viewState.followMessages) scrollToEnd();
82
82
  },
83
83
  });
84
+ let historyPager;
85
+ let holdingPosition = false;
84
86
  const viewState = {
85
87
  followMessages: true,
86
88
  messageRenderTimer: 0,
@@ -92,7 +94,7 @@ export function createConversationView({
92
94
  function updateJumpToLatest() {
93
95
  const hasOverflow =
94
96
  dom.messagesList.scrollHeight > dom.messagesList.clientHeight + 24;
95
- dom.jumpToLatestButton.hidden = viewState.followMessages || !hasOverflow;
97
+ dom.jumpToLatestButton.hidden = !historyPager?.hasNewer() && (viewState.followMessages || !hasOverflow);
96
98
  }
97
99
 
98
100
  function scrollToEnd() {
@@ -246,7 +248,7 @@ export function createConversationView({
246
248
  );
247
249
  const previousScrollTop = dom.messagesList.scrollTop;
248
250
  const shouldFollow =
249
- viewState.followMessages || isNearScrollEnd(dom.messagesList);
251
+ !holdingPosition && !historyPager?.hasNewer() && (viewState.followMessages || isNearScrollEnd(dom.messagesList));
250
252
  const messages = preserveMessageHistory ? getMessages() : projectApprovalContinuations(getMessages());
251
253
  conversationReasoning.beginRender(messages);
252
254
  messageLinkPreviews.reset();
@@ -265,7 +267,12 @@ export function createConversationView({
265
267
  for (const pendingApproval of getPendingApprovals()) {
266
268
  dom.messagesList.appendChild(createApprovalCard(pendingApproval));
267
269
  }
268
- if (scrollBehavior) return scrollBehavior.afterRender();
270
+ historyPager?.renderControls(dom.messagesList);
271
+ if (scrollBehavior) {
272
+ scrollBehavior.afterRender();
273
+ if (historyPager?.hasNewer()) dom.jumpToLatestButton.hidden = false;
274
+ return;
275
+ }
269
276
  if (shouldFollow) {
270
277
  scrollToEnd();
271
278
  } else {
@@ -303,7 +310,23 @@ export function createConversationView({
303
310
  viewState.thinkingRenderTimer = 0;
304
311
  }
305
312
 
313
+ function preserveScroll(change) {
314
+ const root = dom.messagesList;
315
+ const bounds = root.getBoundingClientRect();
316
+ const anchor = [...root.querySelectorAll("[data-message-id]")].find((node) => node.getBoundingClientRect().bottom > bounds.top);
317
+ const id = anchor?.dataset.messageId;
318
+ const offset = anchor?.getBoundingClientRect().top ?? 0;
319
+ const previousTop = root.scrollTop;
320
+ holdingPosition = true; viewState.followMessages = false; viewState.scrollSettleVersion += 1;
321
+ change();
322
+ const restored = [...root.querySelectorAll("[data-message-id]")].find((node) => node.dataset.messageId === id);
323
+ root.scrollTop = restored ? root.scrollTop + restored.getBoundingClientRect().top - offset : previousTop;
324
+ scrollBehavior?.preservePosition?.();
325
+ updateJumpToLatest();
326
+ }
327
+
306
328
  function reset() {
329
+ holdingPosition = false;
307
330
  filePreview.reset();
308
331
  viewState.followMessages = true;
309
332
  viewState.scrollSettleVersion += 1;
@@ -318,19 +341,27 @@ export function createConversationView({
318
341
  messageLinkPreviews.reset();
319
342
  }
320
343
 
344
+ function jumpToLatest() {
345
+ if (!historyPager?.hasNewer()) { scrollToEnd(); return; }
346
+ void historyPager.latest().then(scrollToEnd).catch(() => notify("Could not load latest messages", "failed"));
347
+ }
348
+
321
349
  function bind() {
322
350
  if (viewState.bound) return;
323
351
  viewState.bound = true;
324
- dom.jumpToLatestButton.addEventListener("click", scrollToEnd);
352
+ dom.jumpToLatestButton.addEventListener("click", jumpToLatest);
325
353
  dom.messagesList.addEventListener("scroll", () => {
354
+ holdingPosition = false;
326
355
  if (scrollBehavior) return;
327
- viewState.followMessages = isNearScrollEnd(dom.messagesList);
356
+ viewState.followMessages = !historyPager?.hasNewer() && isNearScrollEnd(dom.messagesList);
328
357
  if (!viewState.followMessages) viewState.scrollSettleVersion += 1;
329
358
  updateJumpToLatest();
330
359
  });
331
360
  }
332
361
 
333
362
  return {
363
+ preserveScroll,
364
+ setHistoryPager: (pager) => { historyPager = pager; },
334
365
  setWorkspace: filePreview.setWorkspace,
335
366
  closeFilePreview: filePreview.reset,
336
367
  bind,
@@ -35,6 +35,7 @@ function unreadAvailabilityNotice({ conversations, hasUnavailableReadState }) {
35
35
 
36
36
  export function renderDashboardConversations({
37
37
  sessions = [],
38
+ overview,
38
39
  loading = false,
39
40
  error = "",
40
41
  }) {
@@ -43,7 +44,7 @@ export function renderDashboardConversations({
43
44
  recentConversations: conversations,
44
45
  unreadCount,
45
46
  hasUnavailableReadState,
46
- } = projection;
47
+ } = { ...projection, ...(overview ? { unreadCount: overview.unreadCount, hasUnavailableReadState: overview.hasUnavailableReadState } : {}) };
47
48
  const badge =
48
49
  unreadCount > 0 && !hasUnavailableReadState
49
50
  ? `<span class="home-unread-count" aria-label="${unreadCount} unread messages">${unreadCount}</span>`
@@ -104,7 +104,8 @@ export function createDashboardWorkspace({ root, actions, passiveLearning }) {
104
104
  updateLiveRegion(
105
105
  conversations,
106
106
  renderDashboardConversations({
107
- sessions: snapshot.sessions,
107
+ sessions: snapshot.sessionOverview?.sessions ?? snapshot.sessions,
108
+ overview: snapshot.sessionOverview,
108
109
  loading: snapshot.loadingSessions,
109
110
  error: snapshot.sessionsError,
110
111
  }),
@@ -14,7 +14,7 @@ export function createDailyReviewDialog({ container, onDecision, onDismiss }) {
14
14
  <p class="daily-review-error" role="alert" data-review-error hidden></p>
15
15
  <div class="daily-review-actions"><button type="button" data-review-delete>Delete memory</button>
16
16
  <button type="button" data-review-keep>Keep memory</button></div>
17
- <p class="daily-review-note">These memories are already saved. Keep marks them as reviewed in this browser.</p>
17
+ <p class="daily-review-note">These memories are already saved. Keep marks them as reviewed in this ABot installation.</p>
18
18
  <button type="button" class="daily-review-later" data-review-later>Not now</button>`;
19
19
  container.append(dialog);
20
20
  let returnFocus;
@@ -53,7 +53,7 @@ export function createDailyReviewDialog({ container, onDecision, onDismiss }) {
53
53
  dialog.querySelector("[data-review-error]").hidden = !error;
54
54
  dialog.querySelector(".daily-review-actions").hidden = !record;
55
55
  for (const button of dialog.querySelectorAll(".daily-review-actions button")) button.disabled = busy;
56
- dialog.querySelector("[data-review-delete]").textContent = busy ? "Deleting…" : "Delete memory";
56
+ dialog.querySelector("[data-review-delete]").textContent = busy ? "Saving…" : "Delete memory";
57
57
  const later = dialog.querySelector("[data-review-later]");
58
58
  later.textContent = record ? "Not now" : "Done";
59
59
  if (hasReviewLoadError) later.textContent = "Close";
@@ -5,14 +5,14 @@ import { createHomeGuidancePreferences } from "../../services/home-guidance-pref
5
5
  import { createDailyMemoryReview } from "../../controllers/daily-memory-review.js";
6
6
  import { createDailyReviewDialog } from "./daily-review.js";
7
7
  import { createDailyReviewEntry } from "./daily-review-entry.js";
8
+ import { workspaceStorage } from "../../services/workspace-state.js";
8
9
 
9
10
  export function createHomeGuidance({ container, homeRegion, client, getEnvironmentId,
10
11
  getLearningSnapshot, getConnectionState, supportsConnection, refreshConnection,
11
12
  onOpen, isRuntimeReady = () => true, storage }) {
12
13
  const documentRoot = container?.ownerDocument;
13
14
  if (!documentRoot) return { render() {}, dispose() {} };
14
- let preferenceStorage = storage;
15
- try { preferenceStorage ??= documentRoot.defaultView?.localStorage; } catch { /* Session-only preferences. */ }
15
+ const preferenceStorage = storage ?? workspaceStorage();
16
16
  const preferences = createHomeGuidancePreferences(preferenceStorage);
17
17
  const root = documentRoot.createElement("aside");
18
18
  root.className = "home-guidance";
@@ -42,16 +42,19 @@ export function createHomeGuidance({ container, homeRegion, client, getEnvironme
42
42
  });
43
43
  review = createDailyMemoryReview({ client, getEnvironmentId, preferences, render: (snapshot) => {
44
44
  dialog.render(snapshot);
45
- if (canOfferDailyReview(snapshot) && dialog.canOpen() && review.markOffered()) dialog.open();
45
+ if (canOfferDailyReview(snapshot) && dialog.canOpen()) void offerReview();
46
46
  renderSuggestion();
47
47
  } });
48
48
  root.querySelector("[data-guidance-open]").addEventListener("click", () => {
49
49
  if (root.hidden || !selected) return;
50
50
  onOpen(selected.id);
51
51
  });
52
- root.querySelector("[data-guidance-dismiss]").addEventListener("click", () => {
52
+ root.querySelector("[data-guidance-dismiss]").addEventListener("click", async () => {
53
53
  if (!selected) return;
54
- preferences.dismiss(environment, selected.id);
54
+ const target = environment;
55
+ try { await preferences.dismiss(environment, selected.id); }
56
+ catch { return; }
57
+ if (target !== environment || disposed) return;
55
58
  hiddenThisVisit = true;
56
59
  renderSuggestion();
57
60
  });
@@ -105,6 +108,14 @@ export function createHomeGuidance({ container, homeRegion, client, getEnvironme
105
108
  if (!visible || reviewDismissed || !snapshot.remaining) return false;
106
109
  return hasCurrentLearningActivity();
107
110
  }
111
+ async function offerReview() {
112
+ const target = environment;
113
+ try {
114
+ if (!await review.markOffered()) return;
115
+ if (target !== getEnvironmentId() || !canOfferDailyReview(review.snapshot())) return;
116
+ if (dialog.canOpen()) dialog.open();
117
+ } catch { /* The shared storage failure remains visible; no success is claimed. */ }
118
+ }
108
119
  async function openMemoryReview() {
109
120
  if (openingReview || !canReviewSavedMemories() || !dialog.canOpen()) return;
110
121
  const operation = revision;
@@ -115,7 +126,10 @@ export function createHomeGuidance({ container, homeRegion, client, getEnvironme
115
126
  if (disposed || operation !== revision || target !== getEnvironmentId()) return;
116
127
  openingReview = false;
117
128
  if (loadedReview && canReviewSavedMemories() && dialog.canOpen()) {
118
- review.markOffered();
129
+ try { await review.markOffered(); }
130
+ catch { return; }
131
+ if (disposed || operation !== revision || target !== getEnvironmentId()) return;
132
+ if (!canReviewSavedMemories() || !dialog.canOpen()) return;
119
133
  dialog.open();
120
134
  }
121
135
  renderSuggestion();
@@ -0,0 +1,53 @@
1
+ import { readSetupContextWindowFeedback } from "../runtime-setup/context-window-feedback.js";
2
+ import { MODEL_SETUP_ID } from "./rendering.js";
3
+
4
+ const CONTEXT_FIELD = '[data-runtime-setup-field="context-window"]';
5
+ const CONTEXT_ERROR_ID = `${MODEL_SETUP_ID}Error-context-window`;
6
+ const CONTEXT_HELP_ID = `${MODEL_SETUP_ID}Help-context-window`;
7
+
8
+ export function receiveModelContextWindowFeedback(state, error) {
9
+ if (state.busy !== "saving" || state.saved) return false;
10
+ if (error?.payload?.contextWindow?.profileId !== state.profileId)
11
+ return false;
12
+ const feedback = readSetupContextWindowFeedback(error);
13
+ if (!feedback) return false;
14
+ state.contextWindowFeedback = feedback;
15
+ state.step = 1;
16
+ state.error = "";
17
+ return true;
18
+ }
19
+
20
+ /** Remove only this feedback; preserve the draft and its secret input element. */
21
+ export function clearModelContextWindowFeedback(state, form) {
22
+ if (!state.contextWindowFeedback) return;
23
+ state.contextWindowFeedback = null;
24
+ const field = form.querySelector(CONTEXT_FIELD);
25
+ field?.removeAttribute("aria-invalid");
26
+ field?.setAttribute("aria-describedby", CONTEXT_HELP_ID);
27
+ field?.setAttribute("min", "1");
28
+ form.querySelector(`[id="${CONTEXT_ERROR_ID}"]`)?.remove();
29
+ }
30
+
31
+ export function renderModelContextWindowFeedback(state, form, restoreFocus) {
32
+ const feedback = state.contextWindowFeedback;
33
+ if (!feedback) return;
34
+ const field = form.querySelector(CONTEXT_FIELD);
35
+ if (!field) return;
36
+ field.setAttribute("aria-invalid", "true");
37
+ field.setAttribute(
38
+ "aria-describedby",
39
+ `${CONTEXT_HELP_ID} ${CONTEXT_ERROR_ID}`,
40
+ );
41
+ field.setAttribute("min", String(feedback.minimumTokens));
42
+ let message = form.querySelector(`[id="${CONTEXT_ERROR_ID}"]`);
43
+ if (!message) {
44
+ message = form.ownerDocument.createElement("small");
45
+ message.setAttribute("id", CONTEXT_ERROR_ID);
46
+ message.setAttribute("class", "runtime-setup-feedback error");
47
+ message.setAttribute("role", "alert");
48
+ field.parentElement.append(message);
49
+ }
50
+ message.textContent = feedback.message;
51
+ if (state.busy || state.step !== 1 || !restoreFocus) return;
52
+ field.focus();
53
+ }
@@ -1,3 +1,4 @@
1
+ import { receiveModelContextWindowFeedback } from "./context-window-feedback.js";
1
2
  import { selectedModelProvider } from "./validation.js";
2
3
  import {
3
4
  isDefinitiveModelSaveRejection,
@@ -97,7 +98,8 @@ export function createModelSaveFlow({
97
98
  if (credentialSaved)
98
99
  state.credentialSavedFor =
99
100
  selectedModelProvider(state)?.id || state.newProviderId;
100
- state.error = modelSaveErrorMessage(state, error);
101
+ if (!receiveModelContextWindowFeedback(state, error))
102
+ state.error = modelSaveErrorMessage(state, error);
101
103
  if (credentialSaved)
102
104
  state.error +=
103
105
  " Your API key was saved privately and will be reused on retry.";
@@ -19,6 +19,7 @@ export function modelSaveFailureMessage(state) {
19
19
 
20
20
  export function modelSaveErrorMessage(state, error) {
21
21
  const fallback = modelSaveFailureMessage(state);
22
+ if (error?.payload?.error === "context_window_too_small") return fallback;
22
23
  const detail = error?.payload?.message;
23
24
  if (!detail) return fallback;
24
25
  if (state.saved) return `${fallback} ${detail}`;
@@ -7,6 +7,10 @@ import {
7
7
  import { renderWizardProgress } from "../runtime-setup/wizard-shell.js";
8
8
  import { DEFAULT_OLLAMA_BASE_URL } from "../runtime-setup/validation.js";
9
9
  import { createSetupViewState } from "../runtime-setup/view-state.js";
10
+ import {
11
+ clearModelContextWindowFeedback,
12
+ renderModelContextWindowFeedback,
13
+ } from "./context-window-feedback.js";
10
14
  import { createModelSaveFlow } from "./save-flow.js";
11
15
  import {
12
16
  MODEL_SETUP_ID,
@@ -70,6 +74,7 @@ export function createModelSetupWizard({
70
74
  choice: "",
71
75
  model: "",
72
76
  contextWindowTokens: "",
77
+ contextWindowFeedback: null,
73
78
  profileId: "",
74
79
  profileEdited: false,
75
80
  newProviderId: "",
@@ -201,6 +206,11 @@ export function createModelSetupWizard({
201
206
  .querySelector(".runtime-setup-panel")
202
207
  .setAttribute("aria-busy", Boolean(state.busy).toString());
203
208
  viewState.restore({ focus, busy: Boolean(state.busy) });
209
+ renderModelContextWindowFeedback(
210
+ state,
211
+ modelForm,
212
+ viewState.canRestoreFocus(),
213
+ );
204
214
  }
205
215
 
206
216
  async function load() {
@@ -280,6 +290,7 @@ export function createModelSetupWizard({
280
290
  event.target.removeAttribute("aria-invalid");
281
291
  return;
282
292
  }
293
+ clearModelContextWindowFeedback(state, modelForm);
283
294
  state.saveOutcomeUncertain = false;
284
295
  const value = textOf(event.target.value);
285
296
  if (field === "model-id") {
@@ -315,6 +326,7 @@ export function createModelSetupWizard({
315
326
  )
316
327
  return;
317
328
  clearSecret();
329
+ clearModelContextWindowFeedback(state, modelForm);
318
330
  state.saveOutcomeUncertain = false;
319
331
  const providerChanged = state.choice !== event.target.value;
320
332
  if (providerChanged) state.model = "";