@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,107 @@
1
+ import { parseRuntimeModelProfileId } from "../../../scripts/runtime-model-addition.js";
2
+ import { parseBaseUrl, parseContextWindowTokens, } from "../../../scripts/runtime-setup-files.js";
3
+ import { isRecord } from "../../runtime/config/utils.js";
4
+ export class ModelSetupError extends Error {
5
+ code;
6
+ statusCode;
7
+ credentialSaved;
8
+ constructor(code, message, statusCode = 400, credentialSaved = false) {
9
+ super(message);
10
+ this.code = code;
11
+ this.statusCode = statusCode;
12
+ this.credentialSaved = credentialSaved;
13
+ }
14
+ }
15
+ function requireAllowedFields(body, allowed) {
16
+ if (Object.keys(body).some((key) => !allowed.includes(key))) {
17
+ throw new ModelSetupError("invalid_model_input", "The model update contains unsupported fields.");
18
+ }
19
+ }
20
+ function inputString(body, field, optional = false) {
21
+ const value = body[field];
22
+ if (value === undefined && optional)
23
+ return undefined;
24
+ if (typeof value !== "string" || !value.trim())
25
+ throw new ModelSetupError("invalid_model_input", `The ${field} field must be a non-empty string.`);
26
+ return value.trim();
27
+ }
28
+ function isReservedIdentifier(value) {
29
+ return ["__proto__", "prototype", "constructor"].includes(value);
30
+ }
31
+ function requireIdentifier(value, kind) {
32
+ const pattern = kind === "provider"
33
+ ? /^[A-Za-z][A-Za-z0-9._-]*$/u
34
+ : /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
35
+ if (value.length > 128 ||
36
+ !pattern.test(value) ||
37
+ isReservedIdentifier(value)) {
38
+ throw new ModelSetupError(`invalid_${kind}_id`, `Choose a ${kind} ID of up to 128 letters, numbers, dots, underscores, or dashes, starting with ${kind === "provider" ? "a letter" : "a letter or number"}.`);
39
+ }
40
+ return kind === "profile" ? parseRuntimeModelProfileId(value) : value;
41
+ }
42
+ function readNewProvider(value) {
43
+ if (!isRecord(value))
44
+ throw new ModelSetupError("invalid_model_provider", "Choose a configured provider or add a new provider.");
45
+ requireAllowedFields(value, ["id", "type", "baseUrl"]);
46
+ const id = requireIdentifier(inputString(value, "id"), "provider");
47
+ const type = inputString(value, "type");
48
+ if (type !== "openai" && type !== "ollama")
49
+ throw new ModelSetupError("invalid_model_provider", "A new provider must use OpenAI or Ollama.");
50
+ const address = inputString(value, "baseUrl", true);
51
+ if (address && type !== "ollama")
52
+ throw new ModelSetupError("invalid_model_address", "A custom address is available for a new Ollama provider.");
53
+ let baseUrl;
54
+ try {
55
+ baseUrl = address ? parseBaseUrl(address) : undefined;
56
+ }
57
+ catch {
58
+ throw new ModelSetupError("invalid_model_address", "Enter an HTTP or HTTPS origin without a path or credentials.");
59
+ }
60
+ return { id, type, ...(baseUrl ? { baseUrl } : {}) };
61
+ }
62
+ function requireModelIdentifier(model) {
63
+ if (model.length > 256 || /[\u0000-\u0020\u007f]/u.test(model))
64
+ throw new ModelSetupError("invalid_model_id", "Enter a model ID without spaces or control characters.");
65
+ }
66
+ function requireSafeCredential(apiKey) {
67
+ if (!apiKey)
68
+ return;
69
+ if (apiKey.length > 4096 || /[\u0000-\u0020\u007f'"`]/u.test(apiKey))
70
+ throw new ModelSetupError("invalid_model_credential", "The API key contains unsupported characters.");
71
+ }
72
+ export function parseModelSetupInput(body) {
73
+ requireAllowedFields(body, [
74
+ "profileId",
75
+ "model",
76
+ "contextWindowTokens",
77
+ "providerId",
78
+ "newProvider",
79
+ "apiKey",
80
+ ]);
81
+ const profileId = requireIdentifier(inputString(body, "profileId"), "profile");
82
+ let contextWindowTokens;
83
+ try {
84
+ contextWindowTokens = parseContextWindowTokens(body.contextWindowTokens);
85
+ }
86
+ catch {
87
+ throw new ModelSetupError("invalid_context_window", "Context window must be a positive whole number of tokens.");
88
+ }
89
+ const model = inputString(body, "model");
90
+ requireModelIdentifier(model);
91
+ const apiKey = inputString(body, "apiKey", true);
92
+ requireSafeCredential(apiKey);
93
+ const providerId = inputString(body, "providerId", true);
94
+ const hasOneProvider = (providerId !== undefined) !== (body.newProvider !== undefined);
95
+ if (!hasOneProvider)
96
+ throw new ModelSetupError("invalid_model_provider", "Choose exactly one configured provider or new provider.");
97
+ const selection = providerId
98
+ ? { providerId }
99
+ : { newProvider: readNewProvider(body.newProvider) };
100
+ return {
101
+ profileId,
102
+ model,
103
+ ...(contextWindowTokens !== undefined ? { contextWindowTokens } : {}),
104
+ ...(apiKey ? { apiKey } : {}),
105
+ ...selection,
106
+ };
107
+ }
@@ -0,0 +1,17 @@
1
+ import { type ModelSetupInput, type NewModelProvider } from "./model-setup-input.js";
2
+ import type { ModelSetupOptions } from "./model-setup-catalog.js";
3
+ export declare function buildNewModelProvider(selection: NewModelProvider): {
4
+ id: string;
5
+ config: import("../../../scripts/runtime-setup-files.js").JsonObject;
6
+ };
7
+ export declare function planModelProvider(providers: Record<string, unknown>, input: ModelSetupInput): {
8
+ id: string;
9
+ config: import("../../../scripts/runtime-setup-files.js").JsonObject;
10
+ };
11
+ export declare function prepareModelCredential(options: ModelSetupOptions, provider: Record<string, unknown>, apiKey?: string): Promise<{
12
+ apiKey?: string | undefined;
13
+ apiKeyEnv: string;
14
+ } | undefined>;
15
+ export declare function saveModelCredential(options: ModelSetupOptions & {
16
+ configPath: string;
17
+ }, credential: Awaited<ReturnType<typeof prepareModelCredential>>): Promise<boolean>;
@@ -0,0 +1,68 @@
1
+ import { RuntimeSetupError } from "./runtime-setup-input.js";
2
+ import { hasProviderCredentialBinding, isolatedProviderCredentialName, } from "./provider-credential-identity.js";
3
+ import { buildProviderConfig } from "../../../scripts/runtime-setup-files.js";
4
+ import { isRecord } from "../../runtime/config/utils.js";
5
+ import { readRuntimeSetupCredential, assertRuntimeSetupCredentialFile, persistRuntimeSetupCredentials, } from "./runtime-setup-credentials.js";
6
+ import { ModelSetupError, } from "./model-setup-input.js";
7
+ export function buildNewModelProvider(selection) {
8
+ const config = buildProviderConfig(selection.type, selection.baseUrl);
9
+ const needsIsolatedCredentialBinding = selection.type === "openai";
10
+ if (needsIsolatedCredentialBinding)
11
+ config.apiKeyEnv = isolatedProviderCredentialName(selection.id);
12
+ return { id: selection.id, config };
13
+ }
14
+ export function planModelProvider(providers, input) {
15
+ if (input.providerId !== undefined) {
16
+ const provider = Object.hasOwn(providers, input.providerId)
17
+ ? providers[input.providerId]
18
+ : undefined;
19
+ if (!isRecord(provider))
20
+ throw new ModelSetupError("model_provider_not_found", "The selected provider no longer exists. Refresh and choose a provider.", 404);
21
+ return { id: input.providerId, config: provider };
22
+ }
23
+ const selection = input.newProvider;
24
+ if (Object.hasOwn(providers, selection.id))
25
+ throw new ModelSetupError("model_provider_exists", "That provider ID already exists. Choose its saved connection or use another ID.", 409);
26
+ const provider = buildNewModelProvider(selection);
27
+ const apiKeyEnv = provider.config.apiKeyEnv;
28
+ const hasNewProviderCredentialCollision = typeof apiKeyEnv === "string" &&
29
+ hasProviderCredentialBinding(providers, apiKeyEnv);
30
+ if (hasNewProviderCredentialCollision)
31
+ throw new ModelSetupError("model_credential_conflict", "The new provider's credential name is already in use. Choose another provider ID.", 409);
32
+ return provider;
33
+ }
34
+ export async function prepareModelCredential(options, provider, apiKey) {
35
+ const requiresApiKey = provider.type === "openai";
36
+ if (!requiresApiKey) {
37
+ if (apiKey)
38
+ throw new ModelSetupError("invalid_model_credential", "Only an OpenAI connection accepts an API key here.");
39
+ return undefined;
40
+ }
41
+ const apiKeyEnv = typeof provider.apiKeyEnv === "string"
42
+ ? provider.apiKeyEnv
43
+ : "OPENAI_API_KEY";
44
+ await assertRuntimeSetupCredentialFile(options.rootDir);
45
+ const savedKey = readRuntimeSetupCredential(options.rootDir, apiKeyEnv);
46
+ if (savedKey && apiKey && savedKey !== apiKey)
47
+ throw new ModelSetupError("credential_already_configured", "That provider already has a saved API key. Its credential was preserved.", 409);
48
+ if (!savedKey && !apiKey)
49
+ throw new ModelSetupError("model_credential_required", "Enter an API key for this OpenAI connection.");
50
+ return { apiKeyEnv, ...(savedKey ? {} : { apiKey }) };
51
+ }
52
+ export async function saveModelCredential(options, credential) {
53
+ if (!credential)
54
+ return false;
55
+ try {
56
+ await persistRuntimeSetupCredentials({
57
+ ...options,
58
+ ...credential,
59
+ preserveExistingCredential: true,
60
+ });
61
+ }
62
+ catch (error) {
63
+ if (error instanceof RuntimeSetupError)
64
+ throw new ModelSetupError(error.code, error.message, error.statusCode);
65
+ throw error;
66
+ }
67
+ return true;
68
+ }
@@ -0,0 +1,14 @@
1
+ import { type ModelSetupOptions } from "./model-setup-catalog.js";
2
+ import { type ModelSetupInput } from "./model-setup-input.js";
3
+ /** A repeated POST may acknowledge only the exact inline addition already committed. */
4
+ export declare function recoverCommittedModelAddition(options: ModelSetupOptions & {
5
+ configPath: string;
6
+ }, models: Record<string, unknown>, input: ModelSetupInput, expectedRevision: string): Promise<{
7
+ model: {
8
+ profileId: string;
9
+ providerId: string;
10
+ provider: string;
11
+ model: string;
12
+ };
13
+ restartRequired: true;
14
+ }>;
@@ -0,0 +1,47 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { readConfigFileSnapshot } from "../../runtime/adapters/config-file-transaction.js";
3
+ import { isRecord } from "../../runtime/config/utils.js";
4
+ import { modelConfigMap, } from "./model-setup-catalog.js";
5
+ import { buildModelSetupProfile, modelSetupResult, } from "./model-setup-identity.js";
6
+ import { ModelSetupError } from "./model-setup-input.js";
7
+ import { buildNewModelProvider, planModelProvider, prepareModelCredential, } from "./model-setup-provider.js";
8
+ function rejectModelProfileCollision() {
9
+ throw new ModelSetupError("model_profile_exists", "That model profile ID already exists with different settings. Choose another ID.", 409);
10
+ }
11
+ function committedRetryProvider(providers, input) {
12
+ if (input.providerId !== undefined)
13
+ return planModelProvider(providers, input);
14
+ return buildNewModelProvider(input.newProvider);
15
+ }
16
+ async function requireUnchangedRetryConfiguration(options, expectedRevision) {
17
+ const current = await readConfigFileSnapshot(options.configPath);
18
+ if (current.revision === expectedRevision)
19
+ return;
20
+ throw new ModelSetupError("config_changed", "Configuration changed while the saved model was being checked. Refresh before retrying.", 409);
21
+ }
22
+ /** A repeated POST may acknowledge only the exact inline addition already committed. */
23
+ export async function recoverCommittedModelAddition(options, models, input, expectedRevision) {
24
+ const profiles = modelConfigMap(models.profiles);
25
+ const profile = profiles[input.profileId];
26
+ const savedProfileIsInline = isRecord(profile);
27
+ if (!savedProfileIsInline)
28
+ rejectModelProfileCollision();
29
+ const providers = modelConfigMap(models.providers);
30
+ const providerId = input.providerId ?? input.newProvider.id;
31
+ const hasSavedProviderConnection = isRecord(providers[providerId]);
32
+ if (!hasSavedProviderConnection)
33
+ rejectModelProfileCollision();
34
+ const provider = committedRetryProvider(providers, input);
35
+ const savedProviderMatchesRequest = isDeepStrictEqual(providers[provider.id], provider.config);
36
+ if (!savedProviderMatchesRequest)
37
+ rejectModelProfileCollision();
38
+ const expectedProfile = await buildModelSetupProfile(provider, input);
39
+ const savedProfileMatchesRequest = isDeepStrictEqual(profile, expectedProfile);
40
+ if (!savedProfileMatchesRequest)
41
+ rejectModelProfileCollision();
42
+ const credential = await prepareModelCredential(options, provider.config, input.apiKey);
43
+ if (credential?.apiKey)
44
+ throw new ModelSetupError("model_credential_required", "The saved model's credential is missing. Restore its connection in Configuration before retrying.", 409);
45
+ await requireUnchangedRetryConfiguration(options, expectedRevision);
46
+ return modelSetupResult(provider, input);
47
+ }
@@ -0,0 +1,12 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import { ModelSetupService } from "./model-setup-service.js";
3
+ export declare class ModelSetupRoutes {
4
+ private readonly service;
5
+ constructor(service: ModelSetupService);
6
+ handle(params: {
7
+ method: string;
8
+ route: string;
9
+ request: IncomingMessage;
10
+ response: ServerResponse;
11
+ }): Promise<boolean>;
12
+ }
@@ -0,0 +1,50 @@
1
+ import { assertConfigMutationRequest, ConfigMutationRequestError, } from "./config-mutation-request.js";
2
+ import { readBody, readJsonBody, sendJson } from "./http.js";
3
+ import { ModelSetupError } from "./model-setup-input.js";
4
+ export class ModelSetupRoutes {
5
+ service;
6
+ constructor(service) {
7
+ this.service = service;
8
+ }
9
+ async handle(params) {
10
+ if (!["runtime/config/models", "runtime/config/models/setup"].includes(params.route))
11
+ return false;
12
+ params.response.setHeader("cache-control", "no-store");
13
+ try {
14
+ if (params.route === "runtime/config/models/setup" &&
15
+ params.method === "GET") {
16
+ sendJson(params.response, 200, {
17
+ ok: true,
18
+ ...(await this.service.catalog()),
19
+ });
20
+ }
21
+ else if (params.route === "runtime/config/models" &&
22
+ params.method === "POST") {
23
+ assertConfigMutationRequest(params.request);
24
+ const body = readJsonBody(await readBody(params.request, { maxBytes: 16_384 }));
25
+ sendJson(params.response, 200, {
26
+ ok: true,
27
+ ...(await this.service.add(body)),
28
+ });
29
+ }
30
+ else
31
+ sendJson(params.response, 405, {
32
+ ok: false,
33
+ error: "method_not_allowed",
34
+ });
35
+ }
36
+ catch (error) {
37
+ const known = error instanceof ModelSetupError ||
38
+ error instanceof ConfigMutationRequestError;
39
+ sendJson(params.response, known ? error.statusCode : 400, {
40
+ ok: false,
41
+ error: error instanceof ModelSetupError ? error.code : "model_setup_failed",
42
+ message: known
43
+ ? error.message
44
+ : "Model configuration could not be completed. Check the settings and try again.",
45
+ credentialSaved: error instanceof ModelSetupError && error.credentialSaved,
46
+ });
47
+ }
48
+ return true;
49
+ }
50
+ }
@@ -0,0 +1,30 @@
1
+ export declare class ModelSetupService {
2
+ private readonly options;
3
+ constructor(options: {
4
+ rootDir: string;
5
+ getConfigPath: () => string | undefined;
6
+ });
7
+ private sourceOptions;
8
+ catalog(): Promise<{
9
+ providers: {
10
+ id: string;
11
+ type: string;
12
+ label: string;
13
+ requiresApiKey: boolean;
14
+ credentialConfigured: boolean;
15
+ }[];
16
+ defaultContextWindowTokens: number;
17
+ profileIds: string[];
18
+ }>;
19
+ private canonicalOptions;
20
+ add(body: Record<string, unknown>): Promise<{
21
+ model: {
22
+ profileId: string;
23
+ providerId: string;
24
+ provider: string;
25
+ model: string;
26
+ };
27
+ restartRequired: true;
28
+ }>;
29
+ private save;
30
+ }
@@ -0,0 +1,93 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { realpath } from "node:fs/promises";
3
+ import { isAbsolute, relative } from "node:path";
4
+ import { mergeRuntimeModelAddition } from "../../../scripts/runtime-model-addition.js";
5
+ import { ConfigFileConflictError, withConfigFileTransaction, } from "../../runtime/adapters/config-file-transaction.js";
6
+ import { getConfigDashboardSnapshot, saveConfigDashboardFile, } from "../config-dashboard-backend.js";
7
+ import { getModelSetupCatalog, modelConfigMap, readModelSetupSource, } from "./model-setup-catalog.js";
8
+ import { ModelSetupError, parseModelSetupInput, } from "./model-setup-input.js";
9
+ import { planModelProvider, prepareModelCredential, saveModelCredential, } from "./model-setup-provider.js";
10
+ import { validateModelAddition } from "./model-setup-validation.js";
11
+ import { buildModelSetupProfile, modelSetupResult, } from "./model-setup-identity.js";
12
+ import { recoverCommittedModelAddition } from "./model-setup-retry.js";
13
+ function hasCommittedModelAddition(options, candidate) {
14
+ try {
15
+ return isDeepStrictEqual(readModelSetupSource(options).config, candidate);
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ export class ModelSetupService {
22
+ options;
23
+ constructor(options) {
24
+ this.options = options;
25
+ }
26
+ sourceOptions() {
27
+ return {
28
+ rootDir: this.options.rootDir,
29
+ configPath: this.options.getConfigPath(),
30
+ };
31
+ }
32
+ async catalog() {
33
+ return getModelSetupCatalog(await this.canonicalOptions());
34
+ }
35
+ async canonicalOptions() {
36
+ const source = readModelSetupSource(this.sourceOptions());
37
+ const options = {
38
+ rootDir: await realpath(this.options.rootDir),
39
+ configPath: await realpath(source.path),
40
+ };
41
+ const target = relative(options.rootDir, options.configPath);
42
+ if (target.startsWith("..") || isAbsolute(target))
43
+ throw new ModelSetupError("model_config_outside_workspace", "The selected configuration must be inside the workspace.", 409);
44
+ return options;
45
+ }
46
+ async add(body) {
47
+ const input = parseModelSetupInput(body);
48
+ const options = await this.canonicalOptions();
49
+ return withConfigFileTransaction(options.configPath, (transaction) => this.save(options, input, transaction));
50
+ }
51
+ async save(options, input, transaction) {
52
+ const source = readModelSetupSource(options);
53
+ const models = modelConfigMap(source.config.models);
54
+ const dashboard = await getConfigDashboardSnapshot(options);
55
+ const profileExists = dashboard.files.models.some((profile) => profile.id === input.profileId);
56
+ if (profileExists)
57
+ return recoverCommittedModelAddition(options, models, input, transaction.snapshot.revision);
58
+ const provider = planModelProvider(modelConfigMap(models.providers), input);
59
+ const profile = await buildModelSetupProfile(provider, input);
60
+ const candidate = mergeRuntimeModelAddition(source.config, {
61
+ profileId: input.profileId,
62
+ providerId: provider.id,
63
+ provider: provider.config,
64
+ profile,
65
+ }).config;
66
+ await validateModelAddition(candidate, options);
67
+ const credential = await prepareModelCredential(options, provider.config, input.apiKey);
68
+ let credentialSaved = false;
69
+ let configSaveAttempted = false;
70
+ try {
71
+ credentialSaved = await saveModelCredential(options, credential);
72
+ configSaveAttempted = true;
73
+ await saveConfigDashboardFile({
74
+ ...options,
75
+ kind: "runtime",
76
+ config: candidate,
77
+ transaction,
78
+ });
79
+ }
80
+ catch (error) {
81
+ if (error instanceof ModelSetupError)
82
+ throw error;
83
+ if (error instanceof ConfigFileConflictError)
84
+ throw new ModelSetupError("config_changed", error.message, 409, credentialSaved);
85
+ const modelCommitted = configSaveAttempted && hasCommittedModelAddition(options, candidate);
86
+ if (!modelCommitted)
87
+ throw new ModelSetupError("model_save_failed", credentialSaved
88
+ ? "The credential is saved, but the model save could not be confirmed. Refresh Configuration, then retry without re-entering the key if the model is missing."
89
+ : "The model save could not be confirmed. Refresh Configuration before trying again.", 500, credentialSaved);
90
+ }
91
+ return modelSetupResult(provider, input);
92
+ }
93
+ }
@@ -0,0 +1,5 @@
1
+ /** Staging beside the selected source preserves every existing relative reference. */
2
+ export declare function validateModelAddition(config: Record<string, unknown>, options: {
3
+ rootDir: string;
4
+ configPath: string;
5
+ }): Promise<void>;
@@ -0,0 +1,33 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { rm, writeFile } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import { loadRuntimeConfig } from "../../runtime/config.js";
5
+ import { isRecord } from "../../runtime/config/utils.js";
6
+ import { validateRuntimeConfigFile } from "../../runtime/config/validation.js";
7
+ /** Staging beside the selected source preserves every existing relative reference. */
8
+ export async function validateModelAddition(config, options) {
9
+ validateRuntimeConfigFile(config, options.configPath);
10
+ const temporary = join(dirname(options.configPath), `.model-addition-validation-${randomUUID()}.json`);
11
+ try {
12
+ await writeFile(temporary, JSON.stringify(config), {
13
+ encoding: "utf8",
14
+ mode: 0o600,
15
+ flag: "wx",
16
+ });
17
+ const environment = isRecord(config.environment) ? config.environment : {};
18
+ const profileIds = isRecord(environment.profiles)
19
+ ? Object.keys(environment.profiles)
20
+ : [];
21
+ const environments = profileIds.length ? profileIds : [undefined];
22
+ for (const profileId of environments)
23
+ loadRuntimeConfig({
24
+ rootDir: options.rootDir,
25
+ configPath: temporary,
26
+ profileId,
27
+ env: { ...process.env },
28
+ });
29
+ }
30
+ finally {
31
+ await rm(temporary, { force: true });
32
+ }
33
+ }
@@ -0,0 +1,14 @@
1
+ import type { ServerResponse } from "node:http";
2
+ export declare class PluginManagementRoutes {
3
+ private readonly options;
4
+ constructor(options: {
5
+ rootDir: string;
6
+ getConfigPath?: () => string | undefined;
7
+ });
8
+ handle(params: {
9
+ method: string;
10
+ route: string;
11
+ body: Record<string, unknown> | null;
12
+ response: ServerResponse;
13
+ }): Promise<boolean>;
14
+ }
@@ -0,0 +1,50 @@
1
+ import { getRuntimePluginSnapshot, PluginManagementError, setRuntimePluginEnabled, } from "../plugin-management-service.js";
2
+ import { sendJson } from "./http.js";
3
+ export class PluginManagementRoutes {
4
+ options;
5
+ constructor(options) {
6
+ this.options = options;
7
+ }
8
+ async handle(params) {
9
+ if (params.route !== "runtime/plugins")
10
+ return false;
11
+ const options = {
12
+ rootDir: this.options.rootDir,
13
+ configPath: this.options.getConfigPath?.(),
14
+ };
15
+ try {
16
+ if (params.method === "GET") {
17
+ sendJson(params.response, 200, {
18
+ ok: true,
19
+ ...getRuntimePluginSnapshot(options),
20
+ });
21
+ return true;
22
+ }
23
+ if (params.method === "PUT") {
24
+ const result = await setRuntimePluginEnabled(options, params.body);
25
+ sendJson(params.response, 200, { ok: true, ...result });
26
+ return true;
27
+ }
28
+ sendJson(params.response, 405, {
29
+ ok: false,
30
+ error: "method_not_allowed",
31
+ });
32
+ }
33
+ catch (error) {
34
+ if (error instanceof PluginManagementError) {
35
+ sendJson(params.response, error.statusCode, {
36
+ ok: false,
37
+ error: error.code,
38
+ message: error.message,
39
+ });
40
+ return true;
41
+ }
42
+ sendJson(params.response, 500, {
43
+ ok: false,
44
+ error: "plugin_management_failed",
45
+ message: "Plugin configuration could not be loaded or saved.",
46
+ });
47
+ }
48
+ return true;
49
+ }
50
+ }
@@ -0,0 +1,17 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { JsonObject, RuntimeEnvironment } from "./contracts.js";
3
+ type ProjectRouteRequest = {
4
+ method: string;
5
+ segments: readonly string[];
6
+ url: URL;
7
+ body: JsonObject | null;
8
+ environment: RuntimeEnvironment;
9
+ request: IncomingMessage;
10
+ response: ServerResponse;
11
+ };
12
+ /** Project management is an owner service; these routes only serialize it. */
13
+ export declare class ProjectRoutes {
14
+ handle(request: ProjectRouteRequest): Promise<boolean>;
15
+ private dispatch;
16
+ }
17
+ export {};
@@ -0,0 +1,93 @@
1
+ import { acceptConfigMutationRequest } from "./config-mutation-request.js";
2
+ import { getString, sendJson } from "./http.js";
3
+ function isProjectCollection(segments) {
4
+ return segments.length === 1;
5
+ }
6
+ function isProjectFolderListing(segments) {
7
+ if (segments.length !== 2)
8
+ return false;
9
+ return segments[1] === "folders";
10
+ }
11
+ function isProjectSessionCreation(segments) {
12
+ if (segments.length !== 3)
13
+ return false;
14
+ return segments[2] === "sessions";
15
+ }
16
+ function isProjectMutationRequest(method) {
17
+ return method === "POST";
18
+ }
19
+ function acceptProjectRequest(request) {
20
+ if (!isProjectMutationRequest(request.method))
21
+ return true;
22
+ return acceptConfigMutationRequest(request.request, request.response);
23
+ }
24
+ function projectErrorStatus(code) {
25
+ if (["project_not_found", "project_directory_unavailable"].includes(code))
26
+ return 404;
27
+ if (code === "project_directory_unreadable")
28
+ return 403;
29
+ if (code === "project_folder_cursor_stale")
30
+ return 409;
31
+ if (code === "projects_unavailable")
32
+ return 503;
33
+ return 400;
34
+ }
35
+ function sendProjectError(response, error) {
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ const code = error instanceof Error && "code" in error
38
+ ? String(error.code)
39
+ : "project_operation_failed";
40
+ sendJson(response, projectErrorStatus(code), {
41
+ ok: false,
42
+ error: code,
43
+ message,
44
+ });
45
+ }
46
+ /** Project management is an owner service; these routes only serialize it. */
47
+ export class ProjectRoutes {
48
+ async handle(request) {
49
+ if (request.segments[0] !== "projects")
50
+ return false;
51
+ if (!acceptProjectRequest(request))
52
+ return true;
53
+ try {
54
+ const service = request.environment.services.projects;
55
+ if (!service)
56
+ throw Object.assign(new Error("Projects are unavailable on this backend."), { code: "projects_unavailable" });
57
+ await this.dispatch(request, service);
58
+ }
59
+ catch (error) {
60
+ sendProjectError(request.response, error);
61
+ }
62
+ return true;
63
+ }
64
+ async dispatch(request, service) {
65
+ const { method, segments, body, response } = request;
66
+ if (method === "GET" && isProjectCollection(segments)) {
67
+ sendJson(response, 200, { ok: true, projects: await service.list() });
68
+ return;
69
+ }
70
+ if (method === "POST" && isProjectCollection(segments)) {
71
+ const project = await service.create({
72
+ directory: getString(body?.directory),
73
+ name: getString(body?.name),
74
+ });
75
+ sendJson(response, 201, { ok: true, project });
76
+ return;
77
+ }
78
+ if (method === "GET" && isProjectFolderListing(segments)) {
79
+ const page = await service.browseFolders({
80
+ path: getString(request.url.searchParams.get("path")),
81
+ cursor: getString(request.url.searchParams.get("cursor")),
82
+ });
83
+ sendJson(response, 200, { ok: true, ...page });
84
+ return;
85
+ }
86
+ if (method === "POST" && isProjectSessionCreation(segments)) {
87
+ const session = await service.createSession(segments[1]);
88
+ sendJson(response, 201, { ok: true, ...session });
89
+ return;
90
+ }
91
+ sendJson(response, 404, { ok: false, error: "not_found" });
92
+ }
93
+ }