@abot-ai/runtime 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) hide show
  1. package/README.md +2 -0
  2. package/dist/src/bridge/request-steering.js +60 -15
  3. package/dist/src/capabilities/normal-invocation/contracts.d.ts +3 -0
  4. package/dist/src/capabilities/normal-invocation/output-channels.d.ts +10 -0
  5. package/dist/src/capabilities/normal-invocation/output-channels.js +29 -0
  6. package/dist/src/capabilities/normal-invocation/validator.js +4 -2
  7. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  8. package/dist/src/capabilities/tool-types.d.ts +1 -1
  9. package/dist/src/cli/abot.js +2 -0
  10. package/dist/src/cli/host-companion-bundle.mjs +8003 -6796
  11. package/dist/src/cli/host-companion-entry.js +5 -22
  12. package/dist/src/cli/host-companion-input.d.ts +3 -0
  13. package/dist/src/cli/host-companion-input.js +21 -0
  14. package/dist/src/cli/host-companion-lifecycle.d.ts +11 -0
  15. package/dist/src/cli/host-companion-lifecycle.js +32 -0
  16. package/dist/src/cli/host-companion-setup-target.d.ts +4 -0
  17. package/dist/src/cli/host-companion-setup-target.js +17 -0
  18. package/dist/src/cli/host-companion-startup.d.ts +2 -0
  19. package/dist/src/cli/host-companion-startup.js +7 -2
  20. package/dist/src/cli/host-companion.d.ts +6 -0
  21. package/dist/src/cli/host-companion.js +30 -27
  22. package/dist/src/cli/windows-companion-store-entry.d.ts +9 -0
  23. package/dist/src/cli/windows-companion-store-entry.js +67 -0
  24. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  25. package/dist/src/computer-access/collection-consent.js +47 -0
  26. package/dist/src/computer-access/command-output-capture.d.ts +48 -0
  27. package/dist/src/computer-access/command-output-capture.js +202 -0
  28. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  29. package/dist/src/computer-access/command-output-protection.js +59 -0
  30. package/dist/src/computer-access/command-output-retention.d.ts +5 -0
  31. package/dist/src/computer-access/command-output-retention.js +90 -0
  32. package/dist/src/computer-access/command-output.d.ts +7 -0
  33. package/dist/src/computer-access/command-output.js +1 -0
  34. package/dist/src/computer-access/commands.d.ts +1 -0
  35. package/dist/src/computer-access/commands.js +1 -1
  36. package/dist/src/computer-access/companion/command-output-protocol.d.ts +12 -0
  37. package/dist/src/computer-access/companion/command-output-protocol.js +28 -0
  38. package/dist/src/computer-access/companion/command-output.d.ts +14 -0
  39. package/dist/src/computer-access/companion/command-output.js +127 -0
  40. package/dist/src/computer-access/companion/install-link-macos.d.ts +7 -0
  41. package/dist/src/computer-access/companion/install-link-macos.js +49 -0
  42. package/dist/src/computer-access/companion/install-link-registration.d.ts +4 -0
  43. package/dist/src/computer-access/companion/install-link-registration.js +184 -0
  44. package/dist/src/computer-access/companion/install-link-windows.d.ts +4 -0
  45. package/dist/src/computer-access/companion/install-link-windows.js +65 -0
  46. package/dist/src/computer-access/companion/install-link.d.ts +9 -0
  47. package/dist/src/computer-access/companion/install-link.js +54 -0
  48. package/dist/src/computer-access/companion/native-messages.js +3 -0
  49. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  50. package/dist/src/computer-access/companion/native-session.d.ts +1 -0
  51. package/dist/src/computer-access/companion/native-session.js +20 -4
  52. package/dist/src/computer-access/companion/native-supervisor.js +1 -0
  53. package/dist/src/computer-access/companion/notification-windows.d.ts +1 -1
  54. package/dist/src/computer-access/companion/notification-windows.js +8 -3
  55. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  56. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  57. package/dist/src/computer-access/companion/observation-process.js +51 -25
  58. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  59. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  60. package/dist/src/computer-access/companion/protocol.d.ts +1 -1
  61. package/dist/src/computer-access/companion/protocol.js +6 -0
  62. package/dist/src/computer-access/companion/release-version.d.ts +1 -1
  63. package/dist/src/computer-access/companion/release-version.js +1 -1
  64. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  65. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  66. package/dist/src/computer-access/companion/windows-store/connection-error.d.ts +7 -0
  67. package/dist/src/computer-access/companion/windows-store/connection-error.js +19 -0
  68. package/dist/src/computer-access/companion/windows-store/connection-link.d.ts +13 -0
  69. package/dist/src/computer-access/companion/windows-store/connection-link.js +109 -0
  70. package/dist/src/computer-access/companion/windows-store/identity.d.ts +13 -0
  71. package/dist/src/computer-access/companion/windows-store/identity.js +13 -0
  72. package/dist/src/computer-access/companion/windows-store/lifecycle.d.ts +5 -0
  73. package/dist/src/computer-access/companion/windows-store/lifecycle.js +90 -0
  74. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  75. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  76. package/dist/src/computer-access/contracts.d.ts +1 -1
  77. package/dist/src/computer-access/handlers.d.ts +3 -1
  78. package/dist/src/computer-access/handlers.js +83 -11
  79. package/dist/src/computer-access/host-observation.d.ts +3 -3
  80. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  81. package/dist/src/computer-access/native-observation-connection.js +78 -0
  82. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  83. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  84. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  85. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  86. package/dist/src/computer-access/observation-source.d.ts +6 -0
  87. package/dist/src/computer-access/observation-source.js +10 -0
  88. package/dist/src/computer-access/process-capture.d.ts +6 -0
  89. package/dist/src/computer-access/process-capture.js +1 -0
  90. package/dist/src/computer-access/process-result.d.ts +2 -0
  91. package/dist/src/computer-access/process-result.js +14 -6
  92. package/dist/src/computer-access/process-runner.d.ts +2 -1
  93. package/dist/src/computer-access/process-runner.js +21 -13
  94. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  95. package/dist/src/computer-access/security/desktop-result.js +146 -0
  96. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  97. package/dist/src/computer-access/security/observed-error.js +10 -0
  98. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  99. package/dist/src/computer-access/security/secret-text.js +111 -0
  100. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  101. package/dist/src/computer-access/security/system-results.js +53 -0
  102. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  103. package/dist/src/computer-access/system-result-protection.js +1 -0
  104. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  105. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  106. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  107. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  108. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  109. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  110. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  111. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  112. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  113. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  114. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  115. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  116. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  117. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  118. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  119. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  120. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  121. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  122. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  123. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  124. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  125. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  126. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  127. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  128. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  129. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  130. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  131. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  132. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  133. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  134. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  135. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  136. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  137. package/dist/src/model-gateway/server/configuration.d.ts +2 -0
  138. package/dist/src/model-gateway/server/configuration.js +73 -21
  139. package/dist/src/model-gateway/server.js +5 -1
  140. package/dist/src/plugin-contract/index.d.ts +1 -0
  141. package/dist/src/plugin-contract/index.js +1 -0
  142. package/dist/src/plugin-contract/install-source.d.ts +13 -0
  143. package/dist/src/plugin-contract/install-source.js +99 -0
  144. package/dist/src/plugin-contract/manifest.d.ts +4 -1
  145. package/dist/src/plugin-contract/manifest.js +1 -0
  146. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  147. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  148. package/dist/src/plugin-sdk/computer-access.d.ts +12 -0
  149. package/dist/src/plugin-sdk/computer-access.js +6 -0
  150. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  151. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  152. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  153. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  154. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  155. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  156. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  157. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  158. package/dist/src/plugin-sdk/files.js +4 -0
  159. package/dist/src/plugin-sdk/index.d.ts +1 -0
  160. package/dist/src/plugin-sdk/index.js +1 -0
  161. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  162. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  163. package/dist/src/runtime/adapters/in-memory-session-store.js +6 -16
  164. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  165. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  166. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  167. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  168. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  169. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  170. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  171. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  172. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  173. package/dist/src/runtime/admin/config-control.js +2 -1
  174. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  175. package/dist/src/runtime/automations/catalog.js +1 -0
  176. package/dist/src/runtime/automations/model-dependency-projection.d.ts +2 -0
  177. package/dist/src/runtime/automations/service.d.ts +2 -0
  178. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.d.ts +10 -5
  179. package/dist/src/runtime/capabilities/automation-builder/authoring-reference.js +8 -7
  180. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.d.ts +2 -2
  181. package/dist/src/runtime/capabilities/automation-builder/payload-instructions.js +2 -2
  182. package/dist/src/runtime/capabilities/automation-builder/tool-contract.d.ts +2 -2
  183. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -1
  184. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +11 -5
  185. package/dist/src/runtime/capabilities/automations/tool-module.js +1 -1
  186. package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +3 -1
  187. package/dist/src/runtime/capabilities/request-permission-catalog.js +21 -2
  188. package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +2 -1
  189. package/dist/src/runtime/capabilities/request-permission-tool-registry.js +18 -10
  190. package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +2 -0
  191. package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +1 -1
  192. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +6 -0
  193. package/dist/src/runtime/config/builders.js +6 -5
  194. package/dist/src/runtime/config/effective-model-config-validation.js +4 -35
  195. package/dist/src/runtime/config/fields.js +15 -0
  196. package/dist/src/runtime/config/model-context-capacity.d.ts +20 -0
  197. package/dist/src/runtime/config/model-context-capacity.js +55 -0
  198. package/dist/src/runtime/config/model-execution-policy.d.ts +5 -1
  199. package/dist/src/runtime/config/model-execution-policy.js +16 -0
  200. package/dist/src/runtime/config/model-plugin-config.d.ts +8 -0
  201. package/dist/src/runtime/config/model-plugin-config.js +40 -0
  202. package/dist/src/runtime/config/schema.js +5 -1
  203. package/dist/src/runtime/config/validation/model-profile-validation.js +2 -0
  204. package/dist/src/runtime/config/validation/runtime-config-validation-contract.d.ts +3 -1
  205. package/dist/src/runtime/config/validation/runtime-config-validation-contract.js +3 -1
  206. package/dist/src/runtime/config/validation/runtime-root-section-validation.js +11 -4
  207. package/dist/src/runtime/config/validation/web-ui-config-validation.js +3 -2
  208. package/dist/src/runtime/config/web-ui.d.ts +5 -0
  209. package/dist/src/runtime/config/web-ui.js +5 -0
  210. package/dist/src/runtime/config.js +2 -0
  211. package/dist/src/runtime/local-application.d.ts +2 -0
  212. package/dist/src/runtime/local-host/app-owner.js +50 -6
  213. package/dist/src/runtime/local-host/app-request-control.d.ts +3 -1
  214. package/dist/src/runtime/local-host/app-request-control.js +91 -11
  215. package/dist/src/runtime/local-host/client-requests.js +32 -5
  216. package/dist/src/runtime/local-host/client-services.d.ts +2 -0
  217. package/dist/src/runtime/local-host/local-request-diagnostics.d.ts +9 -0
  218. package/dist/src/runtime/local-host/local-request-diagnostics.js +47 -0
  219. package/dist/src/runtime/local-host/saved-approvals.js +23 -2
  220. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  221. package/dist/src/runtime/model/model-selection.js +4 -1
  222. package/dist/src/runtime/observability/request-control-diagnostics.d.ts +6 -0
  223. package/dist/src/runtime/observability/request-control-diagnostics.js +52 -0
  224. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  225. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  226. package/dist/src/runtime/passive-learning/service.js +2 -3
  227. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  228. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  229. package/dist/src/runtime/plugins/configuration-context.d.ts +9 -0
  230. package/dist/src/runtime/plugins/configuration-context.js +42 -0
  231. package/dist/src/runtime/plugins/configuration-settings.d.ts +2 -0
  232. package/dist/src/runtime/plugins/configuration-settings.js +26 -0
  233. package/dist/src/runtime/plugins/configuration-store.d.ts +23 -0
  234. package/dist/src/runtime/plugins/configuration-store.js +100 -0
  235. package/dist/src/runtime/plugins/configuration-write.d.ts +5 -0
  236. package/dist/src/runtime/plugins/configuration-write.js +58 -0
  237. package/dist/src/runtime/plugins/installation/archive.d.ts +2 -0
  238. package/dist/src/runtime/plugins/installation/archive.js +107 -0
  239. package/dist/src/runtime/plugins/installation/github-download.d.ts +9 -0
  240. package/dist/src/runtime/plugins/installation/github-download.js +72 -0
  241. package/dist/src/runtime/plugins/installation/installed-package.d.ts +9 -0
  242. package/dist/src/runtime/plugins/installation/installed-package.js +66 -0
  243. package/dist/src/runtime/plugins/installation/package.d.ts +53 -0
  244. package/dist/src/runtime/plugins/installation/package.js +81 -0
  245. package/dist/src/runtime/plugins/installation/portable-path.d.ts +2 -0
  246. package/dist/src/runtime/plugins/installation/portable-path.js +10 -0
  247. package/dist/src/runtime/plugins/installation/publication.d.ts +10 -0
  248. package/dist/src/runtime/plugins/installation/publication.js +17 -0
  249. package/dist/src/runtime/plugins/installation/service.d.ts +48 -0
  250. package/dist/src/runtime/plugins/installation/service.js +80 -0
  251. package/dist/src/runtime/plugins/loader.js +34 -38
  252. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  253. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  254. package/dist/src/runtime/plugins/manifest-projection.js +1 -0
  255. package/dist/src/runtime/plugins/manifest-validator.js +12 -1
  256. package/dist/src/runtime/plugins/module-cache.d.ts +2 -0
  257. package/dist/src/runtime/plugins/module-cache.js +19 -0
  258. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  259. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  260. package/dist/src/runtime/plugins/selection.d.ts +2 -0
  261. package/dist/src/runtime/plugins/selection.js +16 -11
  262. package/dist/src/runtime/ports.d.ts +6 -4
  263. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  264. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  265. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  266. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  267. package/dist/src/runtime/request/dependencies.d.ts +2 -1
  268. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +1 -1
  269. package/dist/src/runtime/request/handler.js +8 -0
  270. package/dist/src/runtime/request/prepared-execution.js +9 -1
  271. package/dist/src/runtime/request/request-steering.d.ts +4 -0
  272. package/dist/src/runtime/request/request-steering.js +37 -12
  273. package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -0
  274. package/dist/src/runtime/request/worker-capability-composition.js +4 -1
  275. package/dist/src/runtime/scheduler/journal-index-state.d.ts +1 -1
  276. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  277. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  278. package/dist/src/runtime/steps/execution-agent/format.js +2 -3
  279. package/dist/src/runtime/steps/execution-agent/input.js +1 -1
  280. package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
  281. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  282. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
  283. package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
  284. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  285. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  286. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  287. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  288. package/dist/src/sessions/assistant-initiative-message.d.ts +3 -0
  289. package/dist/src/sessions/assistant-initiative-message.js +12 -0
  290. package/dist/src/sessions/assistant-initiative.d.ts +2 -2
  291. package/dist/src/sessions/assistant-initiative.js +1 -7
  292. package/dist/src/sessions/durable-session-commit.d.ts +2 -1
  293. package/dist/src/sessions/durable-session-commit.js +9 -4
  294. package/dist/src/sessions/metadata/projection.d.ts +15 -0
  295. package/dist/src/sessions/metadata/projection.js +55 -0
  296. package/dist/src/sessions/metadata/publication.d.ts +12 -0
  297. package/dist/src/sessions/metadata/publication.js +78 -0
  298. package/dist/src/sessions/metadata/source-receipt.d.ts +5 -0
  299. package/dist/src/sessions/metadata/source-receipt.js +42 -0
  300. package/dist/src/sessions/metadata/store.d.ts +7 -0
  301. package/dist/src/sessions/metadata/store.js +119 -0
  302. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  303. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  304. package/dist/src/sessions/record/projection.d.ts +3 -1
  305. package/dist/src/sessions/record/projection.js +26 -18
  306. package/dist/src/sessions/request-lifecycle/service.js +3 -3
  307. package/dist/src/sessions/session-service.d.ts +2 -4
  308. package/dist/src/sessions/session-service.js +4 -16
  309. package/dist/src/sessions/session-store.d.ts +2 -1
  310. package/dist/src/sessions/session-store.js +11 -5
  311. package/dist/src/sessions/snapshot.d.ts +17 -0
  312. package/dist/src/sessions/snapshot.js +105 -0
  313. package/dist/src/sessions/types.d.ts +2 -0
  314. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  315. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  316. package/dist/src/shared/tool-selection.d.ts +2 -0
  317. package/dist/src/shared/tool-selection.js +7 -0
  318. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  319. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  320. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  321. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  322. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  323. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  324. package/dist/src/shared/windows-job-object.d.ts +2 -0
  325. package/dist/src/shared/windows-job-object.js +66 -0
  326. package/dist/src/web-ui/app/ARCHITECTURE.md +14 -0
  327. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  328. package/dist/src/web-ui/app/app-state.js +0 -7
  329. package/dist/src/web-ui/app/app.js +59 -159
  330. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  331. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  332. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  333. package/dist/src/web-ui/app/components/config-workspace/config-model.js +2 -0
  334. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +136 -0
  335. package/dist/src/web-ui/app/components/config-workspace/model-plugin-selection.js +180 -0
  336. package/dist/src/web-ui/app/components/config-workspace/model-plugin-view-state.js +114 -0
  337. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +3 -0
  338. package/dist/src/web-ui/app/components/config-workspace/model-summary.js +39 -0
  339. package/dist/src/web-ui/app/components/config-workspace/summary-rendering.js +30 -0
  340. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +37 -0
  341. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +24 -2
  342. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +9 -1
  343. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +23 -67
  344. package/dist/src/web-ui/app/components/config-workspace.js +11 -2
  345. package/dist/src/web-ui/app/components/conversation-view.js +36 -5
  346. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +2 -1
  347. package/dist/src/web-ui/app/components/dashboard/workspace.js +2 -1
  348. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  349. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  350. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  351. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  352. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  353. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  354. package/dist/src/web-ui/app/components/operations-summary.js +105 -0
  355. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  356. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  357. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  358. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  359. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  360. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  361. package/dist/src/web-ui/app/components/passive-learning/home.js +8 -11
  362. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  363. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  364. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  365. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  366. package/dist/src/web-ui/app/components/plugins/configuration-draft.js +34 -0
  367. package/dist/src/web-ui/app/components/plugins/configuration-editor.js +147 -0
  368. package/dist/src/web-ui/app/components/plugins/configuration-fields.js +103 -0
  369. package/dist/src/web-ui/app/components/plugins/configuration-retained-secrets.js +20 -0
  370. package/dist/src/web-ui/app/components/plugins/configuration-settings.js +108 -0
  371. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +45 -0
  372. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  373. package/dist/src/web-ui/app/components/plugins/installation.js +213 -0
  374. package/dist/src/web-ui/app/components/plugins/manager.js +160 -6
  375. package/dist/src/web-ui/app/components/plugins/removal.js +130 -0
  376. package/dist/src/web-ui/app/components/plugins/rendering.js +17 -2
  377. package/dist/src/web-ui/app/components/plugins/summary.js +54 -0
  378. package/dist/src/web-ui/app/components/plugins/tabs.js +31 -0
  379. package/dist/src/web-ui/app/components/plugins/view-state.js +3 -1
  380. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  381. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  382. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +5 -2
  383. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +9 -1
  384. package/dist/src/web-ui/app/components/runtime-setup/context-window-feedback.js +71 -0
  385. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +9 -4
  386. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  387. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  388. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  389. package/dist/src/web-ui/app/components/runtime-setup-guide.js +15 -3
  390. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  391. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  392. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  393. package/dist/src/web-ui/app/components/spark-chat/empty-state.js +1 -0
  394. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  395. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -0
  396. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  397. package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
  398. package/dist/src/web-ui/app/components/system-host/connection-card.js +35 -0
  399. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  400. package/dist/src/web-ui/app/components/system-host/macos-setup.js +1 -1
  401. package/dist/src/web-ui/app/components/system-host/manager.js +45 -12
  402. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  403. package/dist/src/web-ui/app/components/system-host/rendering.js +114 -106
  404. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +293 -0
  405. package/dist/src/web-ui/app/components/workspace-shell.js +6 -0
  406. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  407. package/dist/src/web-ui/app/computer-access-feature.js +22 -5
  408. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  409. package/dist/src/web-ui/app/configuration-feature.js +44 -3
  410. package/dist/src/web-ui/app/controllers/app-event-bindings.js +41 -105
  411. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  412. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  413. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  414. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  415. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  416. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  417. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  418. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  419. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  420. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  421. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  422. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  423. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  424. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  425. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  426. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  427. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  428. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  429. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  430. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  431. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +1 -0
  432. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +7 -3
  433. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +91 -0
  434. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +10 -5
  435. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +97 -162
  436. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  437. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  438. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  439. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  440. package/dist/src/web-ui/app/controllers/history-pagination.js +111 -0
  441. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  442. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  443. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  444. package/dist/src/web-ui/app/controllers/operations-controller.d.ts +12 -0
  445. package/dist/src/web-ui/app/controllers/operations-controller.js +28 -21
  446. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  447. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  448. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  449. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  450. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.d.ts +1 -0
  451. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +11 -0
  452. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  453. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  454. package/dist/src/web-ui/app/controllers/session-controller.js +43 -19
  455. package/dist/src/web-ui/app/controllers/session-list-pagination.js +71 -0
  456. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  457. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +17 -17
  458. package/dist/src/web-ui/app/controllers/spark-chat-reading.js +1 -0
  459. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +26 -7
  460. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  461. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  462. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  463. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +21 -19
  464. package/dist/src/web-ui/app/dashboard-feature.js +4 -3
  465. package/dist/src/web-ui/app/index.html +6 -2
  466. package/dist/src/web-ui/app/lib/history-page-messages.js +49 -0
  467. package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -0
  468. package/dist/src/web-ui/app/lib/request-lifecycle-view.js +8 -0
  469. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  470. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  471. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  472. package/dist/src/web-ui/app/lib/workspace-route.d.ts +3 -0
  473. package/dist/src/web-ui/app/lib/workspace-route.js +4 -0
  474. package/dist/src/web-ui/app/passive-learning-feature.js +16 -4
  475. package/dist/src/web-ui/app/runtime-onboarding-feature.js +3 -0
  476. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  477. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  478. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  479. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  480. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  481. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  482. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +20 -0
  483. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  484. package/dist/src/web-ui/app/services/runtime-web-client/plugin-configuration.js +19 -0
  485. package/dist/src/web-ui/app/services/runtime-web-client/spark-chat.js +4 -4
  486. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +4 -0
  487. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +8 -1
  488. package/dist/src/web-ui/app/services/runtime-web-client.js +14 -3
  489. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  490. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  491. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  492. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  493. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  494. package/dist/src/web-ui/app/spark-chat-feature.js +84 -21
  495. package/dist/src/web-ui/app/styles/11-product-links.css +30 -0
  496. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  497. package/dist/src/web-ui/app/styles/41-plugin-configuration.css +79 -0
  498. package/dist/src/web-ui/app/styles/41-plugin-discovery.css +132 -0
  499. package/dist/src/web-ui/app/styles/41-plugin-management.css +14 -0
  500. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +174 -0
  501. package/dist/src/web-ui/app/styles/46-system-host.css +61 -107
  502. package/dist/src/web-ui/app/styles/47-config-controls.css +13 -1
  503. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  504. package/dist/src/web-ui/app/styles/54-spark-chat.css +33 -1
  505. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  506. package/dist/src/web-ui/app/styles.css +6 -0
  507. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  508. package/dist/src/web-ui/client-state/contracts.js +13 -0
  509. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  510. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  511. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  512. package/dist/src/web-ui/client-state/preferences.js +84 -0
  513. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  514. package/dist/src/web-ui/client-state/queue.js +43 -0
  515. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  516. package/dist/src/web-ui/client-state/routes.js +58 -0
  517. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  518. package/dist/src/web-ui/client-state/store.js +88 -0
  519. package/dist/src/web-ui/local-runtime/api-router.js +11 -6
  520. package/dist/src/web-ui/local-runtime/approval-request-attachment.js +14 -5
  521. package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +1 -1
  522. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +11 -3
  523. package/dist/src/web-ui/local-runtime/contracts.d.ts +4 -3
  524. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +5 -1
  525. package/dist/src/web-ui/local-runtime/environment-registry.js +53 -11
  526. package/dist/src/web-ui/local-runtime/history-pagination.d.ts +16 -0
  527. package/dist/src/web-ui/local-runtime/history-pagination.js +20 -0
  528. package/dist/src/web-ui/local-runtime/http.js +11 -2
  529. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  530. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  531. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  532. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  533. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  534. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  535. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  536. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  537. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.d.ts +16 -0
  538. package/dist/src/web-ui/local-runtime/plugin-configuration-routes.js +68 -0
  539. package/dist/src/web-ui/local-runtime/plugin-installation-routes.d.ts +16 -0
  540. package/dist/src/web-ui/local-runtime/plugin-installation-routes.js +96 -0
  541. package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +8 -1
  542. package/dist/src/web-ui/local-runtime/plugin-management-routes.js +17 -0
  543. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.d.ts +7 -0
  544. package/dist/src/web-ui/local-runtime/plugin-mutation-admission.js +17 -0
  545. package/dist/src/web-ui/local-runtime/plugin-removal-routes.d.ts +18 -0
  546. package/dist/src/web-ui/local-runtime/plugin-removal-routes.js +60 -0
  547. package/dist/src/web-ui/local-runtime/realtime-controller.js +41 -2
  548. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  549. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  550. package/dist/src/web-ui/local-runtime/request-cancellation-route.js +28 -1
  551. package/dist/src/web-ui/local-runtime/request-control-observation.d.ts +19 -0
  552. package/dist/src/web-ui/local-runtime/request-control-observation.js +80 -0
  553. package/dist/src/web-ui/local-runtime/request-execution.js +66 -34
  554. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  555. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  556. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +13 -0
  557. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +21 -0
  558. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  559. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  560. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  561. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  562. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  563. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  564. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  565. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  566. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  567. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  568. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +2 -0
  569. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  570. package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +9 -2
  571. package/dist/src/web-ui/local-runtime/session-routes.d.ts +1 -0
  572. package/dist/src/web-ui/local-runtime/session-routes.js +16 -4
  573. package/dist/src/web-ui/local-runtime/spark-chat-routes.js +4 -3
  574. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  575. package/dist/src/web-ui/plugin-capability-selection.js +4 -1
  576. package/dist/src/web-ui/plugin-configuration-input.d.ts +12 -0
  577. package/dist/src/web-ui/plugin-configuration-input.js +68 -0
  578. package/dist/src/web-ui/plugin-configuration-retained-secrets.d.ts +9 -0
  579. package/dist/src/web-ui/plugin-configuration-retained-secrets.js +48 -0
  580. package/dist/src/web-ui/plugin-configuration-service.d.ts +52 -0
  581. package/dist/src/web-ui/plugin-configuration-service.js +66 -0
  582. package/dist/src/web-ui/plugin-configuration-view.d.ts +25 -0
  583. package/dist/src/web-ui/plugin-configuration-view.js +45 -0
  584. package/dist/src/web-ui/plugin-disabled-selection.d.ts +7 -0
  585. package/dist/src/web-ui/plugin-disabled-selection.js +17 -0
  586. package/dist/src/web-ui/plugin-management-catalog.d.ts +5 -1
  587. package/dist/src/web-ui/plugin-management-catalog.js +13 -1
  588. package/dist/src/web-ui/plugin-management-selection.js +22 -9
  589. package/dist/src/web-ui/plugin-management-service.d.ts +6 -1
  590. package/dist/src/web-ui/plugin-management-service.js +11 -7
  591. package/dist/src/web-ui/plugin-removal-error.d.ts +7 -0
  592. package/dist/src/web-ui/plugin-removal-error.js +16 -0
  593. package/dist/src/web-ui/plugin-removal-service.d.ts +31 -0
  594. package/dist/src/web-ui/plugin-removal-service.js +109 -0
  595. package/dist/src/web-ui/runtime-setup-gateway.d.ts +6 -2
  596. package/dist/src/web-ui/runtime-setup-gateway.js +30 -10
  597. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  598. package/dist/src/web-ui/server-readiness.js +36 -0
  599. package/dist/src/web-ui/server.d.ts +2 -0
  600. package/dist/src/web-ui/server.js +29 -3
  601. package/dist/src/web-ui/session-read-state/overview.d.ts +42 -0
  602. package/dist/src/web-ui/session-read-state/overview.js +16 -0
  603. package/dist/src/web-ui/session-read-state/pagination.d.ts +15 -0
  604. package/dist/src/web-ui/session-read-state/pagination.js +42 -0
  605. package/dist/src/web-ui/session-read-state/projection.d.ts +4 -3
  606. package/dist/src/web-ui/session-read-state/service.d.ts +213 -20
  607. package/dist/src/web-ui/session-read-state/service.js +25 -23
  608. package/dist/src/web-ui/session-read-state/visible-messages.d.ts +3 -3
  609. package/dist/src/web-ui/system-host-service.js +13 -2
  610. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  611. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  612. package/dist/src/web-ui/system-host-setup/companion-linux.js +1 -1
  613. package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +1 -1
  614. package/dist/src/web-ui/system-host-setup/installer-contract.js +2 -2
  615. package/dist/src/web-ui/system-host-setup/installers.js +0 -7
  616. package/dist/src/web-ui/system-host-setup/local-connection.d.ts +4 -1
  617. package/dist/src/web-ui/system-host-setup/local-connection.js +10 -17
  618. package/dist/src/web-ui/system-host-setup/routes.d.ts +2 -0
  619. package/dist/src/web-ui/system-host-setup/routes.js +32 -9
  620. package/dist/src/web-ui/system-host-setup/setup-mutation.d.ts +9 -0
  621. package/dist/src/web-ui/system-host-setup/setup-mutation.js +27 -0
  622. package/dist/src/web-ui/system-host-setup/windows-store-route.d.ts +13 -0
  623. package/dist/src/web-ui/system-host-setup/windows-store-route.js +68 -0
  624. package/docs/configuration.md +46 -0
  625. package/docs/installation.md +88 -28
  626. package/docs/plugins.md +310 -6
  627. package/docs/projects-and-full-plus.md +2 -6
  628. package/docs/runtime-library.md +0 -1
  629. package/docs/tool-execution-result-evidence-contract.md +57 -0
  630. package/docs/windows-companion-store.md +132 -0
  631. package/package.json +6 -4
  632. package/plugins/capability-brief/plugin.json +4 -0
  633. package/plugins/code-outline/README.md +20 -0
  634. package/plugins/code-outline/plugin.json +1 -0
  635. package/plugins/code-outline/source/index.ts +16 -20
  636. package/plugins/code-outline/source/read-failure.ts +40 -0
  637. package/plugins/code-outline/src/index.cjs +614 -29
  638. package/plugins/document-reader/README.md +33 -0
  639. package/plugins/document-reader/plugin.json +2 -0
  640. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  641. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  642. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  643. package/plugins/document-reader/source/pdf-process.ts +207 -0
  644. package/plugins/document-reader/source/pdf-result.ts +79 -0
  645. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  646. package/plugins/document-reader/source/pdf.ts +4 -1
  647. package/plugins/document-reader/source/read-failure.ts +37 -0
  648. package/plugins/document-reader/source/reader.ts +3 -19
  649. package/plugins/document-reader/src/index.cjs +995 -211
  650. package/plugins/exec/README.md +19 -0
  651. package/plugins/exec/plugin.json +7 -3
  652. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  653. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  654. package/plugins/exec/source/filesystem-observer.ts +8 -79
  655. package/plugins/exec/source/output-files.ts +12 -6
  656. package/plugins/exec/source/paths.ts +3 -1
  657. package/plugins/exec/source/process-manager.ts +8 -24
  658. package/plugins/exec/source/shell-platform.ts +19 -3
  659. package/plugins/exec/source/shell-process.ts +55 -0
  660. package/plugins/exec/source/windows-job-source.ts +1 -0
  661. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  662. package/plugins/exec/src/index.cjs +252 -96
  663. package/plugins/filesystem/README.md +65 -0
  664. package/plugins/filesystem/plugin.json +8 -2
  665. package/plugins/filesystem/source/atomic-write.ts +2 -0
  666. package/plugins/filesystem/source/bounded-io.ts +80 -306
  667. package/plugins/filesystem/source/directory-sample.ts +2 -0
  668. package/plugins/filesystem/source/errors.ts +14 -0
  669. package/plugins/filesystem/source/file-observation.ts +151 -0
  670. package/plugins/filesystem/source/file-version.ts +41 -0
  671. package/plugins/filesystem/source/index.ts +6 -0
  672. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  673. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  674. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  675. package/plugins/filesystem/source/windows/operations.ts +197 -0
  676. package/plugins/filesystem/source/windows/process.ts +214 -0
  677. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  678. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  679. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  680. package/plugins/filesystem/source/windows/source.ts +42 -0
  681. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  682. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  683. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  684. package/plugins/filesystem/src/index.cjs +1208 -322
  685. package/plugins/json-inspector/README.md +18 -0
  686. package/plugins/json-inspector/plugin.json +1 -0
  687. package/plugins/json-inspector/source/index.ts +16 -19
  688. package/plugins/json-inspector/source/read-failure.ts +42 -0
  689. package/plugins/json-inspector/src/index.cjs +612 -27
  690. package/plugins/local-search/README.md +29 -0
  691. package/plugins/local-search/plugin.json +2 -0
  692. package/plugins/local-search/source/errors.ts +2 -0
  693. package/plugins/local-search/source/paths.ts +3 -0
  694. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  695. package/plugins/local-search/source/ripgrep.ts +3 -3
  696. package/plugins/local-search/source/windows-authority.ts +99 -0
  697. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  698. package/plugins/local-search/source/windows-search-process.ts +91 -0
  699. package/plugins/local-search/source/windows-search-script.ts +52 -0
  700. package/plugins/local-search/src/index.cjs +595 -26
  701. package/plugins/memory/plugin.json +4 -0
  702. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  703. package/plugins/memory/source/lock-owner-file.ts +71 -0
  704. package/plugins/memory/source/lock-path-observation.ts +26 -0
  705. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  706. package/plugins/memory/source/store-lock.ts +12 -7
  707. package/plugins/memory/source/store.ts +3 -2
  708. package/plugins/memory/src/index.cjs +174 -25
  709. package/plugins/project-orientation/README.md +23 -0
  710. package/plugins/project-orientation/plugin.json +1 -0
  711. package/plugins/project-orientation/source/index.ts +12 -9
  712. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  713. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  714. package/plugins/project-orientation/source/tree.ts +6 -0
  715. package/plugins/project-orientation/src/index.cjs +647 -31
  716. package/plugins/system/README.md +81 -5
  717. package/plugins/system/plugin.json +10 -1
  718. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  719. package/plugins/system/source/command-working-directory.ts +47 -0
  720. package/plugins/system/source/companion-command-output.ts +82 -0
  721. package/plugins/system/source/computer/handlers.ts +13 -9
  722. package/plugins/system/source/computer/observation-result.ts +10 -5
  723. package/plugins/system/source/computer/request-computers.ts +10 -3
  724. package/plugins/system/source/computer/request-modules.ts +3 -6
  725. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  726. package/plugins/system/source/host-dispatch.ts +21 -1
  727. package/plugins/system/source/index.ts +14 -6
  728. package/plugins/system/source/local-command-output-retention.ts +16 -0
  729. package/plugins/system/source/local-command-output.ts +69 -0
  730. package/plugins/system/source/request-system-modules.ts +14 -2
  731. package/plugins/system/source/request-target-snapshot.ts +2 -1
  732. package/plugins/system/source/security/desktop-result.ts +177 -0
  733. package/plugins/system/source/security/observed-error.ts +10 -0
  734. package/plugins/system/source/security/secret-text.ts +118 -0
  735. package/plugins/system/source/security/system-results.ts +62 -0
  736. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  737. package/plugins/system/src/index.cjs +1207 -86
  738. package/plugins/system-probe/plugin.json +8 -2
  739. package/plugins/system-probe/source/disk-path.ts +8 -0
  740. package/plugins/system-probe/source/index.ts +10 -5
  741. package/plugins/system-probe/source/machine-load.ts +33 -0
  742. package/plugins/system-probe/source/metrics.ts +6 -8
  743. package/plugins/system-probe/src/index.cjs +49 -16
  744. package/plugins/web/README.md +2 -2
  745. package/plugins/web/plugin.json +8 -0
  746. package/runtime.config.schema.json +25 -1
  747. package/src/runtime/README.md +12 -2
  748. package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +0 -2
  749. package/dist/src/web-ui/system-host-setup/companion-windows.js +0 -108
  750. package/docs/publishing.md +0 -167
@@ -0,0 +1,43 @@
1
+ import { WINDOWS_FILESYSTEM_NATIVE } from "../../shared/windows-file-io/native-script.js";
2
+ import { WINDOWS_FILESYSTEM_AUTHORITY } from "../../shared/windows-file-io/authority-script.js";
3
+ import { WINDOWS_FILE_READ_BYTES } from "../../shared/windows-file-io/read-bytes-script.js";
4
+ const BOUNDED_READ = String.raw `
5
+ public static partial class AbotFilesystem {
6
+ static object ReadBounded(Dictionary<string,object> request) {
7
+ long maximum;
8
+ if (!Int64.TryParse(Text(request, "maxBytes"), out maximum) || maximum < 0 ||
9
+ maximum > 9007199254740991L) throw new FsFault("filesystem_invalid_request");
10
+ string[] parts=Components(request);
11
+ if (parts.Length == 0) return Record("ok", false, "reason", "not_regular_file");
12
+ using (var chain=new DirectoryChain(request)) {
13
+ chain.Walk(parts, parts.Length-1, false);
14
+ using (var file=OpenHandle(chain.Current, parts[parts.Length-1], false, 1, 0x80000000, 1)) {
15
+ var expected=request["targetIdentity"] as Dictionary<string,object>;
16
+ if (expected == null || !MatchesIdentity(Identity(file), expected))
17
+ return Record("ok", false, "reason", "changed_during_read");
18
+ var before=Metadata(file);
19
+ long size=Convert.ToInt64(before["size"]);
20
+ // Both the byte array and the base64 JSON response must fit .NET strings.
21
+ if (size > maximum || size > (Int32.MaxValue-4096L)/4*3)
22
+ return Record("ok", false, "reason", "too_large", "byteCount", size);
23
+ var bytes=ReadBytes(file, 0, (int)size);
24
+ if (!SameMetadata(before, Metadata(file)))
25
+ return Record("ok", false, "reason", "changed_during_read");
26
+ return Record("ok", true, "bytes", Convert.ToBase64String(bytes), "byteCount", size);
27
+ }
28
+ }
29
+ }
30
+ public static string Run(string input) {
31
+ var json=new JavaScriptSerializer { MaxJsonLength=Int32.MaxValue };
32
+ try { return json.Serialize(ReadBounded(json.Deserialize<Dictionary<string,object>>(input))); }
33
+ catch (FsFault error) { return json.Serialize(Record("ok", false, "code", error.Code)); }
34
+ catch { return json.Serialize(Record("ok", false, "code", "filesystem_native_operation_failed")); }
35
+ }
36
+ }
37
+ `;
38
+ export const WINDOWS_BOUNDED_READ_SOURCE = [
39
+ WINDOWS_FILESYSTEM_NATIVE,
40
+ WINDOWS_FILESYSTEM_AUTHORITY,
41
+ WINDOWS_FILE_READ_BYTES,
42
+ BOUNDED_READ,
43
+ ].join("\n");
@@ -0,0 +1,6 @@
1
+ import type { BoundedRegularFileReadResult } from "../files.js";
2
+ export declare function readWindowsBoundedRegularFile(absolutePath: string, options: Readonly<{
3
+ maxBytes: number;
4
+ rootPath: string;
5
+ signal?: AbortSignal;
6
+ }>): Promise<BoundedRegularFileReadResult>;
@@ -0,0 +1,56 @@
1
+ import { lstat, open, realpath } from "node:fs/promises";
2
+ import { win32 } from "node:path";
3
+ import { runWindowsBoundedRead } from "./process.js";
4
+ import { decodeWindowsReadResult, windowsReadAbortError } from "./result.js";
5
+ function isOutsideRoot(rootRelative) {
6
+ if (win32.isAbsolute(rootRelative))
7
+ return true;
8
+ if (rootRelative === "..")
9
+ return true;
10
+ return rootRelative.startsWith("..\\");
11
+ }
12
+ function identity(stats) {
13
+ return {
14
+ device: String(stats.dev),
15
+ inode: String(stats.ino),
16
+ birthtimeNs: String(stats.birthtimeNs),
17
+ };
18
+ }
19
+ export async function readWindowsBoundedRegularFile(absolutePath, options) {
20
+ const relativePath = win32.relative(options.rootPath, absolutePath);
21
+ if (isOutsideRoot(relativePath))
22
+ return Object.freeze({ ok: false, reason: "outside_root" });
23
+ if (relativePath === "")
24
+ return Object.freeze({ ok: false, reason: "not_regular_file" });
25
+ let root;
26
+ try {
27
+ const canonicalRoot = await realpath(options.rootPath);
28
+ root = await open(canonicalRoot, "r");
29
+ const rootStats = await root.stat({ bigint: true });
30
+ if (!rootStats.isDirectory() || rootStats.ino <= 0n)
31
+ return Object.freeze({ ok: false, reason: "safe_open_unsupported" });
32
+ // Metadata only: all content reads happen through the rooted native handles.
33
+ const targetPath = win32.resolve(canonicalRoot, relativePath);
34
+ const target = await lstat(targetPath, { bigint: true });
35
+ if (!target.isFile())
36
+ return Object.freeze({ ok: false, reason: "not_regular_file" });
37
+ const canonicalTarget = await realpath(targetPath);
38
+ if (isOutsideRoot(win32.relative(canonicalRoot, canonicalTarget)))
39
+ return Object.freeze({ ok: false, reason: "outside_root" });
40
+ if (options.signal?.aborted)
41
+ throw windowsReadAbortError();
42
+ const raw = await runWindowsBoundedRead({
43
+ rootPath: canonicalRoot,
44
+ relativePath: relativePath.split(win32.sep).join("/"),
45
+ rootIdentity: identity(rootStats),
46
+ targetIdentity: identity(target),
47
+ maxBytes: String(options.maxBytes),
48
+ }, options.maxBytes, options.signal);
49
+ if (options.signal?.aborted)
50
+ throw windowsReadAbortError();
51
+ return decodeWindowsReadResult(raw, options.maxBytes);
52
+ }
53
+ finally {
54
+ await root?.close();
55
+ }
56
+ }
@@ -0,0 +1,4 @@
1
+ import type { BoundedRegularFileReadResult } from "../files.js";
2
+ export declare function windowsReadError(code: string): Error;
3
+ export declare function windowsReadAbortError(): Error;
4
+ export declare function decodeWindowsReadResult(raw: string, maxBytes: number): BoundedRegularFileReadResult;
@@ -0,0 +1,67 @@
1
+ export function windowsReadError(code) {
2
+ const error = new Error("The Windows safe file read failed (" + code + "). No fallback read was attempted.");
3
+ return Object.assign(error, { code });
4
+ }
5
+ export function windowsReadAbortError() {
6
+ const error = new Error("The file read was cancelled.");
7
+ error.name = "AbortError";
8
+ return error;
9
+ }
10
+ const FAILURE_REASONS = new Set([
11
+ "not_regular_file",
12
+ "too_large",
13
+ "changed_during_read",
14
+ "outside_root",
15
+ "safe_open_unsupported",
16
+ ]);
17
+ function hasByteCount(value) {
18
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
19
+ }
20
+ function decodeNativeFailure(code) {
21
+ switch (code) {
22
+ case "filesystem_windows_policy_blocked":
23
+ case "filesystem_windows_helper_unavailable":
24
+ case "filesystem_safe_io_unsupported":
25
+ return Object.freeze({ ok: false, reason: "safe_open_unsupported" });
26
+ case "filesystem_path_changed":
27
+ case "filesystem_target_changed":
28
+ case "filesystem_read_changed":
29
+ case "filesystem_read_incomplete":
30
+ return Object.freeze({ ok: false, reason: "changed_during_read" });
31
+ case "file_too_large":
32
+ return Object.freeze({ ok: false, reason: "too_large" });
33
+ case "file_not_found": throw windowsReadError("ENOENT");
34
+ case "filesystem_access_denied": throw windowsReadError("EACCES");
35
+ default: throw windowsReadError("EIO");
36
+ }
37
+ }
38
+ export function decodeWindowsReadResult(raw, maxBytes) {
39
+ let value;
40
+ try {
41
+ value = JSON.parse(raw);
42
+ }
43
+ catch {
44
+ throw windowsReadError("EIO");
45
+ }
46
+ if (value?.ok === false && typeof value.code === "string")
47
+ return decodeNativeFailure(value.code);
48
+ if (value?.ok === false && FAILURE_REASONS.has(value.reason)) {
49
+ if (value.byteCount !== undefined && !hasByteCount(value.byteCount))
50
+ throw windowsReadError("EIO");
51
+ return Object.freeze({
52
+ ok: false,
53
+ reason: value.reason,
54
+ ...(value.byteCount !== undefined ? { byteCount: value.byteCount } : {}),
55
+ });
56
+ }
57
+ if (value?.ok !== true || !hasByteCount(value.byteCount))
58
+ throw windowsReadError("EIO");
59
+ if (value.byteCount > maxBytes || typeof value.bytes !== "string")
60
+ throw windowsReadError("EIO");
61
+ if (value.bytes.length !== 4 * Math.ceil(value.byteCount / 3))
62
+ throw windowsReadError("EIO");
63
+ const bytes = Buffer.from(value.bytes, "base64");
64
+ if (bytes.length !== value.byteCount || bytes.toString("base64") !== value.bytes)
65
+ throw windowsReadError("EIO");
66
+ return Object.freeze({ ok: true, bytes, byteCount: value.byteCount });
67
+ }
@@ -24,6 +24,10 @@ export async function readBoundedRegularFile(absolutePath, options) {
24
24
  throw new RangeError("maxBytes must be a non-negative safe integer");
25
25
  }
26
26
  throwIfAborted(options.signal);
27
+ if (process.platform === "win32") {
28
+ const { readWindowsBoundedRegularFile } = await import("./files-windows/read.js");
29
+ return readWindowsBoundedRegularFile(absolutePath, options);
30
+ }
27
31
  if (typeof constants.O_NOFOLLOW !== "number") {
28
32
  return Object.freeze({ ok: false, reason: "safe_open_unsupported" });
29
33
  }
@@ -4,6 +4,7 @@ export * from "./parameters.js";
4
4
  export * from "./paths.js";
5
5
  export * from "./plugin.js";
6
6
  export * from "./results.js";
7
+ export * from "./mutation-result.js";
7
8
  export * from "./context-text-result.js";
8
9
  export * from "../capabilities/tool-media.js";
9
10
  export * from "./tool-availability-brief.js";
@@ -4,6 +4,7 @@ export * from "./parameters.js";
4
4
  export * from "./paths.js";
5
5
  export * from "./plugin.js";
6
6
  export * from "./results.js";
7
+ export * from "./mutation-result.js";
7
8
  export * from "./context-text-result.js";
8
9
  export * from "../capabilities/tool-media.js";
9
10
  export * from "./tool-availability-brief.js";
@@ -0,0 +1,7 @@
1
+ import type { ToolImplementationOutput } from "../plugin-contract/entrypoint.js";
2
+ import { type SuccessResultInput, type ToolResultBudget } from "./results.js";
3
+ /**
4
+ * Reports a mutation already confirmed by the owning plugin. This helper
5
+ * preserves its receipt; it does not execute or independently verify a change.
6
+ */
7
+ export declare function mutationSuccessResult(input: SuccessResultInput, resultBudget?: ToolResultBudget): ToolImplementationOutput;
@@ -0,0 +1,11 @@
1
+ import { successResult, } from "./results.js";
2
+ /**
3
+ * Reports a mutation already confirmed by the owning plugin. This helper
4
+ * preserves its receipt; it does not execute or independently verify a change.
5
+ */
6
+ export function mutationSuccessResult(input, resultBudget) {
7
+ return successResult({
8
+ ...input,
9
+ data: { ...input.data, mutationEvidence: true },
10
+ }, resultBudget);
11
+ }
@@ -1,7 +1,8 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { assertSessionProjectUnchanged, copySessionProject, } from "../../sessions/project-binding.js";
3
3
  import { assertValidSessionArtifactPathInputs, upsertSessionArtifactPaths, } from "../../sessions/artifact-paths.js";
4
- import { clientVisibleMessages, compactRequestEvents, filterMessagesAfter, getRequestFinalState, getSessionRequest, isSameMessageId, normalizeAfterSeq, normalizeCursor, normalizeLimit, normalizeSessionTitle, toClientReplayEvent, toEpochMs, toSessionListItem, toSnapshotMessage, toSnapshotRequest, } from "../../sessions/record/projection.js";
4
+ import { compactRequestEvents, getRequestFinalState, getSessionRequest, isSameMessageId, normalizeAfterSeq, normalizeCursor, normalizeLimit, normalizeSessionTitle, toClientReplayEvent, toEpochMs, toSessionListItem, } from "../../sessions/record/projection.js";
5
+ import { projectSessionSnapshot } from "../../sessions/snapshot.js";
5
6
  import { assertValidRequestId, assertValidSessionId, createContextEntryId, defaultCreateMessageId, pruneSupersededContextEntries, } from "../../sessions/record/rules.js";
6
7
  import { resolveSessionMemoryCheckpointCommit } from "../../sessions/memory/rules.js";
7
8
  import { assertSessionKindUnchanged, sessionKindCreationFields } from "../../sessions/spark-session.js";
@@ -99,21 +100,10 @@ class InMemorySessionStore {
99
100
  return session ? cloneSession(session) : null;
100
101
  }
101
102
  async getSessionSnapshot(sessionId, options = {}) {
102
- const session = await this.getSessionById(sessionId);
103
- if (!session) {
104
- return null;
105
- }
106
- return {
107
- sessionId,
108
- ...(session.kind ? { kind: session.kind } : {}),
109
- ...(session.project ? { project: session.project } : {}),
110
- title: session.title,
111
- messages: filterMessagesAfter(clientVisibleMessages(session.messages), options.afterMessageId).map((message) => toSnapshotMessage(sessionId, message, session.requests ?? [])),
112
- requests: options.includeRequests === false
113
- ? []
114
- : (session.requests ?? []).map(toSnapshotRequest),
115
- nextCursor: null,
116
- };
103
+ assertValidSessionId(sessionId);
104
+ const session = this.sessions.get(sessionId);
105
+ // Copy only the projection; identities-only reads never clone history bodies/events.
106
+ return session ? structuredClone(projectSessionSnapshot(session, options)) : null;
117
107
  }
118
108
  async getRequestReplayById(requestId, afterSeq = 0) {
119
109
  assertValidRequestId(requestId);
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { removeEmptyLockTree, removeObservedOwner } from "./cleanup.js";
3
3
  import { fileSystemErrorCode, INCOMPLETE_LOCK_GRACE_MS, LOCK_ACQUIRE_TIMEOUT_MS, LOCK_RETRY_DELAY_MS, ownerFileName, } from "./contracts.js";
4
4
  import { installLockDirectory } from "./install.js";
5
+ import { isWindowsLockReadDenial } from "./path-observation.js";
5
6
  import { readLockSnapshot } from "./snapshot.js";
6
7
  import { removeObservedOwnerSynchronously } from "./synchronous-release.js";
7
8
  export async function acquireFileLock(lockPath, options) {
@@ -18,7 +19,7 @@ export async function acquireFileLock(lockPath, options) {
18
19
  catch (error) {
19
20
  if (!isLockContention(error))
20
21
  throw error;
21
- const removed = await removeAbandonedLock(lockPath, processIsAlive);
22
+ const removed = await removeAbandonedLock(lockPath, processIsAlive, deadline, retryDelayMs);
22
23
  if (removed)
23
24
  continue;
24
25
  if (Date.now() >= deadline) {
@@ -45,8 +46,8 @@ function createRelease(lockPath, token, releaseMode) {
45
46
  function requiresSynchronousRelease(mode) {
46
47
  return mode === "synchronous";
47
48
  }
48
- async function removeAbandonedLock(lockPath, processIsAlive) {
49
- const snapshot = await readLockSnapshot(lockPath);
49
+ async function removeAbandonedLock(lockPath, processIsAlive, deadline, retryDelayMs) {
50
+ const snapshot = await readContendedSnapshot(lockPath, deadline, retryDelayMs);
50
51
  if (!snapshot)
51
52
  return true;
52
53
  if (snapshot.kind === "legacy_file" || !snapshot.reclaimable)
@@ -64,6 +65,22 @@ async function removeAbandonedLock(lockPath, processIsAlive) {
64
65
  }
65
66
  return removeEmptyLockTree(lockPath, snapshot.hasLeaseDirectory);
66
67
  }
68
+ async function readContendedSnapshot(lockPath, deadline, retryDelayMs) {
69
+ for (;;) {
70
+ try {
71
+ return await readLockSnapshot(lockPath);
72
+ }
73
+ catch (error) {
74
+ if (!isWindowsLockReadDenial(error))
75
+ throw error;
76
+ if (Date.now() >= deadline)
77
+ throw error;
78
+ // Windows can deny a pending deletion while stat still sees the directory.
79
+ // Wait within the acquisition budget; an unreadable owner is never reclaimed.
80
+ await delay(Math.min(retryDelayMs, Math.max(deadline - Date.now(), 0)));
81
+ }
82
+ }
83
+ }
67
84
  async function hasLiveObservedOwner(snapshot, processIsAlive) {
68
85
  if (snapshot.ownerPid === undefined)
69
86
  return false;
@@ -3,10 +3,12 @@ import { open } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { directorySnapshot, fileSystemErrorCode, LEASE_DIRECTORY_NAME, MAX_LOCK_RECORD_BYTES, } from "./contracts.js";
5
5
  import { isLockOwnerIdentity } from "./owner-identity.js";
6
+ import { observeLockReadFailure } from "./path-observation.js";
6
7
  export async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModifiedAtMs) {
7
8
  let handle;
8
9
  try {
9
- handle = await open(join(lockPath, LEASE_DIRECTORY_NAME, entryName), constants.O_RDONLY | constants.O_NOFOLLOW);
10
+ const ownerPath = join(lockPath, LEASE_DIRECTORY_NAME, entryName);
11
+ handle = await open(ownerPath, constants.O_RDONLY | constants.O_NOFOLLOW).catch(async (error) => { throw await observeLockReadFailure(ownerPath, error); });
10
12
  const before = await handle.stat({ bigint: true });
11
13
  const modifiedAtMs = Math.max(directoryModifiedAtMs, Number(before.mtimeMs));
12
14
  const hasReadableRecord = before.isFile() &&
@@ -0,0 +1,3 @@
1
+ /** Only confirmed disappearance can normalize a Windows pending-delete denial. */
2
+ export declare function observeLockReadFailure(path: string, error: unknown): Promise<unknown>;
3
+ export declare function isWindowsLockReadDenial(error: unknown): boolean;
@@ -0,0 +1,20 @@
1
+ import { lstat } from "node:fs/promises";
2
+ import { fileSystemErrorCode } from "./contracts.js";
3
+ /** Only confirmed disappearance can normalize a Windows pending-delete denial. */
4
+ export async function observeLockReadFailure(path, error) {
5
+ if (!isWindowsLockReadDenial(error))
6
+ return error;
7
+ try {
8
+ await lstat(path);
9
+ }
10
+ catch (observedError) {
11
+ if (fileSystemErrorCode(observedError) === "ENOENT")
12
+ return observedError;
13
+ }
14
+ return error;
15
+ }
16
+ export function isWindowsLockReadDenial(error) {
17
+ if (process.platform !== "win32")
18
+ return false;
19
+ return fileSystemErrorCode(error) === "EPERM";
20
+ }
@@ -2,6 +2,7 @@ import { lstat, readdir } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { directorySnapshot, fileSystemErrorCode, LEASE_DIRECTORY_NAME, OWNER_FILE_PATTERN, } from "./contracts.js";
4
4
  import { readOwnerRecord } from "./owner-record.js";
5
+ import { observeLockReadFailure } from "./path-observation.js";
5
6
  export async function readLockSnapshot(lockPath) {
6
7
  const lockInfo = await readLockInfo(lockPath);
7
8
  if (!lockInfo)
@@ -13,7 +14,8 @@ export async function readLockSnapshot(lockPath) {
13
14
  try {
14
15
  lockEntries = await readdir(lockPath, { withFileTypes: true });
15
16
  }
16
- catch (error) {
17
+ catch (readError) {
18
+ const error = await observeLockReadFailure(lockPath, readError);
17
19
  const code = fileSystemErrorCode(error);
18
20
  if (code === "ENOENT")
19
21
  return undefined;
@@ -45,7 +47,8 @@ async function readLockInfo(lockPath) {
45
47
  try {
46
48
  return await lstat(lockPath);
47
49
  }
48
- catch (error) {
50
+ catch (readError) {
51
+ const error = await observeLockReadFailure(lockPath, readError);
49
52
  if (fileSystemErrorCode(error) === "ENOENT")
50
53
  return undefined;
51
54
  throw error;
@@ -62,7 +65,8 @@ async function readLeaseSnapshot(lockPath, lockModifiedAtMs) {
62
65
  }
63
66
  leaseEntries = await readdir(leasePath, { withFileTypes: true });
64
67
  }
65
- catch (error) {
68
+ catch (readError) {
69
+ const error = await observeLockReadFailure(leasePath, readError);
66
70
  if (fileSystemErrorCode(error) === "ENOENT") {
67
71
  return invalidLeaseSnapshot(lockModifiedAtMs);
68
72
  }
@@ -1,7 +1,7 @@
1
1
  import type { RuntimeConfig, ModelGatewayClient, SessionStore } from "../ports.js";
2
2
  import type { LongTermMemoryService } from "../long-term-memory/contracts.js";
3
3
  import type { SessionRequestAdmission } from "../request/session-admission.js";
4
- /** The environment owns learning; the paired desktop owns native collection. */
4
+ /** The environment owns learning; the collection adapter owns the selected desktop source. */
5
5
  export declare function createRuntimePassiveLearning(params: {
6
6
  config: RuntimeConfig;
7
7
  models: ModelGatewayClient;
@@ -1,10 +1,10 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { join } from "node:path";
3
- import { connectHostObservations } from "../../computer-access/companion/observation-client.js";
3
+ import { connectRuntimeObservations } from "./runtime-observation-connection.js";
4
4
  import { createPassiveLearningService } from "../passive-learning/service.js";
5
5
  import { createRuntimePassiveLearningModel } from "../passive-learning/model.js";
6
6
  import { createCoWorkerResourceDependencies } from "./co-worker-resources.js";
7
- /** The environment owns learning; the paired desktop owns native collection. */
7
+ /** The environment owns learning; the collection adapter owns the selected desktop source. */
8
8
  export function createRuntimePassiveLearning(params) {
9
9
  const { config, models, memory } = params;
10
10
  const ownerId = createHash("sha256")
@@ -19,7 +19,7 @@ export function createRuntimePassiveLearning(params) {
19
19
  config, models, memory, context, ownerId, directory: join(config.paths.runtimeDir, "passive-learning"),
20
20
  sessions: params.sessions, deliveryAdmission: params.deliveryAdmission,
21
21
  }),
22
- connect: (input) => connectHostObservations({
22
+ connect: (input) => connectRuntimeObservations({
23
23
  ...input,
24
24
  ownerId,
25
25
  rootDir: config.paths.rootDir,
@@ -0,0 +1,5 @@
1
+ import type { HostObservationSubscription } from "../../shared/passive-observation.js";
2
+ /** Installation consent gates every collection route before transport or helper startup. */
3
+ export declare function connectRuntimeObservations(options: HostObservationSubscription): Promise<Readonly<{
4
+ close(): void;
5
+ }>>;
@@ -0,0 +1,13 @@
1
+ import { connectHostObservations } from "../../computer-access/companion/observation-client.js";
2
+ import { connectNativeObservations } from "../../computer-access/native-observation-connection.js";
3
+ import { requireCollectionConsent } from "../../computer-access/collection-consent.js";
4
+ import { readRuntimeCollectionSource } from "../../computer-access/observation-source.js";
5
+ /** Installation consent gates every collection route before transport or helper startup. */
6
+ export async function connectRuntimeObservations(options) {
7
+ options.abortSignal.throwIfAborted();
8
+ await requireCollectionConsent(options.rootDir);
9
+ options.abortSignal.throwIfAborted();
10
+ if (readRuntimeCollectionSource().mode === "native")
11
+ return connectNativeObservations(options);
12
+ return connectHostObservations(options);
13
+ }
@@ -5,6 +5,7 @@ import { loadRuntimeConfig } from "../config.js";
5
5
  import { DEFAULT_RUNTIME_CONFIG_FILE } from "../config/constants.js";
6
6
  import { loadRuntimeConfigFile } from "../config/loader.js";
7
7
  import { RUNTIME_CONFIG_JSON_SCHEMA } from "../config/schema.js";
8
+ import { resolveRuntimePath } from "../config/utils.js";
8
9
  import { RuntimeConfigValidationError, validateRuntimeConfigFile, } from "../config/validation.js";
9
10
  const NON_SECRET_TOKEN_CONFIG_KEYS = new Set([
10
11
  "contextwindowtokens",
@@ -23,7 +24,7 @@ function isRecord(value) {
23
24
  }
24
25
  function resolveConfigPath(rootDir, configPath) {
25
26
  return configPath
26
- ? join(rootDir, configPath)
27
+ ? resolveRuntimePath(rootDir, configPath)
27
28
  : join(rootDir, DEFAULT_RUNTIME_CONFIG_FILE);
28
29
  }
29
30
  function redactConfigValue(value) {
@@ -8,6 +8,7 @@ export type AutomationCatalogOperation = Readonly<{
8
8
  operationId: string;
9
9
  contractVersion: number;
10
10
  label: string;
11
+ outputChannels?: ToolNormalInvocationOperation["outputChannels"];
11
12
  pluginName?: string;
12
13
  catalogGroups: readonly ToolCatalogGroup[];
13
14
  toolDescription?: string;
@@ -32,6 +33,7 @@ export declare function readAutomationCatalog(input: {
32
33
  operationId: string;
33
34
  contractVersion: number;
34
35
  label: string;
36
+ outputChannels?: ToolNormalInvocationOperation["outputChannels"];
35
37
  pluginName?: string;
36
38
  catalogGroups: readonly ToolCatalogGroup[];
37
39
  toolDescription?: string;
@@ -49,6 +51,7 @@ export declare function readAutomationCatalog(input: {
49
51
  operationId: string;
50
52
  contractVersion: number;
51
53
  label: string;
54
+ outputChannels?: ToolNormalInvocationOperation["outputChannels"];
52
55
  pluginName?: string;
53
56
  catalogGroups: readonly ToolCatalogGroup[];
54
57
  toolDescription?: string;
@@ -16,6 +16,7 @@ export async function readAutomationCatalog(input) {
16
16
  operationId: operation.operationId,
17
17
  contractVersion: registration.contract.version,
18
18
  label: operation.summary,
19
+ ...(operation.outputChannels ? { outputChannels: operation.outputChannels } : {}),
19
20
  ...(registration.definition.pluginName
20
21
  ? { pluginName: registration.definition.pluginName }
21
22
  : {}),
@@ -10,11 +10,13 @@ export declare function projectAutomationModelDependencies(config: RuntimeConfig
10
10
  admission: Readonly<{
11
11
  policy: RequestExecutionPolicyId;
12
12
  primaryProfileId?: string;
13
+ plugins?: import("../config/model-plugin-config.js").RuntimeModelPluginConfig;
13
14
  source: "model_profile" | "default";
14
15
  }>;
15
16
  execution: Readonly<{
16
17
  policy: RequestExecutionPolicyId;
17
18
  primaryProfileId?: string;
19
+ plugins?: import("../config/model-plugin-config.js").RuntimeModelPluginConfig;
18
20
  source: "model_profile" | "default";
19
21
  }>;
20
22
  invocations: ({
@@ -122,6 +122,7 @@ export declare function createAutomationService(options: {
122
122
  operationId: string;
123
123
  contractVersion: number;
124
124
  label: string;
125
+ outputChannels?: import("../../capabilities/tool-types.js").ToolNormalInvocationOperation["outputChannels"];
125
126
  pluginName?: string;
126
127
  catalogGroups: readonly import("../../capabilities/tool-types.js").ToolCatalogGroup[];
127
128
  toolDescription?: string;
@@ -139,6 +140,7 @@ export declare function createAutomationService(options: {
139
140
  operationId: string;
140
141
  contractVersion: number;
141
142
  label: string;
143
+ outputChannels?: import("../../capabilities/tool-types.js").ToolNormalInvocationOperation["outputChannels"];
142
144
  pluginName?: string;
143
145
  catalogGroups: readonly import("../../capabilities/tool-types.js").ToolCatalogGroup[];
144
146
  toolDescription?: string;
@@ -47,7 +47,7 @@ export declare const AUTOMATION_AUTHORING_REFERENCE: {
47
47
  readonly steps: readonly [{
48
48
  readonly key: "evidence";
49
49
  readonly kind: "tool";
50
- readonly title: "Read structured evidence";
50
+ readonly title: "Read text evidence";
51
51
  readonly operation: {
52
52
  readonly toolName: "catalog_tool";
53
53
  readonly operationId: "catalog_operation";
@@ -63,7 +63,7 @@ export declare const AUTOMATION_AUTHORING_REFERENCE: {
63
63
  readonly evidence: {
64
64
  readonly kind: "node_result";
65
65
  readonly nodeId: "$evidence";
66
- readonly select: "data";
66
+ readonly select: "text";
67
67
  };
68
68
  };
69
69
  }];
@@ -326,10 +326,15 @@ export declare const AUTOMATION_AUTHORING_REFERENCE: {
326
326
  };
327
327
  };
328
328
  readonly channels: {
329
- readonly text: "Tool display output; may be counts/status only, not serialized data.";
330
- readonly data: "Structured tool output, when provided. Omit pointer to pass it whole, without knowing field names.";
329
+ readonly text: "Saved text.";
330
+ readonly data: "Separate optional JSON; no implicit Text channel.";
331
331
  };
332
- readonly policy: "Use literal for constants, run_input for definition.inputs. node_result needs a succeeded earlier node; no implicit output. Select the operation's documented channel: data for records/ids, text when sufficient. Optional data-only RFC6901 pointer: /field, /items/0; escape ~ as ~0 and / as ~1. Never invent fields or execute future steps to inspect output.";
332
+ readonly outputChannels: {
333
+ content: string;
334
+ metadata: string;
335
+ conditional: string;
336
+ };
337
+ readonly policy: "literal=constants; run_input=definition.inputs; node_result needs prior success. Follow operation.outputChannels; absent=unknown. Whole data needs no pointer. RFC6901 pointers need documented fields (/items/0; ~ as ~0, / as ~1). Never execute steps for output discovery.";
333
338
  readonly files: "run_file resolves a new file for each run under its working directory; fileName is one portable filename, no path. source_files requires a configured source and an agent consumer. source_file index selects the frozen batch entry; field=snapshot_path|original_path|version.";
334
339
  readonly parallel: "branch_results is agent-only after the referenced parallel join; it supplies each branch's settled tail output/status. A failed/skipped source has no successful node_result for downstream bindings.";
335
340
  };
@@ -61,10 +61,10 @@ export const AUTOMATION_AUTHORING_REFERENCE = {
61
61
  },
62
62
  bounds: { batch: AUTOMATION_DRAFT_BATCH_LIMITS, recipe: AUTOMATION_CREATION_RECIPE_LIMITS, graph: AUTOMATION_GRAPH_LIMITS },
63
63
  createPlanExample: { version: 1, settings: { objective: "Requested workflow outcome" }, steps: [
64
- { key: "evidence", kind: "tool", title: "Read structured evidence", operation },
64
+ { key: "evidence", kind: "tool", title: "Read text evidence", operation },
65
65
  { key: "analysis", kind: "agent", title: "Analyze evidence", modelProfileId: "catalog_model_id",
66
66
  prompt: "Analyze the supplied evidence.",
67
- inputs: { evidence: { kind: "node_result", nodeId: "$evidence", select: "data" } } },
67
+ inputs: { evidence: { kind: "node_result", nodeId: "$evidence", select: "text" } } },
68
68
  ] },
69
69
  creationRules: "New drafts use settings + ordered steps with unique keys and node shapes below. Runtime fills IDs, parents, indices and commands. Defaults: onFailure=stop; tool controls={}; agentMode=fast, roleInstructions='', inputs={}, tools=[], result={kind:'text'}. Override explicitly. Bind earlier results via $key. Parallel: {key,kind:'parallel',branches:[[steps],[steps]]}; branches are ordered and nonempty. Edit with commands; never mix commands and steps.",
70
70
  creationCapacity: `Budget ${AUTOMATION_CREATION_RECIPE_LIMITS.compiledCommands}: leaf=1, parallel group=1, nonempty settings=1; total across all branches. With settings, max ${AUTOMATION_CREATION_RECIPE_LIMITS.compiledCommands - 1} flat steps. Oversize rejects atomically: automation_recipe_capacity_exceeded. Expand with later draft edits.`,
@@ -107,12 +107,13 @@ export const AUTOMATION_AUTHORING_REFERENCE = {
107
107
  acceptanceExample: [{ field: "ready", equals: true }],
108
108
  acceptancePolicy: "Optional acceptance compares required scalar JSON fields to string/number/boolean values of the same type. A mismatch fails the step under onFailure, not a conditional branch. Use [] to clear. No if/else graph construct exists.", },
109
109
  bindings: { examples: bindings,
110
- channels: { text: "Tool display output; may be counts/status only, not serialized data.",
111
- data: "Structured tool output, when provided. Omit pointer to pass it whole, without knowing field names." },
112
- policy: "Use literal for constants, run_input for definition.inputs. node_result needs a succeeded earlier node; no implicit output. Select the operation's documented channel: data for records/ids, text when sufficient. Optional data-only RFC6901 pointer: /field, /items/0; escape ~ as ~0 and / as ~1. Never invent fields or execute future steps to inspect output.",
110
+ channels: { text: "Saved text.", data: "Separate optional JSON; no implicit Text channel." },
111
+ outputChannels: { content: "Substantive output; may be bounded/summarized.",
112
+ metadata: "IDs, status, counts or receipts; no content body.",
113
+ conditional: "Depends on operation inputs; do not assume content." },
114
+ policy: "literal=constants; run_input=definition.inputs; node_result needs prior success. Follow operation.outputChannels; absent=unknown. Whole data needs no pointer. RFC6901 pointers need documented fields (/items/0; ~ as ~0, / as ~1). Never execute steps for output discovery.",
113
115
  files: "run_file resolves a new file for each run under its working directory; fileName is one portable filename, no path. source_files requires a configured source and an agent consumer. source_file index selects the frozen batch entry; field=snapshot_path|original_path|version.",
114
- parallel: "branch_results is agent-only after the referenced parallel join; it supplies each branch's settled tail output/status. A failed/skipped source has no successful node_result for downstream bindings.",
115
- },
116
+ parallel: "branch_results is agent-only after the referenced parallel join; it supplies each branch's settled tail output/status. A failed/skipped source has no successful node_result for downstream bindings.", },
116
117
  definition: {
117
118
  editableFields: ["title", "objective", "workingDirectory", "trigger", "source", "inputs", "limits"],
118
119
  replacement: "A patch merges top-level fields only; inputs, controls, tools, result, acceptance, source, trigger and limits replace their entire field. Keep existing entries when changing part. Limits require all seven keys.",