@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
@@ -0,0 +1,3 @@
1
+ /** Stable private credential binding shared by additive provider setup. */
2
+ export declare function isolatedProviderCredentialName(providerId: string): string;
3
+ export declare function hasProviderCredentialBinding(providers: Record<string, unknown>, apiKeyEnv: string): boolean;
@@ -0,0 +1,18 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isRecord } from "../../runtime/config/utils.js";
3
+ /** Stable private credential binding shared by additive provider setup. */
4
+ export function isolatedProviderCredentialName(providerId) {
5
+ const identity = createHash("sha256")
6
+ .update(providerId)
7
+ .digest("hex")
8
+ .slice(0, 24)
9
+ .toUpperCase();
10
+ return `ABOT_MODEL_PROVIDER_${identity}_API_KEY`;
11
+ }
12
+ export function hasProviderCredentialBinding(providers, apiKeyEnv) {
13
+ return Object.values(providers).some((provider) => {
14
+ if (!isRecord(provider))
15
+ return false;
16
+ return provider.apiKeyEnv === apiKeyEnv;
17
+ });
18
+ }
@@ -12,6 +12,7 @@ export declare class LocalRequestExecution {
12
12
  publishScheduled(payload: JsonObject): void;
13
13
  start(res: ServerResponse, body: JsonObject, environmentId: string, environment: RuntimeEnvironment): Promise<void>;
14
14
  activeReplay(requestId: string, afterSeq: number): JsonObject | undefined;
15
+ activeReplayForSession(requestId: string, sessionId: string, environmentId: string): readonly JsonObject[] | undefined;
15
16
  healthDetails(): JsonObject[];
16
17
  handleSteer(message: JsonObject, resolveEnvironment: (id: string) => RuntimeEnvironment): Promise<JsonObject>;
17
18
  resolveToolApproval(message: JsonObject): void;
@@ -99,6 +99,14 @@ export class LocalRequestExecution {
99
99
  finalState: active.finalState,
100
100
  };
101
101
  }
102
+ activeReplayForSession(requestId, sessionId, environmentId) {
103
+ const active = this.activeRequests.get(requestId);
104
+ if (!active || active.sessionId !== sessionId)
105
+ return undefined;
106
+ if (active.environmentId !== environmentId)
107
+ return undefined;
108
+ return active.events;
109
+ }
102
110
  healthDetails() {
103
111
  return [...this.activeRequests.values()].map((request) => ({
104
112
  requestId: request.requestId,
@@ -1,17 +1,38 @@
1
+ import { validateEffectiveRuntimeModelConfig } from "../../runtime/config/effective-model-config-validation.js";
1
2
  import { buildRuntimeModelConfiguration } from "../../runtime/config/builders.js";
2
3
  import { isRecord } from "../../runtime/config/utils.js";
3
4
  import { validateRuntimeConfigFile } from "../../runtime/config/validation.js";
4
- function setupRequired(message) {
5
+ import { readConfiguredSetupRunner } from "./runtime-setup-provider.js";
6
+ function hasExistingSetupProfiles(source) {
7
+ const models = isRecord(source.config.models) ? source.config.models : {};
8
+ const profiles = isRecord(models.profiles) ? models.profiles : {};
9
+ return Object.keys(profiles).length > 0;
10
+ }
11
+ function setupRequired(source, message) {
12
+ const hasExistingProfiles = hasExistingSetupProfiles(source);
5
13
  return {
6
14
  status: "setup_required",
7
15
  code: "runtime_configuration_required",
8
- message,
16
+ message: hasExistingProfiles
17
+ ? "Existing model profiles need attention. Open Configuration to repair their provider, model and request-runner settings."
18
+ : message,
19
+ ...(hasExistingProfiles ? { recovery: "configuration" } : {}),
9
20
  };
10
21
  }
11
22
  export function inspectRuntimeSetupRequirement(source) {
12
23
  if (!source.exists) {
13
- return setupRequired("No runtime configuration was found. Choose a provider and model to finish setup.");
24
+ return setupRequired(source, "No runtime configuration was found. Choose a provider and model to finish setup.");
25
+ }
26
+ try {
27
+ return inspectExistingRuntimeSetup(source);
28
+ }
29
+ catch (error) {
30
+ if (!hasExistingSetupProfiles(source))
31
+ throw error;
32
+ return setupRequired(source, "Review the existing configuration.");
14
33
  }
34
+ }
35
+ function inspectExistingRuntimeSetup(source) {
15
36
  validateRuntimeConfigFile(source.config, source.path, {
16
37
  allowIncompleteSetup: true,
17
38
  });
@@ -21,10 +42,10 @@ export function inspectRuntimeSetupRequirement(source) {
21
42
  const providers = modelPolicy?.providers ?? {};
22
43
  const profiles = Object.values(modelPolicy?.profiles ?? {});
23
44
  if (Object.keys(providers).length === 0) {
24
- return setupRequired("No usable model provider is configured. Choose a provider and model to finish setup.");
45
+ return setupRequired(source, "No usable model provider is configured. Choose a provider and model to finish setup.");
25
46
  }
26
47
  if (profiles.length === 0) {
27
- return setupRequired("No model profile has a concrete model ID. Add a model connected to a declared provider.");
48
+ return setupRequired(source, "No model profile has a concrete model ID. Add a model connected to a declared provider.");
28
49
  }
29
50
  const usableProfile = profiles.find((profile) => {
30
51
  const modelId = profile.model?.trim();
@@ -32,14 +53,22 @@ export function inspectRuntimeSetupRequirement(source) {
32
53
  return !!modelId && !!providerId && Object.hasOwn(providers, providerId);
33
54
  });
34
55
  if (!usableProfile) {
35
- return setupRequired("No model profile resolves to a declared provider. Connect a model profile to one of the configured providers.");
56
+ return setupRequired(source, "No model profile resolves to a declared provider. Connect a model profile to one of the configured providers.");
36
57
  }
37
58
  const requestRunner = isRecord(source.config.requestRunner)
38
59
  ? source.config.requestRunner
39
60
  : undefined;
40
61
  if (typeof requestRunner?.configRef !== "string" ||
41
62
  requestRunner.configRef.trim().length === 0) {
42
- return setupRequired("A model is configured, but the request-runner configuration is missing. Run the initializer to finish setup.");
63
+ return setupRequired(source, "A model is configured, but the request-runner configuration is missing. Run the initializer to finish setup.");
64
+ }
65
+ const runnerConfig = readConfiguredSetupRunner(source);
66
+ if (runnerConfig) {
67
+ validateEffectiveRuntimeModelConfig({
68
+ configPath: source.path,
69
+ modelPolicy,
70
+ runnerConfig,
71
+ });
43
72
  }
44
73
  return null;
45
74
  }
@@ -0,0 +1,13 @@
1
+ import type { RuntimeSetupActivation } from "./runtime-setup-input.js";
2
+ import type { RuntimeSetupRoutes } from "./runtime-setup-routes.js";
3
+ /** Close only the draft that was present when applying started. */
4
+ export declare function applyAndCompleteRuntimeSetup(setup: RuntimeSetupRoutes, apply: () => Promise<RuntimeSetupActivation>): Promise<RuntimeSetupActivation>;
5
+ export declare function pendingRuntimeSetupCatalog(setup: RuntimeSetupRoutes): Promise<{
6
+ profiles: never[];
7
+ modes: never[];
8
+ availability: {
9
+ status: string;
10
+ code: string;
11
+ message: string;
12
+ };
13
+ } | null>;
@@ -0,0 +1,28 @@
1
+ /** Close only the draft that was present when applying started. */
2
+ export async function applyAndCompleteRuntimeSetup(setup, apply) {
3
+ const snapshot = await setup.status();
4
+ const revision = snapshot.editableConnection?.revision;
5
+ const activation = await apply();
6
+ if (activation.status !== "ready" || !revision)
7
+ return activation;
8
+ if (await setup.finalize(revision))
9
+ return activation;
10
+ return {
11
+ status: "restart_required",
12
+ message: "Your connection changed while setup was being applied. Review the current settings and apply again.",
13
+ };
14
+ }
15
+ export async function pendingRuntimeSetupCatalog(setup) {
16
+ const snapshot = await setup.status();
17
+ if (!snapshot.editableConnection)
18
+ return null;
19
+ return {
20
+ profiles: [],
21
+ modes: [],
22
+ availability: {
23
+ status: "setup_required",
24
+ code: "runtime_configuration_required",
25
+ message: "Continue setup to review and apply your saved connection.",
26
+ },
27
+ };
28
+ }
@@ -0,0 +1,13 @@
1
+ import { type RuntimeSetupInput } from "./runtime-setup-input.js";
2
+ import { type RuntimeSetupDraft } from "./runtime-setup-draft.js";
3
+ /** Applies only fields owned by the unfinished wizard, retaining optional-step edits. */
4
+ export declare function editRuntimeSetupConnection(params: {
5
+ rootDir: string;
6
+ configPath: string;
7
+ draft: RuntimeSetupDraft;
8
+ input: RuntimeSetupInput;
9
+ credentialChanged: boolean;
10
+ }): Promise<{
11
+ draft: RuntimeSetupDraft;
12
+ embeddingInvalidated: boolean;
13
+ }>;
@@ -0,0 +1,110 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { isDeepStrictEqual } from "node:util";
4
+ import { buildModelConfig, buildProviderConfig, readJsonObject, resolveRuntimePackageRoot, } from "../../../scripts/runtime-setup-files.js";
5
+ import { withConfigFileTransaction } from "../../runtime/adapters/config-file-transaction.js";
6
+ import { inspectRuntimeConfigFileWithMeta } from "../../runtime/config/loader.js";
7
+ import { RuntimeSetupError, } from "./runtime-setup-input.js";
8
+ import { isCurrentRuntimeSetupDraft, setupConfigurationChanged, setupConfigMap, writeRuntimeSetupDraft, } from "./runtime-setup-draft.js";
9
+ import { validateRuntimeSetupPlan } from "./runtime-setup-validation.js";
10
+ import { retainSetupConnectionProviders } from "./runtime-setup-provider-retention.js";
11
+ import { shouldInvalidateSetupEmbedding } from "./runtime-setup-embedding-invalidation.js";
12
+ function preserveExistingProvider(existing, requested, owned) {
13
+ if (existing === undefined)
14
+ return;
15
+ if (owned)
16
+ return;
17
+ if (isDeepStrictEqual(existing, requested))
18
+ return;
19
+ throw new RuntimeSetupError("setup_provider_conflict", "That provider already has settings. Its existing connection was preserved.", 409);
20
+ }
21
+ /** Applies only fields owned by the unfinished wizard, retaining optional-step edits. */
22
+ export async function editRuntimeSetupConnection(params) {
23
+ return withConfigFileTransaction(params.configPath, async (configTransaction) => {
24
+ const source = inspectRuntimeConfigFileWithMeta(params.rootDir, params.configPath);
25
+ if (!(await isCurrentRuntimeSetupDraft(source, params.draft)))
26
+ throw setupConfigurationChanged();
27
+ return withConfigFileTransaction(params.draft.modelPath, async (modelTransaction) => {
28
+ if (!isDeepStrictEqual(modelTransaction.snapshot.config, params.draft.modelConfig))
29
+ throw setupConfigurationChanged();
30
+ const models = setupConfigMap(source.config.models);
31
+ const providers = setupConfigMap(models.providers);
32
+ const providerId = params.input.provider;
33
+ const provider = buildProviderConfig(providerId, params.input.baseUrl);
34
+ const existing = providers[providerId];
35
+ const owned = Object.hasOwn(params.draft.ownedProviders, providerId);
36
+ preserveExistingProvider(existing, provider, owned);
37
+ const embeddingInvalidated = shouldInvalidateSetupEmbedding({
38
+ config: source.config,
39
+ providerId,
40
+ provider,
41
+ providerChanged: !isDeepStrictEqual(existing, provider),
42
+ credentialChanged: params.credentialChanged,
43
+ });
44
+ const modelTemplate = await readJsonObject(join(resolveRuntimePackageRoot(import.meta.dirname), "examples/models/default.config.json"));
45
+ const contextWindowTokens = params.input.contextWindowTokens ??
46
+ params.draft.modelConfig.contextWindowTokens;
47
+ const modelConfig = buildModelConfig(modelTemplate, providerId, params.input.model, typeof contextWindowTokens === "number"
48
+ ? contextWindowTokens
49
+ : undefined);
50
+ const memory = setupConfigMap(source.config.longTermMemory);
51
+ const retained = retainSetupConnectionProviders({
52
+ providers,
53
+ ownedProviders: params.draft.ownedProviders,
54
+ embeddingProfiles: models.embeddingProfiles,
55
+ providerId,
56
+ provider,
57
+ });
58
+ const config = {
59
+ ...source.config,
60
+ models: {
61
+ ...models,
62
+ providers: retained.providers,
63
+ },
64
+ ...(embeddingInvalidated
65
+ ? { longTermMemory: { ...memory, enabled: false } }
66
+ : {}),
67
+ };
68
+ const runner = setupConfigMap(config.requestRunner);
69
+ if (typeof runner.configRef !== "string")
70
+ throw setupConfigurationChanged();
71
+ await validateRuntimeSetupPlan({
72
+ rootDir: params.rootDir,
73
+ config,
74
+ modelConfig,
75
+ runnerPath: resolve(dirname(params.configPath), runner.configRef),
76
+ });
77
+ const nextDraft = {
78
+ ...params.draft,
79
+ revision: randomUUID(),
80
+ modelConfig,
81
+ ownedProviders: retained.ownedProviders,
82
+ };
83
+ let modelWritten = false;
84
+ let configWritten = false;
85
+ try {
86
+ await modelTransaction.write(modelConfig, {
87
+ expectedConfig: params.draft.modelConfig,
88
+ });
89
+ modelWritten = true;
90
+ await configTransaction.write(config, {
91
+ expectedConfig: source.config,
92
+ });
93
+ configWritten = true;
94
+ await writeRuntimeSetupDraft(nextDraft);
95
+ }
96
+ catch (error) {
97
+ if (configWritten)
98
+ await configTransaction.write(source.config, {
99
+ expectedConfig: config,
100
+ });
101
+ if (modelWritten)
102
+ await modelTransaction.write(params.draft.modelConfig, {
103
+ expectedConfig: modelConfig,
104
+ });
105
+ throw error;
106
+ }
107
+ return { draft: nextDraft, embeddingInvalidated };
108
+ });
109
+ });
110
+ }
@@ -0,0 +1,4 @@
1
+ import type { RuntimeSetupInput } from "./runtime-setup-input.js";
2
+ import type { configuredSetupModel } from "./runtime-setup-provider.js";
3
+ /** A revisionless retry can fill a missing credential, never edit its connection. */
4
+ export declare function canCompleteMissingRuntimeSetupCredential(existing: ReturnType<typeof configuredSetupModel>, input: RuntimeSetupInput, rootDir: string): boolean;
@@ -0,0 +1,21 @@
1
+ import { readRuntimeSetupCredential } from "./runtime-setup-credentials.js";
2
+ /** A revisionless retry can fill a missing credential, never edit its connection. */
3
+ export function canCompleteMissingRuntimeSetupCredential(existing, input, rootDir) {
4
+ if (!existing)
5
+ return false;
6
+ if (input.connectionRevision !== undefined)
7
+ return false;
8
+ if (existing.provider !== "openai")
9
+ return false;
10
+ if (input.provider !== existing.provider)
11
+ return false;
12
+ if (existing.model.trim() !== input.model.trim())
13
+ return false;
14
+ const requestedContext = input.contextWindowTokens ?? existing.contextWindowTokens;
15
+ if (requestedContext !== existing.contextWindowTokens)
16
+ return false;
17
+ // Both projections already normalize addresses to origins.
18
+ if ((existing.baseUrl ?? "") !== (input.baseUrl ?? ""))
19
+ return false;
20
+ return !readRuntimeSetupCredential(rootDir, existing.apiKeyEnv);
21
+ }
@@ -0,0 +1,14 @@
1
+ type RuntimeSetupCredentialWrite = {
2
+ rootDir: string;
3
+ configPath: string;
4
+ apiKey?: string;
5
+ apiKeyEnv?: string;
6
+ preserveExistingCredential?: boolean;
7
+ };
8
+ export declare function readRuntimeSetupCredential(rootDir: string, apiKeyEnv?: string): string;
9
+ export declare function assertRuntimeSetupCredentialFile(rootDir: string): Promise<void>;
10
+ export declare function hasRuntimeSetupCredential(rootDir: string, apiKeyEnv?: string): Promise<boolean>;
11
+ export declare function persistRuntimeSetupCredentials(params: RuntimeSetupCredentialWrite): Promise<void>;
12
+ /** Keep the credential private and locked until the related setup commit settles. */
13
+ export declare function commitRuntimeSetupCredentials<T>(params: RuntimeSetupCredentialWrite, commit: () => Promise<T>): Promise<T>;
14
+ export {};
@@ -0,0 +1,148 @@
1
+ import { withFileLock } from "../../runtime/adapters/long-term-memory/file-lock.js";
2
+ import { parse } from "dotenv";
3
+ import { randomUUID } from "node:crypto";
4
+ import { lstatSync, readFileSync } from "node:fs";
5
+ import { chmod, lstat, readFile, realpath, rename, rm, writeFile, } from "node:fs/promises";
6
+ import { join } from "node:path";
7
+ import { RuntimeSetupError } from "./runtime-setup-input.js";
8
+ import { replaceRuntimeSetupEnvironmentAssignment } from "./runtime-setup-environment-assignment.js";
9
+ function isMissingFile(error) {
10
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
11
+ }
12
+ async function readCredentialFileSnapshot(rootDir) {
13
+ const path = join(rootDir, ".env");
14
+ try {
15
+ const info = await lstat(path);
16
+ const isRegularCredentialFile = info.isFile() && !info.isSymbolicLink();
17
+ if (!isRegularCredentialFile)
18
+ throw new RuntimeSetupError("unsafe_credential_file", "The local credential file must be a regular file.", 409);
19
+ return { raw: await readFile(path, "utf8"), mode: info.mode & 0o777 };
20
+ }
21
+ catch (error) {
22
+ if (isMissingFile(error))
23
+ return { mode: 0o600 };
24
+ throw error;
25
+ }
26
+ }
27
+ async function readCredentialFile(rootDir) {
28
+ return (await readCredentialFileSnapshot(rootDir)).raw ?? "";
29
+ }
30
+ async function requireUnchangedCredentialFile(rootDir, expected) {
31
+ const current = await readCredentialFileSnapshot(rootDir);
32
+ if (current.raw === expected)
33
+ return;
34
+ throw new RuntimeSetupError("setup_credentials_changed", "Credentials changed while setup was being saved. Try again.", 409);
35
+ }
36
+ async function replaceCredentialFile(rootDir, previous, next, mode = 0o600) {
37
+ const path = join(rootDir, ".env");
38
+ const temporary = `${path}.${randomUUID()}.tmp`;
39
+ try {
40
+ await writeFile(temporary, next, { encoding: "utf8", mode, flag: "wx" });
41
+ await chmod(temporary, mode);
42
+ await requireUnchangedCredentialFile(rootDir, previous);
43
+ await rename(temporary, path);
44
+ }
45
+ catch (error) {
46
+ await removeFailedCredentialTemporary(error, temporary);
47
+ }
48
+ }
49
+ async function removeFailedCredentialTemporary(error, temporary) {
50
+ try {
51
+ await rm(temporary, { force: true });
52
+ }
53
+ catch (cleanupError) {
54
+ throw new AggregateError([error, cleanupError], "Credential saving failed and its temporary file could not be removed.");
55
+ }
56
+ throw error;
57
+ }
58
+ async function restoreCredentialFile(rootDir, previous, written) {
59
+ if (previous.raw !== undefined) {
60
+ await replaceCredentialFile(rootDir, written, previous.raw, previous.mode);
61
+ return;
62
+ }
63
+ await requireUnchangedCredentialFile(rootDir, written);
64
+ await rm(join(rootDir, ".env"), { force: true });
65
+ }
66
+ async function restoreCredentialsAfterFailure(error, rootDir, previous, written) {
67
+ try {
68
+ await restoreCredentialFile(rootDir, previous, written);
69
+ }
70
+ catch (rollbackError) {
71
+ throw new AggregateError([error, rollbackError], "Setup failed and its credential file could not be restored.");
72
+ }
73
+ throw error;
74
+ }
75
+ async function commitOrRestoreCredentials(rootDir, previous, written, commit) {
76
+ try {
77
+ return await commit();
78
+ }
79
+ catch (error) {
80
+ return restoreCredentialsAfterFailure(error, rootDir, previous, written);
81
+ }
82
+ }
83
+ function readSavedApiKey(raw, apiKeyEnv) {
84
+ return parse(raw)[apiKeyEnv]?.trim() ?? "";
85
+ }
86
+ export function readRuntimeSetupCredential(rootDir, apiKeyEnv = "OPENAI_API_KEY") {
87
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(apiKeyEnv))
88
+ return "";
89
+ const inherited = process.env[apiKeyEnv]?.trim();
90
+ if (inherited)
91
+ return inherited;
92
+ const path = join(rootDir, ".env");
93
+ try {
94
+ if (!lstatSync(path).isFile())
95
+ return "";
96
+ return readSavedApiKey(readFileSync(path, "utf8"), apiKeyEnv);
97
+ }
98
+ catch {
99
+ return "";
100
+ }
101
+ }
102
+ export async function assertRuntimeSetupCredentialFile(rootDir) {
103
+ await readCredentialFile(rootDir);
104
+ }
105
+ export async function hasRuntimeSetupCredential(rootDir, apiKeyEnv = "OPENAI_API_KEY") {
106
+ return Boolean(readRuntimeSetupCredential(rootDir, apiKeyEnv));
107
+ }
108
+ export async function persistRuntimeSetupCredentials(params) {
109
+ await commitRuntimeSetupCredentials(params, async () => undefined);
110
+ }
111
+ /** Keep the credential private and locked until the related setup commit settles. */
112
+ export async function commitRuntimeSetupCredentials(params, commit) {
113
+ const rootDir = await realpath(params.rootDir);
114
+ return withFileLock(join(rootDir, ".env.credentials.lock"), () => saveCredentialAssignments({ ...params, rootDir }, commit));
115
+ }
116
+ function wouldReplaceConfiguredCredential(preserveExistingCredential, incomingKey, configuredKeys) {
117
+ if (!preserveExistingCredential)
118
+ return false;
119
+ if (!incomingKey)
120
+ return false;
121
+ return configuredKeys.some((configuredKey) => {
122
+ if (!configuredKey)
123
+ return false;
124
+ return configuredKey !== incomingKey;
125
+ });
126
+ }
127
+ async function saveCredentialAssignments(params, commit) {
128
+ const apiKeyEnv = params.apiKeyEnv ?? "OPENAI_API_KEY";
129
+ const previousFile = await readCredentialFileSnapshot(params.rootDir);
130
+ const previous = previousFile.raw ?? "";
131
+ const configuredKeys = [
132
+ readSavedApiKey(previous, apiKeyEnv),
133
+ process.env[apiKeyEnv]?.trim() ?? "",
134
+ ];
135
+ if (wouldReplaceConfiguredCredential(params.preserveExistingCredential, params.apiKey, configuredKeys))
136
+ throw new RuntimeSetupError("credential_already_configured", "That provider now has a saved API key. Its credential was preserved.", 409);
137
+ let next = replaceRuntimeSetupEnvironmentAssignment(previous, "LLM_RUNTIME_CONFIG_FILE", params.configPath);
138
+ if (params.apiKey)
139
+ next = replaceRuntimeSetupEnvironmentAssignment(next, apiKeyEnv, params.apiKey);
140
+ await replaceCredentialFile(params.rootDir, previousFile.raw, next);
141
+ const result = await commitOrRestoreCredentials(params.rootDir, previousFile, next, commit);
142
+ const key = params.apiKey ||
143
+ process.env[apiKeyEnv] ||
144
+ readSavedApiKey(previous, apiKeyEnv);
145
+ if (key)
146
+ process.env[apiKeyEnv] = key;
147
+ return result;
148
+ }
@@ -0,0 +1,7 @@
1
+ import type { InspectedRuntimeConfigFile } from "../../runtime/config/loader.js";
2
+ import { type RuntimeSetupDraft } from "./runtime-setup-draft.js";
3
+ export declare function inspectRuntimeSetupDraftForSave(source: InspectedRuntimeConfigFile): Promise<{
4
+ draft?: RuntimeSetupDraft;
5
+ recoveryDraft?: RuntimeSetupDraft;
6
+ recoveringDraft: boolean;
7
+ }>;
@@ -0,0 +1,18 @@
1
+ import { isCurrentRuntimeSetupDraft, readRuntimeSetupDraft, } from "./runtime-setup-draft.js";
2
+ import { MalformedRuntimeSetupReceiptError } from "./runtime-setup-receipt-file.js";
3
+ export async function inspectRuntimeSetupDraftForSave(source) {
4
+ let draft;
5
+ try {
6
+ draft = await readRuntimeSetupDraft(source.path);
7
+ }
8
+ catch (error) {
9
+ if (!(error instanceof MalformedRuntimeSetupReceiptError))
10
+ throw error;
11
+ return { recoveringDraft: true };
12
+ }
13
+ if (!draft)
14
+ return { recoveringDraft: false };
15
+ if (await isCurrentRuntimeSetupDraft(source, draft))
16
+ return { draft, recoveringDraft: false };
17
+ return { recoveryDraft: draft, recoveringDraft: true };
18
+ }
@@ -0,0 +1,21 @@
1
+ import type { InspectedRuntimeConfigFile } from "../../runtime/config/loader.js";
2
+ import { RuntimeSetupError } from "./runtime-setup-input.js";
3
+ export type RuntimeSetupDraft = Readonly<{
4
+ version: 1;
5
+ revision: string;
6
+ configPath: string;
7
+ modelPath: string;
8
+ modelConfig: Record<string, unknown>;
9
+ profileReferences: Record<string, unknown>;
10
+ ownedProviders: Record<string, unknown>;
11
+ }>;
12
+ export declare function setupConfigurationChanged(): RuntimeSetupError;
13
+ export declare function setupConfigMap(value: unknown): Record<string, unknown>;
14
+ export declare function readRuntimeSetupDraft(configPath: string): Promise<RuntimeSetupDraft | undefined>;
15
+ /** Ownership covers the newly created chat model and providers, never the whole config. */
16
+ export declare function isCurrentRuntimeSetupDraft(source: InspectedRuntimeConfigFile, draft: RuntimeSetupDraft): Promise<boolean>;
17
+ export declare function writeRuntimeSetupDraft(draft: RuntimeSetupDraft): Promise<void>;
18
+ export declare function createRuntimeSetupDraft(source: InspectedRuntimeConfigFile, previousProviders: Record<string, unknown>, providerId: string, modelConfig: Record<string, unknown>, ownedProviders?: Record<string, unknown>): Promise<RuntimeSetupDraft>;
19
+ export declare function removeRuntimeSetupDraft(configPath: string): Promise<void>;
20
+ /** A broken ownership receipt must never grant edit access or block ordinary configuration. */
21
+ export declare function inspectEditableRuntimeSetupDraft(source: InspectedRuntimeConfigFile): Promise<RuntimeSetupDraft | undefined>;
@@ -0,0 +1,105 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { rm } from "node:fs/promises";
3
+ import { isDeepStrictEqual } from "node:util";
4
+ import { canonicalConfigFilePath, readConfigFileSnapshot, } from "../../runtime/adapters/config-file-transaction.js";
5
+ import { isRecord } from "../../runtime/config/utils.js";
6
+ import { RuntimeSetupError } from "./runtime-setup-input.js";
7
+ import { runtimeSetupDraftModelPath } from "./runtime-setup-model-file.js";
8
+ import { MalformedRuntimeSetupReceiptError, readRuntimeSetupReceipt, runtimeSetupReceiptPath, writeRuntimeSetupReceipt, } from "./runtime-setup-receipt-file.js";
9
+ export function setupConfigurationChanged() {
10
+ return new RuntimeSetupError("setup_configuration_changed", "This setup connection changed since it was loaded. Refresh before editing it again.", 409);
11
+ }
12
+ export function setupConfigMap(value) {
13
+ return isRecord(value) ? value : {};
14
+ }
15
+ function isSetupDraft(value) {
16
+ if (value.version !== 1)
17
+ return false;
18
+ if (typeof value.revision !== "string")
19
+ return false;
20
+ if (typeof value.configPath !== "string")
21
+ return false;
22
+ if (typeof value.modelPath !== "string")
23
+ return false;
24
+ if (!isRecord(value.modelConfig))
25
+ return false;
26
+ if (!isRecord(value.profileReferences))
27
+ return false;
28
+ return isRecord(value.ownedProviders);
29
+ }
30
+ export async function readRuntimeSetupDraft(configPath) {
31
+ const raw = await readRuntimeSetupReceipt(configPath);
32
+ if (raw === undefined)
33
+ return undefined;
34
+ let value;
35
+ try {
36
+ value = JSON.parse(raw);
37
+ }
38
+ catch {
39
+ throw new MalformedRuntimeSetupReceiptError();
40
+ }
41
+ if (!isRecord(value) || !isSetupDraft(value))
42
+ throw new MalformedRuntimeSetupReceiptError();
43
+ return value;
44
+ }
45
+ /** Ownership covers the newly created chat model and providers, never the whole config. */
46
+ export async function isCurrentRuntimeSetupDraft(source, draft) {
47
+ if ((await canonicalConfigFilePath(source.path)) !== draft.configPath)
48
+ return false;
49
+ const models = setupConfigMap(source.config.models);
50
+ if (!isDeepStrictEqual(models.profiles, draft.profileReferences))
51
+ return false;
52
+ if ((await runtimeSetupDraftModelPath(source)) !== draft.modelPath)
53
+ return false;
54
+ const providers = setupConfigMap(models.providers);
55
+ for (const [id, provider] of Object.entries(draft.ownedProviders)) {
56
+ if (!isDeepStrictEqual(providers[id], provider))
57
+ return false;
58
+ }
59
+ const model = await readConfigFileSnapshot(draft.modelPath);
60
+ return model.exists && isDeepStrictEqual(model.config, draft.modelConfig);
61
+ }
62
+ export async function writeRuntimeSetupDraft(draft) {
63
+ await writeRuntimeSetupReceipt(draft.configPath, draft);
64
+ }
65
+ export async function createRuntimeSetupDraft(source, previousProviders, providerId, modelConfig, ownedProviders) {
66
+ const models = setupConfigMap(source.config.models);
67
+ const providers = setupConfigMap(models.providers);
68
+ const modelPath = await runtimeSetupDraftModelPath(source);
69
+ if (!modelPath)
70
+ throw setupConfigurationChanged();
71
+ const model = await readConfigFileSnapshot(modelPath);
72
+ if (!isDeepStrictEqual(model.config, modelConfig))
73
+ throw setupConfigurationChanged();
74
+ const draft = {
75
+ version: 1,
76
+ revision: randomUUID(),
77
+ configPath: await canonicalConfigFilePath(source.path),
78
+ modelPath,
79
+ modelConfig,
80
+ profileReferences: setupConfigMap(models.profiles),
81
+ ownedProviders: ownedProviders ??
82
+ (Object.hasOwn(previousProviders, providerId)
83
+ ? {}
84
+ : { [providerId]: providers[providerId] }),
85
+ };
86
+ await writeRuntimeSetupDraft(draft);
87
+ return draft;
88
+ }
89
+ export async function removeRuntimeSetupDraft(configPath) {
90
+ await rm(await runtimeSetupReceiptPath(configPath), { force: true });
91
+ }
92
+ /** A broken ownership receipt must never grant edit access or block ordinary configuration. */
93
+ export async function inspectEditableRuntimeSetupDraft(source) {
94
+ try {
95
+ const draft = await readRuntimeSetupDraft(source.path);
96
+ if (!draft)
97
+ return undefined;
98
+ if (!(await isCurrentRuntimeSetupDraft(source, draft)))
99
+ return undefined;
100
+ return draft;
101
+ }
102
+ catch {
103
+ return undefined;
104
+ }
105
+ }
@@ -0,0 +1,8 @@
1
+ /** Credentials may be shared by provider aliases; addresses belong to one provider. */
2
+ export declare function shouldInvalidateSetupEmbedding(params: {
3
+ config: Record<string, unknown>;
4
+ providerId: string;
5
+ provider: Record<string, unknown>;
6
+ providerChanged: boolean;
7
+ credentialChanged: boolean;
8
+ }): boolean;