@abot-ai/runtime 1.7.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. package/README.md +216 -222
  2. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
  3. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  4. package/dist/src/capabilities/tool-types.d.ts +4 -0
  5. package/dist/src/cli/abot.js +2 -0
  6. package/dist/src/cli/host-companion-bundle.mjs +751 -333
  7. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  8. package/dist/src/computer-access/collection-consent.js +47 -0
  9. package/dist/src/computer-access/command-output-capture.d.ts +17 -6
  10. package/dist/src/computer-access/command-output-capture.js +134 -68
  11. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  12. package/dist/src/computer-access/command-output-protection.js +59 -0
  13. package/dist/src/computer-access/companion/command-output.d.ts +1 -0
  14. package/dist/src/computer-access/companion/command-output.js +23 -6
  15. package/dist/src/computer-access/companion/install-link-macos.js +2 -1
  16. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  17. package/dist/src/computer-access/companion/native-session.js +6 -2
  18. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  19. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  20. package/dist/src/computer-access/companion/observation-process.js +51 -25
  21. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  22. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  23. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  24. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  25. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  26. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  27. package/dist/src/computer-access/handlers.d.ts +2 -1
  28. package/dist/src/computer-access/handlers.js +79 -11
  29. package/dist/src/computer-access/host-observation.d.ts +3 -3
  30. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  31. package/dist/src/computer-access/native-observation-connection.js +78 -0
  32. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  33. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  34. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  35. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  36. package/dist/src/computer-access/observation-source.d.ts +6 -0
  37. package/dist/src/computer-access/observation-source.js +10 -0
  38. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  39. package/dist/src/computer-access/security/desktop-result.js +146 -0
  40. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  41. package/dist/src/computer-access/security/observed-error.js +10 -0
  42. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  43. package/dist/src/computer-access/security/secret-text.js +111 -0
  44. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  45. package/dist/src/computer-access/security/system-results.js +53 -0
  46. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  47. package/dist/src/computer-access/system-result-protection.js +1 -0
  48. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  49. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  50. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  51. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  52. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  53. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  54. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  55. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  56. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  57. package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
  58. package/dist/src/model-gateway/protocol/message-contract.js +1 -1
  59. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  60. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  61. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  62. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  63. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  64. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  65. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  66. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  67. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  68. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  69. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  70. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  71. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  72. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  73. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  74. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  75. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  76. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  77. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  78. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  79. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  80. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  81. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  82. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  83. package/dist/src/model-gateway/server/chat-handler.js +5 -7
  84. package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
  85. package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
  86. package/dist/src/model-gateway/server.js +5 -1
  87. package/dist/src/plugin-contract/index.d.ts +1 -0
  88. package/dist/src/plugin-contract/index.js +1 -0
  89. package/dist/src/plugin-contract/manifest.d.ts +2 -0
  90. package/dist/src/plugin-contract/manifest.js +1 -0
  91. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  92. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  93. package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
  94. package/dist/src/plugin-sdk/computer-access.js +1 -0
  95. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  96. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  97. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  98. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  99. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  100. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  101. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  102. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  103. package/dist/src/plugin-sdk/files.js +4 -0
  104. package/dist/src/plugin-sdk/index.d.ts +1 -0
  105. package/dist/src/plugin-sdk/index.js +1 -0
  106. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  107. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  108. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  109. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  110. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  111. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  112. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  113. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  114. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  115. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
  116. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
  117. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
  118. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  119. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  120. package/dist/src/runtime/capabilities/tool-availability.js +6 -0
  121. package/dist/src/runtime/context/capability-brief.d.ts +2 -2
  122. package/dist/src/runtime/context/capability-brief.js +3 -3
  123. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
  124. package/dist/src/runtime/context/capability-descriptions.js +57 -20
  125. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  126. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
  127. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
  128. package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
  129. package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
  130. package/dist/src/runtime/long-term-memory/projection.js +1 -1
  131. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
  132. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
  133. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
  134. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
  135. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
  136. package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
  137. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
  138. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
  139. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
  140. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  141. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
  142. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
  143. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  144. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
  145. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
  146. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
  147. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  148. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  149. package/dist/src/runtime/passive-learning/service.js +2 -3
  150. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  151. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  152. package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
  153. package/dist/src/runtime/plugins/installation/package.js +2 -0
  154. package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
  155. package/dist/src/runtime/plugins/loader.js +24 -14
  156. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  157. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  158. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  159. package/dist/src/runtime/plugins/manifest-validator.js +9 -1
  160. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  161. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  162. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  163. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  164. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  165. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  166. package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
  167. package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
  168. package/dist/src/runtime/request/prepared-execution.js +3 -0
  169. package/dist/src/runtime/request/root-contract.d.ts +2 -0
  170. package/dist/src/runtime/request/root-execution-kernel.js +1 -0
  171. package/dist/src/runtime/request/runner.js +9 -3
  172. package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
  173. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  174. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  175. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
  176. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
  177. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
  178. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
  179. package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
  180. package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
  181. package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
  182. package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
  183. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
  184. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
  185. package/dist/src/runtime/steps/execution-agent/format.js +4 -3
  186. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
  187. package/dist/src/runtime/steps/execution-agent/input.js +22 -1
  188. package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
  189. package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
  190. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  191. package/dist/src/runtime/steps/execution-agent/prompt.js +7 -8
  192. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  193. package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
  194. package/dist/src/runtime/steps/execution-agent/run.js +4 -1
  195. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
  196. package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
  197. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  198. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  199. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  200. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  201. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
  202. package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
  203. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
  204. package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
  205. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
  206. package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
  207. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
  208. package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
  209. package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
  210. package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
  211. package/dist/src/sessions/durable-session-commit.js +3 -3
  212. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  213. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  214. package/dist/src/sessions/session-store.js +3 -3
  215. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  216. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  217. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  218. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  219. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  220. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  221. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  222. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  223. package/dist/src/shared/windows-job-object.d.ts +2 -0
  224. package/dist/src/shared/windows-job-object.js +66 -0
  225. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  226. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  227. package/dist/src/web-ui/app/app-state.js +0 -7
  228. package/dist/src/web-ui/app/app.js +54 -156
  229. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  230. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  231. package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
  232. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  233. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
  234. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
  235. package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
  236. package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
  237. package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
  238. package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
  239. package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
  240. package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
  241. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  242. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  243. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  244. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  245. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  246. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  247. package/dist/src/web-ui/app/components/operations-summary.js +2 -1
  248. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  249. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  250. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  251. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  252. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  253. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  254. package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
  255. package/dist/src/web-ui/app/components/passive-learning/home.js +11 -3
  256. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  257. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  258. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  259. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  260. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
  261. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  262. package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
  263. package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
  264. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  265. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  266. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
  267. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  268. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  269. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  270. package/dist/src/web-ui/app/components/schedules/details.js +3 -2
  271. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  272. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  273. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  274. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  275. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
  276. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  277. package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
  278. package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
  279. package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
  280. package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
  281. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  282. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  283. package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
  284. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
  285. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  286. package/dist/src/web-ui/app/computer-access-feature.js +13 -1
  287. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  288. package/dist/src/web-ui/app/configuration-feature.js +11 -1
  289. package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
  290. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  291. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  292. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  293. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  294. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  295. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  296. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  297. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  298. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  299. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  300. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  301. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  302. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  303. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  304. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  305. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  306. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  307. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  308. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  309. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  310. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
  311. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
  312. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
  313. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  314. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  315. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  316. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  317. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  318. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  319. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  320. package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
  321. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  322. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  323. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  324. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  325. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  326. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  327. package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
  328. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  329. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
  330. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
  331. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  332. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  333. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  334. package/dist/src/web-ui/app/dashboard-feature.js +12 -2
  335. package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
  336. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  337. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  338. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  339. package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
  340. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  341. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  342. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  343. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  344. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  345. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  346. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  347. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
  348. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
  349. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  350. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  351. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  352. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  353. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  354. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  355. package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
  356. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  357. package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
  358. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
  359. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  360. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  361. package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
  362. package/dist/src/web-ui/app/styles.css +3 -0
  363. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  364. package/dist/src/web-ui/client-state/contracts.js +13 -0
  365. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  366. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  367. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  368. package/dist/src/web-ui/client-state/preferences.js +84 -0
  369. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  370. package/dist/src/web-ui/client-state/queue.js +43 -0
  371. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  372. package/dist/src/web-ui/client-state/routes.js +58 -0
  373. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  374. package/dist/src/web-ui/client-state/store.js +88 -0
  375. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
  376. package/dist/src/web-ui/local-runtime/http.js +11 -2
  377. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  378. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  379. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  380. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  381. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  382. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  383. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  384. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  385. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  386. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  387. package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
  388. package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
  389. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  390. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  391. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
  392. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
  393. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  394. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  395. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  396. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  397. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  398. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  399. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  400. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  401. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  402. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  403. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  404. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  405. package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
  406. package/dist/src/web-ui/plugin-management-catalog.js +3 -1
  407. package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
  408. package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
  409. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  410. package/dist/src/web-ui/server-readiness.js +36 -0
  411. package/dist/src/web-ui/server.d.ts +2 -0
  412. package/dist/src/web-ui/server.js +23 -1
  413. package/dist/src/web-ui/system-host-service.js +13 -2
  414. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  415. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  416. package/docs/installation.md +44 -5
  417. package/docs/plugins.md +174 -28
  418. package/docs/tool-execution-result-evidence-contract.md +57 -0
  419. package/docs/windows-companion-store.md +5 -0
  420. package/package.json +4 -2
  421. package/plugins/capability-brief/plugin.json +5 -1
  422. package/plugins/code-outline/README.md +20 -0
  423. package/plugins/code-outline/plugin.json +2 -1
  424. package/plugins/code-outline/source/index.ts +16 -20
  425. package/plugins/code-outline/source/read-failure.ts +40 -0
  426. package/plugins/code-outline/src/index.cjs +614 -29
  427. package/plugins/document-reader/README.md +33 -0
  428. package/plugins/document-reader/plugin.json +2 -1
  429. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  430. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  431. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  432. package/plugins/document-reader/source/pdf-process.ts +207 -0
  433. package/plugins/document-reader/source/pdf-result.ts +79 -0
  434. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  435. package/plugins/document-reader/source/pdf.ts +4 -1
  436. package/plugins/document-reader/source/read-failure.ts +37 -0
  437. package/plugins/document-reader/source/reader.ts +3 -19
  438. package/plugins/document-reader/src/index.cjs +995 -211
  439. package/plugins/exec/README.md +19 -0
  440. package/plugins/exec/plugin.json +4 -3
  441. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  442. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  443. package/plugins/exec/source/filesystem-observer.ts +8 -79
  444. package/plugins/exec/source/output-files.ts +12 -6
  445. package/plugins/exec/source/paths.ts +3 -1
  446. package/plugins/exec/source/process-manager.ts +8 -24
  447. package/plugins/exec/source/shell-platform.ts +19 -3
  448. package/plugins/exec/source/shell-process.ts +55 -0
  449. package/plugins/exec/source/windows-job-source.ts +1 -0
  450. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  451. package/plugins/exec/src/index.cjs +252 -96
  452. package/plugins/filesystem/README.md +65 -0
  453. package/plugins/filesystem/plugin.json +7 -3
  454. package/plugins/filesystem/source/atomic-write.ts +2 -0
  455. package/plugins/filesystem/source/bounded-io.ts +80 -306
  456. package/plugins/filesystem/source/directory-sample.ts +2 -0
  457. package/plugins/filesystem/source/errors.ts +14 -0
  458. package/plugins/filesystem/source/file-observation.ts +151 -0
  459. package/plugins/filesystem/source/file-version.ts +41 -0
  460. package/plugins/filesystem/source/index.ts +6 -0
  461. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  462. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  463. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  464. package/plugins/filesystem/source/windows/operations.ts +197 -0
  465. package/plugins/filesystem/source/windows/process.ts +214 -0
  466. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  467. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  468. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  469. package/plugins/filesystem/source/windows/source.ts +42 -0
  470. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  471. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  472. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  473. package/plugins/filesystem/src/index.cjs +1208 -322
  474. package/plugins/json-inspector/README.md +18 -0
  475. package/plugins/json-inspector/plugin.json +2 -1
  476. package/plugins/json-inspector/source/index.ts +16 -19
  477. package/plugins/json-inspector/source/read-failure.ts +42 -0
  478. package/plugins/json-inspector/src/index.cjs +612 -27
  479. package/plugins/local-search/README.md +29 -0
  480. package/plugins/local-search/plugin.json +2 -1
  481. package/plugins/local-search/source/errors.ts +2 -0
  482. package/plugins/local-search/source/paths.ts +3 -0
  483. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  484. package/plugins/local-search/source/ripgrep.ts +3 -3
  485. package/plugins/local-search/source/windows-authority.ts +99 -0
  486. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  487. package/plugins/local-search/source/windows-search-process.ts +91 -0
  488. package/plugins/local-search/source/windows-search-script.ts +52 -0
  489. package/plugins/local-search/src/index.cjs +595 -26
  490. package/plugins/memory/plugin.json +5 -1
  491. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  492. package/plugins/memory/source/lock-owner-file.ts +71 -0
  493. package/plugins/memory/source/lock-path-observation.ts +26 -0
  494. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  495. package/plugins/memory/source/store-lock.ts +12 -7
  496. package/plugins/memory/source/store.ts +3 -2
  497. package/plugins/memory/src/index.cjs +174 -25
  498. package/plugins/project-orientation/README.md +23 -0
  499. package/plugins/project-orientation/plugin.json +2 -1
  500. package/plugins/project-orientation/source/index.ts +12 -9
  501. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  502. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  503. package/plugins/project-orientation/source/tree.ts +6 -0
  504. package/plugins/project-orientation/src/index.cjs +647 -31
  505. package/plugins/system/README.md +51 -15
  506. package/plugins/system/plugin.json +6 -2
  507. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  508. package/plugins/system/source/command-working-directory.ts +47 -0
  509. package/plugins/system/source/computer/handlers.ts +13 -9
  510. package/plugins/system/source/computer/observation-result.ts +10 -5
  511. package/plugins/system/source/computer/request-computers.ts +10 -3
  512. package/plugins/system/source/computer/request-modules.ts +3 -6
  513. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  514. package/plugins/system/source/host-dispatch.ts +18 -2
  515. package/plugins/system/source/index.ts +5 -3
  516. package/plugins/system/source/local-command-output-retention.ts +16 -0
  517. package/plugins/system/source/local-command-output.ts +16 -8
  518. package/plugins/system/source/request-system-modules.ts +12 -2
  519. package/plugins/system/source/request-target-snapshot.ts +2 -1
  520. package/plugins/system/source/security/desktop-result.ts +177 -0
  521. package/plugins/system/source/security/observed-error.ts +10 -0
  522. package/plugins/system/source/security/secret-text.ts +118 -0
  523. package/plugins/system/source/security/system-results.ts +62 -0
  524. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  525. package/plugins/system/src/index.cjs +837 -151
  526. package/plugins/system-probe/plugin.json +9 -3
  527. package/plugins/system-probe/source/disk-path.ts +8 -0
  528. package/plugins/system-probe/source/index.ts +10 -5
  529. package/plugins/system-probe/source/machine-load.ts +33 -0
  530. package/plugins/system-probe/source/metrics.ts +6 -8
  531. package/plugins/system-probe/src/index.cjs +49 -16
  532. package/plugins/web/plugin.json +5 -1
@@ -9,18 +9,40 @@ configuration. Ask and Full retain exact-action approvals; Full+ retains its nor
9
9
  approval policy. OS accessibility, screen-recording and portal permissions still
10
10
  apply. An available shell or connected companion does not prove desktop readiness.
11
11
 
12
+ ## Command working directory
13
+
14
+ On native Windows, `system_command.cwd` accepts the same logical paths as
15
+ `filesystem`: `.` and ordinary relative paths use the request's agent-work root;
16
+ `workspace/...` uses the configured workspace. The request-bound resolver checks
17
+ these roots and resolves the full directory before exact-action approval. Approval,
18
+ activity and execution use that same captured absolute path. Absolute paths retain
19
+ their existing target-OS meaning and may be outside those roots.
20
+
21
+ The request root is also retained across approval resume, even if the configured
22
+ agent-work root changes. The adapter does not rewrite the command or choose a tool
23
+ or execution strategy. Linux/macOS, WSL interop and Companion targeting retain the
24
+ existing absolute-cwd contract; no guest-to-host directory mapping is performed.
25
+
12
26
  ## Local command output
13
27
 
14
- Local `system_command` execution, including Windows through WSL interop, writes
15
- stdout and stderr to private files under the plugin state directory. Capture
16
- uses bounded stream buffers with disk backpressure. The completed observation is
17
- then loaded for delivery; full text is still materialized in memory at that point.
18
- The existing SDK context-text contract lets the Runtime admit or compact that
19
- text using its normal model-context budget. Small-result text is unchanged.
28
+ Local `system_command` execution, including Windows through WSL interop, captures
29
+ stdout and stderr to private files under the plugin state directory. Temporary raw
30
+ disk storage is allowed inside this boundary. Once both streams reach natural EOF,
31
+ SYSTEM's independent secret detector checks their full text before any output read
32
+ or delivery. Suspected streams are replaced with `[REDACTED]`. An incomplete check,
33
+ invalid UTF-8 or scanner failure withholds output, attempts to remove raw stream
34
+ files and retains a safe process receipt.
35
+
36
+ There is no new total-output quota or truncation. Checking and final delivery still
37
+ materialize text in memory. The existing SDK context-text contract lets the Runtime
38
+ admit or compact the checked text using its normal model-context budget; even the
39
+ compaction model receives only checked text. Small clean results are unchanged.
20
40
 
21
41
  `extensions["ai.abot.runtime"].settings.defaults.outputRetentionMs` in the plugin's
22
42
  `plugin.json` controls retention; the default is seven days after capture completes. Cleanup protects active captures and removes expired
23
- captures during plugin initialization and periodic maintenance. Reads do not renew
43
+ captures during plugin initialization and periodic maintenance, including raw
44
+ leftovers after a crash or interrupted cleanup. Removal is ordinary file cleanup,
45
+ not guaranteed forensic erasure. Reads do not renew
24
46
  retention. Completed captures keep the retention recorded at creation across
25
47
  Companion reconnects and later configuration changes. Each capture has an opaque
26
48
  ID, byte counts and a saved process receipt;
@@ -33,13 +55,17 @@ external descendants are not assumed terminated. Delivery failures retain the
33
55
  capture receipt, recorded helper PID, process status and exit code when available.
34
56
  This does not grant a new model-facing operation for reading retained captures.
35
57
 
36
- Application launch, target probes and desktop images retain their existing behavior.
58
+ Application/target descriptions and launch results are checked before excerpts.
59
+ Sensitive actionable catalog identities are withheld instead of replaced by a
60
+ fabricated executable identifier. Input receipts retain their mechanical meaning.
37
61
 
38
62
  ## Companion command output
39
63
 
40
- Updated companions advertise `system_command_output_v1`. SYSTEM then uses private
64
+ Updated companions advertise `host_secret_protection_v1` and
65
+ `system_command_output_v1`. SYSTEM then uses private
41
66
  capture/read/close operations over the existing connection: the Companion stores
42
- both streams in its private state directory using the same capture implementation,
67
+ checked streams in its private state directory using its own detector with the
68
+ capture implementation,
43
69
  returns the process receipt, and serves 64 KiB byte chunks. SYSTEM verifies the
44
70
  capture ID, stream, offset, byte count and SHA-256 before delivering text through
45
71
  the existing context-text contract. UTF-8 characters may cross chunk boundaries.
@@ -48,9 +74,10 @@ The model receives one tool result; transport chunks do not invoke a model.
48
74
  Output references belong to the authenticated Companion connection. Transfers
49
75
  protect their captures from expiry until closed or disconnected; the configured
50
76
  SYSTEM retention then continues on disk. A failed transfer preserves the command
51
- receipt and never repeats execution. Old companions keep their existing bounded
52
- command path. This transfer does not add model-facing tools or change screenshot
53
- handling, and final text delivery still materializes the streams in memory.
77
+ receipt and never repeats execution. Companions missing protection or complete
78
+ command capture fail before dispatch with an upgrade-required result; there is no
79
+ unprotected legacy fallback. This transfer adds no model-facing tool, and final
80
+ text delivery still materializes the streams in memory.
54
81
 
55
82
  ## Shared connection
56
83
 
@@ -137,9 +164,18 @@ request. Metadata remains within the ordinary tool-result budgets. A companion s
137
164
  64 KiB private chunks through the existing bounded local protocol; bytes never enter
138
165
  model-visible JSON output.
139
166
 
167
+ Before frame/media retention, each owner checks desktop/window/accessibility text
168
+ and diagnostic fields. Suspected text is masked and its associated image is
169
+ withheld; input that already occurred retains its dispatch receipt. Ordinary
170
+ images remain available. Pixel-only content is not inspected: OCR and additional
171
+ installation dependencies are deferred. Version 1 is best-effort known-indicator
172
+ protection, not a guarantee that an admitted image or text is free of secrets.
173
+
140
174
  The Runtime stores images in request-owned memory, projects them only to consumers
141
- of the original tool evidence, excludes them from history/provider traces, and
142
- disposes buffers and registered resources at request end or abort. A non-vision
175
+ of the original tool evidence, and excludes them from history/provider traces.
176
+ Approval-wait continuation snapshots may persist request-owned image bytes; the
177
+ owner's checks therefore precede media admission, not merely model projection.
178
+ Buffers and registered resources are disposed at request end or abort. A non-vision
143
179
  model receives an explicit image-input limitation and can still use available text
144
180
  observations. Companion frames are erased after transfer, replacement or close;
145
181
  abandoned native sessions have a bounded idle expiry and close on disconnection.
@@ -2,8 +2,12 @@
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "system",
4
4
  "version": "1.0.0",
5
- "description": "System commands, applications and structured observation/control of existing user desktops across native and locally connected OS targets.",
5
+ "description": "Run OS commands, discover and launch apps, inspect and control desktops.",
6
6
  "extensions": {
7
+ "ai.abot.compatibility": {
8
+ "version": 1,
9
+ "runtimePlatforms": ["linux", "darwin", "win32"]
10
+ },
7
11
  "ai.abot.runtime": {
8
12
  "version": 1,
9
13
  "entrypoint": "./src/index.cjs",
@@ -81,7 +85,7 @@
81
85
  ],
82
86
  "operations": {
83
87
  "run_system_command": {
84
- "summary": "Run a shell command on an available OS target with absolute cwd in its namespace. The complete command, including inline file content, is limited to 4096 characters. File payload tools support larger bodies in the runtime-host namespace. Can read exposed application/browser text via native accessibility APIs, including signed-in pages. Verify the document and text. Capability references are not commands; exit zero is not effect evidence.",
88
+ "summary": "Run a shell command in the selected OS. cwd must be absolute; native Windows also accepts agent-work-relative paths and workspace/. The entire command is limited to 4096 characters; use file payload tools for larger bodies. Native accessibility APIs can read exposed app/browser text, including signed-in pages; verify the document and text. Capability references are not commands; exit zero is not effect evidence.",
85
89
  "input": {
86
90
  "type": "object",
87
91
  "additionalProperties": false,
@@ -16,7 +16,7 @@ When this catalog is insufficient, continue bounded, task-relevant inspection wi
16
16
 
17
17
  ## Execute the user's task
18
18
 
19
- system_command executes general system commands using Bash for Linux/macOS or PowerShell for Windows. Supply an absolute cwd in the target OS namespace; it may be outside the project. Commands can inspect or manage applications, processes, services, installations, settings, network and files for the user's task. They run with actual host identity; elevated=true requests the supported native privilege path. Linux needs existing noninteractive sudo authorization, macOS uses its native administrator dialog, and Windows needs an authorized elevated host. Never fabricate credentials or bypass an OS authorization prompt.
19
+ system_command executes general system commands using Bash for Linux/macOS or PowerShell for Windows. Supply an absolute cwd in the target OS namespace; it may be outside the project. On native Windows only, cwd also accepts the runtime filesystem namespace: `.` and relative paths start at the request agent-work root, and `workspace/...` selects the configured workspace. The adapter resolves that directory before approval. WSL interop and Companion still require an absolute target-OS path; no cross-OS path mapping is implied. Commands can inspect or manage applications, processes, services, installations, settings, network and files for the user's task. They run with actual host identity; elevated=true requests the supported native privilege path. Linux needs existing noninteractive sudo authorization, macOS uses its native administrator dialog, and Windows needs an authorized elevated host. Never fabricate credentials or bypass an OS authorization prompt.
20
20
 
21
21
  Use system_launch with the exact application identity returned by the target catalog; it revalidates that identity before dispatch. A catalog identity is not a raw executable path. There is no brand-specific application allowlist. Documented native invocations and further application control use system_command. Linux and Windows catalog identities do not define generic raw arguments; use the application's actual command interface when arguments are needed.
22
22
 
@@ -0,0 +1,47 @@
1
+ import { win32 } from "node:path";
2
+ import type {
3
+ RuntimeToolPathResolver,
4
+ ToolCall,
5
+ ToolCallAdapter,
6
+ } from "../../../src/plugin-sdk/index.js";
7
+ import type { SystemTargetSnapshot } from "./request-target-snapshot.js";
8
+
9
+ /** Resolve before exact-action approval; execution consumes the captured absolute cwd. */
10
+ export function createSystemCommandPathAdapter(
11
+ adapter: ToolCallAdapter | undefined,
12
+ snapshot: SystemTargetSnapshot,
13
+ resolver: RuntimeToolPathResolver | undefined,
14
+ ): ToolCallAdapter | undefined {
15
+ if (!resolver) return adapter;
16
+ return {
17
+ ...adapter,
18
+ normalizeCall(input) {
19
+ const call = adapter?.normalizeCall?.(input) ?? input;
20
+ if (!hasNativeWindowsRelativeDirectory(call, snapshot)) return call;
21
+ const directory = resolver.resolve(call.params.cwd, {
22
+ requirePath: true,
23
+ allowedLocations: ["agent_work", "workspace"],
24
+ });
25
+ return {
26
+ ...call,
27
+ params: { ...call.params, cwd: directory.absolutePath },
28
+ };
29
+ },
30
+ };
31
+ }
32
+
33
+ function hasNativeWindowsRelativeDirectory(
34
+ call: ToolCall,
35
+ snapshot: SystemTargetSnapshot,
36
+ ): boolean {
37
+ if (call.tool !== "system_command") return false;
38
+ if (call.params.target !== "windows") return false;
39
+ if (typeof call.params.cwd !== "string") return false;
40
+ if (win32.isAbsolute(call.params.cwd.trim())) return false;
41
+ const route = snapshot.find((entry) => {
42
+ if (entry.kind !== "native") return false;
43
+ if (entry.target.id !== "windows") return false;
44
+ return entry.target.transport === "native";
45
+ });
46
+ return route !== undefined;
47
+ }
@@ -5,10 +5,14 @@ import {
5
5
  type ToolImplementation,
6
6
  } from "../../../../src/plugin-sdk/index.js";
7
7
  import { SystemOperationError } from "../../../../src/plugin-sdk/computer-access.js";
8
- import { computerFields, readPhysicalRectangle } from "../../../../src/plugin-sdk/computer-access.js";
8
+ import {
9
+ computerFields,
10
+ readPhysicalRectangle,
11
+ } from "../../../../src/plugin-sdk/computer-access.js";
9
12
  import { readPublicComputerAction } from "./public-action.js";
10
13
  import { withDesktopQueue } from "../../../../src/plugin-sdk/computer-access.js";
11
14
  import { serializeComputerDesktops } from "./observation-output.js";
15
+ import { protectObservedError } from "../security/observed-error.js";
12
16
  import {
13
17
  describeDesktop,
14
18
  projectComputerResult,
@@ -53,10 +57,10 @@ export function createComputerHandlers(
53
57
  error instanceof SystemOperationError
54
58
  ? error.code
55
59
  : "computer_operation_interrupted",
56
- message:
57
- error instanceof Error
58
- ? error.message
59
- : "Computer operation interrupted; effects may be partial. Observe before another action.",
60
+ message: protectObservedError(
61
+ error,
62
+ "Computer operation interrupted; effects may be partial. Observe before another action.",
63
+ ),
60
64
  });
61
65
  }
62
66
  };
@@ -79,10 +83,10 @@ export function createComputerHandlers(
79
83
  return {
80
84
  ...computerRouteLabel(entry),
81
85
  available: false,
82
- reason:
83
- error instanceof Error
84
- ? error.message
85
- : "Desktop inspection failed.",
86
+ reason: protectObservedError(
87
+ error,
88
+ "Desktop inspection failed.",
89
+ ),
86
90
  };
87
91
  }
88
92
  },
@@ -10,6 +10,7 @@ import {
10
10
  type RequestComputer,
11
11
  } from "./request-computers.js";
12
12
  import { serializeComputerObservation } from "./observation-output.js";
13
+ import { protectObservedError } from "../security/observed-error.js";
13
14
 
14
15
  export function describeDesktop(
15
16
  entry: RequestComputer,
@@ -45,8 +46,7 @@ export async function projectComputerResult(
45
46
  );
46
47
  media.push(image);
47
48
  } catch (error) {
48
- imageFailure =
49
- error instanceof Error ? error.message : "Image admission failed.";
49
+ imageFailure = protectObservedError(error, "Image admission failed.");
50
50
  } finally {
51
51
  result.image.bytes.fill(0);
52
52
  }
@@ -57,9 +57,14 @@ export async function projectComputerResult(
57
57
  description.observation_ref = undefined;
58
58
  }
59
59
  const hasPartialInputDispatch = result.dispatch?.status === "partial";
60
- const operationError = result.error ?? (hasPartialInputDispatch
61
- ? { code: "computer_input_partial", message: "Only part of the input was accepted." }
62
- : undefined);
60
+ const operationError =
61
+ result.error ??
62
+ (hasPartialInputDispatch
63
+ ? {
64
+ code: "computer_input_partial",
65
+ message: "Only part of the input was accepted.",
66
+ }
67
+ : undefined);
63
68
  const data = {
64
69
  desktop_ref: entry.ref,
65
70
  ...(description.observation_ref
@@ -13,8 +13,12 @@ import { SystemOperationError } from "../../../../src/plugin-sdk/computer-access
13
13
  import type { NativeComputerBackend } from "../../../../src/plugin-sdk/computer-access.js";
14
14
  import { createNativeComputerBackend } from "../../../../src/plugin-sdk/computer-access.js";
15
15
  import { createCompanionComputerBackend } from "../../../../src/plugin-sdk/computer-access.js";
16
- import { COMPUTER_CAPABILITY } from "../../../../src/plugin-sdk/computer-access.js";
16
+ import {
17
+ COMPUTER_CAPABILITY,
18
+ HOST_SECRET_PROTECTION_CAPABILITY,
19
+ } from "../../../../src/plugin-sdk/computer-access.js";
17
20
  import { DesktopBindings } from "./desktop-bindings.js";
21
+ import { protectNativeDesktopBackend } from "../security/desktop-result.js";
18
22
 
19
23
  export type RequestComputer = {
20
24
  ref: string;
@@ -80,7 +84,7 @@ export class RequestComputers {
80
84
  if (entry.backend) return entry.backend;
81
85
  entry.backend =
82
86
  entry.route.kind === "native"
83
- ? this.nativeFactory(entry.route.target)
87
+ ? protectNativeDesktopBackend(this.nativeFactory(entry.route.target))
84
88
  : createCompanionComputerBackend(
85
89
  this.rootDir,
86
90
  entry.route,
@@ -110,7 +114,10 @@ export function computerQueueIdentity(entry: RequestComputer): string {
110
114
  }
111
115
  function supportsComputerRoute(route: SystemRequestRoute): boolean {
112
116
  if (route.kind === "native") return true;
113
- return route.capabilities?.includes(COMPUTER_CAPABILITY) === true;
117
+ return (
118
+ route.capabilities?.includes(COMPUTER_CAPABILITY) === true &&
119
+ route.capabilities.includes(HOST_SECRET_PROTECTION_CAPABILITY)
120
+ );
114
121
  }
115
122
 
116
123
  function restoreComputers(
@@ -1,5 +1,4 @@
1
1
  import {
2
- failureResult,
3
2
  type ToolImplementation,
4
3
  type ToolRequestPreparationContext,
5
4
  type ToolModuleDeclaration,
@@ -12,17 +11,14 @@ import {
12
11
  import type { SystemHostConnection } from "../host-dispatch.js";
13
12
  import { createComputerHandlers, COMPUTER_TOOLS } from "./handlers.js";
14
13
  import { RequestComputers } from "./request-computers.js";
14
+ import { supportsRuntimeDesktopTools, unboundComputerFailure } from "./runtime-platform.js";
15
15
 
16
16
  /** Load-time placeholders cannot allocate a desktop outside request ownership. */
17
17
  export function unboundComputerHandlers(): Record<string, ToolImplementation> {
18
18
  return Object.fromEntries(
19
19
  COMPUTER_TOOLS.map((name) => [
20
20
  name,
21
- async () =>
22
- failureResult({
23
- errorCode: "computer_request_binding_required",
24
- message: "Computer control requires a prepared request.",
25
- }),
21
+ async () => unboundComputerFailure(),
26
22
  ]),
27
23
  );
28
24
  }
@@ -35,6 +31,7 @@ export function prepareComputerModules(
35
31
  preparation?: ToolRequestPreparationContext,
36
32
  ): readonly ToolModuleDeclaration[] {
37
33
  if (modules.length === 0) return [];
34
+ if (!supportsRuntimeDesktopTools()) return [];
38
35
  const computers = new RequestComputers(
39
36
  rootDir,
40
37
  routes,
@@ -0,0 +1,18 @@
1
+ import { failureResult } from "../../../../src/plugin-sdk/index.js";
2
+
3
+ /** Windows desktop images and input await the separate OCR rollout. */
4
+ export function supportsRuntimeDesktopTools(platform: NodeJS.Platform = process.platform): boolean {
5
+ return platform !== "win32";
6
+ }
7
+
8
+ export function unboundComputerFailure() {
9
+ if (!supportsRuntimeDesktopTools())
10
+ return failureResult({
11
+ errorCode: "computer_runtime_platform_unsupported",
12
+ message: "Desktop observation and control are unavailable on Windows Runtime. System commands and applications remain available.",
13
+ });
14
+ return failureResult({
15
+ errorCode: "computer_request_binding_required",
16
+ message: "Computer control requires a prepared request.",
17
+ });
18
+ }
@@ -1,4 +1,5 @@
1
1
  import { executeCompanionCommand, supportsCompanionCommandOutput } from "./companion-command-output.js";
2
+ import { redactSecretText } from "./security/secret-text.js";
2
3
  import type { ComputerAccessConnection } from "../../../src/plugin-sdk/computer-access.js";
3
4
  import {
4
5
  failureResult,
@@ -11,6 +12,7 @@ import {
11
12
  } from "../../../src/plugin-sdk/computer-access.js";
12
13
  import {
13
14
  HOST_OPERATIONS,
15
+ HOST_SECRET_PROTECTION_CAPABILITY,
14
16
  type HostOperation,
15
17
  } from "../../../src/plugin-sdk/computer-access.js";
16
18
  import { SystemOperationError } from "../../../src/plugin-sdk/computer-access.js";
@@ -69,7 +71,17 @@ function boundOperation(
69
71
  const route = requireSystemRequestRoute(input.snapshot, params.target);
70
72
  if (route.kind === "native")
71
73
  return await input.nativeHandlers[operation]!(params, context);
72
- if (operation === "system_command" && supportsCompanionCommandOutput(route))
74
+ if (!supportsProtectedCompanionResults(route.capabilities))
75
+ return failureResult({
76
+ errorCode: "system_companion_protection_upgrade_required",
77
+ message: "Update Companion to enable protected system results. The operation was not dispatched.",
78
+ });
79
+ if (operation === "system_command" && !supportsCompanionCommandOutput(route))
80
+ return failureResult({
81
+ errorCode: "system_companion_protection_upgrade_required",
82
+ message: "Update Companion to enable protected complete command output. The command was not dispatched.",
83
+ });
84
+ if (operation === "system_command")
73
85
  return await executeCompanionCommand({ ...input, route, params, context });
74
86
  return await input.connection.executeHostOperation(input.rootDir, {
75
87
  hostId: route.hostId,
@@ -80,7 +92,7 @@ function boundOperation(
80
92
  });
81
93
  } catch (error) {
82
94
  if (error instanceof SystemOperationError)
83
- return failureResult({ errorCode: error.code, message: error.message });
95
+ return failureResult({ errorCode: error.code, message: redactSecretText(error.message) });
84
96
  return failureResult({
85
97
  errorCode: "system_execution_route_failed",
86
98
  message:
@@ -90,6 +102,10 @@ function boundOperation(
90
102
  };
91
103
  }
92
104
 
105
+ function supportsProtectedCompanionResults(capabilities?: readonly string[]): boolean {
106
+ return capabilities?.includes(HOST_SECRET_PROTECTION_CAPABILITY) === true;
107
+ }
108
+
93
109
  function hasConnectionControl(params: Record<string, unknown>): boolean {
94
110
  if (Object.hasOwn(params, "host_id")) return true;
95
111
  if (Object.hasOwn(params, "hostId")) return true;
@@ -1,16 +1,18 @@
1
1
  import { defineRuntimePlugin } from "../../../src/plugin-sdk/index.js";
2
- import { createSystemHandlers } from "../../../src/plugin-sdk/computer-access.js";
2
+ import { createSystemHandlers, observeSystemTargets } from "../../../src/plugin-sdk/computer-access.js";
3
3
  import { prepareSystemRequestModules } from "./request-system-modules.js";
4
4
  import { createLocalSystemCommandOutput, systemCommandOutputRetentionMs } from "./local-command-output.js";
5
5
  import { unboundComputerHandlers } from "./computer/request-modules.js";
6
+ import { systemResultProtection } from "./security/system-results.js";
6
7
 
7
8
  export default defineRuntimePlugin((context) => {
8
9
  const output = createLocalSystemCommandOutput(context);
9
10
  return {
10
- handlers: { ...createSystemHandlers(undefined, undefined, output), ...unboundComputerHandlers() },
11
+ handlers: { ...createSystemHandlers(undefined, undefined, output, systemResultProtection), ...unboundComputerHandlers() },
11
12
  prepareRequest: (modules, preparation) => prepareSystemRequestModules(context.rootDir, modules, {
12
13
  outputRetentionMs: systemCommandOutputRetentionMs(context),
13
- createNativeHandlers: (resolve) => createSystemHandlers(undefined, resolve, output),
14
+ observeTargets: async () => systemResultProtection.protectTargets(await observeSystemTargets()),
15
+ createNativeHandlers: (resolve) => createSystemHandlers(undefined, resolve, output, systemResultProtection),
14
16
  }, preparation),
15
17
  };
16
18
  });
@@ -0,0 +1,16 @@
1
+ import { scheduleSystemOutputCleanup } from "../../../src/plugin-sdk/computer-access.js";
2
+ import { ensureWindowsOutputDirectory } from "./security/windows-output-directory.js";
3
+
4
+ /** Retention may traverse only a verified Windows output root, including at plugin load. */
5
+ export function scheduleLocalSystemOutputCleanup(root: string, retentionMs: number): Promise<void> {
6
+ if (process.platform !== "win32") {
7
+ scheduleSystemOutputCleanup(root, retentionMs);
8
+ return Promise.resolve();
9
+ }
10
+ return ensureWindowsOutputDirectory(root).then(
11
+ () => scheduleSystemOutputCleanup(root, retentionMs),
12
+ () => process.emitWarning("SYSTEM output cleanup skipped because private storage could not be verified.", {
13
+ code: "SYSTEM_OUTPUT_PRIVATE_STORAGE_UNAVAILABLE",
14
+ }),
15
+ );
16
+ }
@@ -4,7 +4,10 @@ import { deliverPluginTextResult, failureResult, readBoundedInteger, type Runtim
4
4
  import { buildSystemProcessResult, runSystemProcess, type SystemCommandOutputFactory,
5
5
  type SystemProcessResult, type SystemTarget } from "../../../src/plugin-sdk/computer-access.js";
6
6
  import { createSystemOutputCapture, type SystemOutputReceipt } from "../../../src/plugin-sdk/computer-access.js";
7
- import { DEFAULT_SYSTEM_OUTPUT_RETENTION_MS, scheduleSystemOutputCleanup } from "../../../src/plugin-sdk/computer-access.js";
7
+ import { DEFAULT_SYSTEM_OUTPUT_RETENTION_MS } from "../../../src/plugin-sdk/computer-access.js";
8
+ import { redactSecretText } from "./security/secret-text.js";
9
+ import { ensureWindowsOutputDirectory } from "./security/windows-output-directory.js";
10
+ import { scheduleLocalSystemOutputCleanup } from "./local-command-output-retention.js";
8
11
 
9
12
  type Capture = Awaited<ReturnType<typeof createSystemOutputCapture>>;
10
13
  const CONTEXT_STREAMS = Object.freeze(["stdout", "stderr"] as const);
@@ -12,22 +15,24 @@ const CONTEXT_STREAMS = Object.freeze(["stdout", "stderr"] as const);
12
15
  export function createLocalSystemCommandOutput(plugin: RuntimePluginLoadContext): SystemCommandOutputFactory {
13
16
  const root = join(plugin.stateDir, "command-output");
14
17
  const retentionMs = systemCommandOutputRetentionMs(plugin);
15
- scheduleSystemOutputCleanup(root, retentionMs);
18
+ const initialization = scheduleLocalSystemOutputCleanup(root, retentionMs);
16
19
  return (context) => {
17
20
  let captured: Capture | undefined;
18
21
  return {
19
22
  async run(input) {
20
23
  if (input.abortSignal?.aborted) return runSystemProcess(input);
21
- captured = await createSystemOutputCapture(root, retentionMs);
24
+ await initialization;
25
+ await ensureWindowsOutputDirectory(root);
26
+ captured = await createSystemOutputCapture(root, retentionMs, redactSecretText);
22
27
  let result: SystemProcessResult;
23
28
  try { result = await runSystemProcess(input, captured.capture); }
24
29
  catch (error) { await captured.finish(); throw error; }
25
30
  const streams = await captured.finish(result);
26
- return { ...result, stdout: streams.stdout, stderr: streams.stderr || result.stderr,
31
+ return { ...captured.processResult!, stdout: streams.stdout, stderr: streams.stderr,
27
32
  outputTruncated: Boolean(captured.failure) };
28
33
  },
29
34
  async present(target, result) {
30
- if (captured?.failure) return outputFailure(target, result, context, captured.receipt, captured.failure);
35
+ if (captured?.failure) return outputFailure(target, result, context, captured.receipt, captured.failure, captured.failureKind);
31
36
  const receipt = buildSystemProcessResult(target, result, "command_process_completion");
32
37
  const delivered = deliverPluginTextResult({ ...receipt,
33
38
  data: { ...receipt.data, ...(captured?.receipt ? { outputCapture: captured.receipt } : {}) } }, CONTEXT_STREAMS, context?.resultBudget);
@@ -40,14 +45,17 @@ export function createLocalSystemCommandOutput(plugin: RuntimePluginLoadContext)
40
45
  }
41
46
 
42
47
  function outputFailure(target: SystemTarget, result: SystemProcessResult, context?: ToolExecutionContext,
43
- capture?: SystemOutputReceipt, storageFailure?: string): ToolImplementationOutput {
48
+ capture?: SystemOutputReceipt, captureFailure?: string, failureKind?: "security" | "storage"): ToolImplementationOutput {
49
+ const failureCode = failureKind === "security" ? "system_output_protection_failed" : "system_output_storage_failed";
44
50
  return failureResult({
45
- errorCode: storageFailure ? "system_output_storage_failed" : "system_output_delivery_pending",
51
+ errorCode: captureFailure ? failureCode : "system_output_delivery_pending",
46
52
  message: "The command was dispatched. Its output could not be delivered completely; do not repeat the command just to retrieve output. Inspect the process receipt and retained capture.",
47
53
  ...(result.exitCode !== null ? { exitCode: result.exitCode } : {}),
48
54
  data: { target: target.id, transport: target.transport, processStatus: result.status,
49
55
  spawnedProcess: result.spawnedProcess ?? null, exitCode: result.exitCode,
50
- outputCapture: capture ?? null, ...(storageFailure ? { storageFailure } : {}),
56
+ outputCapture: capture ?? null,
57
+ ...(captureFailure && failureKind === "security" ? { securityFailure: captureFailure } : {}),
58
+ ...(captureFailure && failureKind !== "security" ? { storageFailure: captureFailure } : {}),
51
59
  outputDelivery: "pending", evidenceScope: "command_process_completion", independentOutcomeCheck: "not_performed",
52
60
  observationMeta: { kind: "volatile_external", carryPolicy: "never" } },
53
61
  }, context?.resultBudget);
@@ -1,4 +1,6 @@
1
+ import { createSystemCommandPathAdapter } from "./command-working-directory.js";
1
2
  import type {
3
+ RuntimeToolPathResolver,
2
4
  ToolCallAdapter,
3
5
  ToolImplementation,
4
6
  ToolModuleDeclaration,
@@ -82,7 +84,14 @@ export async function prepareSystemRequestModules(
82
84
  return Object.freeze([
83
85
  ...modules
84
86
  .filter((module) => !isComputerTool(module.definition.name))
85
- .map((module) => projectSystemRequestModule(module, snapshot, handlers)),
87
+ .map((module) =>
88
+ projectSystemRequestModule(
89
+ module,
90
+ snapshot,
91
+ handlers,
92
+ preparation?.runtimePathResolver,
93
+ ),
94
+ ),
86
95
  ...computerModules,
87
96
  ]);
88
97
  }
@@ -108,6 +117,7 @@ function projectSystemRequestModule(
108
117
  module: ToolModuleDeclaration,
109
118
  snapshot: SystemTargetSnapshot,
110
119
  handlers: Readonly<Record<string, ToolImplementation>>,
120
+ resolver?: RuntimeToolPathResolver,
111
121
  ): ToolModuleDeclaration {
112
122
  const targets = Object.freeze(snapshot.map(routeTargetId));
113
123
  const availability = ` Available targets for this request: ${targets.join(", ")}.`;
@@ -131,7 +141,7 @@ function projectSystemRequestModule(
131
141
  },
132
142
  implementation: handlers[module.definition.name]!,
133
143
  adapter: {
134
- ...module.adapter,
144
+ ...createSystemCommandPathAdapter(module.adapter, snapshot, resolver),
135
145
  executionBinding: systemExecutionBinding(snapshot),
136
146
  },
137
147
  });
@@ -10,6 +10,7 @@ import {
10
10
  type HostStatus,
11
11
  } from "../../../src/plugin-sdk/computer-access.js";
12
12
  import type { SystemTargetObservation } from "../../../src/plugin-sdk/computer-access.js";
13
+ import { redactSecretText } from "./security/secret-text.js";
13
14
 
14
15
  export type SystemRequestRoute = Readonly<
15
16
  | { kind: "native"; target: SystemTarget }
@@ -140,7 +141,7 @@ export function systemRouteMetadata(
140
141
  return {
141
142
  displayTarget: route.target,
142
143
  transport: "host_companion",
143
- computerName: route.identity.name,
144
+ computerName: redactSecretText(route.identity.name),
144
145
  };
145
146
  }
146
147