@abot-ai/runtime 1.7.0 → 1.8.1

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 (532) hide show
  1. package/README.md +216 -222
  2. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
  3. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  4. package/dist/src/capabilities/tool-types.d.ts +4 -0
  5. package/dist/src/cli/abot.js +2 -0
  6. package/dist/src/cli/host-companion-bundle.mjs +751 -333
  7. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  8. package/dist/src/computer-access/collection-consent.js +47 -0
  9. package/dist/src/computer-access/command-output-capture.d.ts +17 -6
  10. package/dist/src/computer-access/command-output-capture.js +134 -68
  11. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  12. package/dist/src/computer-access/command-output-protection.js +59 -0
  13. package/dist/src/computer-access/companion/command-output.d.ts +1 -0
  14. package/dist/src/computer-access/companion/command-output.js +23 -6
  15. package/dist/src/computer-access/companion/install-link-macos.js +2 -1
  16. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  17. package/dist/src/computer-access/companion/native-session.js +6 -2
  18. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  19. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  20. package/dist/src/computer-access/companion/observation-process.js +51 -25
  21. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  22. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  23. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  24. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  25. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  26. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  27. package/dist/src/computer-access/handlers.d.ts +2 -1
  28. package/dist/src/computer-access/handlers.js +79 -11
  29. package/dist/src/computer-access/host-observation.d.ts +3 -3
  30. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  31. package/dist/src/computer-access/native-observation-connection.js +78 -0
  32. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  33. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  34. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  35. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  36. package/dist/src/computer-access/observation-source.d.ts +6 -0
  37. package/dist/src/computer-access/observation-source.js +10 -0
  38. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  39. package/dist/src/computer-access/security/desktop-result.js +146 -0
  40. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  41. package/dist/src/computer-access/security/observed-error.js +10 -0
  42. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  43. package/dist/src/computer-access/security/secret-text.js +111 -0
  44. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  45. package/dist/src/computer-access/security/system-results.js +53 -0
  46. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  47. package/dist/src/computer-access/system-result-protection.js +1 -0
  48. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  49. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  50. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  51. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  52. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  53. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  54. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  55. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  56. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  57. package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
  58. package/dist/src/model-gateway/protocol/message-contract.js +1 -1
  59. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  60. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  61. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  62. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  63. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  64. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  65. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  66. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  67. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  68. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  69. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  70. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  71. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  72. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  73. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  74. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  75. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  76. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  77. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  78. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  79. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  80. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  81. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  82. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  83. package/dist/src/model-gateway/server/chat-handler.js +5 -7
  84. package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
  85. package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
  86. package/dist/src/model-gateway/server.js +5 -1
  87. package/dist/src/plugin-contract/index.d.ts +1 -0
  88. package/dist/src/plugin-contract/index.js +1 -0
  89. package/dist/src/plugin-contract/manifest.d.ts +2 -0
  90. package/dist/src/plugin-contract/manifest.js +1 -0
  91. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  92. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  93. package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
  94. package/dist/src/plugin-sdk/computer-access.js +1 -0
  95. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  96. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  97. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  98. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  99. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  100. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  101. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  102. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  103. package/dist/src/plugin-sdk/files.js +4 -0
  104. package/dist/src/plugin-sdk/index.d.ts +1 -0
  105. package/dist/src/plugin-sdk/index.js +1 -0
  106. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  107. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  108. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  109. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  110. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  111. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  112. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  113. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  114. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  115. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
  116. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
  117. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
  118. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  119. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  120. package/dist/src/runtime/capabilities/tool-availability.js +6 -0
  121. package/dist/src/runtime/context/capability-brief.d.ts +2 -2
  122. package/dist/src/runtime/context/capability-brief.js +3 -3
  123. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
  124. package/dist/src/runtime/context/capability-descriptions.js +57 -20
  125. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  126. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
  127. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
  128. package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
  129. package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
  130. package/dist/src/runtime/long-term-memory/projection.js +1 -1
  131. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
  132. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
  133. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
  134. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
  135. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
  136. package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
  137. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
  138. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
  139. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
  140. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  141. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
  142. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
  143. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  144. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
  145. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
  146. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
  147. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  148. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  149. package/dist/src/runtime/passive-learning/service.js +2 -3
  150. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  151. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  152. package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
  153. package/dist/src/runtime/plugins/installation/package.js +2 -0
  154. package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
  155. package/dist/src/runtime/plugins/loader.js +24 -14
  156. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  157. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  158. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  159. package/dist/src/runtime/plugins/manifest-validator.js +9 -1
  160. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  161. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  162. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  163. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  164. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  165. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  166. package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
  167. package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
  168. package/dist/src/runtime/request/prepared-execution.js +3 -0
  169. package/dist/src/runtime/request/root-contract.d.ts +2 -0
  170. package/dist/src/runtime/request/root-execution-kernel.js +1 -0
  171. package/dist/src/runtime/request/runner.js +9 -3
  172. package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
  173. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  174. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  175. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
  176. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
  177. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
  178. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
  179. package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
  180. package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
  181. package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
  182. package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
  183. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
  184. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
  185. package/dist/src/runtime/steps/execution-agent/format.js +4 -3
  186. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
  187. package/dist/src/runtime/steps/execution-agent/input.js +22 -1
  188. package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
  189. package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
  190. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  191. package/dist/src/runtime/steps/execution-agent/prompt.js +7 -8
  192. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  193. package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
  194. package/dist/src/runtime/steps/execution-agent/run.js +4 -1
  195. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
  196. package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
  197. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  198. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  199. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  200. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  201. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
  202. package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
  203. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
  204. package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
  205. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
  206. package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
  207. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
  208. package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
  209. package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
  210. package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
  211. package/dist/src/sessions/durable-session-commit.js +3 -3
  212. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  213. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  214. package/dist/src/sessions/session-store.js +3 -3
  215. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  216. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  217. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  218. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  219. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  220. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  221. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  222. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  223. package/dist/src/shared/windows-job-object.d.ts +2 -0
  224. package/dist/src/shared/windows-job-object.js +66 -0
  225. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  226. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  227. package/dist/src/web-ui/app/app-state.js +0 -7
  228. package/dist/src/web-ui/app/app.js +54 -156
  229. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  230. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  231. package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
  232. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  233. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
  234. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
  235. package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
  236. package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
  237. package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
  238. package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
  239. package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
  240. package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
  241. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  242. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  243. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  244. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  245. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  246. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  247. package/dist/src/web-ui/app/components/operations-summary.js +2 -1
  248. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  249. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  250. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  251. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  252. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  253. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  254. package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
  255. package/dist/src/web-ui/app/components/passive-learning/home.js +11 -3
  256. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  257. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  258. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  259. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  260. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
  261. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  262. package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
  263. package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
  264. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  265. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  266. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
  267. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  268. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  269. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  270. package/dist/src/web-ui/app/components/schedules/details.js +3 -2
  271. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  272. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  273. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  274. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  275. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
  276. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  277. package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
  278. package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
  279. package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
  280. package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
  281. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  282. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  283. package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
  284. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
  285. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  286. package/dist/src/web-ui/app/computer-access-feature.js +13 -1
  287. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  288. package/dist/src/web-ui/app/configuration-feature.js +11 -1
  289. package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
  290. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  291. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  292. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  293. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  294. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  295. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  296. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  297. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  298. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  299. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  300. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  301. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  302. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  303. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  304. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  305. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  306. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  307. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  308. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  309. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  310. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
  311. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
  312. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
  313. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  314. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  315. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  316. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  317. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  318. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  319. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  320. package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
  321. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  322. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  323. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  324. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  325. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  326. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  327. package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
  328. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  329. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
  330. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
  331. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  332. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  333. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  334. package/dist/src/web-ui/app/dashboard-feature.js +12 -2
  335. package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
  336. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  337. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  338. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  339. package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
  340. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  341. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  342. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  343. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  344. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  345. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  346. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  347. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
  348. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
  349. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  350. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  351. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  352. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  353. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  354. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  355. package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
  356. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  357. package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
  358. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
  359. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  360. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  361. package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
  362. package/dist/src/web-ui/app/styles.css +3 -0
  363. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  364. package/dist/src/web-ui/client-state/contracts.js +13 -0
  365. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  366. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  367. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  368. package/dist/src/web-ui/client-state/preferences.js +84 -0
  369. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  370. package/dist/src/web-ui/client-state/queue.js +43 -0
  371. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  372. package/dist/src/web-ui/client-state/routes.js +58 -0
  373. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  374. package/dist/src/web-ui/client-state/store.js +88 -0
  375. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
  376. package/dist/src/web-ui/local-runtime/http.js +11 -2
  377. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  378. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  379. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  380. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  381. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  382. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  383. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  384. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  385. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  386. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  387. package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
  388. package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
  389. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  390. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  391. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
  392. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
  393. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  394. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  395. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  396. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  397. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  398. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  399. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  400. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  401. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  402. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  403. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  404. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  405. package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
  406. package/dist/src/web-ui/plugin-management-catalog.js +3 -1
  407. package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
  408. package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
  409. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  410. package/dist/src/web-ui/server-readiness.js +36 -0
  411. package/dist/src/web-ui/server.d.ts +2 -0
  412. package/dist/src/web-ui/server.js +23 -1
  413. package/dist/src/web-ui/system-host-service.js +13 -2
  414. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  415. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  416. package/docs/installation.md +44 -5
  417. package/docs/plugins.md +174 -28
  418. package/docs/tool-execution-result-evidence-contract.md +57 -0
  419. package/docs/windows-companion-store.md +5 -0
  420. package/package.json +4 -2
  421. package/plugins/capability-brief/plugin.json +5 -1
  422. package/plugins/code-outline/README.md +20 -0
  423. package/plugins/code-outline/plugin.json +2 -1
  424. package/plugins/code-outline/source/index.ts +16 -20
  425. package/plugins/code-outline/source/read-failure.ts +40 -0
  426. package/plugins/code-outline/src/index.cjs +614 -29
  427. package/plugins/document-reader/README.md +33 -0
  428. package/plugins/document-reader/plugin.json +2 -1
  429. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  430. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  431. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  432. package/plugins/document-reader/source/pdf-process.ts +207 -0
  433. package/plugins/document-reader/source/pdf-result.ts +79 -0
  434. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  435. package/plugins/document-reader/source/pdf.ts +4 -1
  436. package/plugins/document-reader/source/read-failure.ts +37 -0
  437. package/plugins/document-reader/source/reader.ts +3 -19
  438. package/plugins/document-reader/src/index.cjs +995 -211
  439. package/plugins/exec/README.md +19 -0
  440. package/plugins/exec/plugin.json +4 -3
  441. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  442. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  443. package/plugins/exec/source/filesystem-observer.ts +8 -79
  444. package/plugins/exec/source/output-files.ts +12 -6
  445. package/plugins/exec/source/paths.ts +3 -1
  446. package/plugins/exec/source/process-manager.ts +8 -24
  447. package/plugins/exec/source/shell-platform.ts +19 -3
  448. package/plugins/exec/source/shell-process.ts +55 -0
  449. package/plugins/exec/source/windows-job-source.ts +1 -0
  450. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  451. package/plugins/exec/src/index.cjs +252 -96
  452. package/plugins/filesystem/README.md +65 -0
  453. package/plugins/filesystem/plugin.json +7 -3
  454. package/plugins/filesystem/source/atomic-write.ts +2 -0
  455. package/plugins/filesystem/source/bounded-io.ts +80 -306
  456. package/plugins/filesystem/source/directory-sample.ts +2 -0
  457. package/plugins/filesystem/source/errors.ts +14 -0
  458. package/plugins/filesystem/source/file-observation.ts +151 -0
  459. package/plugins/filesystem/source/file-version.ts +41 -0
  460. package/plugins/filesystem/source/index.ts +6 -0
  461. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  462. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  463. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  464. package/plugins/filesystem/source/windows/operations.ts +197 -0
  465. package/plugins/filesystem/source/windows/process.ts +214 -0
  466. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  467. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  468. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  469. package/plugins/filesystem/source/windows/source.ts +42 -0
  470. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  471. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  472. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  473. package/plugins/filesystem/src/index.cjs +1208 -322
  474. package/plugins/json-inspector/README.md +18 -0
  475. package/plugins/json-inspector/plugin.json +2 -1
  476. package/plugins/json-inspector/source/index.ts +16 -19
  477. package/plugins/json-inspector/source/read-failure.ts +42 -0
  478. package/plugins/json-inspector/src/index.cjs +612 -27
  479. package/plugins/local-search/README.md +29 -0
  480. package/plugins/local-search/plugin.json +2 -1
  481. package/plugins/local-search/source/errors.ts +2 -0
  482. package/plugins/local-search/source/paths.ts +3 -0
  483. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  484. package/plugins/local-search/source/ripgrep.ts +3 -3
  485. package/plugins/local-search/source/windows-authority.ts +99 -0
  486. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  487. package/plugins/local-search/source/windows-search-process.ts +91 -0
  488. package/plugins/local-search/source/windows-search-script.ts +52 -0
  489. package/plugins/local-search/src/index.cjs +595 -26
  490. package/plugins/memory/plugin.json +5 -1
  491. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  492. package/plugins/memory/source/lock-owner-file.ts +71 -0
  493. package/plugins/memory/source/lock-path-observation.ts +26 -0
  494. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  495. package/plugins/memory/source/store-lock.ts +12 -7
  496. package/plugins/memory/source/store.ts +3 -2
  497. package/plugins/memory/src/index.cjs +174 -25
  498. package/plugins/project-orientation/README.md +23 -0
  499. package/plugins/project-orientation/plugin.json +2 -1
  500. package/plugins/project-orientation/source/index.ts +12 -9
  501. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  502. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  503. package/plugins/project-orientation/source/tree.ts +6 -0
  504. package/plugins/project-orientation/src/index.cjs +647 -31
  505. package/plugins/system/README.md +51 -15
  506. package/plugins/system/plugin.json +6 -2
  507. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  508. package/plugins/system/source/command-working-directory.ts +47 -0
  509. package/plugins/system/source/computer/handlers.ts +13 -9
  510. package/plugins/system/source/computer/observation-result.ts +10 -5
  511. package/plugins/system/source/computer/request-computers.ts +10 -3
  512. package/plugins/system/source/computer/request-modules.ts +3 -6
  513. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  514. package/plugins/system/source/host-dispatch.ts +18 -2
  515. package/plugins/system/source/index.ts +5 -3
  516. package/plugins/system/source/local-command-output-retention.ts +16 -0
  517. package/plugins/system/source/local-command-output.ts +16 -8
  518. package/plugins/system/source/request-system-modules.ts +12 -2
  519. package/plugins/system/source/request-target-snapshot.ts +2 -1
  520. package/plugins/system/source/security/desktop-result.ts +177 -0
  521. package/plugins/system/source/security/observed-error.ts +10 -0
  522. package/plugins/system/source/security/secret-text.ts +118 -0
  523. package/plugins/system/source/security/system-results.ts +62 -0
  524. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  525. package/plugins/system/src/index.cjs +837 -151
  526. package/plugins/system-probe/plugin.json +9 -3
  527. package/plugins/system-probe/source/disk-path.ts +8 -0
  528. package/plugins/system-probe/source/index.ts +10 -5
  529. package/plugins/system-probe/source/machine-load.ts +33 -0
  530. package/plugins/system-probe/source/metrics.ts +6 -8
  531. package/plugins/system-probe/src/index.cjs +49 -16
  532. package/plugins/web/plugin.json +5 -1
@@ -0,0 +1,93 @@
1
+ import { connectionDescription, connectionStatus, connectionTitle, hostSetupIsReady } from "./rendering.js";
2
+ import { isNativeWindowsLocalAccess, nativeWindowsAccessPresentation } from "./native-windows-access.js";
3
+ import { computerWidgetPreview } from "./home-widget-permission-preview.js";
4
+ import { macPermissionSummary, permissionSummary } from "./macos-permission-rendering.js";
5
+ import { permissionsMatchConnection, permissionsMatchNativeOwner } from "./macos-permission-scopes.js";
6
+ import { storeConnectionStage, storeConnectionDisplayContent, windowsStorePanelIsAvailable } from "./windows-store-setup.js";
7
+
8
+ function currentMacPermissionStates(state) {
9
+ const snapshot = state.snapshot;
10
+ const states = [];
11
+ if (permissionsMatchConnection(state.macPermissions, snapshot))
12
+ states.push(permissionSummary(state.macPermissions));
13
+ if (permissionsMatchNativeOwner(state.nativeMacPermissions, snapshot, snapshot?.nativePermissions?.environmentId))
14
+ states.push(permissionSummary(state.nativeMacPermissions));
15
+ return states;
16
+ }
17
+
18
+ function hasComputerActionFailure(state) {
19
+ return Boolean(state.error || state.actionError || state.macPermissionError || state.nativeMacPermissionError);
20
+ }
21
+
22
+ function computerPermissionTone(state, permissionText) {
23
+ if (hasComputerActionFailure(state)) return "attention";
24
+ const status = connectionStatus(state.snapshot, state.statusUnavailable, state.busy);
25
+ if (["Paired · offline", "Update needed", "Computer access unavailable"].includes(status)) return "attention";
26
+ const states = currentMacPermissionStates(state);
27
+ if (states.includes("action needed")) return "attention";
28
+ // A connected Mac with unmeasured or unavailable permissions is not all-clear.
29
+ if (permissionText) return "neutral";
30
+ if (hostSetupIsReady(state.snapshot)) return "success";
31
+ return "neutral";
32
+ }
33
+
34
+ function windowsStoreTone(state, stage) {
35
+ if (hasComputerActionFailure(state)) return "attention";
36
+ if (state.busy) return "neutral";
37
+ const tones = { ready: "success", reconnect: "attention", expired: "attention", "confirm-repair": "attention", preparing: "active", repairing: "active", waiting: "active", open: "active" };
38
+ return tones[stage] || "neutral";
39
+ }
40
+
41
+ function nativeWindowsTone(state, status) {
42
+ if (hasComputerActionFailure(state)) return "attention";
43
+ if (status === "Check needed") return "attention";
44
+ return "neutral";
45
+ }
46
+
47
+ function windowsStoreSummary(state) {
48
+ const snapshot = state.snapshot;
49
+ const invitation = state.windowsStoreInvitation;
50
+ const stage = storeConnectionStage(snapshot, invitation, state.windowsStoreAttempt);
51
+ const content = storeConnectionDisplayContent(stage, snapshot, invitation, state.busy, state.statusUnavailable);
52
+ return {
53
+ title: snapshot.identity?.name || content.step,
54
+ detail: state.error || state.actionError || state.message || content.copy,
55
+ status: content.status,
56
+ tone: windowsStoreTone(state, stage),
57
+ };
58
+ }
59
+
60
+ /** Connection and process-bound permission receipts stay separate facts. */
61
+ export function computerAccessWidgetSummary(state = {}, supported = true) {
62
+ const input = { ...state, supported };
63
+ if (!supported)
64
+ return { title: "Computer connection unavailable", detail: "Computer access setup requires the local Runtime backend.", status: "Unavailable", tone: "neutral" };
65
+ if (state.statusUnavailable)
66
+ return { title: "Check your computer connection", detail: "The current connection status could not be checked.", status: "Status unavailable", tone: "attention" };
67
+ if (!state.snapshot)
68
+ return { title: "Checking this computer…", detail: "", status: "Checking", tone: "neutral" };
69
+ if (isNativeWindowsLocalAccess(state.snapshot)) {
70
+ const presentation = nativeWindowsAccessPresentation(input);
71
+ return {
72
+ title: presentation.title,
73
+ detail: state.error || state.actionError || state.message || presentation.description,
74
+ status: presentation.status,
75
+ tone: nativeWindowsTone(state, presentation.status),
76
+ };
77
+ }
78
+ if (windowsStorePanelIsAvailable(state.snapshot)) return windowsStoreSummary(state);
79
+ const permissionText = macPermissionSummary(state.snapshot, state.macPermissions, state.nativeMacPermissions);
80
+ const title = state.snapshot.identity?.name || connectionTitle(input);
81
+ if (state.busy)
82
+ return { title, detail: "Waiting for the current connection status…", status: "Checking", tone: "neutral" };
83
+ const feedback = state.error || state.actionError || state.macPermissionError || state.nativeMacPermissionError || state.message;
84
+ const status = connectionStatus(state.snapshot, state.statusUnavailable, state.busy);
85
+ const preview = feedback ? null : computerWidgetPreview(state, title, status);
86
+ return {
87
+ title,
88
+ detail: feedback || permissionText || connectionDescription(input),
89
+ status,
90
+ tone: computerPermissionTone(state, permissionText),
91
+ ...(preview ? { preview } : {}),
92
+ };
93
+ }
@@ -1,12 +1,12 @@
1
1
  import { escapeHtml } from "../../lib/text-format.js";
2
2
  import { canCheckMacPermissions, canCheckNativePermissions, permissionsMatchConnection, permissionsMatchNativeOwner } from "./macos-permission-scopes.js";
3
3
 
4
- function hasNativePermissionSurface(snapshot) {
4
+ export function hasNativePermissionSurface(snapshot) {
5
5
  if (snapshot?.identity?.os === "macos") return true;
6
6
  if (!snapshot?.nativePermissions) return false;
7
7
  return snapshot.nativePermissions.reason !== "native_macos_unavailable";
8
8
  }
9
- function permissionSummary(receipt) {
9
+ export function permissionSummary(receipt) {
10
10
  if (!receipt) return "not checked";
11
11
  if (receipt.permissions.screenRecording !== "granted") return "action needed";
12
12
  if (receipt.permissions.accessibility !== "granted") return "action needed";
@@ -6,6 +6,7 @@ function hasManagedMacPermissionRuntime(version) {
6
6
  }
7
7
 
8
8
  export function macCompanionPermissionPath(snapshot) {
9
+ if (snapshot?.collectionSource?.mode === "native") return "";
9
10
  if (!snapshot?.paired) return "";
10
11
  if (snapshot.identity?.os !== "macos") return "";
11
12
  if (!hasManagedMacPermissionRuntime(snapshot.companion?.installedVersion))
@@ -20,6 +21,7 @@ export function macCompanionPermissionPath(snapshot) {
20
21
 
21
22
  /** The managed companion keeps its macOS permission subject at one private path. */
22
23
  export function renderMacPermissionGuide(snapshot) {
24
+ if (snapshot?.collectionSource?.mode === "native") return "";
23
25
  if (!snapshot?.paired) return "";
24
26
  if (snapshot.identity?.os !== "macos") return "";
25
27
  const version = snapshot.companion?.installedVersion;
@@ -0,0 +1,50 @@
1
+ import { renderConnectionCard } from "./connection-card.js";
2
+
3
+ /** The server's native Windows facts identify local access, independently of tool readiness. */
4
+ export function isNativeWindowsLocalAccess(snapshot) {
5
+ if (snapshot?.collectionSource?.mode !== "native") return false;
6
+ return snapshot.collectionSource.platform === "windows";
7
+ }
8
+
9
+ export function shouldRenderNativeWindowsAccess(input) {
10
+ if (!input.supported) return false;
11
+ return isNativeWindowsLocalAccess(input.snapshot);
12
+ }
13
+
14
+ export function nativeWindowsAccessPresentation(input) {
15
+ if (input.statusUnavailable) return {
16
+ title: "Check Windows access", status: "Status unavailable",
17
+ description: "The current local access status could not be checked. Refresh to try again.",
18
+ };
19
+ if (input.busy) return {
20
+ title: "Checking Windows access…", status: "Checking",
21
+ description: "Waiting for the current local access status…",
22
+ };
23
+ if (input.snapshot?.readiness?.directAccessReady === false) return {
24
+ title: "Check local Windows access", status: "Check needed",
25
+ description: "ABot runs directly on Windows, but direct commands could not be verified. Refresh to check again. Companion pairing is not required for local tools.",
26
+ };
27
+ return {
28
+ title: "Windows access is local", status: "Local",
29
+ description: "ABot runs directly on this Windows computer. Local tools do not need Companion pairing. Compatible plugins and your permission settings determine which actions are available.",
30
+ };
31
+ }
32
+
33
+ function canCompactNativeWindowsAccess(input) {
34
+ if (!input.compact) return false;
35
+ if (input.statusUnavailable || input.busy) return false;
36
+ if (input.error || input.message) return false;
37
+ return input.snapshot?.readiness?.directAccessReady !== false;
38
+ }
39
+
40
+ export function renderNativeWindowsAccess(input) {
41
+ const presentation = nativeWindowsAccessPresentation(input);
42
+ const compact = canCompactNativeWindowsAccess(input);
43
+ return renderConnectionCard({
44
+ ...presentation, ready: false, compact, disabled: input.busy,
45
+ actions: '<button type="button" class="system-host-card-secondary" data-system-host-refresh' +
46
+ (input.busy ? " disabled" : "") + '>Refresh status</button>',
47
+ error: input.error, message: input.message,
48
+ attributes: "data-system-host-native-windows",
49
+ });
50
+ }
@@ -1,6 +1,7 @@
1
1
  import { escapeHtml } from "../../lib/text-format.js";
2
2
  import { renderWindowsStoreSetup, windowsStorePanelIsAvailable } from "./windows-store-setup.js";
3
3
  import { renderConnectionCard, renderComputerMetadata } from "./connection-card.js";
4
+ import { shouldRenderNativeWindowsAccess, renderNativeWindowsAccess } from "./native-windows-access.js";
4
5
  import { macPermissionSummary, renderMacPermissionPreparation } from "./macos-permission-rendering.js";
5
6
  import {
6
7
  renderMacSetupAction,
@@ -22,7 +23,7 @@ function pairedCompanionIsOffline(snapshot) {
22
23
  function hasDirectAccess(snapshot) {
23
24
  return ["native", "wsl_interop"].includes(snapshot?.readiness?.route);
24
25
  }
25
- function connectionStatus(snapshot, statusUnavailable, busy) {
26
+ export function connectionStatus(snapshot, statusUnavailable, busy) {
26
27
  if (statusUnavailable) return "Status unavailable";
27
28
  if (busy || !snapshot) return "Checking";
28
29
  if (hostSetupIsReady(snapshot)) return snapshot.identity?.os === "macos" ? "Connected" : "Ready";
@@ -41,7 +42,7 @@ function readyDescription(snapshot) {
41
42
  return "Direct commands are available. No extra installation is needed for direct commands.";
42
43
  return "You can use computer tools from your ABot chat. Permissions and Spark collection are managed separately.";
43
44
  }
44
- function connectionTitle({ snapshot, supported, statusUnavailable, busy }) {
45
+ export function connectionTitle({ snapshot, supported, statusUnavailable, busy }) {
45
46
  if (!supported) return "Computer connection unavailable";
46
47
  if (statusUnavailable) return "Check your computer connection";
47
48
  if (busy || !snapshot) return "Checking this computer…";
@@ -54,7 +55,7 @@ function connectionTitle({ snapshot, supported, statusUnavailable, busy }) {
54
55
  if (platforms.length === 1 && platforms[0] === "linux") return "Connect your Linux computer";
55
56
  return "Connect your computer";
56
57
  }
57
- function connectionDescription({ snapshot, supported, statusUnavailable, busy }) {
58
+ export function connectionDescription({ snapshot, supported, statusUnavailable, busy }) {
58
59
  if (!supported) return "Computer access setup requires the local Runtime backend.";
59
60
  if (statusUnavailable) return "The current connection status could not be checked. Refresh to try again.";
60
61
  if (busy || !snapshot) return "Waiting for the current connection status…";
@@ -123,6 +124,8 @@ function canRenderCompactConnection(input) {
123
124
  return true;
124
125
  }
125
126
  export function renderSystemHostConnection(input) {
127
+ if (shouldRenderNativeWindowsAccess(input))
128
+ return renderNativeWindowsAccess(input);
126
129
  if (input.supported && windowsStorePanelIsAvailable(input.snapshot)) {
127
130
  return renderWindowsStoreSetup({
128
131
  snapshot: input.snapshot, invitation: input.windowsStoreInvitation,
@@ -41,7 +41,7 @@ function storeRepairConfirmationIsCurrent(snapshot, attempt) {
41
41
  return attempt?.phase === "confirm-repair";
42
42
  }
43
43
 
44
- function storeConnectionStage(snapshot, invitation, attempt) {
44
+ export function storeConnectionStage(snapshot, invitation, attempt) {
45
45
  if (snapshot?.readiness?.ready === true) return "ready";
46
46
  if (attempt?.phase === "repairing") return "repairing";
47
47
  if (storeRepairConfirmationIsCurrent(snapshot, attempt)) return "confirm-repair";
@@ -111,7 +111,7 @@ function connectionStageContent(stage, snapshot, invitation, disabled) {
111
111
  };
112
112
  }
113
113
 
114
- function storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable) {
114
+ export function storeConnectionDisplayContent(stage, snapshot, invitation, disabled, statusUnavailable) {
115
115
  if (statusUnavailable) return {
116
116
  status: "Status unavailable", step: "Check your computer connection",
117
117
  copy: "The current connection status could not be checked. Refresh to try again.",
@@ -0,0 +1,37 @@
1
+ export async function acknowledgeWorkspaceStorage(storage, documentRoot = document) {
2
+ if (storage.snapshot().introductionSeen) return;
3
+ const dialog = documentRoot.createElement("dialog");
4
+ dialog.className = "workspace-storage-notice";
5
+ dialog.innerHTML = `<h2>Your workspace settings stay with ABot</h2>
6
+ <p>Settings and queued messages are now saved with this ABot installation, across browsers and app restarts.</p>
7
+ <p>This is a one-time fresh start. Previous browser-only pins, archives, model choices, memory review markers and queued messages are not imported.</p>
8
+ <p>Your conversations, memories, configuration and read status are kept. Tool permissions start in <strong>Ask</strong>; you can change them in the composer.</p>
9
+ <p role="alert" hidden></p><button type="button" class="primary">Continue</button>`;
10
+ documentRoot.body.append(dialog);
11
+ dialog.addEventListener("cancel", (event) => event.preventDefault());
12
+ dialog.showModal();
13
+ await new Promise((resolve) => {
14
+ const button = dialog.querySelector("button");
15
+ button.addEventListener("click", async () => {
16
+ button.disabled = true;
17
+ try { await storage.execute({ kind: "introduction" }); dialog.close(); dialog.remove(); resolve(); }
18
+ catch (error) {
19
+ const notice = dialog.querySelector('[role="alert"]');
20
+ notice.textContent = `${error.message} Reload to try again.`;
21
+ notice.hidden = false;
22
+ }
23
+ });
24
+ });
25
+ }
26
+
27
+ export function showWorkspaceStorageFailure(error, documentRoot = document) {
28
+ let notice = documentRoot.querySelector("[data-workspace-storage-error]");
29
+ if (!notice) {
30
+ notice = documentRoot.createElement("div");
31
+ notice.dataset.workspaceStorageError = "";
32
+ notice.setAttribute("role", "alert");
33
+ notice.className = "workspace-storage-failure";
34
+ documentRoot.body.append(notice);
35
+ }
36
+ notice.textContent = `${error.message} Changes are not confirmed. Reload before sending more messages.`;
37
+ }
@@ -1,5 +1,6 @@
1
1
  import { createSystemHostConnectionManager } from "./components/system-host/manager.js";
2
2
  import { createSystemHostSetupNotice } from "./components/system-host/setup-notice.js";
3
+ import { computerAccessWidgetSummary } from "./components/system-host/home-widget-summary.js";
3
4
 
4
5
  /** One connection owner for configured Home and its shared chat notice. */
5
6
  export function createComputerAccessFeature({
@@ -7,11 +8,13 @@ export function createComputerAccessFeature({
7
8
  runtimeClient,
8
9
  getEnvironmentId = () => "",
9
10
  isComputerAccessAvailable = () => true,
11
+ compactHomeWidgets,
10
12
  onChange = () => {},
11
13
  }) {
12
14
  const documentRoot = dom.homeDashboardRoot?.ownerDocument;
13
15
  const root = documentRoot?.createElement("section");
14
16
  let notice;
17
+ let unregisterWidget = () => {};
15
18
  const connection = createSystemHostConnectionManager({
16
19
  documentRoot,
17
20
  compact: true,
@@ -27,6 +30,7 @@ export function createComputerAccessFeature({
27
30
  supportsConnection: () => runtimeClient.supportsSystemHostConnection(),
28
31
  onChange: () => {
29
32
  notice?.render();
33
+ compactHomeWidgets?.refresh();
30
34
  onChange();
31
35
  },
32
36
  });
@@ -35,7 +39,7 @@ export function createComputerAccessFeature({
35
39
  if (!isComputerAccessAvailable()) return false;
36
40
  dom.homeWorkspaceButton?.click();
37
41
  if (dom.homeWorkspacePanel?.hidden !== false || !root) return false;
38
- connection.openManagement();
42
+ if (!compactHomeWidgets?.open("computer")) connection.openManagement();
39
43
  root.scrollIntoView?.({ block: "start", behavior: "smooth" });
40
44
  root.focus({ preventScroll: true });
41
45
  return true;
@@ -45,6 +49,7 @@ export function createComputerAccessFeature({
45
49
  const ready = isComputerAccessAvailable();
46
50
  if (root) root.hidden = !ready;
47
51
  connection.setActive(ready);
52
+ compactHomeWidgets?.refresh();
48
53
  notice?.render();
49
54
  }
50
55
 
@@ -71,6 +76,12 @@ export function createComputerAccessFeature({
71
76
  dom.homeDashboardRoot,
72
77
  );
73
78
  connection.mount(root);
79
+ unregisterWidget = compactHomeWidgets?.register({
80
+ id: "computer", label: "Computer access", icon: "computer", element: root,
81
+ isAvailable: isComputerAccessAvailable,
82
+ getSummary: () => computerAccessWidgetSummary(connection.state, runtimeClient.supportsSystemHostConnection()),
83
+ onOpen: connection.openManagement,
84
+ }) || unregisterWidget;
74
85
  runtimeAvailabilityChanged();
75
86
  }
76
87
  dom.environmentSelect?.addEventListener("change", connection.environmentChanged);
@@ -80,6 +91,7 @@ export function createComputerAccessFeature({
80
91
  open,
81
92
  runtimeAvailabilityChanged,
82
93
  dispose() {
94
+ unregisterWidget();
83
95
  dom.environmentSelect?.removeEventListener("change", connection.environmentChanged);
84
96
  notice.dispose();
85
97
  connection.dispose();
@@ -6,6 +6,7 @@ export function createAppliedEnvironmentProjection({
6
6
  dom,
7
7
  selection,
8
8
  loadWebConfig,
9
+ changeEnvironment,
9
10
  }) {
10
11
  let generation = 0;
11
12
  let pending = null;
@@ -23,11 +24,10 @@ export function createAppliedEnvironmentProjection({
23
24
  );
24
25
  }
25
26
 
26
- function restoreProjection(config, selected) {
27
+ function applyProjection(config, selected) {
27
28
  state.config = config;
28
29
  selection.renderEnvironmentOptions();
29
30
  dom.environmentSelect.value = selected;
30
- selection.renderAgentPicker();
31
31
  }
32
32
 
33
33
  function preferredEnvironmentId(options, selected, defaultId) {
@@ -36,45 +36,36 @@ export function createAppliedEnvironmentProjection({
36
36
  return options[0]?.value || "";
37
37
  }
38
38
 
39
- function changeProjectedEnvironment(
40
- next,
41
- previousConfig,
42
- previousEnvironment,
43
- ) {
44
- const ChangeEvent = dom.environmentSelect.ownerDocument.defaultView.Event;
45
- dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
46
- if (dom.environmentSelect.value === next) return true;
47
- restoreProjection(previousConfig, previousEnvironment);
48
- // Existing listeners also own composer/environment presentation after a refusal.
49
- dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
50
- return false;
51
- }
52
-
53
- function flush() {
39
+ async function flush() {
54
40
  if (!pending) return "unchanged";
55
- const previousConfig = state.config;
56
41
  const previousEnvironment = selection.selectedEnvironmentId();
57
- state.config = pending;
58
- selection.renderEnvironmentOptions();
42
+ const projected = pending;
43
+ const revision = generation;
59
44
  const next = preferredEnvironmentId(
60
- selection.environmentOptions(),
45
+ selection.configuredEnvironmentOptions(projected),
61
46
  previousEnvironment,
62
- textOf(pending.defaultEnvironmentId).trim(),
47
+ textOf(projected.defaultEnvironmentId).trim(),
63
48
  );
64
- if (!next) {
65
- restoreProjection(previousConfig, previousEnvironment);
66
- return "blocked";
67
- }
68
- dom.environmentSelect.value = next;
69
- const unchanged = next === previousEnvironment;
70
- if (unchanged) {
49
+ if (!next) return "blocked";
50
+ if (next === previousEnvironment) {
51
+ applyProjection(projected, next);
71
52
  pending = null;
72
53
  selection.renderAgentPicker();
73
54
  return "unchanged";
74
55
  }
75
- if (!changeProjectedEnvironment(next, previousConfig, previousEnvironment))
76
- return "blocked";
77
- pending = null;
56
+ // Keep the old catalog and selected option until draft preparation commits.
57
+ const commitEnvironmentOptions = () => {
58
+ applyProjection(projected, next);
59
+ pending = null;
60
+ };
61
+ commitEnvironmentOptions.canCommit = () => {
62
+ if (revision !== generation) return false;
63
+ return pending === projected;
64
+ };
65
+ let accepted = false;
66
+ try { accepted = await changeEnvironment(next, { commitEnvironmentOptions }); }
67
+ catch { /* The old catalog remains active when draft persistence fails. */ }
68
+ if (!accepted) return "blocked";
78
69
  selection.renderAgentPicker();
79
70
  return "changed";
80
71
  }
@@ -87,6 +78,7 @@ export function createConfigurationFeature({
87
78
  state,
88
79
  selection,
89
80
  onConfigurationApplied,
81
+ changeEnvironment,
90
82
  ...options
91
83
  }) {
92
84
  const projection = createAppliedEnvironmentProjection({
@@ -94,6 +86,7 @@ export function createConfigurationFeature({
94
86
  dom: options.dom,
95
87
  selection,
96
88
  loadWebConfig: () => options.runtimeClient.loadWebConfig(),
89
+ changeEnvironment,
97
90
  });
98
91
  const workspace = createWorkspaceFeature({
99
92
  ...options,
@@ -101,13 +94,13 @@ export function createConfigurationFeature({
101
94
  const currentStillConfigured = await projection.prepare();
102
95
  if (currentStillConfigured) await onConfigurationApplied();
103
96
  },
104
- onConfigurationSettled: () => projection.flush() !== "blocked",
97
+ onConfigurationSettled: async () => await projection.flush() !== "blocked",
105
98
  });
106
99
  return {
107
100
  ...workspace,
108
101
  async reloadAppliedEnvironmentModels() {
109
102
  await projection.prepare();
110
- const result = projection.flush();
103
+ const result = await projection.flush();
111
104
  if (result === "blocked") return false;
112
105
  if (result === "changed") return true;
113
106
  const refreshed = await workspace.load();
@@ -22,6 +22,7 @@ export function createConfigurationFeature({
22
22
  getLearningSnapshot = () => null,
23
23
  isRuntimeReady = () => true,
24
24
  isComputerAccessAvailable = () => true,
25
+ compactHomeWidgets,
25
26
  }) {
26
27
  let configWorkspace;
27
28
  let activation;
@@ -107,6 +108,7 @@ export function createConfigurationFeature({
107
108
  let homeSetupSuggestion;
108
109
  const computerAccess = createComputerAccessFeature({
109
110
  dom,
111
+ compactHomeWidgets,
110
112
  runtimeClient,
111
113
  getEnvironmentId: selectedEnvironmentId,
112
114
  isComputerAccessAvailable,
@@ -278,7 +280,15 @@ export function createConfigurationFeature({
278
280
  "Finish or cancel model setup before leaving configuration.";
279
281
  return null;
280
282
  }
281
- return prepareDiscardChanges(...args);
283
+ const prepared = prepareDiscardChanges(...args);
284
+ if (typeof prepared !== "function") return prepared;
285
+ const commit = () => prepared();
286
+ commit.canCommit = () => {
287
+ if (pluginManager.hasConfigurationDraft()) return false;
288
+ if (modelSetup.isOpen()) return false;
289
+ return prepared.canCommit?.() !== false;
290
+ };
291
+ return commit;
282
292
  },
283
293
  };
284
294
  }