@abot-ai/runtime 1.3.1 → 1.4.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 (634) hide show
  1. package/dist/plugins/system/source/application-catalog.d.ts +14 -0
  2. package/dist/plugins/system/source/application-catalog.js +185 -0
  3. package/dist/plugins/system/source/application-launch.d.ts +10 -0
  4. package/dist/plugins/system/source/application-launch.js +80 -0
  5. package/dist/plugins/system/source/application-observation.d.ts +25 -0
  6. package/dist/plugins/system/source/application-observation.js +53 -0
  7. package/dist/plugins/system/source/commands.d.ts +7 -0
  8. package/dist/plugins/system/source/commands.js +71 -0
  9. package/dist/plugins/system/source/companion/autostart.d.ts +16 -0
  10. package/dist/plugins/system/source/companion/autostart.js +146 -0
  11. package/dist/plugins/system/source/companion/broker-location.d.ts +11 -0
  12. package/dist/plugins/system/source/companion/broker-location.js +76 -0
  13. package/dist/plugins/system/source/companion/broker-server.d.ts +4 -0
  14. package/dist/plugins/system/source/companion/broker-server.js +147 -0
  15. package/dist/plugins/system/source/companion/connection.d.ts +25 -0
  16. package/dist/plugins/system/source/companion/connection.js +182 -0
  17. package/dist/plugins/system/source/companion/liveness.d.ts +3 -0
  18. package/dist/plugins/system/source/companion/liveness.js +20 -0
  19. package/dist/plugins/system/source/companion/native-address.d.ts +12 -0
  20. package/dist/plugins/system/source/companion/native-address.js +41 -0
  21. package/dist/plugins/system/source/companion/native-identity.d.ts +2 -0
  22. package/dist/plugins/system/source/companion/native-identity.js +23 -0
  23. package/dist/plugins/system/source/companion/native-messages.d.ts +9 -0
  24. package/dist/plugins/system/source/companion/native-messages.js +77 -0
  25. package/dist/plugins/system/source/companion/native-session.d.ts +19 -0
  26. package/dist/plugins/system/source/companion/native-session.js +205 -0
  27. package/dist/plugins/system/source/companion/native-state.d.ts +22 -0
  28. package/dist/plugins/system/source/companion/native-state.js +126 -0
  29. package/dist/plugins/system/source/companion/native-supervisor.d.ts +10 -0
  30. package/dist/plugins/system/source/companion/native-supervisor.js +93 -0
  31. package/dist/plugins/system/source/companion/pairing-store.d.ts +22 -0
  32. package/dist/plugins/system/source/companion/pairing-store.js +102 -0
  33. package/dist/plugins/system/source/companion/private-store.d.ts +4 -0
  34. package/dist/plugins/system/source/companion/private-store.js +59 -0
  35. package/dist/plugins/system/source/companion/process-owner-identity.d.ts +22 -0
  36. package/dist/plugins/system/source/companion/process-owner-identity.js +144 -0
  37. package/dist/plugins/system/source/companion/protocol.d.ts +57 -0
  38. package/dist/plugins/system/source/companion/protocol.js +66 -0
  39. package/dist/plugins/system/source/contracts.d.ts +38 -0
  40. package/dist/plugins/system/source/contracts.js +7 -0
  41. package/dist/plugins/system/source/elevation.d.ts +8 -0
  42. package/dist/plugins/system/source/elevation.js +57 -0
  43. package/dist/plugins/system/source/handlers.d.ts +3 -0
  44. package/dist/plugins/system/source/handlers.js +90 -0
  45. package/dist/plugins/system/source/host-evidence.d.ts +4 -0
  46. package/dist/plugins/system/source/host-evidence.js +52 -0
  47. package/dist/plugins/system/source/host-observation.d.ts +25 -0
  48. package/dist/plugins/system/source/host-observation.js +59 -0
  49. package/dist/plugins/system/source/process-result.d.ts +4 -0
  50. package/dist/plugins/system/source/process-result.js +86 -0
  51. package/dist/plugins/system/source/process-runner.d.ts +3 -0
  52. package/dist/plugins/system/source/process-runner.js +103 -0
  53. package/dist/plugins/system/source/target-observation.d.ts +18 -0
  54. package/dist/plugins/system/source/target-observation.js +29 -0
  55. package/dist/plugins/system/source/targets.d.ts +8 -0
  56. package/dist/plugins/system/source/targets.js +101 -0
  57. package/dist/scripts/add-runtime-model.js +10 -53
  58. package/dist/scripts/runtime-model-addition.d.ts +13 -0
  59. package/dist/scripts/runtime-model-addition.js +53 -0
  60. package/dist/scripts/runtime-setup-files.d.ts +3 -1
  61. package/dist/scripts/runtime-setup-files.js +18 -1
  62. package/dist/src/capabilities/file-output-presentation.d.ts +43 -0
  63. package/dist/src/capabilities/file-output-presentation.js +133 -0
  64. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +2 -0
  65. package/dist/src/capabilities/tool-definition-validator/event-input-text-options.d.ts +5 -0
  66. package/dist/src/capabilities/tool-definition-validator/event-input-text-options.js +37 -0
  67. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
  68. package/dist/src/capabilities/tool-definition-validator/module-registry.js +12 -0
  69. package/dist/src/capabilities/tool-event-input-text.d.ts +9 -0
  70. package/dist/src/capabilities/tool-event-input-text.js +64 -0
  71. package/dist/src/capabilities/tool-event-metadata.js +10 -0
  72. package/dist/src/capabilities/tool-executor.d.ts +1 -0
  73. package/dist/src/capabilities/tool-executor.js +1 -0
  74. package/dist/src/capabilities/tool-permission-mode.d.ts +7 -0
  75. package/dist/src/capabilities/tool-permission-mode.js +27 -0
  76. package/dist/src/capabilities/tool-types.d.ts +18 -2
  77. package/dist/src/cli/abot.js +18 -15
  78. package/dist/src/cli/host-companion-bundle.mjs +5201 -0
  79. package/dist/src/cli/host-companion-entry.d.ts +8 -0
  80. package/dist/src/cli/host-companion-entry.js +70 -0
  81. package/dist/src/cli/host-companion-startup.d.ts +4 -0
  82. package/dist/src/cli/host-companion-startup.js +35 -0
  83. package/dist/src/cli/host-companion.d.ts +5 -0
  84. package/dist/src/cli/host-companion.js +203 -0
  85. package/dist/src/model-gateway/server/configuration.js +4 -1
  86. package/dist/src/model-gateway/server/contracts.d.ts +2 -0
  87. package/dist/src/plugin-contract/entrypoint.d.ts +4 -2
  88. package/dist/src/plugin-contract/manifest.d.ts +1 -0
  89. package/dist/src/runtime/adapters/config-file-transaction.d.ts +46 -0
  90. package/dist/src/runtime/adapters/config-file-transaction.js +158 -0
  91. package/dist/src/runtime/adapters/configured-skill-provider.js +3 -3
  92. package/dist/src/runtime/adapters/in-memory-session-store.js +11 -1
  93. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +7 -3
  94. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +4 -1
  95. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.d.ts +1 -1
  96. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.js +5 -1
  97. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-identity.d.ts +3 -0
  98. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-identity.js +15 -0
  99. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +2 -0
  100. package/dist/src/runtime/adapters/long-term-memory/onboarding-config-repository.js +17 -43
  101. package/dist/src/runtime/adapters/registered-tool-normal-invocations/catalog/registrations.js +6 -2
  102. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +10 -1
  103. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/execution-binding.d.ts +11 -0
  104. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/execution-binding.js +37 -0
  105. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/file-output-presentation.d.ts +7 -0
  106. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/file-output-presentation.js +105 -0
  107. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +29 -3
  108. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.d.ts +1 -0
  109. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.js +1 -0
  110. package/dist/src/runtime/capabilities/configured-tool-registry.js +9 -1
  111. package/dist/src/runtime/capabilities/file-output-root-identity.d.ts +5 -0
  112. package/dist/src/runtime/capabilities/file-output-root-identity.js +146 -0
  113. package/dist/src/runtime/capabilities/file-output-root-marker-creation.d.ts +5 -0
  114. package/dist/src/runtime/capabilities/file-output-root-marker-creation.js +63 -0
  115. package/dist/src/runtime/capabilities/request-bound-tool-registry.d.ts +1 -0
  116. package/dist/src/runtime/capabilities/request-bound-tool-registry.js +6 -1
  117. package/dist/src/runtime/capabilities/request-module-preparation.d.ts +3 -0
  118. package/dist/src/runtime/capabilities/request-module-preparation.js +102 -0
  119. package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +10 -0
  120. package/dist/src/runtime/capabilities/request-permission-catalog.js +50 -0
  121. package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +4 -0
  122. package/dist/src/runtime/capabilities/request-permission-tool-registry.js +61 -0
  123. package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +3 -0
  124. package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +5 -2
  125. package/dist/src/runtime/capabilities/request-working-directory.d.ts +3 -0
  126. package/dist/src/runtime/capabilities/request-working-directory.js +12 -0
  127. package/dist/src/runtime/composition.d.ts +2 -0
  128. package/dist/src/runtime/config/runner/loader.d.ts +4 -0
  129. package/dist/src/runtime/config/runner/loader.js +23 -3
  130. package/dist/src/runtime/context/capability-brief-budget.d.ts +18 -0
  131. package/dist/src/runtime/context/capability-brief-budget.js +38 -0
  132. package/dist/src/runtime/context/capability-brief-readmission.d.ts +21 -0
  133. package/dist/src/runtime/context/capability-brief-readmission.js +47 -0
  134. package/dist/src/runtime/context/capability-brief.d.ts +9 -2
  135. package/dist/src/runtime/context/capability-brief.js +21 -39
  136. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -0
  137. package/dist/src/runtime/context/capability-descriptions.js +23 -0
  138. package/dist/src/runtime/default-environment-adapters.js +3 -4
  139. package/dist/src/runtime/local-application.d.ts +18 -0
  140. package/dist/src/runtime/local-application.js +12 -0
  141. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
  142. package/dist/src/runtime/local-host/app-service-dispatch.js +9 -0
  143. package/dist/src/runtime/local-host/client-services.d.ts +16 -0
  144. package/dist/src/runtime/local-host/client-services.js +3 -2
  145. package/dist/src/runtime/local-host/contracts.d.ts +4 -0
  146. package/dist/src/runtime/local-host/startup-connection.js +22 -7
  147. package/dist/src/runtime/local-host/transport.js +14 -2
  148. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +5 -2
  149. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
  150. package/dist/src/runtime/orchestration/role-calls/command-dispatch/work-plan-transition.d.ts +3 -0
  151. package/dist/src/runtime/orchestration/role-calls/command-dispatch/work-plan-transition.js +46 -0
  152. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
  153. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +8 -4
  154. package/dist/src/runtime/orchestration/role-calls/transactions.js +2 -0
  155. package/dist/src/runtime/orchestration/role-calls/work-plan-contracts.d.ts +48 -0
  156. package/dist/src/runtime/orchestration/role-calls/work-plan-contracts.js +9 -0
  157. package/dist/src/runtime/orchestration/role-calls/work-plan-source.d.ts +7 -0
  158. package/dist/src/runtime/orchestration/role-calls/work-plan-source.js +85 -0
  159. package/dist/src/runtime/orchestration/role-calls/work-plan-transactions.d.ts +3 -0
  160. package/dist/src/runtime/orchestration/role-calls/work-plan-transactions.js +17 -0
  161. package/dist/src/runtime/orchestration/role-calls/work-plan-validation.d.ts +10 -0
  162. package/dist/src/runtime/orchestration/role-calls/work-plan-validation.js +149 -0
  163. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +1 -1
  164. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  165. package/dist/src/runtime/plugins/compiled-catalog.d.ts +2 -1
  166. package/dist/src/runtime/plugins/configured-manifests.d.ts +3 -0
  167. package/dist/src/runtime/plugins/configured-manifests.js +37 -0
  168. package/dist/src/runtime/plugins/entrypoint-validation.d.ts +6 -0
  169. package/dist/src/runtime/plugins/entrypoint-validation.js +74 -0
  170. package/dist/src/runtime/plugins/loader.js +11 -123
  171. package/dist/src/runtime/plugins/manifest-discovery.d.ts +4 -1
  172. package/dist/src/runtime/plugins/manifest-discovery.js +8 -1
  173. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  174. package/dist/src/runtime/plugins/manifest-validator.js +7 -1
  175. package/dist/src/runtime/plugins/runtime-capability-plugins.d.ts +4 -0
  176. package/dist/src/runtime/plugins/runtime-capability-plugins.js +7 -0
  177. package/dist/src/runtime/plugins/selection.d.ts +14 -0
  178. package/dist/src/runtime/plugins/selection.js +38 -0
  179. package/dist/src/runtime/ports.d.ts +8 -2
  180. package/dist/src/runtime/projects/contracts.d.ts +40 -0
  181. package/dist/src/runtime/projects/contracts.js +10 -0
  182. package/dist/src/runtime/projects/folders.d.ts +7 -0
  183. package/dist/src/runtime/projects/folders.js +110 -0
  184. package/dist/src/runtime/projects/repository.d.ts +10 -0
  185. package/dist/src/runtime/projects/repository.js +54 -0
  186. package/dist/src/runtime/projects/service.d.ts +3 -0
  187. package/dist/src/runtime/projects/service.js +34 -0
  188. package/dist/src/runtime/projects/session-paths.d.ts +5 -0
  189. package/dist/src/runtime/projects/session-paths.js +13 -0
  190. package/dist/src/runtime/request/execution-agent-plan-update.d.ts +4 -0
  191. package/dist/src/runtime/request/execution-agent-plan-update.js +13 -0
  192. package/dist/src/runtime/request/execution-agent-root-execution.js +9 -1
  193. package/dist/src/runtime/request/handler.js +9 -2
  194. package/dist/src/runtime/request/input.d.ts +2 -1
  195. package/dist/src/runtime/request/input.js +1 -6
  196. package/dist/src/runtime/request/role-call-planner-events.js +4 -0
  197. package/dist/src/runtime/request/role-executor-composition.js +9 -1
  198. package/dist/src/runtime/request/root-contract.d.ts +6 -1
  199. package/dist/src/runtime/request/root-execution-kernel.js +17 -0
  200. package/dist/src/runtime/request/root-plan-event-projection.d.ts +3 -0
  201. package/dist/src/runtime/request/root-plan-event-projection.js +32 -0
  202. package/dist/src/runtime/request/root-plan-update.d.ts +15 -0
  203. package/dist/src/runtime/request/root-plan-update.js +20 -0
  204. package/dist/src/runtime/request/worker-capability-composition.d.ts +1 -0
  205. package/dist/src/runtime/request/worker-capability-composition.js +2 -0
  206. package/dist/src/runtime/runtime-environment.d.ts +1 -0
  207. package/dist/src/runtime/runtime-environment.js +2 -0
  208. package/dist/src/runtime/steps/auditor-decision/advisory-receipt.d.ts +32 -0
  209. package/dist/src/runtime/steps/auditor-decision/advisory-receipt.js +106 -0
  210. package/dist/src/runtime/steps/auditor-decision/advisory-result-budget.d.ts +5 -0
  211. package/dist/src/runtime/steps/auditor-decision/advisory-result-budget.js +40 -0
  212. package/dist/src/runtime/steps/auditor-decision/audit-input-state.d.ts +12 -0
  213. package/dist/src/runtime/steps/auditor-decision/audit-input-state.js +101 -0
  214. package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +31 -16
  215. package/dist/src/runtime/steps/auditor-decision/contracts.js +3 -3
  216. package/dist/src/runtime/steps/auditor-decision/evidence-binding.d.ts +5 -0
  217. package/dist/src/runtime/steps/auditor-decision/evidence-binding.js +43 -0
  218. package/dist/src/runtime/steps/auditor-decision/evidence-coverage.d.ts +2 -0
  219. package/dist/src/runtime/steps/auditor-decision/evidence-coverage.js +71 -0
  220. package/dist/src/runtime/steps/auditor-decision/evidence-inventory.d.ts +13 -0
  221. package/dist/src/runtime/steps/auditor-decision/evidence-inventory.js +89 -0
  222. package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +10 -0
  223. package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +56 -0
  224. package/dist/src/runtime/steps/auditor-decision/evidence-selection.d.ts +9 -0
  225. package/dist/src/runtime/steps/auditor-decision/evidence-selection.js +71 -0
  226. package/dist/src/runtime/steps/auditor-decision/format.js +44 -2
  227. package/dist/src/runtime/steps/auditor-decision/index.d.ts +3 -0
  228. package/dist/src/runtime/steps/auditor-decision/index.js +3 -0
  229. package/dist/src/runtime/steps/auditor-decision/input.d.ts +2 -2
  230. package/dist/src/runtime/steps/auditor-decision/input.js +64 -20
  231. package/dist/src/runtime/steps/auditor-decision/parser.js +38 -23
  232. package/dist/src/runtime/steps/auditor-decision/projection.js +49 -99
  233. package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
  234. package/dist/src/runtime/steps/auditor-decision/prompt.js +9 -4
  235. package/dist/src/runtime/steps/auditor-decision/run.js +79 -47
  236. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +8 -1
  237. package/dist/src/runtime/steps/execution-agent/contracts.js +2 -0
  238. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +4 -0
  239. package/dist/src/runtime/steps/execution-agent/format.js +4 -3
  240. package/dist/src/runtime/steps/execution-agent/input.js +10 -11
  241. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  242. package/dist/src/runtime/steps/execution-agent/prompt.js +11 -4
  243. package/dist/src/runtime/steps/execution-agent/state-context.js +10 -0
  244. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +18 -0
  245. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +86 -0
  246. package/dist/src/runtime/steps/execution-agent/work-plan-decision-parsing.d.ts +2 -0
  247. package/dist/src/runtime/steps/execution-agent/work-plan-decision-parsing.js +38 -0
  248. package/dist/src/runtime/steps/execution-agent/work-plan-sources.d.ts +6 -0
  249. package/dist/src/runtime/steps/execution-agent/work-plan-sources.js +54 -0
  250. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +40 -0
  251. package/dist/src/runtime/steps/planner-decision/capability-brief.js +47 -0
  252. package/dist/src/runtime/steps/planner-decision/input.d.ts +4 -2
  253. package/dist/src/runtime/steps/planner-decision/input.js +23 -13
  254. package/dist/src/runtime/steps/planner-decision/prompt.js +2 -2
  255. package/dist/src/runtime/steps/planner-decision/run.js +11 -7
  256. package/dist/src/runtime/steps/planner-graph/parser.js +0 -11
  257. package/dist/src/runtime/steps/planner-graph/prompt.js +2 -1
  258. package/dist/src/runtime/steps/supervisor-decision/capability-brief-readmission.d.ts +10 -0
  259. package/dist/src/runtime/steps/supervisor-decision/capability-brief-readmission.js +39 -0
  260. package/dist/src/runtime/steps/supervisor-decision/run.js +2 -1
  261. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.d.ts +3 -1
  262. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.js +20 -1
  263. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.d.ts +1 -1
  264. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.js +6 -6
  265. package/dist/src/runtime/steps/worker-decision/parser/capability-invocation-validation.js +2 -1
  266. package/dist/src/sessions/project-binding.d.ts +12 -0
  267. package/dist/src/sessions/project-binding.js +49 -0
  268. package/dist/src/sessions/record/projection.d.ts +6 -1
  269. package/dist/src/sessions/record/projection.js +1 -0
  270. package/dist/src/sessions/session-service.d.ts +2 -1
  271. package/dist/src/sessions/session-service.js +11 -1
  272. package/dist/src/sessions/types.d.ts +7 -0
  273. package/dist/src/web-ui/app/ARCHITECTURE.md +121 -1
  274. package/dist/src/web-ui/app/app-bootstrap.js +3 -0
  275. package/dist/src/web-ui/app/app-dom.js +3 -0
  276. package/dist/src/web-ui/app/app-state.js +38 -0
  277. package/dist/src/web-ui/app/app.js +76 -67
  278. package/dist/src/web-ui/app/components/config-workspace/config-model.js +23 -3
  279. package/dist/src/web-ui/app/components/config-workspace/dashboard-rendering.js +2 -0
  280. package/dist/src/web-ui/app/components/config-workspace/field-rendering.js +2 -0
  281. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +6 -0
  282. package/dist/src/web-ui/app/components/config-workspace/model-setup-entry.js +27 -0
  283. package/dist/src/web-ui/app/components/config-workspace/raw-config-repair.js +28 -0
  284. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +5 -0
  285. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +23 -3
  286. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +26 -8
  287. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +56 -0
  288. package/dist/src/web-ui/app/components/config-workspace.js +11 -0
  289. package/dist/src/web-ui/app/components/conversation-activity.d.ts +6 -0
  290. package/dist/src/web-ui/app/components/conversation-activity.js +10 -2
  291. package/dist/src/web-ui/app/components/conversation-file-action.js +33 -0
  292. package/dist/src/web-ui/app/components/conversation-file-focus.d.ts +12 -0
  293. package/dist/src/web-ui/app/components/conversation-file-focus.js +149 -0
  294. package/dist/src/web-ui/app/components/conversation-file-preview.d.ts +23 -0
  295. package/dist/src/web-ui/app/components/conversation-file-preview.js +247 -0
  296. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +6 -0
  297. package/dist/src/web-ui/app/components/conversation-role-cards.js +10 -2
  298. package/dist/src/web-ui/app/components/conversation-tool-evidence.d.ts +9 -0
  299. package/dist/src/web-ui/app/components/conversation-tool-evidence.js +129 -0
  300. package/dist/src/web-ui/app/components/conversation-tools.d.ts +6 -0
  301. package/dist/src/web-ui/app/components/conversation-tools.js +25 -105
  302. package/dist/src/web-ui/app/components/conversation-view.js +10 -1
  303. package/dist/src/web-ui/app/components/dashboard/workspace.js +19 -7
  304. package/dist/src/web-ui/app/components/model-setup/rendering.js +99 -0
  305. package/dist/src/web-ui/app/components/model-setup/save-flow.js +111 -0
  306. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +16 -0
  307. package/dist/src/web-ui/app/components/model-setup/validation.js +125 -0
  308. package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +44 -0
  309. package/dist/src/web-ui/app/components/model-setup/wizard.js +370 -0
  310. package/dist/src/web-ui/app/components/plugins/manager.js +200 -0
  311. package/dist/src/web-ui/app/components/plugins/rendering.js +124 -0
  312. package/dist/src/web-ui/app/components/plugins/view-state.js +123 -0
  313. package/dist/src/web-ui/app/components/project-creation.js +119 -0
  314. package/dist/src/web-ui/app/components/project-session-groups.js +95 -0
  315. package/dist/src/web-ui/app/components/runtime-config-activation.js +83 -0
  316. package/dist/src/web-ui/app/components/runtime-setup/bridge-guide.d.ts +9 -0
  317. package/dist/src/web-ui/app/components/runtime-setup/bridge-guide.js +198 -0
  318. package/dist/src/web-ui/app/components/runtime-setup/bridge-rendering.js +107 -0
  319. package/dist/src/web-ui/app/components/runtime-setup/commands.js +54 -0
  320. package/dist/src/web-ui/app/components/runtime-setup/configuration-recovery.js +25 -0
  321. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +154 -0
  322. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +71 -0
  323. package/dist/src/web-ui/app/components/runtime-setup/context-window.js +18 -0
  324. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.d.ts +15 -0
  325. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +87 -0
  326. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +30 -0
  327. package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +57 -0
  328. package/dist/src/web-ui/app/components/runtime-setup/embedding.js +284 -0
  329. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +117 -0
  330. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +173 -0
  331. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +141 -0
  332. package/dist/src/web-ui/app/components/runtime-setup/validation.js +69 -0
  333. package/dist/src/web-ui/app/components/runtime-setup/view-state.js +58 -0
  334. package/dist/src/web-ui/app/components/runtime-setup/wizard-shell.js +27 -0
  335. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +66 -5
  336. package/dist/src/web-ui/app/components/runtime-setup-guide.js +415 -461
  337. package/dist/src/web-ui/app/components/system-host/download.js +38 -0
  338. package/dist/src/web-ui/app/components/system-host/manager.js +249 -0
  339. package/dist/src/web-ui/app/components/system-host/rendering.js +88 -0
  340. package/dist/src/web-ui/app/components/system-host/setup-notice.js +87 -0
  341. package/dist/src/web-ui/app/components/system-host/visibility.js +35 -0
  342. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +4 -0
  343. package/dist/src/web-ui/app/components/tool-approval-card.js +15 -0
  344. package/dist/src/web-ui/app/configuration-environment-refresh.js +118 -0
  345. package/dist/src/web-ui/app/configuration-feature.js +125 -4
  346. package/dist/src/web-ui/app/controllers/app-event-bindings.js +2 -0
  347. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +1 -0
  348. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +4 -3
  349. package/dist/src/web-ui/app/controllers/conversation-file-preview-controller.d.ts +24 -0
  350. package/dist/src/web-ui/app/controllers/conversation-file-preview-controller.js +158 -0
  351. package/dist/src/web-ui/app/controllers/conversation-file-preview-feature.d.ts +19 -0
  352. package/dist/src/web-ui/app/controllers/conversation-file-preview-feature.js +63 -0
  353. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -0
  354. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +2 -0
  355. package/dist/src/web-ui/app/controllers/conversation-view-feature.js +28 -0
  356. package/dist/src/web-ui/app/controllers/dashboard-controller.js +17 -0
  357. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +45 -0
  358. package/dist/src/web-ui/app/controllers/projects-controller.js +278 -0
  359. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +3 -0
  360. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +13 -6
  361. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -1
  362. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +11 -95
  363. package/dist/src/web-ui/app/controllers/session-controller.js +64 -57
  364. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.d.ts +20 -0
  365. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +116 -0
  366. package/dist/src/web-ui/app/dashboard-feature.js +32 -10
  367. package/dist/src/web-ui/app/index.html +44 -7
  368. package/dist/src/web-ui/app/lib/conversation-file-preview.d.ts +12 -0
  369. package/dist/src/web-ui/app/lib/conversation-file-reference.d.ts +30 -0
  370. package/dist/src/web-ui/app/lib/conversation-file-reference.js +66 -0
  371. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +2 -0
  372. package/dist/src/web-ui/app/lib/tool-activity-event.js +18 -6
  373. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +2 -0
  374. package/dist/src/web-ui/app/lib/tool-activity-model.js +4 -2
  375. package/dist/src/web-ui/app/lib/tool-permission-mode.d.ts +16 -0
  376. package/dist/src/web-ui/app/lib/tool-permission-mode.js +60 -0
  377. package/dist/src/web-ui/app/lib/tool-process-activity-fields.js +102 -0
  378. package/dist/src/web-ui/app/projects-feature.js +134 -0
  379. package/dist/src/web-ui/app/runtime-onboarding-feature.d.ts +34 -0
  380. package/dist/src/web-ui/app/runtime-onboarding-feature.js +92 -0
  381. package/dist/src/web-ui/app/runtime-setup-page-lifecycle.d.ts +5 -0
  382. package/dist/src/web-ui/app/runtime-setup-page-lifecycle.js +13 -0
  383. package/dist/src/web-ui/app/services/client-preferences.d.ts +24 -0
  384. package/dist/src/web-ui/app/services/client-preferences.js +32 -19
  385. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +46 -0
  386. package/dist/src/web-ui/app/services/runtime-web-client/conversation-files.d.ts +28 -0
  387. package/dist/src/web-ui/app/services/runtime-web-client/conversation-files.js +75 -0
  388. package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +19 -0
  389. package/dist/src/web-ui/app/services/runtime-web-client/projects.js +34 -0
  390. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +27 -0
  391. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +52 -0
  392. package/dist/src/web-ui/app/services/runtime-web-client.js +35 -4
  393. package/dist/src/web-ui/app/styles/13-projects.css +272 -0
  394. package/dist/src/web-ui/app/styles/18-dashboard.css +0 -5
  395. package/dist/src/web-ui/app/styles/19-runtime-setup.css +411 -0
  396. package/dist/src/web-ui/app/styles/20-chat-composer.css +0 -384
  397. package/dist/src/web-ui/app/styles/29-conversation-file-preview.css +254 -0
  398. package/dist/src/web-ui/app/styles/37-runtime-activation.css +26 -0
  399. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +1 -10
  400. package/dist/src/web-ui/app/styles/41-plugin-management.css +351 -0
  401. package/dist/src/web-ui/app/styles/42-runtime-setup-plugins.css +179 -0
  402. package/dist/src/web-ui/app/styles/43-model-setup.css +73 -0
  403. package/dist/src/web-ui/app/styles/44-model-provider-cards.css +63 -0
  404. package/dist/src/web-ui/app/styles/45-bridge-setup.css +44 -0
  405. package/dist/src/web-ui/app/styles/46-system-host.css +132 -0
  406. package/dist/src/web-ui/app/styles.css +10 -0
  407. package/dist/src/web-ui/config-dashboard-backend.d.ts +5 -0
  408. package/dist/src/web-ui/config-dashboard-backend.js +94 -114
  409. package/dist/src/web-ui/config-dashboard-model-identity.d.ts +7 -0
  410. package/dist/src/web-ui/config-dashboard-model-identity.js +45 -0
  411. package/dist/src/web-ui/config-dashboard-save-transaction.d.ts +5 -0
  412. package/dist/src/web-ui/config-dashboard-save-transaction.js +21 -0
  413. package/dist/src/web-ui/environment-config.d.ts +17 -0
  414. package/dist/src/web-ui/environment-config.js +60 -0
  415. package/dist/src/web-ui/forwarded-loopback-policy.d.ts +2 -0
  416. package/dist/src/web-ui/forwarded-loopback-policy.js +14 -0
  417. package/dist/src/web-ui/local-runtime/api-router.d.ts +7 -0
  418. package/dist/src/web-ui/local-runtime/api-router.js +136 -12
  419. package/dist/src/web-ui/local-runtime/config-mutation-request.d.ts +8 -0
  420. package/dist/src/web-ui/local-runtime/config-mutation-request.js +55 -0
  421. package/dist/src/web-ui/local-runtime/configuration-activation-environments.d.ts +22 -0
  422. package/dist/src/web-ui/local-runtime/configuration-activation-environments.js +106 -0
  423. package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +7 -0
  424. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +36 -0
  425. package/dist/src/web-ui/local-runtime/configuration-activation.d.ts +20 -0
  426. package/dist/src/web-ui/local-runtime/configuration-activation.js +107 -0
  427. package/dist/src/web-ui/local-runtime/contracts.d.ts +8 -0
  428. package/dist/src/web-ui/local-runtime/conversation-file-access.d.ts +30 -0
  429. package/dist/src/web-ui/local-runtime/conversation-file-access.js +131 -0
  430. package/dist/src/web-ui/local-runtime/conversation-file-content.d.ts +21 -0
  431. package/dist/src/web-ui/local-runtime/conversation-file-content.js +75 -0
  432. package/dist/src/web-ui/local-runtime/conversation-file-format.d.ts +12 -0
  433. package/dist/src/web-ui/local-runtime/conversation-file-format.js +87 -0
  434. package/dist/src/web-ui/local-runtime/conversation-file-native-open.d.ts +10 -0
  435. package/dist/src/web-ui/local-runtime/conversation-file-native-open.js +94 -0
  436. package/dist/src/web-ui/local-runtime/conversation-file-native-request.d.ts +4 -0
  437. package/dist/src/web-ui/local-runtime/conversation-file-native-request.js +72 -0
  438. package/dist/src/web-ui/local-runtime/conversation-file-routes.d.ts +11 -0
  439. package/dist/src/web-ui/local-runtime/conversation-file-routes.js +105 -0
  440. package/dist/src/web-ui/local-runtime/conversation-file-target.d.ts +14 -0
  441. package/dist/src/web-ui/local-runtime/conversation-file-target.js +158 -0
  442. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +14 -0
  443. package/dist/src/web-ui/local-runtime/environment-registry.js +121 -6
  444. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.d.ts +2 -1
  445. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +15 -10
  446. package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +17 -0
  447. package/dist/src/web-ui/local-runtime/model-setup-catalog.js +45 -0
  448. package/dist/src/web-ui/local-runtime/model-setup-identity.d.ts +16 -0
  449. package/dist/src/web-ui/local-runtime/model-setup-identity.js +20 -0
  450. package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +24 -0
  451. package/dist/src/web-ui/local-runtime/model-setup-input.js +107 -0
  452. package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +17 -0
  453. package/dist/src/web-ui/local-runtime/model-setup-provider.js +68 -0
  454. package/dist/src/web-ui/local-runtime/model-setup-retry.d.ts +14 -0
  455. package/dist/src/web-ui/local-runtime/model-setup-retry.js +47 -0
  456. package/dist/src/web-ui/local-runtime/model-setup-routes.d.ts +12 -0
  457. package/dist/src/web-ui/local-runtime/model-setup-routes.js +50 -0
  458. package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +30 -0
  459. package/dist/src/web-ui/local-runtime/model-setup-service.js +93 -0
  460. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +5 -0
  461. package/dist/src/web-ui/local-runtime/model-setup-validation.js +33 -0
  462. package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +14 -0
  463. package/dist/src/web-ui/local-runtime/plugin-management-routes.js +50 -0
  464. package/dist/src/web-ui/local-runtime/project-routes.d.ts +17 -0
  465. package/dist/src/web-ui/local-runtime/project-routes.js +93 -0
  466. package/dist/src/web-ui/local-runtime/provider-credential-identity.d.ts +3 -0
  467. package/dist/src/web-ui/local-runtime/provider-credential-identity.js +18 -0
  468. package/dist/src/web-ui/local-runtime/request-execution.d.ts +1 -0
  469. package/dist/src/web-ui/local-runtime/request-execution.js +8 -0
  470. package/dist/src/web-ui/local-runtime/runtime-availability.js +36 -7
  471. package/dist/src/web-ui/local-runtime/runtime-setup-completion.d.ts +13 -0
  472. package/dist/src/web-ui/local-runtime/runtime-setup-completion.js +28 -0
  473. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +13 -0
  474. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +110 -0
  475. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.d.ts +4 -0
  476. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +21 -0
  477. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +14 -0
  478. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +148 -0
  479. package/dist/src/web-ui/local-runtime/runtime-setup-draft-recovery.d.ts +7 -0
  480. package/dist/src/web-ui/local-runtime/runtime-setup-draft-recovery.js +18 -0
  481. package/dist/src/web-ui/local-runtime/runtime-setup-draft.d.ts +21 -0
  482. package/dist/src/web-ui/local-runtime/runtime-setup-draft.js +105 -0
  483. package/dist/src/web-ui/local-runtime/runtime-setup-embedding-invalidation.d.ts +8 -0
  484. package/dist/src/web-ui/local-runtime/runtime-setup-embedding-invalidation.js +40 -0
  485. package/dist/src/web-ui/local-runtime/runtime-setup-environment-assignment.d.ts +1 -0
  486. package/dist/src/web-ui/local-runtime/runtime-setup-environment-assignment.js +27 -0
  487. package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +19 -0
  488. package/dist/src/web-ui/local-runtime/runtime-setup-input.js +82 -0
  489. package/dist/src/web-ui/local-runtime/runtime-setup-model-file.d.ts +7 -0
  490. package/dist/src/web-ui/local-runtime/runtime-setup-model-file.js +35 -0
  491. package/dist/src/web-ui/local-runtime/runtime-setup-provider-ownership-recovery.d.ts +4 -0
  492. package/dist/src/web-ui/local-runtime/runtime-setup-provider-ownership-recovery.js +23 -0
  493. package/dist/src/web-ui/local-runtime/runtime-setup-provider-retention.d.ts +11 -0
  494. package/dist/src/web-ui/local-runtime/runtime-setup-provider-retention.js +31 -0
  495. package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +11 -0
  496. package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +60 -0
  497. package/dist/src/web-ui/local-runtime/runtime-setup-receipt-file.d.ts +8 -0
  498. package/dist/src/web-ui/local-runtime/runtime-setup-receipt-file.js +77 -0
  499. package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +35 -0
  500. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +56 -0
  501. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.d.ts +17 -0
  502. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +229 -0
  503. package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +65 -0
  504. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +195 -0
  505. package/dist/src/web-ui/local-runtime/runtime-setup-validation.d.ts +8 -0
  506. package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +35 -0
  507. package/dist/src/web-ui/local-runtime/saved-model-catalog.d.ts +3 -0
  508. package/dist/src/web-ui/local-runtime/saved-model-catalog.js +20 -0
  509. package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +8 -0
  510. package/dist/src/web-ui/local-runtime/setup-embedding-input.js +71 -0
  511. package/dist/src/web-ui/local-runtime/setup-embedding-provider.d.ts +13 -0
  512. package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +114 -0
  513. package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +12 -0
  514. package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +53 -0
  515. package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +32 -0
  516. package/dist/src/web-ui/local-runtime/setup-embedding-service.js +59 -0
  517. package/dist/src/web-ui/local-runtime-backend.d.ts +1 -0
  518. package/dist/src/web-ui/local-runtime-backend.js +3 -0
  519. package/dist/src/web-ui/plugin-capability-selection.d.ts +14 -0
  520. package/dist/src/web-ui/plugin-capability-selection.js +48 -0
  521. package/dist/src/web-ui/plugin-management-catalog.d.ts +26 -0
  522. package/dist/src/web-ui/plugin-management-catalog.js +56 -0
  523. package/dist/src/web-ui/plugin-management-selection.d.ts +16 -0
  524. package/dist/src/web-ui/plugin-management-selection.js +71 -0
  525. package/dist/src/web-ui/plugin-management-service.d.ts +29 -0
  526. package/dist/src/web-ui/plugin-management-service.js +150 -0
  527. package/dist/src/web-ui/request-authority.d.ts +8 -0
  528. package/dist/src/web-ui/request-authority.js +129 -0
  529. package/dist/src/web-ui/runtime-setup-gateway-address.d.ts +3 -0
  530. package/dist/src/web-ui/runtime-setup-gateway-address.js +26 -0
  531. package/dist/src/web-ui/runtime-setup-gateway.d.ts +29 -0
  532. package/dist/src/web-ui/runtime-setup-gateway.js +177 -0
  533. package/dist/src/web-ui/runtime-setup-shutdown.d.ts +2 -0
  534. package/dist/src/web-ui/runtime-setup-shutdown.js +20 -0
  535. package/dist/src/web-ui/server.d.ts +7 -14
  536. package/dist/src/web-ui/server.js +53 -63
  537. package/dist/src/web-ui/session-read-state/service.d.ts +12 -2
  538. package/dist/src/web-ui/system-host-service.d.ts +19 -0
  539. package/dist/src/web-ui/system-host-service.js +159 -0
  540. package/dist/src/web-ui/system-host-setup/companion-bundle.d.ts +2 -0
  541. package/dist/src/web-ui/system-host-setup/companion-bundle.js +12 -0
  542. package/dist/src/web-ui/system-host-setup/companion-macos.d.ts +2 -0
  543. package/dist/src/web-ui/system-host-setup/companion-macos.js +74 -0
  544. package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +2 -0
  545. package/dist/src/web-ui/system-host-setup/companion-windows.js +105 -0
  546. package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +18 -0
  547. package/dist/src/web-ui/system-host-setup/installer-contract.js +51 -0
  548. package/dist/src/web-ui/system-host-setup/installers.d.ts +6 -0
  549. package/dist/src/web-ui/system-host-setup/installers.js +30 -0
  550. package/dist/src/web-ui/system-host-setup/native-authorization.d.ts +3 -0
  551. package/dist/src/web-ui/system-host-setup/native-authorization.js +11 -0
  552. package/dist/src/web-ui/system-host-setup/node-distribution.d.ts +19 -0
  553. package/dist/src/web-ui/system-host-setup/node-distribution.js +9 -0
  554. package/dist/src/web-ui/system-host-setup/readiness.d.ts +18 -0
  555. package/dist/src/web-ui/system-host-setup/readiness.js +70 -0
  556. package/dist/src/web-ui/system-host-setup/routes.d.ts +20 -0
  557. package/dist/src/web-ui/system-host-setup/routes.js +121 -0
  558. package/dist/src/web-ui/system-host-setup/windows-script-wrapper.d.ts +2 -0
  559. package/dist/src/web-ui/system-host-setup/windows-script-wrapper.js +17 -0
  560. package/dist/src/web-ui/system-host-setup/wsl-interop-config.d.ts +3 -0
  561. package/dist/src/web-ui/system-host-setup/wsl-interop-config.js +67 -0
  562. package/dist/src/web-ui/system-host-setup/wsl-interop-windows.d.ts +1 -0
  563. package/dist/src/web-ui/system-host-setup/wsl-interop-windows.js +49 -0
  564. package/dist/src/web-ui/system-host-upgrade-authority.d.ts +5 -0
  565. package/dist/src/web-ui/system-host-upgrade-authority.js +13 -0
  566. package/docs/architecture.md +6 -1
  567. package/docs/installation.md +53 -17
  568. package/docs/known-limitations.md +14 -0
  569. package/docs/plugins.md +124 -19
  570. package/docs/projects-and-full-plus.md +218 -0
  571. package/docs/runtime-invariant-coverage.md +6 -3
  572. package/docs/runtime-prompt-policy-contracts.md +37 -5
  573. package/docs/runtime-public-contracts.md +17 -0
  574. package/package.json +5 -2
  575. package/plugins/exec/plugin.json +30 -9
  576. package/plugins/exec/skills/exec_process_skill/SKILL.md +1 -0
  577. package/plugins/exec/skills/exec_skill/SKILL.md +9 -10
  578. package/plugins/exec/source/handlers.ts +4 -38
  579. package/plugins/exec/source/paths.ts +53 -49
  580. package/plugins/exec/source/types.ts +6 -4
  581. package/plugins/exec/source/validation.ts +33 -198
  582. package/plugins/exec/src/index.cjs +62 -204
  583. package/plugins/filesystem/plugin.json +1 -1
  584. package/plugins/filesystem/skills/dev_view_skill/SKILL.md +7 -0
  585. package/plugins/filesystem/source/atomic-write.ts +6 -3
  586. package/plugins/filesystem/source/dev-view.ts +2 -1
  587. package/plugins/filesystem/source/directory-authority-write.ts +4 -0
  588. package/plugins/filesystem/source/edit-file.ts +3 -0
  589. package/plugins/filesystem/source/file-output-presentation.ts +42 -0
  590. package/plugins/filesystem/source/mutation-parent.ts +18 -9
  591. package/plugins/filesystem/source/view-locator.ts +141 -0
  592. package/plugins/filesystem/source/view-window.ts +12 -25
  593. package/plugins/filesystem/source/write-file.ts +8 -0
  594. package/plugins/filesystem/src/index.cjs +162 -35
  595. package/plugins/system/plugin.json +374 -0
  596. package/plugins/system/skills/system_actions/SKILL.md +31 -0
  597. package/plugins/system/source/application-catalog.ts +237 -0
  598. package/plugins/system/source/application-launch.ts +113 -0
  599. package/plugins/system/source/application-observation.ts +78 -0
  600. package/plugins/system/source/commands.ts +106 -0
  601. package/plugins/system/source/companion/autostart.ts +185 -0
  602. package/plugins/system/source/companion/broker-client.ts +183 -0
  603. package/plugins/system/source/companion/broker-location.ts +89 -0
  604. package/plugins/system/source/companion/broker-server.ts +169 -0
  605. package/plugins/system/source/companion/connection.ts +211 -0
  606. package/plugins/system/source/companion/liveness.ts +23 -0
  607. package/plugins/system/source/companion/native-address.ts +55 -0
  608. package/plugins/system/source/companion/native-identity.ts +26 -0
  609. package/plugins/system/source/companion/native-messages.ts +100 -0
  610. package/plugins/system/source/companion/native-session.ts +268 -0
  611. package/plugins/system/source/companion/native-state.ts +135 -0
  612. package/plugins/system/source/companion/native-supervisor.ts +98 -0
  613. package/plugins/system/source/companion/pairing-store.ts +110 -0
  614. package/plugins/system/source/companion/private-store.ts +58 -0
  615. package/plugins/system/source/companion/process-owner-identity.ts +190 -0
  616. package/plugins/system/source/companion/protocol.ts +108 -0
  617. package/plugins/system/source/contracts.ts +44 -0
  618. package/plugins/system/source/elevation.ts +88 -0
  619. package/plugins/system/source/handlers.ts +120 -0
  620. package/plugins/system/source/host-dispatch.ts +106 -0
  621. package/plugins/system/source/host-evidence.ts +72 -0
  622. package/plugins/system/source/host-observation.ts +66 -0
  623. package/plugins/system/source/index.ts +8 -0
  624. package/plugins/system/source/process-result.ts +111 -0
  625. package/plugins/system/source/process-runner.ts +104 -0
  626. package/plugins/system/source/request-system-modules.ts +117 -0
  627. package/plugins/system/source/request-target-snapshot.ts +163 -0
  628. package/plugins/system/source/target-observation.ts +43 -0
  629. package/plugins/system/source/targets.ts +147 -0
  630. package/plugins/system/src/index.cjs +1730 -0
  631. package/src/runtime/README.md +36 -8
  632. package/src/runtime/local-host/README.md +7 -0
  633. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.d.ts +0 -14
  634. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.js +0 -87
@@ -12,7 +12,7 @@ export async function acquireFileLock(lockPath, options) {
12
12
  for (;;) {
13
13
  const token = randomUUID();
14
14
  try {
15
- await installLockDirectory(lockPath, token);
15
+ await installLockDirectory(lockPath, token, options.ownerIdentity);
16
16
  return createRelease(lockPath, token, options.releaseMode);
17
17
  }
18
18
  catch (error) {
@@ -51,9 +51,8 @@ async function removeAbandonedLock(lockPath, processIsAlive) {
51
51
  return true;
52
52
  if (snapshot.kind === "legacy_file" || !snapshot.reclaimable)
53
53
  return false;
54
- if (snapshot.ownerPid !== undefined && processIsAlive(snapshot.ownerPid)) {
54
+ if (await hasLiveObservedOwner(snapshot, processIsAlive))
55
55
  return false;
56
- }
57
56
  if (snapshot.record && snapshot.ownerFileName) {
58
57
  return removeObservedOwner(lockPath, snapshot.ownerFileName);
59
58
  }
@@ -65,6 +64,11 @@ async function removeAbandonedLock(lockPath, processIsAlive) {
65
64
  }
66
65
  return removeEmptyLockTree(lockPath, snapshot.hasLeaseDirectory);
67
66
  }
67
+ async function hasLiveObservedOwner(snapshot, processIsAlive) {
68
+ if (snapshot.ownerPid === undefined)
69
+ return false;
70
+ return processIsAlive(snapshot.ownerPid, snapshot.record?.ownerIdentity);
71
+ }
68
72
  function defaultProcessIsAlive(pid) {
69
73
  try {
70
74
  process.kill(pid, 0);
@@ -7,7 +7,9 @@ export declare const OWNER_FILE_PATTERN: RegExp;
7
7
  export type FileLockOptions = Readonly<{
8
8
  waitMs?: number;
9
9
  retryDelayMs?: number;
10
- processIsAlive?: (pid: number) => boolean;
10
+ /** Optional process incarnation; interpreted only by the caller's liveness probe. */
11
+ ownerIdentity?: string;
12
+ processIsAlive?: (pid: number, ownerIdentity?: string) => boolean | Promise<boolean>;
11
13
  /** Long-lived host leases must finish physical cleanup before process.exit. */
12
14
  releaseMode?: "asynchronous" | "synchronous";
13
15
  }>;
@@ -15,6 +17,7 @@ export type LockRecord = Readonly<{
15
17
  pid: number;
16
18
  token: string;
17
19
  createdAt: string;
20
+ ownerIdentity?: string;
18
21
  }>;
19
22
  export type DirectoryLockSnapshot = Readonly<{
20
23
  kind: "directory";
@@ -1 +1 @@
1
- export declare function installLockDirectory(lockPath: string, token: string): Promise<void>;
1
+ export declare function installLockDirectory(lockPath: string, token: string, ownerIdentity?: string): Promise<void>;
@@ -2,7 +2,10 @@ import { mkdir, open, rename } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { removeDirectoryIfEmpty, removeStagingLock } from "./cleanup.js";
4
4
  import { LEASE_DIRECTORY_NAME, ownerFileName } from "./contracts.js";
5
- export async function installLockDirectory(lockPath, token) {
5
+ import { hasValidOptionalLockOwnerIdentity } from "./owner-identity.js";
6
+ export async function installLockDirectory(lockPath, token, ownerIdentity) {
7
+ if (!hasValidOptionalLockOwnerIdentity(ownerIdentity))
8
+ throw new Error("file_lock_owner_identity_invalid");
6
9
  const stagingPath = `${lockPath}.${process.pid}.${token}.pending`;
7
10
  const stagingOwnerPath = join(stagingPath, ownerFileName(token));
8
11
  let handle;
@@ -15,6 +18,7 @@ export async function installLockDirectory(lockPath, token) {
15
18
  pid: process.pid,
16
19
  token,
17
20
  createdAt: new Date().toISOString(),
21
+ ...(ownerIdentity === undefined ? {} : { ownerIdentity }),
18
22
  }), "utf8");
19
23
  await handle.sync();
20
24
  await handle.close();
@@ -0,0 +1,3 @@
1
+ /** Opaque caller-owned incarnation metadata; the lock does not interpret it. */
2
+ export declare function isLockOwnerIdentity(value: unknown): value is string;
3
+ export declare function hasValidOptionalLockOwnerIdentity(value: unknown): value is string | undefined;
@@ -0,0 +1,15 @@
1
+ /** Opaque caller-owned incarnation metadata; the lock does not interpret it. */
2
+ export function isLockOwnerIdentity(value) {
3
+ if (typeof value !== "string")
4
+ return false;
5
+ if (value.length === 0)
6
+ return false;
7
+ if (Buffer.byteLength(value, "utf8") > 256)
8
+ return false;
9
+ return !/[\x00-\x1f\x7f]/u.test(value);
10
+ }
11
+ export function hasValidOptionalLockOwnerIdentity(value) {
12
+ if (value === undefined)
13
+ return true;
14
+ return isLockOwnerIdentity(value);
15
+ }
@@ -2,6 +2,7 @@ import { constants } from "node:fs";
2
2
  import { open } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { directorySnapshot, fileSystemErrorCode, LEASE_DIRECTORY_NAME, MAX_LOCK_RECORD_BYTES, } from "./contracts.js";
5
+ import { isLockOwnerIdentity } from "./owner-identity.js";
5
6
  export async function readOwnerRecord(lockPath, entryName, expectedToken, directoryModifiedAtMs) {
6
7
  let handle;
7
8
  try {
@@ -109,6 +110,7 @@ function parseLockRecord(raw, expectedToken) {
109
110
  pid: ownerPid,
110
111
  token: expectedToken,
111
112
  createdAt: candidate.createdAt,
113
+ ...(isLockOwnerIdentity(candidate.ownerIdentity) ? { ownerIdentity: candidate.ownerIdentity } : {}),
112
114
  }),
113
115
  });
114
116
  }
@@ -1,60 +1,34 @@
1
- import { randomUUID } from "node:crypto";
2
- import { chmod, copyFile, mkdir, rename, rm, stat, writeFile, } from "node:fs/promises";
3
- import { dirname } from "node:path";
4
- import { isDeepStrictEqual } from "node:util";
5
1
  import { inspectRuntimeConfigFileWithMeta } from "../../config/loader.js";
6
- import { withFileLock } from "./file-lock.js";
2
+ import { ConfigFileConflictError, withConfigFileTransaction, } from "../config-file-transaction.js";
7
3
  export function createFileLongTermMemoryOnboardingConfigRepository(params) {
8
4
  const source = () => inspectRuntimeConfigFileWithMeta(params.rootDir, params.configPath);
9
5
  return Object.freeze({
10
6
  async read() {
11
7
  const current = source();
12
- if (!current.exists) {
8
+ if (!current.exists)
13
9
  throw new Error(`runtime_config_not_found:${current.path}`);
14
- }
15
10
  return Object.freeze({ config: current.config, path: current.path });
16
11
  },
17
12
  async write(config, expectedConfig) {
18
13
  const current = source();
19
- if (!current.exists) {
14
+ if (!current.exists)
20
15
  throw new Error(`runtime_config_not_found:${current.path}`);
16
+ try {
17
+ return await withConfigFileTransaction(current.path, async (transaction) => {
18
+ if (!transaction.snapshot.exists)
19
+ throw new Error(`runtime_config_not_found:${current.path}`);
20
+ const result = await transaction.write(config, { expectedConfig });
21
+ return Object.freeze({
22
+ configPath: transaction.path,
23
+ backupPath: result.backupPath,
24
+ });
25
+ });
21
26
  }
22
- return withFileLock(`${current.path}.memory-onboarding.lock`, async () => {
23
- const lockedCurrent = source();
24
- if (!lockedCurrent.exists) {
25
- throw new Error(`runtime_config_not_found:${lockedCurrent.path}`);
26
- }
27
- const hasConflictingConfig = expectedConfig !== undefined &&
28
- !isDeepStrictEqual(lockedCurrent.config, expectedConfig);
29
- if (hasConflictingConfig) {
27
+ catch (error) {
28
+ if (error instanceof ConfigFileConflictError)
30
29
  throw new Error("long_term_memory_config_changed");
31
- }
32
- return writeConfigSnapshot(lockedCurrent.path, config);
33
- });
30
+ throw error;
31
+ }
34
32
  },
35
33
  });
36
34
  }
37
- async function writeConfigSnapshot(configPath, config) {
38
- await mkdir(dirname(configPath), { recursive: true });
39
- const backupPath = createBackupPath(configPath);
40
- const temporaryPath = `${configPath}.${process.pid}.${randomUUID()}.tmp`;
41
- const sourcePermissions = (await stat(configPath)).mode & 0o777;
42
- await copyFile(configPath, backupPath);
43
- try {
44
- await writeFile(temporaryPath, `${JSON.stringify(config, null, 2)}\n`, {
45
- encoding: "utf8",
46
- mode: sourcePermissions,
47
- });
48
- await chmod(temporaryPath, sourcePermissions);
49
- await rename(temporaryPath, configPath);
50
- }
51
- catch (error) {
52
- await rm(temporaryPath, { force: true }).catch(() => undefined);
53
- throw error;
54
- }
55
- return Object.freeze({ configPath, backupPath });
56
- }
57
- function createBackupPath(configPath) {
58
- const timestamp = new Date().toISOString().replace(/[:.]/gu, "-");
59
- return `${configPath}.${timestamp}.bak`;
60
- }
@@ -28,12 +28,16 @@ function captureAdapter(toolName, adapter) {
28
28
  return undefined;
29
29
  const normalizeCall = adapter.normalizeCall;
30
30
  const validateCall = adapter.validateCall;
31
- if ((normalizeCall !== undefined && typeof normalizeCall !== "function") ||
32
- (validateCall !== undefined && typeof validateCall !== "function")) {
31
+ const executionBinding = adapter.executionBinding;
32
+ if (!hasOnlyAdapterFunctions([normalizeCall, validateCall, executionBinding])) {
33
33
  throw new TypeError(`Invalid ordinary invocation adapter registration: ${toolName}`);
34
34
  }
35
35
  return Object.freeze({
36
36
  ...(normalizeCall ? { normalizeCall } : {}),
37
37
  ...(validateCall ? { validateCall } : {}),
38
+ ...(executionBinding ? { executionBinding } : {}),
38
39
  });
39
40
  }
41
+ function hasOnlyAdapterFunctions(values) {
42
+ return values.every((value) => value === undefined || typeof value === "function");
43
+ }
@@ -1,7 +1,13 @@
1
+ import { requiresToolActionApproval } from "../../../../capabilities/tool-permission-mode.js";
1
2
  import { buildToolExecutorEventMetadata, } from "../shared/event-metadata.js";
2
3
  import { rejectNormalInvocation } from "../shared/rejection.js";
4
+ function recommendsFullPlusForForcedAction(mode, force) {
5
+ if (mode !== "full_access")
6
+ return false;
7
+ return force;
8
+ }
3
9
  export async function requestNormalInvocationApproval(params) {
4
- if (!params.force && params.toolPermissionMode !== "ask") {
10
+ if (!requiresToolActionApproval(params.toolPermissionMode, params.force)) {
5
11
  return Object.freeze({ ok: true });
6
12
  }
7
13
  const approvalId = params.nextApprovalId();
@@ -10,6 +16,9 @@ export async function requestNormalInvocationApproval(params) {
10
16
  ...(params.executionId ? { executionId: params.executionId } : {}),
11
17
  approvalId,
12
18
  tool: params.call.tool,
19
+ ...(recommendsFullPlusForForcedAction(params.toolPermissionMode, params.force)
20
+ ? { recommendedToolPermissionMode: "full_plus" }
21
+ : {}),
13
22
  ...(params.eventMeta ? { meta: params.eventMeta } : {}),
14
23
  });
15
24
  if (!params.toolApprovalController) {
@@ -0,0 +1,11 @@
1
+ import type { ToolCall, ToolCallAdapter } from "../../../../capabilities/tool-types.js";
2
+ import { rejectNormalInvocation } from "../shared/rejection.js";
3
+ /** Private execution identity and human disclosure never enter model controls. */
4
+ export declare function captureExecutionBinding(adapter: ToolCallAdapter | undefined, call: ToolCall): Readonly<{
5
+ ok: true;
6
+ identity?: string;
7
+ metadata?: Readonly<Record<string, unknown>>;
8
+ }> | Readonly<{
9
+ ok: false;
10
+ rejection: ReturnType<typeof rejectNormalInvocation>;
11
+ }>;
@@ -0,0 +1,37 @@
1
+ import { rejectNormalInvocation } from "../shared/rejection.js";
2
+ /** Private execution identity and human disclosure never enter model controls. */
3
+ export function captureExecutionBinding(adapter, call) {
4
+ if (!adapter?.executionBinding)
5
+ return { ok: true };
6
+ try {
7
+ const binding = adapter.executionBinding(call);
8
+ if (!hasBoundExecutionIdentity(binding)) {
9
+ return rejectExecutionBinding();
10
+ }
11
+ return Object.freeze({
12
+ ok: true,
13
+ identity: binding.identity,
14
+ ...(binding.metadata
15
+ ? { metadata: Object.freeze(structuredClone(binding.metadata)) }
16
+ : {}),
17
+ });
18
+ }
19
+ catch {
20
+ return rejectExecutionBinding();
21
+ }
22
+ }
23
+ function hasBoundExecutionIdentity(binding) {
24
+ if (!binding || typeof binding !== "object")
25
+ return false;
26
+ if (!("identity" in binding))
27
+ return false;
28
+ if (typeof binding.identity !== "string")
29
+ return false;
30
+ return binding.identity.trim().length > 0;
31
+ }
32
+ function rejectExecutionBinding() {
33
+ return {
34
+ ok: false,
35
+ rejection: rejectNormalInvocation("normal_invocation_execution_binding_unavailable", "The registered action could not bind its execution destination for this request."),
36
+ };
37
+ }
@@ -0,0 +1,7 @@
1
+ import { type ToolFileOutputReporter } from "../../../../capabilities/file-output-presentation.js";
2
+ import type { ToolEventMetadata, ToolExecutionResult, ToolExecutionSharedState, ToolNormalInvocationEffect } from "../../../../capabilities/tool-types.js";
3
+ /** One invocation-local presentation collector; canonical results are untouched. */
4
+ export declare function createFileOutputPresentation(runtimePaths: ToolExecutionSharedState["runtimePaths"]): Readonly<{
5
+ report: ToolFileOutputReporter;
6
+ finish(result: ToolExecutionResult, metadata: ToolEventMetadata | undefined, effect: ToolNormalInvocationEffect): ToolEventMetadata | undefined;
7
+ }>;
@@ -0,0 +1,105 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { isToolFileOutputLocation, parseToolFileOutputRootIdentity, parseToolFileOutputReceipt, } from "../../../../capabilities/file-output-presentation.js";
3
+ import { createRuntimeToolPathResolver } from "../../../capabilities/runtime-target-path.js";
4
+ import { captureFileOutputRootId } from "../../../capabilities/file-output-root-identity.js";
5
+ function matchesReportedFileTarget(target, resolved) {
6
+ if (target.location !== resolved.location)
7
+ return false;
8
+ if (target.rootPath !== resolved.rootPath)
9
+ return false;
10
+ if (target.absolutePath !== resolved.absolutePath)
11
+ return false;
12
+ if (target.relativePath !== resolved.relativePath)
13
+ return false;
14
+ return target.logicalPath === resolved.logicalPath;
15
+ }
16
+ function captureReportedFileOutput(report, resolver) {
17
+ const rootIdentity = parseToolFileOutputRootIdentity(report.rootIdentity);
18
+ if (!rootIdentity)
19
+ return undefined;
20
+ const target = report.target;
21
+ if (!isToolFileOutputLocation(target.location))
22
+ return undefined;
23
+ if (!isAbsolute(target.absolutePath))
24
+ return undefined;
25
+ const resolved = resolver.resolve(target.absolutePath, {
26
+ requirePath: true,
27
+ allowedLocations: [target.location],
28
+ });
29
+ if (!matchesReportedFileTarget(target, resolved))
30
+ return undefined;
31
+ return parseToolFileOutputReceipt({
32
+ version: 1,
33
+ location: target.location,
34
+ rootId: captureFileOutputRootId(target.location, resolved.rootPath, rootIdentity),
35
+ relativePath: target.relativePath,
36
+ logicalPath: target.logicalPath,
37
+ operation: report.operation,
38
+ });
39
+ }
40
+ function isSameFileOutputReceipt(left, right) {
41
+ if (left.rootId !== right.rootId)
42
+ return false;
43
+ if (left.relativePath !== right.relativePath)
44
+ return false;
45
+ return left.operation === right.operation;
46
+ }
47
+ function hasConflictingFileOutputReceipt(previous, next) {
48
+ if (!previous)
49
+ return false;
50
+ return !isSameFileOutputReceipt(previous, next);
51
+ }
52
+ function canPublishFileOutput(result, effect) {
53
+ if (!result.ok)
54
+ return false;
55
+ if (result.data?.mutationEvidence !== true)
56
+ return false;
57
+ return effect !== "read_only";
58
+ }
59
+ function omitReservedFileOutput(metadata) {
60
+ const { fileOutput: _untrustedFileOutput, ...rest } = metadata ?? {};
61
+ return rest;
62
+ }
63
+ /** One invocation-local presentation collector; canonical results are untouched. */
64
+ export function createFileOutputPresentation(runtimePaths) {
65
+ const resolver = createRuntimeToolPathResolver(runtimePaths);
66
+ let receipt;
67
+ let rejected = false;
68
+ let finished = false;
69
+ const report = (input) => {
70
+ if (finished)
71
+ return;
72
+ if (rejected)
73
+ return;
74
+ try {
75
+ const captured = captureReportedFileOutput(input, resolver);
76
+ if (!captured) {
77
+ rejected = true;
78
+ return;
79
+ }
80
+ if (hasConflictingFileOutputReceipt(receipt, captured)) {
81
+ rejected = true;
82
+ return;
83
+ }
84
+ receipt = captured;
85
+ }
86
+ catch {
87
+ rejected = true;
88
+ }
89
+ };
90
+ return Object.freeze({
91
+ report,
92
+ finish(result, metadata, effect) {
93
+ finished = true;
94
+ const base = omitReservedFileOutput(metadata);
95
+ const fallback = Object.keys(base).length > 0 ? base : undefined;
96
+ if (rejected)
97
+ return fallback;
98
+ if (!receipt)
99
+ return fallback;
100
+ if (!canPublishFileOutput(result, effect))
101
+ return fallback;
102
+ return { ...base, fileOutput: receipt };
103
+ },
104
+ });
105
+ }
@@ -1,3 +1,4 @@
1
+ import { permitsRequiredToolMode } from "../../../../capabilities/tool-permission-mode.js";
1
2
  import { buildToolCompletedEventActions, buildToolCompletedEventMetadata, buildToolLifecycleEventCopy, } from "../../../../capabilities/tool-event-metadata.js";
2
3
  import { requestNormalInvocationApproval } from "./approval.js";
3
4
  import { createPreparedInvocationRejectionEmitter } from "./rejection-event.js";
@@ -6,6 +7,8 @@ import { createRegisteredToolActionFingerprint } from "../shared/action-fingerpr
6
7
  import { buildToolExecutorEventMetadata, buildToolIntentEventMetadata, } from "../shared/event-metadata.js";
7
8
  import { prepareCompleteInvocationInput } from "../payload/input-preparation.js";
8
9
  import { rejectNormalInvocation } from "../shared/rejection.js";
10
+ import { createFileOutputPresentation } from "./file-output-presentation.js";
11
+ import { captureExecutionBinding } from "./execution-binding.js";
9
12
  export async function executeNormalInvocation(params) {
10
13
  const prepared = prepareNormalInvocation(params);
11
14
  return prepared.status === "prepared"
@@ -19,6 +22,9 @@ export function prepareNormalInvocation(params) {
19
22
  if (!source) {
20
23
  return rejectNormalInvocation("normal_invocation_handle_invalid", "The selected ordinary capability is not registered for this request.");
21
24
  }
25
+ if (!permitsRequiredToolMode(executor.toolPermissionMode, source.registration.definition.requiredPermissionMode)) {
26
+ return rejectNormalInvocation("tool_permission_mode_required", "The source tool requires a different captured request permission mode.");
27
+ }
22
28
  const preparedInput = prepareCompleteInvocationInput(source, params.input);
23
29
  if (!preparedInput.ok)
24
30
  return preparedInput.rejection;
@@ -38,6 +44,9 @@ export function prepareNormalInvocation(params) {
38
44
  const target = resolveExactTargetOperation(params.registrations, normalizedCall.call);
39
45
  if (!target.ok)
40
46
  return target.rejection;
47
+ if (!permitsRequiredToolMode(executor.toolPermissionMode, target.binding.registration.definition.requiredPermissionMode)) {
48
+ return rejectNormalInvocation("tool_permission_mode_required", "The normalized target tool requires a different captured request permission mode.");
49
+ }
41
50
  const targetValidation = validateCompleteCall({
42
51
  adapter: target.binding.registration.adapter,
43
52
  call: normalizedCall.call,
@@ -50,11 +59,20 @@ export function prepareNormalInvocation(params) {
50
59
  if (target.binding.operation.effect !== source.operation.effect) {
51
60
  return rejectNormalInvocation("normal_invocation_effect_changed", "A normalized ordinary invocation cannot change its declared execution effect.");
52
61
  }
53
- const eventMeta = buildToolIntentEventMetadata(normalizedCall.call, params.input.intent, target.binding.registration.definition);
62
+ const executionBinding = captureExecutionBinding(target.binding.registration.adapter, normalizedCall.call);
63
+ if (!executionBinding.ok)
64
+ return executionBinding.rejection;
65
+ const intentMeta = buildToolIntentEventMetadata(normalizedCall.call, params.input.intent, target.binding.registration.definition);
66
+ const eventMeta = executionBinding.metadata
67
+ ? { ...executionBinding.metadata, ...intentMeta }
68
+ : intentMeta;
54
69
  const actionFingerprint = createRegisteredToolActionFingerprint({
55
70
  contractVersion: target.binding.registration.contract.version,
56
71
  operationId: target.binding.operation.operationId,
57
72
  call: normalizedCall.call,
73
+ ...(executionBinding.identity
74
+ ? { executionIdentity: executionBinding.identity }
75
+ : {}),
58
76
  });
59
77
  return Object.freeze({
60
78
  status: "prepared",
@@ -73,6 +91,9 @@ export function prepareNormalInvocation(params) {
73
91
  target: target.binding,
74
92
  call: normalizedCall.call,
75
93
  eventMeta,
94
+ ...(executionBinding.metadata
95
+ ? { executionMetadata: executionBinding.metadata }
96
+ : {}),
76
97
  input: params.input,
77
98
  }),
78
99
  });
@@ -110,22 +131,27 @@ async function executePreparedNormalInvocation(params) {
110
131
  ...(params.eventMeta ? { meta: params.eventMeta } : {}),
111
132
  ...(startedCopy ?? {}),
112
133
  });
134
+ const fileOutputPresentation = createFileOutputPresentation(params.executor.sharedState?.runtimePaths);
113
135
  const result = await params.executor.toolRegistry.execute(params.call, {
114
136
  abortSignal: params.executor.abortSignal,
137
+ reportFileOutput: fileOutputPresentation.report,
115
138
  ...(params.executor.sharedState
116
139
  ? { sharedState: params.executor.sharedState }
117
140
  : {}),
118
141
  });
119
142
  const completionActions = Object.freeze(buildToolCompletedEventActions(params.call, result, params.target.registration.definition).map((action) => Object.freeze({ ...action })));
120
- const completedMeta = buildToolCompletedEventMetadata(params.call, result, params.target.registration.definition);
143
+ const completedMeta = fileOutputPresentation.finish(result, buildToolCompletedEventMetadata(params.call, result, params.target.registration.definition), params.target.operation.effect);
121
144
  const completedCopy = buildToolLifecycleEventCopy(params.target.registration.definition, result.ok ? "completed" : "failed");
145
+ const completedEventMeta = params.executionMetadata
146
+ ? { ...completedMeta, ...params.executionMetadata }
147
+ : completedMeta;
122
148
  params.executor.onEvent?.("tool.completed", {
123
149
  ...buildToolExecutorEventMetadata(params.executorIdentity),
124
150
  ...(params.executionId ? { executionId: params.executionId } : {}),
125
151
  tool: params.source.registration.toolName,
126
152
  ok: result.ok,
127
153
  actions: completionActions,
128
- ...(completedMeta ? { meta: completedMeta } : {}),
154
+ ...(completedEventMeta ? { meta: completedEventMeta } : {}),
129
155
  ...(completedCopy ?? {}),
130
156
  });
131
157
  return Object.freeze({
@@ -7,6 +7,7 @@ export declare function createRegisteredToolActionFingerprint(input: {
7
7
  contractVersion: number;
8
8
  operationId: string;
9
9
  call: ToolCall;
10
+ executionIdentity?: string;
10
11
  }): string;
11
12
  /**
12
13
  * Identifies a fully bounded preparation attempt that could not become a
@@ -10,6 +10,7 @@ export function createRegisteredToolActionFingerprint(input) {
10
10
  input.operationId,
11
11
  input.call.tool,
12
12
  canonicalEntries(input.call.params),
13
+ ...(input.executionIdentity === undefined ? [] : [input.executionIdentity]),
13
14
  ]);
14
15
  return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
15
16
  }
@@ -1,6 +1,8 @@
1
+ import { bindRequestWorkingDirectory } from "./request-working-directory.js";
1
2
  import { createToolRegistry as createToolRegistryInstance } from "../../capabilities/registry.js";
2
3
  import { executeToolCall } from "../../capabilities/tool-executor.js";
3
4
  import { createRuntimeToolPathResolver } from "./runtime-target-path.js";
5
+ import { prepareRequestToolModules } from "./request-module-preparation.js";
4
6
  export function createConfiguredToolRegistry(config, modules) {
5
7
  const baseRegistry = createToolRegistryInstance({ modules });
6
8
  const getImplementations = () => baseRegistry.getImplementations();
@@ -20,6 +22,11 @@ export function createConfiguredToolRegistry(config, modules) {
20
22
  }
21
23
  : { ...sharedState };
22
24
  return {
25
+ ...(modules.some((module) => module.prepareRequest)
26
+ ? {
27
+ prepareRequest: async () => createConfiguredToolRegistry(config, await prepareRequestToolModules(modules)),
28
+ }
29
+ : {}),
23
30
  listDefinitions: () => baseRegistry.getDefinitions(),
24
31
  listNormalInvocations: () => baseRegistry.getNormalInvocations(),
25
32
  getDefinition: (name) => baseRegistry.getByName(name),
@@ -28,7 +35,8 @@ export function createConfiguredToolRegistry(config, modules) {
28
35
  getImplementations,
29
36
  prepareSharedState,
30
37
  execute: (call, options) => {
31
- const sharedState = prepareSharedState(options?.sharedState);
38
+ const configuredState = prepareSharedState(options?.sharedState);
39
+ const sharedState = bindRequestWorkingDirectory(configuredState, options?.requestWorkingDirectory);
32
40
  return executeToolCall(call, {
33
41
  ...options,
34
42
  sharedState,
@@ -0,0 +1,5 @@
1
+ import { type ToolFileOutputLocation, type ToolFileOutputRootIdentity } from "../../capabilities/file-output-presentation.js";
2
+ /** Host presentation capture only. Creates a marker once; never overwrites it. */
3
+ export declare function captureFileOutputRootId(location: ToolFileOutputLocation, canonicalRoot: string, expectedIdentity?: ToolFileOutputRootIdentity): string;
4
+ /** Preview authorization is read-only: missing or invalid markers stay invalid. */
5
+ export declare function readFileOutputRootId(location: ToolFileOutputLocation, canonicalRoot: string): string;