@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,202 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { once } from "node:events";
3
+ import { createWriteStream } from "node:fs";
4
+ import { mkdir, open, rename, writeFile } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ import { finished } from "node:stream/promises";
7
+ import { SystemOperationError } from "./contracts.js";
8
+ import { CapturedOutputProtectionError, discardCapturedOutput, protectCapturedOutput } from "./command-output-protection.js";
9
+ import { activeSystemCaptures, scheduleSystemOutputCleanup } from "./command-output-retention.js";
10
+ const STREAMS = ["stdout", "stderr"];
11
+ const OUTPUT_IO_CHUNK_BYTES = 64 * 1024;
12
+ /** Private backpressured capture. No read is admitted before complete checks. */
13
+ export async function createSystemOutputCapture(root, retentionMs, redact) {
14
+ if (!hasOutputProtection(redact))
15
+ throw new SystemOperationError("system_output_protection_failed", "Command output protection is unavailable. The command was not dispatched.");
16
+ const id = randomUUID();
17
+ const directory = join(root, id);
18
+ activeSystemCaptures.add(directory);
19
+ try {
20
+ await mkdir(directory, { recursive: true, mode: 0o700 });
21
+ }
22
+ catch {
23
+ activeSystemCaptures.delete(directory);
24
+ throw new SystemOperationError("system_output_storage_failed", "Output storage could not be prepared. The command was not dispatched.");
25
+ }
26
+ let storageFailure, securityFailure;
27
+ let stop;
28
+ let ended = false, retained = false, admitted = false;
29
+ let receipt;
30
+ let processResult;
31
+ let finishing;
32
+ const sources = [];
33
+ const completeStreams = new Set();
34
+ const paths = { stdout: join(directory, "stdout.bytes"), stderr: join(directory, "stderr.bytes") };
35
+ const streams = STREAMS.map((name) => {
36
+ const sink = createWriteStream(paths[name], { flags: "wx", mode: 0o600, highWaterMark: OUTPUT_IO_CHUNK_BYTES, flush: true });
37
+ const completion = finished(sink).catch(() => { storageFailure ??= "write_failed"; stop?.(); });
38
+ return { sink, completion };
39
+ });
40
+ try {
41
+ await Promise.all(streams.map(({ sink }) => once(sink, "open")));
42
+ }
43
+ catch {
44
+ for (const { sink } of streams)
45
+ sink.destroy();
46
+ await Promise.all(streams.map(({ completion }) => completion));
47
+ activeSystemCaptures.delete(directory);
48
+ scheduleSystemOutputCleanup(root, retentionMs);
49
+ throw new SystemOperationError("system_output_storage_failed", "Output files could not be opened. The command was not dispatched.");
50
+ }
51
+ scheduleSystemOutputCleanup(root, retentionMs);
52
+ const failure = () => storageFailure ?? securityFailure;
53
+ const capture = {
54
+ attach(stdout, stderr, onFailure) {
55
+ if (!canAttachCapture()) {
56
+ securityFailure ??= "output_protection_failed";
57
+ onFailure();
58
+ return;
59
+ }
60
+ stop = onFailure;
61
+ sources.push(stdout, stderr);
62
+ for (const [index, source] of sources.entries()) {
63
+ source.once("end", () => completeStreams.add(STREAMS[index]));
64
+ source.once("error", () => { securityFailure ??= "output_incomplete"; stop?.(); });
65
+ source.pipe(streams[index].sink);
66
+ }
67
+ if (failure())
68
+ onFailure();
69
+ },
70
+ end() {
71
+ if (ended)
72
+ return;
73
+ ended = true;
74
+ if (!hasCompleteStreams())
75
+ securityFailure ??= "output_incomplete";
76
+ for (const source of sources) {
77
+ source.unpipe();
78
+ source.destroy();
79
+ }
80
+ for (const { sink } of streams)
81
+ if (!sink.destroyed && !sink.writableEnded)
82
+ sink.end();
83
+ },
84
+ };
85
+ function canAttachCapture() { return sources.length === 0 && !ended; }
86
+ function hasCompleteStreams() { return completeStreams.size === 2; }
87
+ function protectProcess(result) {
88
+ if (!result)
89
+ return;
90
+ let spawnedProcess = result.spawnedProcess;
91
+ if (spawnedProcess) {
92
+ let executable = "[REDACTED]";
93
+ try {
94
+ executable = redact(spawnedProcess.executable);
95
+ if (!hasProtectedIdentity(executable))
96
+ throw new Error("output_protection_failed");
97
+ }
98
+ catch {
99
+ securityFailure ??= "output_protection_failed";
100
+ executable = "[REDACTED]";
101
+ }
102
+ spawnedProcess = { ...spawnedProcess, executable };
103
+ }
104
+ processResult = { exitCode: result.exitCode, status: result.status, outputTruncated: result.outputTruncated,
105
+ stdout: "", stderr: "", ...(spawnedProcess ? { spawnedProcess } : {}) };
106
+ }
107
+ async function finish(result, materialize = true) {
108
+ capture.end();
109
+ await Promise.all(streams.map(({ completion }) => completion));
110
+ protectProcess(result);
111
+ let protectedBytes;
112
+ try {
113
+ if (!failure()) {
114
+ try {
115
+ protectedBytes = await protectCapturedOutput(paths, redact);
116
+ }
117
+ catch (error) {
118
+ if (isOutputStorageFailure(error))
119
+ storageFailure ??= "write_failed";
120
+ else
121
+ securityFailure ??= "output_protection_failed";
122
+ }
123
+ }
124
+ if (failure() && !await discardCapturedOutput(paths))
125
+ storageFailure = "capture_purge_failed";
126
+ receipt = { id, stdoutBytes: protectedBytes?.stdout.length ?? 0, stderrBytes: protectedBytes?.stderr.length ?? 0,
127
+ completedAt: new Date().toISOString(), retentionMs, complete: !failure(), ...(!materialize && protectedBytes ? {
128
+ stdoutSha256: createHash("sha256").update(protectedBytes.stdout).digest("hex"),
129
+ stderrSha256: createHash("sha256").update(protectedBytes.stderr).digest("hex"),
130
+ } : {}) };
131
+ try {
132
+ const temporary = join(directory, "receipt.tmp");
133
+ await writeFile(temporary, JSON.stringify({ kind: "system_command_output_v1", ...receipt,
134
+ processStatus: processResult?.status, exitCode: processResult?.exitCode, spawnedProcess: processResult?.spawnedProcess,
135
+ ...(securityFailure ? { securityFailure } : {}), ...(storageFailure ? { storageFailure } : {}) }), { flag: "wx", mode: 0o600, flush: true });
136
+ await rename(temporary, join(directory, "receipt.json"));
137
+ }
138
+ catch {
139
+ storageFailure ??= "receipt_write_failed";
140
+ receipt = { ...receipt, complete: false };
141
+ }
142
+ admitted = receipt.complete;
143
+ if (!admitted || !materialize || !protectedBytes)
144
+ return { stdout: "", stderr: "" };
145
+ return { stdout: protectedBytes.stdout.toString("utf8"), stderr: protectedBytes.stderr.toString("utf8") };
146
+ }
147
+ finally {
148
+ protectedBytes?.stdout.fill(0);
149
+ protectedBytes?.stderr.fill(0);
150
+ if (!retained)
151
+ activeSystemCaptures.delete(directory);
152
+ }
153
+ }
154
+ return {
155
+ capture,
156
+ get receipt() { return receipt; },
157
+ get failure() { return failure(); },
158
+ get failureKind() {
159
+ if (storageFailure)
160
+ return "storage";
161
+ return securityFailure ? "security" : undefined;
162
+ },
163
+ get processResult() { return processResult; },
164
+ retain() { retained = true; activeSystemCaptures.add(directory); },
165
+ release() { retained = false; activeSystemCaptures.delete(directory); },
166
+ async read(stream, offset, length) {
167
+ if (!admitted)
168
+ throw new Error("system_output_unavailable");
169
+ if (!isAdmittedOutputRead(stream, offset, length, receipt))
170
+ throw new Error("system_output_reference_invalid");
171
+ const file = await open(paths[stream], "r");
172
+ try {
173
+ const size = stream === "stdout" ? receipt.stdoutBytes : receipt.stderrBytes;
174
+ const bytes = Buffer.alloc(Math.min(length, size - offset));
175
+ const { bytesRead } = await file.read(bytes, 0, bytes.length, offset);
176
+ return bytes.subarray(0, bytesRead);
177
+ }
178
+ finally {
179
+ await file.close();
180
+ }
181
+ },
182
+ finish(result, materialize = true) {
183
+ finishing ??= finish(result, materialize);
184
+ return finishing;
185
+ },
186
+ };
187
+ }
188
+ function hasOutputProtection(value) { return typeof value === "function"; }
189
+ function hasProtectedIdentity(value) { return typeof value === "string"; }
190
+ function isOutputStorageFailure(error) {
191
+ return error instanceof CapturedOutputProtectionError && error.reason === "output_storage_failed";
192
+ }
193
+ function isAdmittedOutputRead(stream, offset, length, receipt) {
194
+ if (stream !== "stdout" && stream !== "stderr")
195
+ return false;
196
+ if (!Number.isSafeInteger(offset) || offset < 0)
197
+ return false;
198
+ if (!Number.isSafeInteger(length) || length < 0)
199
+ return false;
200
+ const size = stream === "stdout" ? receipt.stdoutBytes : receipt.stderrBytes;
201
+ return offset <= size;
202
+ }
@@ -0,0 +1,17 @@
1
+ export type CapturedOutputPaths = Readonly<{
2
+ stdout: string;
3
+ stderr: string;
4
+ }>;
5
+ export type ProtectedOutputBytes = Readonly<{
6
+ stdout: Buffer;
7
+ stderr: Buffer;
8
+ }>;
9
+ export type OutputProtectionFailure = "output_protection_failed" | "output_storage_failed";
10
+ export declare class CapturedOutputProtectionError extends Error {
11
+ readonly reason: OutputProtectionFailure;
12
+ constructor(reason: OutputProtectionFailure);
13
+ }
14
+ /** Check both complete private streams before replacing either source. */
15
+ export declare function protectCapturedOutput(paths: CapturedOutputPaths, redact: (text: string) => string): Promise<ProtectedOutputBytes>;
16
+ /** A failed check makes the private sources unavailable, including later reads. */
17
+ export declare function discardCapturedOutput(paths: CapturedOutputPaths): Promise<boolean>;
@@ -0,0 +1,59 @@
1
+ import { readFile, rm, writeFile } from "node:fs/promises";
2
+ export class CapturedOutputProtectionError extends Error {
3
+ reason;
4
+ constructor(reason) {
5
+ super(reason);
6
+ this.reason = reason;
7
+ }
8
+ }
9
+ /** Check both complete private streams before replacing either source. */
10
+ export async function protectCapturedOutput(paths, redact) {
11
+ let stdout, stderr;
12
+ try {
13
+ stdout = await protectStream(paths.stdout, redact);
14
+ stderr = await protectStream(paths.stderr, redact);
15
+ const writes = await Promise.allSettled([
16
+ writeFile(paths.stdout, stdout, { flag: "w", mode: 0o600, flush: true }),
17
+ writeFile(paths.stderr, stderr, { flag: "w", mode: 0o600, flush: true }),
18
+ ]);
19
+ if (hasRejectedOutputWrite(writes))
20
+ throw new CapturedOutputProtectionError("output_storage_failed");
21
+ return { stdout, stderr };
22
+ }
23
+ catch (error) {
24
+ stdout?.fill(0);
25
+ stderr?.fill(0);
26
+ throw error;
27
+ }
28
+ }
29
+ async function protectStream(path, redact) {
30
+ let bytes;
31
+ try {
32
+ bytes = await readFile(path);
33
+ }
34
+ catch {
35
+ throw new CapturedOutputProtectionError("output_storage_failed");
36
+ }
37
+ try {
38
+ const text = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes);
39
+ const protectedText = redact(text);
40
+ if (!isProtectedOutputText(protectedText))
41
+ throw new Error("output_protection_failed");
42
+ return Buffer.from(protectedText, "utf8");
43
+ }
44
+ catch {
45
+ throw new CapturedOutputProtectionError("output_protection_failed");
46
+ }
47
+ finally {
48
+ bytes.fill(0);
49
+ }
50
+ }
51
+ /** A failed check makes the private sources unavailable, including later reads. */
52
+ export async function discardCapturedOutput(paths) {
53
+ const removed = await Promise.allSettled(Object.values(paths).map((path) => rm(path, { force: true })));
54
+ return removed.every((entry) => entry.status === "fulfilled");
55
+ }
56
+ function isProtectedOutputText(value) { return typeof value === "string"; }
57
+ function hasRejectedOutputWrite(writes) {
58
+ return writes.some((entry) => entry.status === "rejected");
59
+ }
@@ -0,0 +1,5 @@
1
+ export declare const DEFAULT_SYSTEM_OUTPUT_RETENTION_MS: number;
2
+ export declare const activeSystemCaptures: Set<string>;
3
+ export declare function cleanupSystemOutput(root: string, retentionMs: number): Promise<number>;
4
+ /** One cleanup job per storage root; the supplied policy also covers incomplete captures. */
5
+ export declare function scheduleSystemOutputCleanup(root: string, retentionMs: number): void;
@@ -0,0 +1,90 @@
1
+ import { readFile, readdir, rm, stat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export const DEFAULT_SYSTEM_OUTPUT_RETENTION_MS = 7 * 24 * 60 * 60_000;
4
+ export const activeSystemCaptures = new Set();
5
+ const jobs = new Map();
6
+ const CAPTURE_ID = /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/;
7
+ export async function cleanupSystemOutput(root, retentionMs) {
8
+ const entries = await readdir(root, { withFileTypes: true }).catch((error) => {
9
+ if (error.code === "ENOENT")
10
+ return [];
11
+ throw error;
12
+ });
13
+ let removed = 0;
14
+ for (const entry of entries) {
15
+ if (!entry.isDirectory() || !CAPTURE_ID.test(entry.name))
16
+ continue;
17
+ const directory = join(root, entry.name);
18
+ if (activeSystemCaptures.has(directory))
19
+ continue;
20
+ const files = await readdir(directory);
21
+ const times = await Promise.all(files.map(async (file) => (await stat(join(directory, file))).mtimeMs));
22
+ const completedAt = Math.max((await stat(directory)).mtimeMs, ...times);
23
+ const captureRetentionMs = await readCaptureRetention(directory, entry.name, retentionMs);
24
+ if (Date.now() - completedAt < captureRetentionMs)
25
+ continue;
26
+ if (activeSystemCaptures.has(directory))
27
+ continue;
28
+ await rm(directory, { recursive: true });
29
+ removed += 1;
30
+ }
31
+ return removed;
32
+ }
33
+ /** Completed captures keep the policy recorded by their producer across reconnects. */
34
+ async function readCaptureRetention(directory, id, fallbackMs) {
35
+ let receipt;
36
+ try {
37
+ receipt = JSON.parse(await readFile(join(directory, "receipt.json"), "utf8"));
38
+ }
39
+ catch (error) {
40
+ if (error.code === "ENOENT")
41
+ return fallbackMs;
42
+ if (error instanceof SyntaxError)
43
+ return fallbackMs;
44
+ throw error;
45
+ }
46
+ if (receipt === null || typeof receipt !== "object")
47
+ return fallbackMs;
48
+ if (!("kind" in receipt) || receipt.kind !== "system_command_output_v1")
49
+ return fallbackMs;
50
+ if (!("id" in receipt) || receipt.id !== id)
51
+ return fallbackMs;
52
+ if (!("retentionMs" in receipt) || typeof receipt.retentionMs !== "number")
53
+ return fallbackMs;
54
+ if (!Number.isSafeInteger(receipt.retentionMs) || receipt.retentionMs < 1)
55
+ return fallbackMs;
56
+ return receipt.retentionMs;
57
+ }
58
+ /** One cleanup job per storage root; the supplied policy also covers incomplete captures. */
59
+ export function scheduleSystemOutputCleanup(root, retentionMs) {
60
+ const previous = jobs.get(root);
61
+ if (previous) {
62
+ previous.retentionMs = retentionMs;
63
+ previous.requested = true;
64
+ return;
65
+ }
66
+ const job = { retentionMs, requested: false };
67
+ jobs.set(root, job);
68
+ const sweep = async () => {
69
+ job.requested = false;
70
+ let empty = false;
71
+ try {
72
+ await cleanupSystemOutput(root, job.retentionMs);
73
+ empty = (await readdir(root).catch((error) => {
74
+ if (error.code === "ENOENT")
75
+ return [];
76
+ throw error;
77
+ })).length === 0;
78
+ }
79
+ catch {
80
+ process.emitWarning("SYSTEM output cleanup failed; retained output was not confirmed removed.", { code: "SYSTEM_OUTPUT_CLEANUP_FAILED" });
81
+ }
82
+ if (empty && !job.requested) {
83
+ jobs.delete(root);
84
+ return;
85
+ }
86
+ const timer = setTimeout(() => { void sweep(); }, Math.max(1, Math.min(job.retentionMs, 60 * 60_000)));
87
+ timer.unref();
88
+ };
89
+ void sweep();
90
+ }
@@ -0,0 +1,7 @@
1
+ import type { ToolExecutionContext, ToolImplementationOutput } from "../plugin-sdk/index.js";
2
+ import type { SystemProcessResult, SystemProcessRunner, SystemTarget } from "./contracts.js";
3
+ /** Allocated per command; probes and companion calls retain their existing runner. */
4
+ export type SystemCommandOutputFactory = (context?: ToolExecutionContext) => Readonly<{
5
+ run: SystemProcessRunner;
6
+ present(target: SystemTarget, result: SystemProcessResult): Promise<ToolImplementationOutput>;
7
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -3,5 +3,6 @@ export declare function executeSystemCommand(input: {
3
3
  target: SystemTarget;
4
4
  params: Record<string, unknown>;
5
5
  run: SystemProcessRunner;
6
+ runCommand?: SystemProcessRunner;
6
7
  abortSignal?: AbortSignal;
7
8
  }): Promise<SystemProcessResult>;
@@ -32,7 +32,7 @@ export async function executeSystemCommand(input) {
32
32
  const plan = params.elevated === true
33
33
  ? await elevatedSystemCommand({ target, command, cwd, run })
34
34
  : unprivilegedSystemCommand(target, command, cwd);
35
- return run({
35
+ return (input.runCommand ?? run)({
36
36
  ...plan,
37
37
  timeoutMs,
38
38
  ...(input.abortSignal ? { abortSignal: input.abortSignal } : {}),
@@ -0,0 +1,12 @@
1
+ export declare const SYSTEM_OUTPUT_CAPABILITY = "system_command_output_v1";
2
+ /** Base64 plus receipts stay below both Companion and broker message limits. */
3
+ export declare const SYSTEM_OUTPUT_CHUNK_BYTES: number;
4
+ export type SystemOutputTransfer = Readonly<{
5
+ kind: typeof SYSTEM_OUTPUT_CAPABILITY;
6
+ id: string;
7
+ stdoutBytes: number;
8
+ stderrBytes: number;
9
+ stdoutSha256: string;
10
+ stderrSha256: string;
11
+ }>;
12
+ export declare function readSystemOutputTransfer(value: unknown): SystemOutputTransfer;
@@ -0,0 +1,28 @@
1
+ import { isHostIdentifier, isHostRecord } from "./protocol.js";
2
+ export const SYSTEM_OUTPUT_CAPABILITY = "system_command_output_v1";
3
+ /** Base64 plus receipts stay below both Companion and broker message limits. */
4
+ export const SYSTEM_OUTPUT_CHUNK_BYTES = 64 * 1024;
5
+ function isStreamByteCount(value) {
6
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
7
+ }
8
+ function isStreamDigest(value) {
9
+ return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
10
+ }
11
+ export function readSystemOutputTransfer(value) {
12
+ if (!isHostRecord(value))
13
+ throw new Error("system_output_receipt_invalid");
14
+ if (value.kind !== SYSTEM_OUTPUT_CAPABILITY)
15
+ throw new Error("system_output_receipt_invalid");
16
+ if (!isHostIdentifier(value.id))
17
+ throw new Error("system_output_receipt_invalid");
18
+ if (!isStreamByteCount(value.stdoutBytes))
19
+ throw new Error("system_output_receipt_invalid");
20
+ if (!isStreamByteCount(value.stderrBytes))
21
+ throw new Error("system_output_receipt_invalid");
22
+ if (!isStreamDigest(value.stdoutSha256))
23
+ throw new Error("system_output_receipt_invalid");
24
+ if (!isStreamDigest(value.stderrSha256))
25
+ throw new Error("system_output_receipt_invalid");
26
+ return { kind: SYSTEM_OUTPUT_CAPABILITY, id: value.id, stdoutBytes: value.stdoutBytes,
27
+ stderrBytes: value.stderrBytes, stdoutSha256: value.stdoutSha256, stderrSha256: value.stderrSha256 };
28
+ }
@@ -0,0 +1,14 @@
1
+ import { type ToolImplementation } from "../../plugin-sdk/index.js";
2
+ /** References belong to this authenticated connection; no arbitrary file access. */
3
+ export declare class CompanionCommandOutput {
4
+ private readonly stateDir;
5
+ private readonly captures;
6
+ private closed;
7
+ constructor(stateDir: string);
8
+ hasTransfers(): boolean;
9
+ close(): void;
10
+ handlers(): Record<string, ToolImplementation>;
11
+ private command;
12
+ private hasRegisteredTransfer;
13
+ private read;
14
+ }
@@ -0,0 +1,127 @@
1
+ import { join } from "node:path";
2
+ import { failureResult, readBoundedInteger, successResult } from "../../plugin-sdk/index.js";
3
+ import { createSystemHandlers } from "../handlers.js";
4
+ import { createSystemOutputCapture } from "../command-output-capture.js";
5
+ import { DEFAULT_SYSTEM_OUTPUT_RETENTION_MS, scheduleSystemOutputCleanup } from "../command-output-retention.js";
6
+ import { runSystemProcess } from "../process-runner.js";
7
+ import { buildSystemProcessResult } from "../process-result.js";
8
+ import { isHostIdentifier } from "./protocol.js";
9
+ import { SYSTEM_OUTPUT_CAPABILITY, SYSTEM_OUTPUT_CHUNK_BYTES, readSystemOutputTransfer } from "./command-output-protocol.js";
10
+ import { redactSecretText } from "../security/secret-text.js";
11
+ import { systemResultProtection } from "../security/system-results.js";
12
+ /** References belong to this authenticated connection; no arbitrary file access. */
13
+ export class CompanionCommandOutput {
14
+ stateDir;
15
+ captures = new Map();
16
+ closed = false;
17
+ constructor(stateDir) {
18
+ this.stateDir = stateDir;
19
+ scheduleSystemOutputCleanup(join(stateDir, "command-output"), DEFAULT_SYSTEM_OUTPUT_RETENTION_MS);
20
+ }
21
+ hasTransfers() { return this.captures.size > 0; }
22
+ close() {
23
+ this.closed = true;
24
+ for (const capture of this.captures.values())
25
+ capture.release();
26
+ this.captures.clear();
27
+ }
28
+ handlers() {
29
+ return {
30
+ system_command_capture: (params, context) => this.command(params, context),
31
+ system_command_output: async (params) => {
32
+ try {
33
+ return await this.read(params);
34
+ }
35
+ catch {
36
+ return failureResult({ errorCode: "system_output_unavailable", message: "Retained command output is unavailable in this connection. The command was not replayed." });
37
+ }
38
+ },
39
+ system_command_output_close: async (params) => {
40
+ if (!isHostIdentifier(params.captureId))
41
+ return failureResult({ errorCode: "system_output_reference_invalid", message: "Invalid output reference." });
42
+ this.captures.get(params.captureId)?.release();
43
+ this.captures.delete(params.captureId);
44
+ return successResult({ output: "Output transfer closed; disk retention remains in effect." });
45
+ },
46
+ };
47
+ }
48
+ async command(params, context) {
49
+ if (this.closed)
50
+ return failureResult({ errorCode: "system_output_closed", message: "The connection closed before dispatch." });
51
+ const retentionMs = readBoundedInteger(params.outputRetentionMs, {
52
+ name: "outputRetentionMs", defaultValue: DEFAULT_SYSTEM_OUTPUT_RETENTION_MS,
53
+ minimum: 1, maximum: Number.MAX_SAFE_INTEGER,
54
+ });
55
+ let captured;
56
+ const handlers = createSystemHandlers(undefined, undefined, () => ({
57
+ run: async (input) => {
58
+ if (input.abortSignal?.aborted)
59
+ return runSystemProcess(input);
60
+ captured = await createSystemOutputCapture(join(this.stateDir, "command-output"), retentionMs, redactSecretText);
61
+ captured.retain();
62
+ try {
63
+ const result = await runSystemProcess(input, captured.capture);
64
+ await captured.finish(result, false);
65
+ return { ...captured.processResult, outputTruncated: Boolean(captured.failure) };
66
+ }
67
+ catch (error) {
68
+ await captured.finish(undefined, false);
69
+ captured.release();
70
+ throw error;
71
+ }
72
+ },
73
+ present: async (target, result) => {
74
+ const receipt = buildSystemProcessResult(target, result, "command_process_completion");
75
+ if (!captured?.receipt)
76
+ return receipt;
77
+ const data = { ...receipt.data, outputCapture: captured.receipt };
78
+ if (captured.failure) {
79
+ captured.release();
80
+ const errorCode = captured.failureKind === "security" ? "system_output_protection_failed" : "system_output_storage_failed";
81
+ return failureResult({ errorCode, message: "Command output could not be admitted after dispatch; inspect the process receipt before another action. The command was not replayed.",
82
+ data: { ...data, ...(captured.failureKind === "security"
83
+ ? { securityFailure: captured.failure } : { storageFailure: captured.failure }) },
84
+ ...(result.exitCode !== null ? { exitCode: result.exitCode } : {}) });
85
+ }
86
+ if (this.closed || context?.abortSignal?.aborted) {
87
+ captured.release();
88
+ return { ...receipt, data };
89
+ }
90
+ const transfer = readSystemOutputTransfer({ kind: SYSTEM_OUTPUT_CAPABILITY, ...captured.receipt });
91
+ this.captures.set(transfer.id, captured);
92
+ return { ...receipt, output: receipt.output.split("\nSTDOUT excerpt:")[0] + "\nSTDOUT excerpt:\nStreams retained for exact transfer.",
93
+ data: { ...data, outputTransfer: transfer } };
94
+ },
95
+ }), systemResultProtection);
96
+ const { outputRetentionMs: _retention, ...command } = params;
97
+ try {
98
+ return await handlers.system_command(command, context);
99
+ }
100
+ finally {
101
+ if (!this.hasRegisteredTransfer(captured))
102
+ captured?.release();
103
+ }
104
+ }
105
+ hasRegisteredTransfer(capture) {
106
+ const id = capture?.receipt?.id;
107
+ if (!id)
108
+ return false;
109
+ return this.captures.get(id) === capture;
110
+ }
111
+ async read(params) {
112
+ if (!isHostIdentifier(params.captureId))
113
+ throw new Error("system_output_reference_invalid");
114
+ const capture = this.captures.get(params.captureId);
115
+ if (!capture?.receipt)
116
+ throw new Error("system_output_reference_unknown");
117
+ if (params.stream !== "stdout" && params.stream !== "stderr")
118
+ throw new Error("system_output_stream_invalid");
119
+ const stream = params.stream;
120
+ const size = stream === "stdout" ? capture.receipt.stdoutBytes : capture.receipt.stderrBytes;
121
+ const offset = readBoundedInteger(params.offset, { name: "offset", minimum: 0, maximum: size });
122
+ const bytes = await capture.read(stream, offset, Math.min(SYSTEM_OUTPUT_CHUNK_BYTES, size - offset));
123
+ return successResult({ output: "Private command-output chunk.", data: {
124
+ captureId: params.captureId, stream, offset, bytes: bytes.toString("base64"),
125
+ } });
126
+ }
127
+ }
@@ -0,0 +1,7 @@
1
+ import type { NativeAutostartOptions } from "./autostart.js";
2
+ export declare function renderMacInstallLinkHandler(options: NativeAutostartOptions): string;
3
+ export declare const MAC_INSTALL_LINK_BUNDLE_ID = "com.abot.install-links";
4
+ export declare const MAC_INSTALL_LINK_HANDLER_QUERY_SCRIPT = "ObjC.import('CoreServices');\nfunction run(argv) {\n var handler = ObjC.castRefToObject($.LSCopyDefaultHandlerForURLScheme($(argv[0])));\n if (handler.isNil()) return '';\n return ObjC.unwrap(handler);\n}\n";
5
+ export declare function requireAvailableMacInstallScheme(): Promise<void>;
6
+ /** Preserve the executable and scripting metadata emitted by osacompile. */
7
+ export declare const MAC_INSTALL_LINK_PLIST_SCRIPT = "ObjC.import('Foundation');\nfunction run(argv) {\n var plist = $.NSMutableDictionary.alloc.initWithContentsOfFile($(argv[0]));\n if (!plist) throw new Error('Installation-link bundle has no property list.');\n var updates = {\n CFBundleIdentifier: 'com.abot.install-links',\n CFBundleName: 'ABot Install',\n LSUIElement: true,\n CFBundleURLTypes: [{CFBundleURLName: 'ABot installation links', CFBundleURLSchemes: ['abot']}]\n };\n Object.keys(updates).forEach(function(key) { plist.setObjectForKey($(updates[key]), $(key)); });\n if (!plist.writeToFileAtomically($(argv[0]), true)) throw new Error('Could not register installation links.');\n}\n";
@@ -0,0 +1,49 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ export function renderMacInstallLinkHandler(options) {
4
+ const literal = (value) => JSON.stringify(value);
5
+ return `ObjC.import('Foundation');
6
+ function openDocuments() {}
7
+ // JXA dispatches the macOS Get URL (GURL/GURL) AppleEvent to this exact name.
8
+ function GURLGURL(url) {
9
+ var task = $.NSTask.alloc.init;
10
+ task.launchPath = ${literal(options.nodePath)};
11
+ task.arguments = [${literal(options.cliPath)}, 'host', 'open-link', String(url)];
12
+ task.launch;
13
+ }
14
+ `;
15
+ }
16
+ export const MAC_INSTALL_LINK_BUNDLE_ID = "com.abot.install-links";
17
+ export const MAC_INSTALL_LINK_HANDLER_QUERY_SCRIPT = `ObjC.import('CoreServices');
18
+ function run(argv) {
19
+ var handler = ObjC.castRefToObject($.LSCopyDefaultHandlerForURLScheme($(argv[0])));
20
+ if (handler.isNil()) return '';
21
+ return ObjC.unwrap(handler);
22
+ }
23
+ `;
24
+ const executeFile = promisify(execFile);
25
+ function isAvailableMacInstallScheme(handler) {
26
+ if (!handler)
27
+ return true;
28
+ return handler === MAC_INSTALL_LINK_BUNDLE_ID;
29
+ }
30
+ export async function requireAvailableMacInstallScheme() {
31
+ const { stdout } = await executeFile("/usr/bin/osascript", ["-l", "JavaScript", "-e", MAC_INSTALL_LINK_HANDLER_QUERY_SCRIPT, "abot"], { timeout: 30_000, maxBuffer: 16_384 });
32
+ if (!isAvailableMacInstallScheme(stdout.trim()))
33
+ throw new Error("The abot URL scheme belongs to another application.");
34
+ }
35
+ /** Preserve the executable and scripting metadata emitted by osacompile. */
36
+ export const MAC_INSTALL_LINK_PLIST_SCRIPT = `ObjC.import('Foundation');
37
+ function run(argv) {
38
+ var plist = $.NSMutableDictionary.alloc.initWithContentsOfFile($(argv[0]));
39
+ if (!plist) throw new Error('Installation-link bundle has no property list.');
40
+ var updates = {
41
+ CFBundleIdentifier: '${MAC_INSTALL_LINK_BUNDLE_ID}',
42
+ CFBundleName: 'ABot Install',
43
+ LSUIElement: true,
44
+ CFBundleURLTypes: [{CFBundleURLName: 'ABot installation links', CFBundleURLSchemes: ['abot']}]
45
+ };
46
+ Object.keys(updates).forEach(function(key) { plist.setObjectForKey($(updates[key]), $(key)); });
47
+ if (!plist.writeToFileAtomically($(argv[0]), true)) throw new Error('Could not register installation links.');
48
+ }
49
+ `;
@@ -0,0 +1,4 @@
1
+ import type { NativeAutostartOptions } from "./autostart.js";
2
+ export declare function renderLinuxInstallLinkDesktop(options: NativeAutostartOptions): string;
3
+ export declare function installCompanionInstallLinks(options: NativeAutostartOptions): Promise<void>;
4
+ export declare function uninstallCompanionInstallLinks(options: NativeAutostartOptions): Promise<void>;