@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
@@ -1,213 +1,48 @@
1
- import type { ToolCallAdapter } from "../../../src/plugin-sdk/index.js";
2
-
3
- const INVALID_COMMAND_CHARS =
4
- /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F\uFFFD]/gu;
5
-
6
- const INTERACTIVE_COMMANDS = new Set([
7
- "gio",
8
- "gnome-open",
9
- "htop",
10
- "kde-open",
11
- "less",
12
- "more",
13
- "nano",
14
- "open",
15
- "screen",
16
- "ssh",
17
- "start",
18
- "tmux",
19
- "top",
20
- "vi",
21
- "vim",
22
- "watch",
23
- "xdg-open",
24
- ]);
25
-
26
- export function sanitizeExecCommand(value: string): Readonly<{
27
- command: string;
28
- normalized: boolean;
29
- }> {
30
- const raw = value.trim();
31
- const command = raw
32
- .replace(/\r\n?/gu, "\n")
33
- .replace(INVALID_COMMAND_CHARS, "")
34
- .trim();
35
- return Object.freeze({ command, normalized: command !== raw });
36
- }
37
-
38
- export function isInteractiveCommand(command: string): string | undefined {
39
- const firstToken = command.split(/\s+/u)[0]?.toLowerCase() ?? "";
40
- return INTERACTIVE_COMMANDS.has(firstToken) ? firstToken : undefined;
41
- }
42
-
43
- function isWhitespace(char: string): boolean {
44
- return char === " " || char === "\t" || char === "\r";
45
- }
46
-
47
- function isShellSeparator(char: string): boolean {
48
- return ["\n", ";", "|", "&", "<", ">"].includes(char);
49
- }
50
-
51
- function isShellTokenBoundary(char: string): boolean {
52
- return (
53
- isWhitespace(char) || isShellSeparator(char) || char === "(" || char === ")"
54
- );
55
- }
56
-
57
- function readShellTokenSpan(
58
- command: string,
59
- start: number,
60
- ): Readonly<{ token: string; nextIndex: number }> {
61
- let index = start;
62
- let token = "";
63
- let inSingleQuote = false;
64
- let inDoubleQuote = false;
65
- let substitutionDepth = 0;
66
- while (index < command.length) {
67
- const char = command[index] ?? "";
68
- if (!inSingleQuote && !inDoubleQuote) {
69
- if (substitutionDepth === 0 && isShellTokenBoundary(char)) break;
70
- if (char === "$" && command[index + 1] === "(") {
71
- token += "$(";
72
- substitutionDepth += 1;
73
- index += 2;
74
- continue;
75
- }
76
- if (char === ")" && substitutionDepth > 0) {
77
- token += char;
78
- substitutionDepth -= 1;
79
- index += 1;
80
- continue;
81
- }
82
- if (char === "\\") {
83
- index += 1;
84
- if (index < command.length) {
85
- token += command[index];
86
- index += 1;
87
- }
88
- continue;
89
- }
90
- if (char === "'") {
91
- inSingleQuote = true;
92
- index += 1;
93
- continue;
94
- }
95
- if (char === '"') {
96
- inDoubleQuote = true;
97
- index += 1;
98
- continue;
99
- }
100
- token += char;
101
- index += 1;
102
- continue;
103
- }
104
- index += 1;
105
- if (inSingleQuote) {
106
- if (char === "'") inSingleQuote = false;
107
- else token += char;
108
- continue;
109
- }
110
- if (char === '"') {
111
- inDoubleQuote = false;
112
- continue;
113
- }
114
- if (char === "\\" && index < command.length) {
115
- token += command[index];
116
- index += 1;
117
- continue;
118
- }
119
- token += char;
120
- }
121
- return Object.freeze({ token: token.trim(), nextIndex: index });
122
- }
123
-
124
- function readShellToken(
125
- command: string,
126
- start: number,
127
- ): Readonly<{ token: string; nextIndex: number }> {
128
- let index = start;
129
- while (index < command.length && isWhitespace(command[index] ?? "")) {
130
- index += 1;
1
+ import {
2
+ readRequiredString,
3
+ type ToolCallAdapter,
4
+ } from "../../../src/plugin-sdk/index.js";
5
+ import { ExecPluginError } from "./errors.js";
6
+ import { EXEC_COMMAND_MAX_CHARS } from "./settings.js";
7
+
8
+ function isExecutableCommand(value: string): boolean {
9
+ if (value.trim().length === 0) return false;
10
+ return !value.includes("\0");
11
+ }
12
+
13
+ export function readExecCommand(value: unknown): string {
14
+ const command = readRequiredString(value, {
15
+ name: "command",
16
+ trim: false,
17
+ maxLength: EXEC_COMMAND_MAX_CHARS,
18
+ });
19
+ if (!isExecutableCommand(command)) {
20
+ throw new ExecPluginError(
21
+ "exec_command_invalid",
22
+ "The command must contain nonempty text without NUL characters.",
23
+ );
131
24
  }
132
- return readShellTokenSpan(command, index);
25
+ return command;
133
26
  }
134
27
 
135
- function readHereDocDelimiters(
136
- line: string,
137
- ): readonly Readonly<{ delimiter: string; stripTabs: boolean }>[] {
138
- const delimiters: Array<{ delimiter: string; stripTabs: boolean }> = [];
139
- const pattern = /<<(-)?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/gu;
140
- for (const match of line.matchAll(pattern)) {
141
- const delimiter = match[2] ?? match[3] ?? match[4] ?? "";
142
- if (delimiter) {
143
- delimiters.push({ delimiter, stripTabs: Boolean(match[1]) });
144
- }
145
- }
146
- return delimiters;
147
- }
148
-
149
- export function stripHereDocBodies(command: string): string {
150
- const pending: Array<{ delimiter: string; stripTabs: boolean }> = [];
151
- return command
152
- .split("\n")
153
- .map((line) => {
154
- const active = pending[0];
155
- if (active) {
156
- const comparable = active.stripTabs ? line.replace(/^\t+/u, "") : line;
157
- if (comparable === active.delimiter) {
158
- pending.shift();
159
- return line;
160
- }
161
- return "";
162
- }
163
- pending.push(...readHereDocDelimiters(line));
164
- return line;
165
- })
166
- .join("\n");
167
- }
168
-
169
- export function scopedPathTokens(command: string): readonly string[] {
170
- const tokens: string[] = [];
171
- let index = 0;
172
- while (index < command.length) {
173
- while (
174
- index < command.length &&
175
- isShellTokenBoundary(command[index] ?? "")
176
- ) {
177
- index += 1;
178
- }
179
- if (index >= command.length) break;
180
- const span = readShellToken(command, index);
181
- index = Math.max(span.nextIndex, index + 1);
182
- const token = span.token;
183
- if (
184
- token === "." ||
185
- token === ".." ||
186
- token.startsWith("./") ||
187
- token.startsWith("../") ||
188
- token === "workspace" ||
189
- token.startsWith("workspace/") ||
190
- token.startsWith("workspace\\") ||
191
- token.startsWith("/")
192
- ) {
193
- tokens.push(token);
194
- }
195
- }
196
- return Object.freeze(tokens);
28
+ function isInvalidExecParameter(name: string, value: unknown): boolean {
29
+ if (typeof value !== "string") return true;
30
+ if (value.length === 0) return true;
31
+ if (name === "command") return !isExecutableCommand(value);
32
+ return value.includes("\0");
197
33
  }
198
34
 
199
35
  export function createExecAdapter(): ToolCallAdapter {
200
36
  return {
201
37
  validateCall(input) {
202
- const invalid = ["command", "cwd"].filter((name) => {
203
- const value = input.params[name];
204
- return typeof value !== "string" || value.trim().length === 0;
205
- });
38
+ const invalid = ["command", "cwd"].filter((name) =>
39
+ isInvalidExecParameter(name, input.params[name]),
40
+ );
206
41
  if (invalid.length === 0) return null;
207
42
  return {
208
43
  error: `invalid params for exec: invalid ${invalid.join(", ")}`,
209
44
  repairHint:
210
- "Provide one non-interactive command and one explicit existing agent-work or workspace cwd.",
45
+ "Provide one command without NUL characters and one explicit existing cwd.",
211
46
  };
212
47
  },
213
48
  };
@@ -498,43 +498,57 @@ function diffExecFilesystemSnapshots(before, after) {
498
498
  // plugins/exec/source/paths.ts
499
499
  var import_promises2 = require("node:fs/promises");
500
500
  var import_node_path2 = require("node:path");
501
- var EXEC_ALLOWED_LOCATIONS = Object.freeze([
502
- "agent_work",
503
- "workspace"
504
- ]);
505
- function resolverContext(pluginContext, executionContext) {
506
- return {
507
- runtimePathResolver: executionContext?.runtimePathResolver ?? pluginContext.runtimePathResolver
508
- };
509
- }
510
- function resolveExecPath(pluginContext, executionContext, rawPath) {
511
- return resolvePluginPath(
512
- resolverContext(pluginContext, executionContext),
513
- rawPath,
501
+ function resolveContextualDirectory(pluginContext, executionContext, requestedPath) {
502
+ if ((0, import_node_path2.isAbsolute)(requestedPath)) return { absolutePath: requestedPath };
503
+ const isWorkspaceAlias = requestedPath === "workspace" || requestedPath.startsWith("workspace/");
504
+ const base = resolvePluginPath(
514
505
  {
515
- requirePath: true,
516
- allowedLocations: EXEC_ALLOWED_LOCATIONS
517
- }
506
+ runtimePathResolver: executionContext?.runtimePathResolver ?? pluginContext.runtimePathResolver
507
+ },
508
+ isWorkspaceAlias ? "workspace" : ".",
509
+ { allowedLocations: [isWorkspaceAlias ? "workspace" : "agent_work"] }
518
510
  );
511
+ const relativePath = isWorkspaceAlias ? requestedPath.slice("workspace".length + 1) || "." : requestedPath;
512
+ return { absolutePath: `${base.absolutePath}${import_node_path2.sep}${relativePath}`, base };
513
+ }
514
+ function isOutsideExecContextBase(relativePath) {
515
+ if (relativePath === "..") return true;
516
+ if (relativePath.startsWith(`..${import_node_path2.sep}`)) return true;
517
+ return (0, import_node_path2.isAbsolute)(relativePath);
518
+ }
519
+ function logicalDirectory(absolutePath, base) {
520
+ if (!base) return absolutePath;
521
+ const fromBase = (0, import_node_path2.relative)(base.absolutePath, absolutePath);
522
+ if (isOutsideExecContextBase(fromBase)) return absolutePath;
523
+ return import_node_path2.posix.join(base.logicalPath, fromBase.split(import_node_path2.sep).join("/") || ".");
519
524
  }
520
525
  async function resolveExecWorkingDirectory(pluginContext, executionContext, rawPath) {
521
526
  const requestedPath = readRequiredString(rawPath, {
522
527
  name: "cwd",
528
+ trim: false,
523
529
  maxLength: 4096
524
530
  });
525
- const target = resolveExecPath(
531
+ if (requestedPath.includes("\0")) {
532
+ throw new ExecPluginError(
533
+ "exec_cwd_invalid",
534
+ "The selected cwd contains NUL characters."
535
+ );
536
+ }
537
+ const target = resolveContextualDirectory(
526
538
  pluginContext,
527
539
  executionContext,
528
540
  requestedPath
529
541
  );
542
+ let absolutePath;
530
543
  let info;
531
544
  try {
532
- info = await (0, import_promises2.stat)(target.absolutePath);
545
+ absolutePath = await (0, import_promises2.realpath)(target.absolutePath);
546
+ info = await (0, import_promises2.stat)(absolutePath);
533
547
  } catch (error) {
534
548
  if (error instanceof Error && "code" in error && error.code === "ENOENT") {
535
549
  throw new ExecPluginError(
536
550
  "exec_cwd_not_found",
537
- "The selected cwd does not exist. Select an existing agent-work or workspace directory."
551
+ "The selected cwd does not exist. Select an existing directory."
538
552
  );
539
553
  }
540
554
  throw new ExecPluginError(
@@ -548,12 +562,10 @@ async function resolveExecWorkingDirectory(pluginContext, executionContext, rawP
548
562
  "The selected cwd is not a directory."
549
563
  );
550
564
  }
551
- return target;
552
- }
553
- function resolveExecScopedPath(pluginContext, executionContext, rawPath, cwd) {
554
- const normalized = rawPath.replaceAll("\\", "/");
555
- const requested = (0, import_node_path2.isAbsolute)(rawPath) || normalized === "workspace" || normalized.startsWith("workspace/") ? rawPath : import_node_path2.posix.join(cwd.logicalPath, normalized || ".");
556
- return resolveExecPath(pluginContext, executionContext, requested);
565
+ return Object.freeze({
566
+ absolutePath,
567
+ logicalPath: logicalDirectory(absolutePath, target.base)
568
+ });
557
569
  }
558
570
 
559
571
  // plugins/exec/source/process-manager.ts
@@ -908,169 +920,40 @@ function readExecSettings(config) {
908
920
  }
909
921
 
910
922
  // plugins/exec/source/validation.ts
911
- var INVALID_COMMAND_CHARS = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F\uFFFD]/gu;
912
- var INTERACTIVE_COMMANDS = /* @__PURE__ */ new Set([
913
- "gio",
914
- "gnome-open",
915
- "htop",
916
- "kde-open",
917
- "less",
918
- "more",
919
- "nano",
920
- "open",
921
- "screen",
922
- "ssh",
923
- "start",
924
- "tmux",
925
- "top",
926
- "vi",
927
- "vim",
928
- "watch",
929
- "xdg-open"
930
- ]);
931
- function sanitizeExecCommand(value) {
932
- const raw = value.trim();
933
- const command = raw.replace(/\r\n?/gu, "\n").replace(INVALID_COMMAND_CHARS, "").trim();
934
- return Object.freeze({ command, normalized: command !== raw });
935
- }
936
- function isInteractiveCommand(command) {
937
- const firstToken = command.split(/\s+/u)[0]?.toLowerCase() ?? "";
938
- return INTERACTIVE_COMMANDS.has(firstToken) ? firstToken : void 0;
939
- }
940
- function isWhitespace(char) {
941
- return char === " " || char === " " || char === "\r";
942
- }
943
- function isShellSeparator(char) {
944
- return ["\n", ";", "|", "&", "<", ">"].includes(char);
945
- }
946
- function isShellTokenBoundary(char) {
947
- return isWhitespace(char) || isShellSeparator(char) || char === "(" || char === ")";
948
- }
949
- function readShellTokenSpan(command, start) {
950
- let index = start;
951
- let token = "";
952
- let inSingleQuote = false;
953
- let inDoubleQuote = false;
954
- let substitutionDepth = 0;
955
- while (index < command.length) {
956
- const char = command[index] ?? "";
957
- if (!inSingleQuote && !inDoubleQuote) {
958
- if (substitutionDepth === 0 && isShellTokenBoundary(char)) break;
959
- if (char === "$" && command[index + 1] === "(") {
960
- token += "$(";
961
- substitutionDepth += 1;
962
- index += 2;
963
- continue;
964
- }
965
- if (char === ")" && substitutionDepth > 0) {
966
- token += char;
967
- substitutionDepth -= 1;
968
- index += 1;
969
- continue;
970
- }
971
- if (char === "\\") {
972
- index += 1;
973
- if (index < command.length) {
974
- token += command[index];
975
- index += 1;
976
- }
977
- continue;
978
- }
979
- if (char === "'") {
980
- inSingleQuote = true;
981
- index += 1;
982
- continue;
983
- }
984
- if (char === '"') {
985
- inDoubleQuote = true;
986
- index += 1;
987
- continue;
988
- }
989
- token += char;
990
- index += 1;
991
- continue;
992
- }
993
- index += 1;
994
- if (inSingleQuote) {
995
- if (char === "'") inSingleQuote = false;
996
- else token += char;
997
- continue;
998
- }
999
- if (char === '"') {
1000
- inDoubleQuote = false;
1001
- continue;
1002
- }
1003
- if (char === "\\" && index < command.length) {
1004
- token += command[index];
1005
- index += 1;
1006
- continue;
1007
- }
1008
- token += char;
1009
- }
1010
- return Object.freeze({ token: token.trim(), nextIndex: index });
1011
- }
1012
- function readShellToken(command, start) {
1013
- let index = start;
1014
- while (index < command.length && isWhitespace(command[index] ?? "")) {
1015
- index += 1;
1016
- }
1017
- return readShellTokenSpan(command, index);
923
+ function isExecutableCommand(value) {
924
+ if (value.trim().length === 0) return false;
925
+ return !value.includes("\0");
1018
926
  }
1019
- function readHereDocDelimiters(line) {
1020
- const delimiters = [];
1021
- const pattern = /<<(-)?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/gu;
1022
- for (const match of line.matchAll(pattern)) {
1023
- const delimiter = match[2] ?? match[3] ?? match[4] ?? "";
1024
- if (delimiter) {
1025
- delimiters.push({ delimiter, stripTabs: Boolean(match[1]) });
1026
- }
927
+ function readExecCommand(value) {
928
+ const command = readRequiredString(value, {
929
+ name: "command",
930
+ trim: false,
931
+ maxLength: EXEC_COMMAND_MAX_CHARS
932
+ });
933
+ if (!isExecutableCommand(command)) {
934
+ throw new ExecPluginError(
935
+ "exec_command_invalid",
936
+ "The command must contain nonempty text without NUL characters."
937
+ );
1027
938
  }
1028
- return delimiters;
1029
- }
1030
- function stripHereDocBodies(command) {
1031
- const pending = [];
1032
- return command.split("\n").map((line) => {
1033
- const active = pending[0];
1034
- if (active) {
1035
- const comparable = active.stripTabs ? line.replace(/^\t+/u, "") : line;
1036
- if (comparable === active.delimiter) {
1037
- pending.shift();
1038
- return line;
1039
- }
1040
- return "";
1041
- }
1042
- pending.push(...readHereDocDelimiters(line));
1043
- return line;
1044
- }).join("\n");
939
+ return command;
1045
940
  }
1046
- function scopedPathTokens(command) {
1047
- const tokens = [];
1048
- let index = 0;
1049
- while (index < command.length) {
1050
- while (index < command.length && isShellTokenBoundary(command[index] ?? "")) {
1051
- index += 1;
1052
- }
1053
- if (index >= command.length) break;
1054
- const span = readShellToken(command, index);
1055
- index = Math.max(span.nextIndex, index + 1);
1056
- const token = span.token;
1057
- if (token === "." || token === ".." || token.startsWith("./") || token.startsWith("../") || token === "workspace" || token.startsWith("workspace/") || token.startsWith("workspace\\") || token.startsWith("/")) {
1058
- tokens.push(token);
1059
- }
1060
- }
1061
- return Object.freeze(tokens);
941
+ function isInvalidExecParameter(name, value) {
942
+ if (typeof value !== "string") return true;
943
+ if (value.length === 0) return true;
944
+ if (name === "command") return !isExecutableCommand(value);
945
+ return value.includes("\0");
1062
946
  }
1063
947
  function createExecAdapter() {
1064
948
  return {
1065
949
  validateCall(input) {
1066
- const invalid = ["command", "cwd"].filter((name) => {
1067
- const value = input.params[name];
1068
- return typeof value !== "string" || value.trim().length === 0;
1069
- });
950
+ const invalid = ["command", "cwd"].filter(
951
+ (name) => isInvalidExecParameter(name, input.params[name])
952
+ );
1070
953
  if (invalid.length === 0) return null;
1071
954
  return {
1072
955
  error: `invalid params for exec: invalid ${invalid.join(", ")}`,
1073
- repairHint: "Provide one non-interactive command and one explicit existing agent-work or workspace cwd."
956
+ repairHint: "Provide one command without NUL characters and one explicit existing cwd."
1074
957
  };
1075
958
  }
1076
959
  };
@@ -1106,7 +989,6 @@ function runningResult(snapshot, execution) {
1106
989
  const rendered = renderedOutput(
1107
990
  [
1108
991
  `Command: ${execution.commandPreview}`,
1109
- ...execution.commandWasNormalized ? ["Command normalization: invalid control characters were removed."] : [],
1110
992
  `CWD: ${execution.cwd.logicalPath}`,
1111
993
  "Process status: running",
1112
994
  `Process ID: ${snapshot.processId}`,
@@ -1205,7 +1087,6 @@ async function finalizeExecResult(params) {
1205
1087
  const rendered = renderedOutput(
1206
1088
  [
1207
1089
  `Command: ${execution.commandPreview}`,
1208
- ...execution.commandWasNormalized ? ["Command normalization: invalid control characters were removed."] : [],
1209
1090
  `CWD: ${execution.cwd.logicalPath}`,
1210
1091
  `Process ID: ${snapshot.processId}`,
1211
1092
  `Process status: ${snapshot.terminationReason ?? "completed"}`,
@@ -1272,34 +1153,12 @@ function createExecHandlers(pluginContext, settings) {
1272
1153
  };
1273
1154
  const exec = async (params, context) => {
1274
1155
  try {
1275
- const rawCommand = readRequiredString(params.command, {
1276
- name: "command",
1277
- trim: false,
1278
- maxLength: EXEC_COMMAND_MAX_CHARS
1279
- });
1280
- const { command, normalized } = sanitizeExecCommand(rawCommand);
1281
- if (!command) {
1282
- throw new ExecPluginError(
1283
- "exec_command_invalid",
1284
- "The command is empty after invalid control characters are removed."
1285
- );
1286
- }
1287
- const interactive = isInteractiveCommand(command);
1288
- if (interactive) {
1289
- throw new ExecPluginError(
1290
- "exec_interactive_command_blocked",
1291
- `Interactive command ${interactive} is not supported by the non-interactive exec plugin.`
1292
- );
1293
- }
1156
+ const command = readExecCommand(params.command);
1294
1157
  const cwd = await resolveExecWorkingDirectory(
1295
1158
  pluginContext,
1296
1159
  context,
1297
1160
  params.cwd
1298
1161
  );
1299
- const staticCommand = stripHereDocBodies(command);
1300
- for (const token of scopedPathTokens(staticCommand)) {
1301
- resolveExecScopedPath(pluginContext, context, token, cwd);
1302
- }
1303
1162
  const filesystemStateBefore = await captureExecFilesystemSnapshot(
1304
1163
  cwd.absolutePath,
1305
1164
  cwd.logicalPath
@@ -1310,7 +1169,6 @@ function createExecHandlers(pluginContext, settings) {
1310
1169
  }).text;
1311
1170
  const execution = Object.freeze({
1312
1171
  commandPreview,
1313
- commandWasNormalized: normalized,
1314
1172
  cwd,
1315
1173
  filesystemStateBefore,
1316
1174
  hardTimeoutMs: settings.hardTimeoutMs,
@@ -31,7 +31,7 @@
31
31
  "outputPreview": { "path": "output", "kind": "preview" }
32
32
  }
33
33
  },
34
- "skills": [],
34
+ "skills": ["dev_view_skill"],
35
35
  "operations": {
36
36
  "inspect_target": {
37
37
  "summary": "Inspect one bounded directory sample or bounded file window when unresolved work requires current content. Choose either a locator or numeric lines; locator takes precedence. Truncation metadata distinguishes a complete result from a bounded scan.",
@@ -0,0 +1,7 @@
1
+ # Dev View Skill
2
+
3
+ - `path` identifies one file or directory. For a file, choose numeric `start_line` / `end_line` for a bounded window, or `locator` for one exact literal substring in the bounded scan.
4
+ - A locator is not a keyword or regular-expression search: it must identify one occurrence. It takes precedence over numeric lines. When no unique observed substring is known, use numeric lines without a locator.
5
+ - `context_lines` supplies surrounding lines for a locator. Numeric windows are capped at 240 lines; scan and output truncation are reported separately.
6
+ - `ambiguous_text_locator` is a failed selection. Its bounded candidates contain observed match lines and `nextControls` for numeric reads. Choose a candidate only when it fits the requested operation, and omit `locator` when using its numeric controls. No candidate has been selected or read successfully by that failure.
7
+ - Candidate-list truncation and scan truncation are independent. Missing candidates or unscanned content are unknown; a locator-not-found result supplies no file content.
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { link, open, rename, rm } from "node:fs/promises";
2
+ import { link, open, rename, rm, type FileHandle } from "node:fs/promises";
3
3
  import { posix } from "node:path";
4
4
 
5
5
  import type { ResolvedRuntimeToolPath } from "../../../src/plugin-sdk/index.js";
@@ -10,7 +10,8 @@ import {
10
10
  type MutationTargetVersion,
11
11
  } from "./bounded-io.js";
12
12
  import { fail, isNodeErrorCode, rethrowFilesystemError } from "./errors.js";
13
- import { openMutationParent } from "./mutation-parent.js";
13
+ import { closeMutationParent, openMutationParent } from "./mutation-parent.js";
14
+ import { notifyCommittedFileOutput } from "./file-output-presentation.js";
14
15
  import { writeWithDirectoryAuthority } from "./directory-authority-write.js";
15
16
 
16
17
  export async function atomicWriteText(
@@ -18,6 +19,7 @@ export async function atomicWriteText(
18
19
  target: ResolvedRuntimeToolPath;
19
20
  content: string;
20
21
  expectedVersion: MutationTargetVersion;
22
+ onCommitted?: (root: FileHandle) => void;
21
23
  }>,
22
24
  ): Promise<void> {
23
25
  assertMutationContentSize(input.content);
@@ -70,13 +72,14 @@ export async function atomicWriteText(
70
72
  temporaryCreated = !removed;
71
73
  }
72
74
  await syncDirectoryBestEffort(parent.handle);
75
+ notifyCommittedFileOutput(parent.rootHandle, input.onCommitted);
73
76
  } catch (error: unknown) {
74
77
  rethrowFilesystemError(error, "write", input.target.logicalPath);
75
78
  } finally {
76
79
  if (temporaryCreated) {
77
80
  await rm(temporaryPath, { force: true }).catch(() => undefined);
78
81
  }
79
- await parent.handle.close().catch(() => undefined);
82
+ await closeMutationParent(parent);
80
83
  }
81
84
  }
82
85
 
@@ -146,7 +146,8 @@ async function viewFile(
146
146
  const lines = completeScannedLines(source.text, source.truncated);
147
147
  const availableLineCount = Math.max(lines.length, 1);
148
148
  const selection = selectWindow({
149
- text: source.text,
149
+ path: input.target.logicalPath,
150
+ source,
150
151
  lines,
151
152
  startLine: input.startLine,
152
153
  endLine: input.endLine,