@abot-ai/runtime 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. package/dist/plugins/system/source/application-catalog.d.ts +14 -0
  2. package/dist/plugins/system/source/application-catalog.js +185 -0
  3. package/dist/plugins/system/source/application-launch.d.ts +10 -0
  4. package/dist/plugins/system/source/application-launch.js +80 -0
  5. package/dist/plugins/system/source/application-observation.d.ts +25 -0
  6. package/dist/plugins/system/source/application-observation.js +53 -0
  7. package/dist/plugins/system/source/commands.d.ts +7 -0
  8. package/dist/plugins/system/source/commands.js +71 -0
  9. package/dist/plugins/system/source/companion/autostart.d.ts +16 -0
  10. package/dist/plugins/system/source/companion/autostart.js +146 -0
  11. package/dist/plugins/system/source/companion/broker-location.d.ts +11 -0
  12. package/dist/plugins/system/source/companion/broker-location.js +76 -0
  13. package/dist/plugins/system/source/companion/broker-server.d.ts +4 -0
  14. package/dist/plugins/system/source/companion/broker-server.js +147 -0
  15. package/dist/plugins/system/source/companion/connection.d.ts +25 -0
  16. package/dist/plugins/system/source/companion/connection.js +182 -0
  17. package/dist/plugins/system/source/companion/liveness.d.ts +3 -0
  18. package/dist/plugins/system/source/companion/liveness.js +20 -0
  19. package/dist/plugins/system/source/companion/native-address.d.ts +12 -0
  20. package/dist/plugins/system/source/companion/native-address.js +41 -0
  21. package/dist/plugins/system/source/companion/native-identity.d.ts +2 -0
  22. package/dist/plugins/system/source/companion/native-identity.js +23 -0
  23. package/dist/plugins/system/source/companion/native-messages.d.ts +9 -0
  24. package/dist/plugins/system/source/companion/native-messages.js +77 -0
  25. package/dist/plugins/system/source/companion/native-session.d.ts +19 -0
  26. package/dist/plugins/system/source/companion/native-session.js +205 -0
  27. package/dist/plugins/system/source/companion/native-state.d.ts +22 -0
  28. package/dist/plugins/system/source/companion/native-state.js +126 -0
  29. package/dist/plugins/system/source/companion/native-supervisor.d.ts +10 -0
  30. package/dist/plugins/system/source/companion/native-supervisor.js +93 -0
  31. package/dist/plugins/system/source/companion/pairing-store.d.ts +22 -0
  32. package/dist/plugins/system/source/companion/pairing-store.js +102 -0
  33. package/dist/plugins/system/source/companion/private-store.d.ts +4 -0
  34. package/dist/plugins/system/source/companion/private-store.js +59 -0
  35. package/dist/plugins/system/source/companion/process-owner-identity.d.ts +22 -0
  36. package/dist/plugins/system/source/companion/process-owner-identity.js +144 -0
  37. package/dist/plugins/system/source/companion/protocol.d.ts +57 -0
  38. package/dist/plugins/system/source/companion/protocol.js +66 -0
  39. package/dist/plugins/system/source/contracts.d.ts +38 -0
  40. package/dist/plugins/system/source/contracts.js +7 -0
  41. package/dist/plugins/system/source/elevation.d.ts +8 -0
  42. package/dist/plugins/system/source/elevation.js +57 -0
  43. package/dist/plugins/system/source/handlers.d.ts +3 -0
  44. package/dist/plugins/system/source/handlers.js +90 -0
  45. package/dist/plugins/system/source/host-evidence.d.ts +4 -0
  46. package/dist/plugins/system/source/host-evidence.js +52 -0
  47. package/dist/plugins/system/source/host-observation.d.ts +25 -0
  48. package/dist/plugins/system/source/host-observation.js +59 -0
  49. package/dist/plugins/system/source/process-result.d.ts +4 -0
  50. package/dist/plugins/system/source/process-result.js +86 -0
  51. package/dist/plugins/system/source/process-runner.d.ts +3 -0
  52. package/dist/plugins/system/source/process-runner.js +103 -0
  53. package/dist/plugins/system/source/target-observation.d.ts +18 -0
  54. package/dist/plugins/system/source/target-observation.js +29 -0
  55. package/dist/plugins/system/source/targets.d.ts +8 -0
  56. package/dist/plugins/system/source/targets.js +101 -0
  57. package/dist/scripts/add-runtime-model.js +10 -53
  58. package/dist/scripts/runtime-model-addition.d.ts +13 -0
  59. package/dist/scripts/runtime-model-addition.js +53 -0
  60. package/dist/scripts/runtime-setup-files.d.ts +3 -1
  61. package/dist/scripts/runtime-setup-files.js +18 -1
  62. package/dist/src/capabilities/file-output-presentation.d.ts +43 -0
  63. package/dist/src/capabilities/file-output-presentation.js +133 -0
  64. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +2 -0
  65. package/dist/src/capabilities/tool-definition-validator/event-input-text-options.d.ts +5 -0
  66. package/dist/src/capabilities/tool-definition-validator/event-input-text-options.js +37 -0
  67. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
  68. package/dist/src/capabilities/tool-definition-validator/module-registry.js +12 -0
  69. package/dist/src/capabilities/tool-event-input-text.d.ts +9 -0
  70. package/dist/src/capabilities/tool-event-input-text.js +64 -0
  71. package/dist/src/capabilities/tool-event-metadata.js +10 -0
  72. package/dist/src/capabilities/tool-executor.d.ts +1 -0
  73. package/dist/src/capabilities/tool-executor.js +1 -0
  74. package/dist/src/capabilities/tool-permission-mode.d.ts +7 -0
  75. package/dist/src/capabilities/tool-permission-mode.js +27 -0
  76. package/dist/src/capabilities/tool-types.d.ts +18 -2
  77. package/dist/src/cli/abot.js +18 -15
  78. package/dist/src/cli/host-companion-bundle.mjs +5201 -0
  79. package/dist/src/cli/host-companion-entry.d.ts +8 -0
  80. package/dist/src/cli/host-companion-entry.js +70 -0
  81. package/dist/src/cli/host-companion-startup.d.ts +4 -0
  82. package/dist/src/cli/host-companion-startup.js +35 -0
  83. package/dist/src/cli/host-companion.d.ts +5 -0
  84. package/dist/src/cli/host-companion.js +203 -0
  85. package/dist/src/model-gateway/server/configuration.js +4 -1
  86. package/dist/src/model-gateway/server/contracts.d.ts +2 -0
  87. package/dist/src/plugin-contract/entrypoint.d.ts +4 -2
  88. package/dist/src/plugin-contract/manifest.d.ts +1 -0
  89. package/dist/src/runtime/adapters/config-file-transaction.d.ts +46 -0
  90. package/dist/src/runtime/adapters/config-file-transaction.js +158 -0
  91. package/dist/src/runtime/adapters/configured-skill-provider.js +3 -3
  92. package/dist/src/runtime/adapters/in-memory-session-store.js +11 -1
  93. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +7 -3
  94. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +4 -1
  95. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.d.ts +1 -1
  96. package/dist/src/runtime/adapters/long-term-memory/file-lock/install.js +5 -1
  97. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-identity.d.ts +3 -0
  98. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-identity.js +15 -0
  99. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +2 -0
  100. package/dist/src/runtime/adapters/long-term-memory/onboarding-config-repository.js +17 -43
  101. package/dist/src/runtime/adapters/registered-tool-normal-invocations/catalog/registrations.js +6 -2
  102. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +10 -1
  103. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/execution-binding.d.ts +11 -0
  104. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/execution-binding.js +37 -0
  105. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/file-output-presentation.d.ts +7 -0
  106. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/file-output-presentation.js +105 -0
  107. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +29 -3
  108. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.d.ts +1 -0
  109. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/action-fingerprint.js +1 -0
  110. package/dist/src/runtime/capabilities/configured-tool-registry.js +9 -1
  111. package/dist/src/runtime/capabilities/file-output-root-identity.d.ts +5 -0
  112. package/dist/src/runtime/capabilities/file-output-root-identity.js +146 -0
  113. package/dist/src/runtime/capabilities/file-output-root-marker-creation.d.ts +5 -0
  114. package/dist/src/runtime/capabilities/file-output-root-marker-creation.js +63 -0
  115. package/dist/src/runtime/capabilities/request-bound-tool-registry.d.ts +1 -0
  116. package/dist/src/runtime/capabilities/request-bound-tool-registry.js +6 -1
  117. package/dist/src/runtime/capabilities/request-module-preparation.d.ts +3 -0
  118. package/dist/src/runtime/capabilities/request-module-preparation.js +102 -0
  119. package/dist/src/runtime/capabilities/request-permission-catalog.d.ts +10 -0
  120. package/dist/src/runtime/capabilities/request-permission-catalog.js +50 -0
  121. package/dist/src/runtime/capabilities/request-permission-tool-registry.d.ts +4 -0
  122. package/dist/src/runtime/capabilities/request-permission-tool-registry.js +61 -0
  123. package/dist/src/runtime/capabilities/request-runtime-tool-registry.d.ts +3 -0
  124. package/dist/src/runtime/capabilities/request-runtime-tool-registry.js +5 -2
  125. package/dist/src/runtime/capabilities/request-working-directory.d.ts +3 -0
  126. package/dist/src/runtime/capabilities/request-working-directory.js +12 -0
  127. package/dist/src/runtime/composition.d.ts +2 -0
  128. package/dist/src/runtime/config/runner/loader.d.ts +4 -0
  129. package/dist/src/runtime/config/runner/loader.js +23 -3
  130. package/dist/src/runtime/context/capability-brief-budget.d.ts +18 -0
  131. package/dist/src/runtime/context/capability-brief-budget.js +38 -0
  132. package/dist/src/runtime/context/capability-brief-readmission.d.ts +21 -0
  133. package/dist/src/runtime/context/capability-brief-readmission.js +47 -0
  134. package/dist/src/runtime/context/capability-brief.d.ts +9 -2
  135. package/dist/src/runtime/context/capability-brief.js +21 -39
  136. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -0
  137. package/dist/src/runtime/context/capability-descriptions.js +23 -0
  138. package/dist/src/runtime/default-environment-adapters.js +3 -4
  139. package/dist/src/runtime/local-application.d.ts +18 -0
  140. package/dist/src/runtime/local-application.js +12 -0
  141. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
  142. package/dist/src/runtime/local-host/app-service-dispatch.js +9 -0
  143. package/dist/src/runtime/local-host/client-services.d.ts +16 -0
  144. package/dist/src/runtime/local-host/client-services.js +3 -2
  145. package/dist/src/runtime/local-host/contracts.d.ts +4 -0
  146. package/dist/src/runtime/local-host/startup-connection.js +22 -7
  147. package/dist/src/runtime/local-host/transport.js +14 -2
  148. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +5 -2
  149. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
  150. package/dist/src/runtime/orchestration/role-calls/command-dispatch/work-plan-transition.d.ts +3 -0
  151. package/dist/src/runtime/orchestration/role-calls/command-dispatch/work-plan-transition.js +46 -0
  152. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
  153. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +8 -4
  154. package/dist/src/runtime/orchestration/role-calls/transactions.js +2 -0
  155. package/dist/src/runtime/orchestration/role-calls/work-plan-contracts.d.ts +48 -0
  156. package/dist/src/runtime/orchestration/role-calls/work-plan-contracts.js +9 -0
  157. package/dist/src/runtime/orchestration/role-calls/work-plan-source.d.ts +7 -0
  158. package/dist/src/runtime/orchestration/role-calls/work-plan-source.js +85 -0
  159. package/dist/src/runtime/orchestration/role-calls/work-plan-transactions.d.ts +3 -0
  160. package/dist/src/runtime/orchestration/role-calls/work-plan-transactions.js +17 -0
  161. package/dist/src/runtime/orchestration/role-calls/work-plan-validation.d.ts +10 -0
  162. package/dist/src/runtime/orchestration/role-calls/work-plan-validation.js +149 -0
  163. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +1 -1
  164. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  165. package/dist/src/runtime/plugins/compiled-catalog.d.ts +2 -1
  166. package/dist/src/runtime/plugins/configured-manifests.d.ts +3 -0
  167. package/dist/src/runtime/plugins/configured-manifests.js +37 -0
  168. package/dist/src/runtime/plugins/entrypoint-validation.d.ts +6 -0
  169. package/dist/src/runtime/plugins/entrypoint-validation.js +74 -0
  170. package/dist/src/runtime/plugins/loader.js +11 -123
  171. package/dist/src/runtime/plugins/manifest-discovery.d.ts +4 -1
  172. package/dist/src/runtime/plugins/manifest-discovery.js +8 -1
  173. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  174. package/dist/src/runtime/plugins/manifest-validator.js +7 -1
  175. package/dist/src/runtime/plugins/runtime-capability-plugins.d.ts +4 -0
  176. package/dist/src/runtime/plugins/runtime-capability-plugins.js +7 -0
  177. package/dist/src/runtime/plugins/selection.d.ts +14 -0
  178. package/dist/src/runtime/plugins/selection.js +38 -0
  179. package/dist/src/runtime/ports.d.ts +8 -2
  180. package/dist/src/runtime/projects/contracts.d.ts +40 -0
  181. package/dist/src/runtime/projects/contracts.js +10 -0
  182. package/dist/src/runtime/projects/folders.d.ts +7 -0
  183. package/dist/src/runtime/projects/folders.js +110 -0
  184. package/dist/src/runtime/projects/repository.d.ts +10 -0
  185. package/dist/src/runtime/projects/repository.js +54 -0
  186. package/dist/src/runtime/projects/service.d.ts +3 -0
  187. package/dist/src/runtime/projects/service.js +34 -0
  188. package/dist/src/runtime/projects/session-paths.d.ts +5 -0
  189. package/dist/src/runtime/projects/session-paths.js +13 -0
  190. package/dist/src/runtime/request/execution-agent-plan-update.d.ts +4 -0
  191. package/dist/src/runtime/request/execution-agent-plan-update.js +13 -0
  192. package/dist/src/runtime/request/execution-agent-root-execution.js +9 -1
  193. package/dist/src/runtime/request/handler.js +9 -2
  194. package/dist/src/runtime/request/input.d.ts +2 -1
  195. package/dist/src/runtime/request/input.js +1 -6
  196. package/dist/src/runtime/request/role-call-planner-events.js +4 -0
  197. package/dist/src/runtime/request/role-executor-composition.js +9 -1
  198. package/dist/src/runtime/request/root-contract.d.ts +6 -1
  199. package/dist/src/runtime/request/root-execution-kernel.js +17 -0
  200. package/dist/src/runtime/request/root-plan-event-projection.d.ts +3 -0
  201. package/dist/src/runtime/request/root-plan-event-projection.js +32 -0
  202. package/dist/src/runtime/request/root-plan-update.d.ts +15 -0
  203. package/dist/src/runtime/request/root-plan-update.js +20 -0
  204. package/dist/src/runtime/request/worker-capability-composition.d.ts +1 -0
  205. package/dist/src/runtime/request/worker-capability-composition.js +2 -0
  206. package/dist/src/runtime/runtime-environment.d.ts +1 -0
  207. package/dist/src/runtime/runtime-environment.js +2 -0
  208. package/dist/src/runtime/steps/auditor-decision/advisory-receipt.d.ts +32 -0
  209. package/dist/src/runtime/steps/auditor-decision/advisory-receipt.js +106 -0
  210. package/dist/src/runtime/steps/auditor-decision/advisory-result-budget.d.ts +5 -0
  211. package/dist/src/runtime/steps/auditor-decision/advisory-result-budget.js +40 -0
  212. package/dist/src/runtime/steps/auditor-decision/audit-input-state.d.ts +12 -0
  213. package/dist/src/runtime/steps/auditor-decision/audit-input-state.js +101 -0
  214. package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +31 -16
  215. package/dist/src/runtime/steps/auditor-decision/contracts.js +3 -3
  216. package/dist/src/runtime/steps/auditor-decision/evidence-binding.d.ts +5 -0
  217. package/dist/src/runtime/steps/auditor-decision/evidence-binding.js +43 -0
  218. package/dist/src/runtime/steps/auditor-decision/evidence-coverage.d.ts +2 -0
  219. package/dist/src/runtime/steps/auditor-decision/evidence-coverage.js +71 -0
  220. package/dist/src/runtime/steps/auditor-decision/evidence-inventory.d.ts +13 -0
  221. package/dist/src/runtime/steps/auditor-decision/evidence-inventory.js +89 -0
  222. package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +10 -0
  223. package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +56 -0
  224. package/dist/src/runtime/steps/auditor-decision/evidence-selection.d.ts +9 -0
  225. package/dist/src/runtime/steps/auditor-decision/evidence-selection.js +71 -0
  226. package/dist/src/runtime/steps/auditor-decision/format.js +44 -2
  227. package/dist/src/runtime/steps/auditor-decision/index.d.ts +3 -0
  228. package/dist/src/runtime/steps/auditor-decision/index.js +3 -0
  229. package/dist/src/runtime/steps/auditor-decision/input.d.ts +2 -2
  230. package/dist/src/runtime/steps/auditor-decision/input.js +64 -20
  231. package/dist/src/runtime/steps/auditor-decision/parser.js +38 -23
  232. package/dist/src/runtime/steps/auditor-decision/projection.js +49 -99
  233. package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
  234. package/dist/src/runtime/steps/auditor-decision/prompt.js +9 -4
  235. package/dist/src/runtime/steps/auditor-decision/run.js +79 -47
  236. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +8 -1
  237. package/dist/src/runtime/steps/execution-agent/contracts.js +2 -0
  238. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +4 -0
  239. package/dist/src/runtime/steps/execution-agent/format.js +4 -3
  240. package/dist/src/runtime/steps/execution-agent/input.js +10 -11
  241. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  242. package/dist/src/runtime/steps/execution-agent/prompt.js +11 -4
  243. package/dist/src/runtime/steps/execution-agent/state-context.js +10 -0
  244. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +18 -0
  245. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +86 -0
  246. package/dist/src/runtime/steps/execution-agent/work-plan-decision-parsing.d.ts +2 -0
  247. package/dist/src/runtime/steps/execution-agent/work-plan-decision-parsing.js +38 -0
  248. package/dist/src/runtime/steps/execution-agent/work-plan-sources.d.ts +6 -0
  249. package/dist/src/runtime/steps/execution-agent/work-plan-sources.js +54 -0
  250. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +40 -0
  251. package/dist/src/runtime/steps/planner-decision/capability-brief.js +47 -0
  252. package/dist/src/runtime/steps/planner-decision/input.d.ts +4 -2
  253. package/dist/src/runtime/steps/planner-decision/input.js +23 -13
  254. package/dist/src/runtime/steps/planner-decision/prompt.js +2 -2
  255. package/dist/src/runtime/steps/planner-decision/run.js +11 -7
  256. package/dist/src/runtime/steps/planner-graph/parser.js +0 -11
  257. package/dist/src/runtime/steps/planner-graph/prompt.js +2 -1
  258. package/dist/src/runtime/steps/supervisor-decision/capability-brief-readmission.d.ts +10 -0
  259. package/dist/src/runtime/steps/supervisor-decision/capability-brief-readmission.js +39 -0
  260. package/dist/src/runtime/steps/supervisor-decision/run.js +2 -1
  261. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.d.ts +3 -1
  262. package/dist/src/runtime/steps/worker-decision/parser/accepted-decision.js +20 -1
  263. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.d.ts +1 -1
  264. package/dist/src/runtime/steps/worker-decision/parser/capability-batch-validation.js +6 -6
  265. package/dist/src/runtime/steps/worker-decision/parser/capability-invocation-validation.js +2 -1
  266. package/dist/src/sessions/project-binding.d.ts +12 -0
  267. package/dist/src/sessions/project-binding.js +49 -0
  268. package/dist/src/sessions/record/projection.d.ts +6 -1
  269. package/dist/src/sessions/record/projection.js +1 -0
  270. package/dist/src/sessions/session-service.d.ts +2 -1
  271. package/dist/src/sessions/session-service.js +11 -1
  272. package/dist/src/sessions/types.d.ts +7 -0
  273. package/dist/src/web-ui/app/ARCHITECTURE.md +121 -1
  274. package/dist/src/web-ui/app/app-bootstrap.js +3 -0
  275. package/dist/src/web-ui/app/app-dom.js +3 -0
  276. package/dist/src/web-ui/app/app-state.js +38 -0
  277. package/dist/src/web-ui/app/app.js +76 -67
  278. package/dist/src/web-ui/app/components/config-workspace/config-model.js +23 -3
  279. package/dist/src/web-ui/app/components/config-workspace/dashboard-rendering.js +2 -0
  280. package/dist/src/web-ui/app/components/config-workspace/field-rendering.js +2 -0
  281. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +6 -0
  282. package/dist/src/web-ui/app/components/config-workspace/model-setup-entry.js +27 -0
  283. package/dist/src/web-ui/app/components/config-workspace/raw-config-repair.js +28 -0
  284. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +5 -0
  285. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +23 -3
  286. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +26 -8
  287. package/dist/src/web-ui/app/components/config-workspace/workspace-view.js +56 -0
  288. package/dist/src/web-ui/app/components/config-workspace.js +11 -0
  289. package/dist/src/web-ui/app/components/conversation-activity.d.ts +6 -0
  290. package/dist/src/web-ui/app/components/conversation-activity.js +10 -2
  291. package/dist/src/web-ui/app/components/conversation-file-action.js +33 -0
  292. package/dist/src/web-ui/app/components/conversation-file-focus.d.ts +12 -0
  293. package/dist/src/web-ui/app/components/conversation-file-focus.js +149 -0
  294. package/dist/src/web-ui/app/components/conversation-file-preview.d.ts +23 -0
  295. package/dist/src/web-ui/app/components/conversation-file-preview.js +247 -0
  296. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +6 -0
  297. package/dist/src/web-ui/app/components/conversation-role-cards.js +10 -2
  298. package/dist/src/web-ui/app/components/conversation-tool-evidence.d.ts +9 -0
  299. package/dist/src/web-ui/app/components/conversation-tool-evidence.js +129 -0
  300. package/dist/src/web-ui/app/components/conversation-tools.d.ts +6 -0
  301. package/dist/src/web-ui/app/components/conversation-tools.js +25 -105
  302. package/dist/src/web-ui/app/components/conversation-view.js +10 -1
  303. package/dist/src/web-ui/app/components/dashboard/workspace.js +19 -7
  304. package/dist/src/web-ui/app/components/model-setup/rendering.js +99 -0
  305. package/dist/src/web-ui/app/components/model-setup/save-flow.js +111 -0
  306. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +16 -0
  307. package/dist/src/web-ui/app/components/model-setup/validation.js +125 -0
  308. package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +44 -0
  309. package/dist/src/web-ui/app/components/model-setup/wizard.js +370 -0
  310. package/dist/src/web-ui/app/components/plugins/manager.js +200 -0
  311. package/dist/src/web-ui/app/components/plugins/rendering.js +124 -0
  312. package/dist/src/web-ui/app/components/plugins/view-state.js +123 -0
  313. package/dist/src/web-ui/app/components/project-creation.js +119 -0
  314. package/dist/src/web-ui/app/components/project-session-groups.js +95 -0
  315. package/dist/src/web-ui/app/components/runtime-config-activation.js +83 -0
  316. package/dist/src/web-ui/app/components/runtime-setup/bridge-guide.d.ts +9 -0
  317. package/dist/src/web-ui/app/components/runtime-setup/bridge-guide.js +198 -0
  318. package/dist/src/web-ui/app/components/runtime-setup/bridge-rendering.js +107 -0
  319. package/dist/src/web-ui/app/components/runtime-setup/commands.js +54 -0
  320. package/dist/src/web-ui/app/components/runtime-setup/configuration-recovery.js +25 -0
  321. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +154 -0
  322. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +71 -0
  323. package/dist/src/web-ui/app/components/runtime-setup/context-window.js +18 -0
  324. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.d.ts +15 -0
  325. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +87 -0
  326. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +30 -0
  327. package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +57 -0
  328. package/dist/src/web-ui/app/components/runtime-setup/embedding.js +284 -0
  329. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +117 -0
  330. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +173 -0
  331. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +141 -0
  332. package/dist/src/web-ui/app/components/runtime-setup/validation.js +69 -0
  333. package/dist/src/web-ui/app/components/runtime-setup/view-state.js +58 -0
  334. package/dist/src/web-ui/app/components/runtime-setup/wizard-shell.js +27 -0
  335. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +66 -5
  336. package/dist/src/web-ui/app/components/runtime-setup-guide.js +415 -461
  337. package/dist/src/web-ui/app/components/system-host/download.js +38 -0
  338. package/dist/src/web-ui/app/components/system-host/manager.js +249 -0
  339. package/dist/src/web-ui/app/components/system-host/rendering.js +88 -0
  340. package/dist/src/web-ui/app/components/system-host/setup-notice.js +87 -0
  341. package/dist/src/web-ui/app/components/system-host/visibility.js +35 -0
  342. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +4 -0
  343. package/dist/src/web-ui/app/components/tool-approval-card.js +15 -0
  344. package/dist/src/web-ui/app/configuration-environment-refresh.js +118 -0
  345. package/dist/src/web-ui/app/configuration-feature.js +125 -4
  346. package/dist/src/web-ui/app/controllers/app-event-bindings.js +2 -0
  347. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +1 -0
  348. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +4 -3
  349. package/dist/src/web-ui/app/controllers/conversation-file-preview-controller.d.ts +24 -0
  350. package/dist/src/web-ui/app/controllers/conversation-file-preview-controller.js +158 -0
  351. package/dist/src/web-ui/app/controllers/conversation-file-preview-feature.d.ts +19 -0
  352. package/dist/src/web-ui/app/controllers/conversation-file-preview-feature.js +63 -0
  353. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -0
  354. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +2 -0
  355. package/dist/src/web-ui/app/controllers/conversation-view-feature.js +28 -0
  356. package/dist/src/web-ui/app/controllers/dashboard-controller.js +17 -0
  357. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +45 -0
  358. package/dist/src/web-ui/app/controllers/projects-controller.js +278 -0
  359. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +3 -0
  360. package/dist/src/web-ui/app/controllers/runtime-onboarding-controller.js +13 -6
  361. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -1
  362. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +11 -95
  363. package/dist/src/web-ui/app/controllers/session-controller.js +64 -57
  364. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.d.ts +20 -0
  365. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +116 -0
  366. package/dist/src/web-ui/app/dashboard-feature.js +32 -10
  367. package/dist/src/web-ui/app/index.html +44 -7
  368. package/dist/src/web-ui/app/lib/conversation-file-preview.d.ts +12 -0
  369. package/dist/src/web-ui/app/lib/conversation-file-reference.d.ts +30 -0
  370. package/dist/src/web-ui/app/lib/conversation-file-reference.js +66 -0
  371. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +2 -0
  372. package/dist/src/web-ui/app/lib/tool-activity-event.js +18 -6
  373. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +2 -0
  374. package/dist/src/web-ui/app/lib/tool-activity-model.js +4 -2
  375. package/dist/src/web-ui/app/lib/tool-permission-mode.d.ts +16 -0
  376. package/dist/src/web-ui/app/lib/tool-permission-mode.js +60 -0
  377. package/dist/src/web-ui/app/lib/tool-process-activity-fields.js +102 -0
  378. package/dist/src/web-ui/app/projects-feature.js +134 -0
  379. package/dist/src/web-ui/app/runtime-onboarding-feature.d.ts +34 -0
  380. package/dist/src/web-ui/app/runtime-onboarding-feature.js +92 -0
  381. package/dist/src/web-ui/app/runtime-setup-page-lifecycle.d.ts +5 -0
  382. package/dist/src/web-ui/app/runtime-setup-page-lifecycle.js +13 -0
  383. package/dist/src/web-ui/app/services/client-preferences.d.ts +24 -0
  384. package/dist/src/web-ui/app/services/client-preferences.js +32 -19
  385. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +46 -0
  386. package/dist/src/web-ui/app/services/runtime-web-client/conversation-files.d.ts +28 -0
  387. package/dist/src/web-ui/app/services/runtime-web-client/conversation-files.js +75 -0
  388. package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +19 -0
  389. package/dist/src/web-ui/app/services/runtime-web-client/projects.js +34 -0
  390. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +27 -0
  391. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +52 -0
  392. package/dist/src/web-ui/app/services/runtime-web-client.js +35 -4
  393. package/dist/src/web-ui/app/styles/13-projects.css +272 -0
  394. package/dist/src/web-ui/app/styles/18-dashboard.css +0 -5
  395. package/dist/src/web-ui/app/styles/19-runtime-setup.css +411 -0
  396. package/dist/src/web-ui/app/styles/20-chat-composer.css +0 -384
  397. package/dist/src/web-ui/app/styles/29-conversation-file-preview.css +254 -0
  398. package/dist/src/web-ui/app/styles/37-runtime-activation.css +26 -0
  399. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +1 -10
  400. package/dist/src/web-ui/app/styles/41-plugin-management.css +351 -0
  401. package/dist/src/web-ui/app/styles/42-runtime-setup-plugins.css +179 -0
  402. package/dist/src/web-ui/app/styles/43-model-setup.css +73 -0
  403. package/dist/src/web-ui/app/styles/44-model-provider-cards.css +63 -0
  404. package/dist/src/web-ui/app/styles/45-bridge-setup.css +44 -0
  405. package/dist/src/web-ui/app/styles/46-system-host.css +132 -0
  406. package/dist/src/web-ui/app/styles.css +10 -0
  407. package/dist/src/web-ui/config-dashboard-backend.d.ts +5 -0
  408. package/dist/src/web-ui/config-dashboard-backend.js +94 -114
  409. package/dist/src/web-ui/config-dashboard-model-identity.d.ts +7 -0
  410. package/dist/src/web-ui/config-dashboard-model-identity.js +45 -0
  411. package/dist/src/web-ui/config-dashboard-save-transaction.d.ts +5 -0
  412. package/dist/src/web-ui/config-dashboard-save-transaction.js +21 -0
  413. package/dist/src/web-ui/environment-config.d.ts +17 -0
  414. package/dist/src/web-ui/environment-config.js +60 -0
  415. package/dist/src/web-ui/forwarded-loopback-policy.d.ts +2 -0
  416. package/dist/src/web-ui/forwarded-loopback-policy.js +14 -0
  417. package/dist/src/web-ui/local-runtime/api-router.d.ts +7 -0
  418. package/dist/src/web-ui/local-runtime/api-router.js +136 -12
  419. package/dist/src/web-ui/local-runtime/config-mutation-request.d.ts +8 -0
  420. package/dist/src/web-ui/local-runtime/config-mutation-request.js +55 -0
  421. package/dist/src/web-ui/local-runtime/configuration-activation-environments.d.ts +22 -0
  422. package/dist/src/web-ui/local-runtime/configuration-activation-environments.js +106 -0
  423. package/dist/src/web-ui/local-runtime/configuration-activation-source.d.ts +7 -0
  424. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +36 -0
  425. package/dist/src/web-ui/local-runtime/configuration-activation.d.ts +20 -0
  426. package/dist/src/web-ui/local-runtime/configuration-activation.js +107 -0
  427. package/dist/src/web-ui/local-runtime/contracts.d.ts +8 -0
  428. package/dist/src/web-ui/local-runtime/conversation-file-access.d.ts +30 -0
  429. package/dist/src/web-ui/local-runtime/conversation-file-access.js +131 -0
  430. package/dist/src/web-ui/local-runtime/conversation-file-content.d.ts +21 -0
  431. package/dist/src/web-ui/local-runtime/conversation-file-content.js +75 -0
  432. package/dist/src/web-ui/local-runtime/conversation-file-format.d.ts +12 -0
  433. package/dist/src/web-ui/local-runtime/conversation-file-format.js +87 -0
  434. package/dist/src/web-ui/local-runtime/conversation-file-native-open.d.ts +10 -0
  435. package/dist/src/web-ui/local-runtime/conversation-file-native-open.js +94 -0
  436. package/dist/src/web-ui/local-runtime/conversation-file-native-request.d.ts +4 -0
  437. package/dist/src/web-ui/local-runtime/conversation-file-native-request.js +72 -0
  438. package/dist/src/web-ui/local-runtime/conversation-file-routes.d.ts +11 -0
  439. package/dist/src/web-ui/local-runtime/conversation-file-routes.js +105 -0
  440. package/dist/src/web-ui/local-runtime/conversation-file-target.d.ts +14 -0
  441. package/dist/src/web-ui/local-runtime/conversation-file-target.js +158 -0
  442. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +14 -0
  443. package/dist/src/web-ui/local-runtime/environment-registry.js +121 -6
  444. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.d.ts +2 -1
  445. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +15 -10
  446. package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +17 -0
  447. package/dist/src/web-ui/local-runtime/model-setup-catalog.js +45 -0
  448. package/dist/src/web-ui/local-runtime/model-setup-identity.d.ts +16 -0
  449. package/dist/src/web-ui/local-runtime/model-setup-identity.js +20 -0
  450. package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +24 -0
  451. package/dist/src/web-ui/local-runtime/model-setup-input.js +107 -0
  452. package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +17 -0
  453. package/dist/src/web-ui/local-runtime/model-setup-provider.js +68 -0
  454. package/dist/src/web-ui/local-runtime/model-setup-retry.d.ts +14 -0
  455. package/dist/src/web-ui/local-runtime/model-setup-retry.js +47 -0
  456. package/dist/src/web-ui/local-runtime/model-setup-routes.d.ts +12 -0
  457. package/dist/src/web-ui/local-runtime/model-setup-routes.js +50 -0
  458. package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +30 -0
  459. package/dist/src/web-ui/local-runtime/model-setup-service.js +93 -0
  460. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +5 -0
  461. package/dist/src/web-ui/local-runtime/model-setup-validation.js +33 -0
  462. package/dist/src/web-ui/local-runtime/plugin-management-routes.d.ts +14 -0
  463. package/dist/src/web-ui/local-runtime/plugin-management-routes.js +50 -0
  464. package/dist/src/web-ui/local-runtime/project-routes.d.ts +17 -0
  465. package/dist/src/web-ui/local-runtime/project-routes.js +93 -0
  466. package/dist/src/web-ui/local-runtime/provider-credential-identity.d.ts +3 -0
  467. package/dist/src/web-ui/local-runtime/provider-credential-identity.js +18 -0
  468. package/dist/src/web-ui/local-runtime/request-execution.d.ts +1 -0
  469. package/dist/src/web-ui/local-runtime/request-execution.js +8 -0
  470. package/dist/src/web-ui/local-runtime/runtime-availability.js +36 -7
  471. package/dist/src/web-ui/local-runtime/runtime-setup-completion.d.ts +13 -0
  472. package/dist/src/web-ui/local-runtime/runtime-setup-completion.js +28 -0
  473. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +13 -0
  474. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +110 -0
  475. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.d.ts +4 -0
  476. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +21 -0
  477. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +14 -0
  478. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +148 -0
  479. package/dist/src/web-ui/local-runtime/runtime-setup-draft-recovery.d.ts +7 -0
  480. package/dist/src/web-ui/local-runtime/runtime-setup-draft-recovery.js +18 -0
  481. package/dist/src/web-ui/local-runtime/runtime-setup-draft.d.ts +21 -0
  482. package/dist/src/web-ui/local-runtime/runtime-setup-draft.js +105 -0
  483. package/dist/src/web-ui/local-runtime/runtime-setup-embedding-invalidation.d.ts +8 -0
  484. package/dist/src/web-ui/local-runtime/runtime-setup-embedding-invalidation.js +40 -0
  485. package/dist/src/web-ui/local-runtime/runtime-setup-environment-assignment.d.ts +1 -0
  486. package/dist/src/web-ui/local-runtime/runtime-setup-environment-assignment.js +27 -0
  487. package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +19 -0
  488. package/dist/src/web-ui/local-runtime/runtime-setup-input.js +82 -0
  489. package/dist/src/web-ui/local-runtime/runtime-setup-model-file.d.ts +7 -0
  490. package/dist/src/web-ui/local-runtime/runtime-setup-model-file.js +35 -0
  491. package/dist/src/web-ui/local-runtime/runtime-setup-provider-ownership-recovery.d.ts +4 -0
  492. package/dist/src/web-ui/local-runtime/runtime-setup-provider-ownership-recovery.js +23 -0
  493. package/dist/src/web-ui/local-runtime/runtime-setup-provider-retention.d.ts +11 -0
  494. package/dist/src/web-ui/local-runtime/runtime-setup-provider-retention.js +31 -0
  495. package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +11 -0
  496. package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +60 -0
  497. package/dist/src/web-ui/local-runtime/runtime-setup-receipt-file.d.ts +8 -0
  498. package/dist/src/web-ui/local-runtime/runtime-setup-receipt-file.js +77 -0
  499. package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +35 -0
  500. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +56 -0
  501. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.d.ts +17 -0
  502. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +229 -0
  503. package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +65 -0
  504. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +195 -0
  505. package/dist/src/web-ui/local-runtime/runtime-setup-validation.d.ts +8 -0
  506. package/dist/src/web-ui/local-runtime/runtime-setup-validation.js +35 -0
  507. package/dist/src/web-ui/local-runtime/saved-model-catalog.d.ts +3 -0
  508. package/dist/src/web-ui/local-runtime/saved-model-catalog.js +20 -0
  509. package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +8 -0
  510. package/dist/src/web-ui/local-runtime/setup-embedding-input.js +71 -0
  511. package/dist/src/web-ui/local-runtime/setup-embedding-provider.d.ts +13 -0
  512. package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +114 -0
  513. package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +12 -0
  514. package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +53 -0
  515. package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +32 -0
  516. package/dist/src/web-ui/local-runtime/setup-embedding-service.js +59 -0
  517. package/dist/src/web-ui/local-runtime-backend.d.ts +1 -0
  518. package/dist/src/web-ui/local-runtime-backend.js +3 -0
  519. package/dist/src/web-ui/plugin-capability-selection.d.ts +14 -0
  520. package/dist/src/web-ui/plugin-capability-selection.js +48 -0
  521. package/dist/src/web-ui/plugin-management-catalog.d.ts +26 -0
  522. package/dist/src/web-ui/plugin-management-catalog.js +56 -0
  523. package/dist/src/web-ui/plugin-management-selection.d.ts +16 -0
  524. package/dist/src/web-ui/plugin-management-selection.js +71 -0
  525. package/dist/src/web-ui/plugin-management-service.d.ts +29 -0
  526. package/dist/src/web-ui/plugin-management-service.js +150 -0
  527. package/dist/src/web-ui/request-authority.d.ts +8 -0
  528. package/dist/src/web-ui/request-authority.js +129 -0
  529. package/dist/src/web-ui/runtime-setup-gateway-address.d.ts +3 -0
  530. package/dist/src/web-ui/runtime-setup-gateway-address.js +26 -0
  531. package/dist/src/web-ui/runtime-setup-gateway.d.ts +29 -0
  532. package/dist/src/web-ui/runtime-setup-gateway.js +177 -0
  533. package/dist/src/web-ui/runtime-setup-shutdown.d.ts +2 -0
  534. package/dist/src/web-ui/runtime-setup-shutdown.js +20 -0
  535. package/dist/src/web-ui/server.d.ts +7 -14
  536. package/dist/src/web-ui/server.js +53 -63
  537. package/dist/src/web-ui/session-read-state/service.d.ts +12 -2
  538. package/dist/src/web-ui/system-host-service.d.ts +19 -0
  539. package/dist/src/web-ui/system-host-service.js +159 -0
  540. package/dist/src/web-ui/system-host-setup/companion-bundle.d.ts +2 -0
  541. package/dist/src/web-ui/system-host-setup/companion-bundle.js +12 -0
  542. package/dist/src/web-ui/system-host-setup/companion-macos.d.ts +2 -0
  543. package/dist/src/web-ui/system-host-setup/companion-macos.js +74 -0
  544. package/dist/src/web-ui/system-host-setup/companion-windows.d.ts +2 -0
  545. package/dist/src/web-ui/system-host-setup/companion-windows.js +105 -0
  546. package/dist/src/web-ui/system-host-setup/installer-contract.d.ts +18 -0
  547. package/dist/src/web-ui/system-host-setup/installer-contract.js +51 -0
  548. package/dist/src/web-ui/system-host-setup/installers.d.ts +6 -0
  549. package/dist/src/web-ui/system-host-setup/installers.js +30 -0
  550. package/dist/src/web-ui/system-host-setup/native-authorization.d.ts +3 -0
  551. package/dist/src/web-ui/system-host-setup/native-authorization.js +11 -0
  552. package/dist/src/web-ui/system-host-setup/node-distribution.d.ts +19 -0
  553. package/dist/src/web-ui/system-host-setup/node-distribution.js +9 -0
  554. package/dist/src/web-ui/system-host-setup/readiness.d.ts +18 -0
  555. package/dist/src/web-ui/system-host-setup/readiness.js +70 -0
  556. package/dist/src/web-ui/system-host-setup/routes.d.ts +20 -0
  557. package/dist/src/web-ui/system-host-setup/routes.js +121 -0
  558. package/dist/src/web-ui/system-host-setup/windows-script-wrapper.d.ts +2 -0
  559. package/dist/src/web-ui/system-host-setup/windows-script-wrapper.js +17 -0
  560. package/dist/src/web-ui/system-host-setup/wsl-interop-config.d.ts +3 -0
  561. package/dist/src/web-ui/system-host-setup/wsl-interop-config.js +67 -0
  562. package/dist/src/web-ui/system-host-setup/wsl-interop-windows.d.ts +1 -0
  563. package/dist/src/web-ui/system-host-setup/wsl-interop-windows.js +49 -0
  564. package/dist/src/web-ui/system-host-upgrade-authority.d.ts +5 -0
  565. package/dist/src/web-ui/system-host-upgrade-authority.js +13 -0
  566. package/docs/architecture.md +6 -1
  567. package/docs/installation.md +53 -17
  568. package/docs/known-limitations.md +14 -0
  569. package/docs/plugins.md +124 -19
  570. package/docs/projects-and-full-plus.md +218 -0
  571. package/docs/runtime-invariant-coverage.md +6 -3
  572. package/docs/runtime-prompt-policy-contracts.md +37 -5
  573. package/docs/runtime-public-contracts.md +17 -0
  574. package/package.json +5 -2
  575. package/plugins/exec/plugin.json +30 -9
  576. package/plugins/exec/skills/exec_process_skill/SKILL.md +1 -0
  577. package/plugins/exec/skills/exec_skill/SKILL.md +9 -10
  578. package/plugins/exec/source/handlers.ts +4 -38
  579. package/plugins/exec/source/paths.ts +53 -49
  580. package/plugins/exec/source/types.ts +6 -4
  581. package/plugins/exec/source/validation.ts +33 -198
  582. package/plugins/exec/src/index.cjs +62 -204
  583. package/plugins/filesystem/plugin.json +1 -1
  584. package/plugins/filesystem/skills/dev_view_skill/SKILL.md +7 -0
  585. package/plugins/filesystem/source/atomic-write.ts +6 -3
  586. package/plugins/filesystem/source/dev-view.ts +2 -1
  587. package/plugins/filesystem/source/directory-authority-write.ts +4 -0
  588. package/plugins/filesystem/source/edit-file.ts +3 -0
  589. package/plugins/filesystem/source/file-output-presentation.ts +42 -0
  590. package/plugins/filesystem/source/mutation-parent.ts +18 -9
  591. package/plugins/filesystem/source/view-locator.ts +141 -0
  592. package/plugins/filesystem/source/view-window.ts +12 -25
  593. package/plugins/filesystem/source/write-file.ts +8 -0
  594. package/plugins/filesystem/src/index.cjs +162 -35
  595. package/plugins/system/plugin.json +374 -0
  596. package/plugins/system/skills/system_actions/SKILL.md +31 -0
  597. package/plugins/system/source/application-catalog.ts +237 -0
  598. package/plugins/system/source/application-launch.ts +113 -0
  599. package/plugins/system/source/application-observation.ts +78 -0
  600. package/plugins/system/source/commands.ts +106 -0
  601. package/plugins/system/source/companion/autostart.ts +185 -0
  602. package/plugins/system/source/companion/broker-client.ts +183 -0
  603. package/plugins/system/source/companion/broker-location.ts +89 -0
  604. package/plugins/system/source/companion/broker-server.ts +169 -0
  605. package/plugins/system/source/companion/connection.ts +211 -0
  606. package/plugins/system/source/companion/liveness.ts +23 -0
  607. package/plugins/system/source/companion/native-address.ts +55 -0
  608. package/plugins/system/source/companion/native-identity.ts +26 -0
  609. package/plugins/system/source/companion/native-messages.ts +100 -0
  610. package/plugins/system/source/companion/native-session.ts +268 -0
  611. package/plugins/system/source/companion/native-state.ts +135 -0
  612. package/plugins/system/source/companion/native-supervisor.ts +98 -0
  613. package/plugins/system/source/companion/pairing-store.ts +110 -0
  614. package/plugins/system/source/companion/private-store.ts +58 -0
  615. package/plugins/system/source/companion/process-owner-identity.ts +190 -0
  616. package/plugins/system/source/companion/protocol.ts +108 -0
  617. package/plugins/system/source/contracts.ts +44 -0
  618. package/plugins/system/source/elevation.ts +88 -0
  619. package/plugins/system/source/handlers.ts +120 -0
  620. package/plugins/system/source/host-dispatch.ts +106 -0
  621. package/plugins/system/source/host-evidence.ts +72 -0
  622. package/plugins/system/source/host-observation.ts +66 -0
  623. package/plugins/system/source/index.ts +8 -0
  624. package/plugins/system/source/process-result.ts +111 -0
  625. package/plugins/system/source/process-runner.ts +104 -0
  626. package/plugins/system/source/request-system-modules.ts +117 -0
  627. package/plugins/system/source/request-target-snapshot.ts +163 -0
  628. package/plugins/system/source/target-observation.ts +43 -0
  629. package/plugins/system/source/targets.ts +147 -0
  630. package/plugins/system/src/index.cjs +1730 -0
  631. package/src/runtime/README.md +36 -8
  632. package/src/runtime/local-host/README.md +7 -0
  633. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.d.ts +0 -14
  634. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.js +0 -87
@@ -1,3 +1,4 @@
1
+ import type { SessionProject } from "./project-binding.js";
1
2
  import type { AgentMode } from "../shared/types.js";
2
3
  import type { RuntimeAttachmentReference } from "../shared/attachments.js";
3
4
  import type { SessionMemoryCheckpoint } from "./memory/contracts.js";
@@ -50,6 +51,8 @@ export type SessionRuntimeEvent = {
50
51
  export type SessionRequestRecord = {
51
52
  requestId: string;
52
53
  sessionId: string;
54
+ /** Absent for legacy records and records recreated by late event appends. */
55
+ generation?: string;
53
56
  status: SessionRequestStatus;
54
57
  createdAt: string;
55
58
  updatedAt: string;
@@ -68,10 +71,12 @@ export type SessionRequestFinalState = {
68
71
  export type SessionRequestReplay = {
69
72
  requestId: string;
70
73
  sessionId: string;
74
+ generation?: string;
71
75
  events: Record<string, unknown>[];
72
76
  finalState: SessionRequestFinalState | null;
73
77
  };
74
78
  export type SessionListItem = {
79
+ project?: SessionProject;
75
80
  id: string;
76
81
  title: string;
77
82
  createdAt: number;
@@ -110,6 +115,7 @@ export type SessionSnapshotRequest = {
110
115
  finalState: SessionRequestFinalState | null;
111
116
  };
112
117
  export type SessionSnapshot = {
118
+ project?: SessionProject;
113
119
  sessionId: string;
114
120
  title: string;
115
121
  messages: SessionSnapshotMessage[];
@@ -156,6 +162,7 @@ export type SessionMessage = {
156
162
  attachments?: RuntimeAttachmentReference[];
157
163
  };
158
164
  export type SessionRecord = {
165
+ project?: SessionProject;
159
166
  id: string;
160
167
  title: string;
161
168
  createdAt: string;
@@ -48,6 +48,17 @@ the completion-event boundary: tool output, canonical evidence and model context
48
48
  are unchanged. The Web UI does not fetch a file or memory record again to recreate
49
49
  historical evidence. Passive Runtime memory remains outside tool activity.
50
50
 
51
+ `tool-process-activity-fields.js` projects declared process display fields without
52
+ branching on tool identities. Opted-in commands retain up to 4,096 characters and
53
+ whitespace; shared `conversation-tool-evidence.js` renders them as inert
54
+ preformatted text in both activity and approval disclosures. Working
55
+ directory, target, exit code and recorded process evidence remain distinct from
56
+ model-authored intent. Result output stays a bounded excerpt, and completion or
57
+ exit zero does not establish an application window or independent outcome check.
58
+ Terminal failures preserve recorded result fields and clipping flags. Old events
59
+ without declared input/output evidence remain unavailable; the UI never guesses
60
+ commands from rationale or opaque parameter summaries.
61
+
51
62
  Web sources appear in a separate Activity section alongside role cards and the event timeline. `web-source-event.js` projects only successful `web_search` and `web_fetch` completions; `web-sources.js` validates bounded plugin receipts and groups them by recorded call. `conversation-sources.js` renders links and retrieval/presentation states without interpreting answer text. Source-bearing events retain their own identity before display grouping, and stored session events use the same projection as live events. Session switching clears them with the existing Activity state.
52
63
 
53
64
  The optional `meta.webSources` version 1 receipt describes the final bounded **tool output**, not whether a later model invocation consumed or cited it. Older events can show found/fetched URLs with unknown output visibility; absent or unsupported receipts never imply full content. Favicons are best-effort browser requests to the source origin's `/favicon.ico`, loaded lazily with no referrer and a local fallback. No third-party icon service or server proxy is used. Source URL policy rejects unsafe schemes and credentials, and prevents automatic image loads for local/private IP literals; origin DNS, redirects, cookies, and browser image policy remain browser concerns. Icons carry no evidence and never block tool execution.
@@ -80,6 +91,36 @@ The native conversation list uses the existing `SessionService` disk reader and
80
91
 
81
92
  Read-state persistence is an optional Web UI projection. `session-read-state/availability.ts` isolates sidecar failures from listing, loading, clearing and deleting conversations. A failure returns `readStateStatus: "unavailable"` and unknown counts, preserves the sidecar for diagnosis, and leaves read acknowledgements unsuccessful. The browser keeps the last known receipt, labels unavailable tracking explicitly and resumes normal counts after a healthy list refresh. Canonical session and attachment failures remain errors. Workspace visibility is committed before change callbacks attempt to acknowledge visible messages, including drawer closure and responsive layout changes.
82
93
 
94
+ ## Conversation file preview
95
+
96
+ `conversation-file-reference.js` projects only explicit successful file-output
97
+ receipts from tool events. Activity keeps this reference separate from the
98
+ historical sent/received fields and excerpt. `conversation-file-action.js` makes
99
+ the existing filename an inline preview control inside the tool summary. Its click suppresses disclosure activation;
100
+ other summary interactions retain the recorded evidence disclosure.
101
+
102
+ `conversation-file-preview-controller.js` owns scoped loading and stale-response
103
+ rejection. The feature adapter mounts the viewer outside the message subtree and
104
+ preserves conversation scroll while the layout changes. Session resets and
105
+ workspace departure close it; responsive focus and Escape behavior belong to
106
+ `conversation-file-focus.js`. Transport stays in the conversation-files service.
107
+
108
+ The local backend's `conversation-file-access.ts` admits only a saved or scoped
109
+ active completion belonging to the requested environment, session and request.
110
+ `conversation-file-target.ts` owns the held file and root/containment identity
111
+ checks shared by content reads and native opening. The route revalidates request
112
+ generation and completion before returning bytes or handing off to a Mac app.
113
+ `conversation-file-native-request.ts` limits native opening to same-origin JSON
114
+ POSTs from a local browser on macOS. `conversation-file-native-open.ts` restricts
115
+ file types and invokes the fixed OS opener without a shell. The viewer exposes
116
+ this action only when its preview response includes `nativeOpenAvailable: true`;
117
+ its controller scopes busy/failure feedback to the selected file. The OS app
118
+ resolves the original pathname after handoff; that asynchronous read is outside
119
+ the preview reader's held-descriptor guarantee. The receipt
120
+ is presentation-only: the optional filesystem report callback feeds event
121
+ metadata, never the canonical tool result or model context. No file registry or
122
+ historical content snapshot is created.
123
+
83
124
  ## Styles
84
125
 
85
126
  `styles.css` is the ordered manifest. The modules under `styles/` own:
@@ -97,7 +138,6 @@ Keep responsive overrides last and avoid moving declarations between modules wit
97
138
 
98
139
  Visual components may format or group events, but they never accept transport frames or construct Runtime API payloads. Realtime frame parsing belongs to `realtime-transport.js`; request sequence and terminal-state reduction belong to `realtime-event-controller.js`; endpoint construction and HTTP payload serialization belong to `runtime-web-client.js` and its feature request modules; and feature controllers own when those operations occur. Config remains explicit-save; presentation changes must never introduce autosave.
99
140
 
100
-
101
141
  ## Core schedules
102
142
 
103
143
  `schedules-feature.js` composes the scheduler browser feature from its controller,
@@ -125,3 +165,83 @@ run identity before activating the ordinary realtime request lifecycle. Duplicat
125
165
  trigger delivery cannot add another user message or reactivate a completed run.
126
166
  The scheduler page and chat card are presentation-only consumers; the runtime
127
167
  scheduler remains the sole owner of Job state and dispatch decisions.
168
+
169
+ ## Interactive setup and configuration activation
170
+
171
+ The setup guide composes focused rendering/validation modules and receives
172
+ configuration transport callbacks. Runtime onboarding retains catalog authority
173
+ over chat readiness. Home suppresses its dashboard data and shortcuts while
174
+ setup is required; the guide has one scroll owner in either Home or Chat.
175
+ OpenAI credentials live only in the current password input and one save payload.
176
+ They never enter browser state, HTML attributes, preferences or control logs.
177
+
178
+ The setup sequence is Provider, Connection, Embedding, Plugins and Ready.
179
+ The onboarding feature assembles transport dependencies outside app.js; focused
180
+ step modules own embedding and plugin card selection. Chat connection writes
181
+ defer activation in the wizard, while ordinary setup API callers retain their
182
+ existing immediate-activation behavior. The pending-activation gate keeps the
183
+ catalog unavailable until the explicit final apply, including browser reload in
184
+ the same Web process. Optional choices are read back from canonical saved files.
185
+
186
+ Embedding setup prepares only the requested provider and its private credential,
187
+ then delegates to the existing memory probe-before-save service. Probe dimensions
188
+ and fingerprints come from the provider response; the UI never invents them.
189
+ Provider preparation may survive a later probe failure, which is reported without
190
+ exposing credentials. The memory Web router resolves the current configuration
191
+ path per request so first-time setup uses local/runtime.config.json correctly.
192
+ Plugin cards reuse the existing manifest selection API, preserving sibling tools
193
+ and saved policies. Fresh installations start with all plugins and tools selected.
194
+ The onboarding plugin cards display every tool checkbox directly. Their dedicated
195
+ stylesheet widens only this step and keeps the outer workspace as the scroll owner.
196
+
197
+ Configuration composes a plugin manager using the canonical manifest selection
198
+ projection. The separate activation control explicitly applies saved files.
199
+ The server checks synchronous owner admission, refuses busy or externally owned
200
+ environments, and refreshes its gateway through the owning lifecycle callback.
201
+ Browser reload and saved selection are not evidence of live activation.
202
+
203
+ ### Additive model setup
204
+
205
+ Configuration composes a separate Provider / Model / Ready dialog in
206
+ components/model-setup/. It shares the wizard shell and connection form with
207
+ first setup, while retaining its own additive save/apply lifecycle. The dialog
208
+ is outside the dashboard so refresh and mutation locking cannot detach it.
209
+ An entered API key remains only in the mounted password field until final save;
210
+ review and back navigation do not copy it into state or markup.
211
+
212
+ configuration-feature.js guards opening against existing configuration drafts,
213
+ blocks workspace/environment navigation while the dialog is open, and holds the
214
+ external mutation lock during save, Apply and refresh. Saved model identity
215
+ survives Apply failure; successful Apply survives refresh failure. Completion
216
+ refreshes Memory provider choices and chat models, selects the new profile, and
217
+ focuses it only after closing the modal and releasing the lock.
218
+
219
+ local-runtime/model-setup-\* owns catalog/input/credential/addition behavior.
220
+ It uses the canonical configuration repository and shared CLI merge helper,
221
+ preserving existing profiles, references, defaults and connection settings.
222
+ Only new OpenAI/Ollama connections are created here; existing provider IDs are
223
+ resolved by adapter type. The transport exposes no secret values and requires
224
+ the same-origin JSON mutation guard. This flow does not invoke a model.
225
+
226
+ ## Projects and permission modes
227
+
228
+ `projects-feature.js` composes project UI; `projects-controller.js` owns project
229
+ and folder loading, creation and stale-response rejection. Presentation modules
230
+ render the creation form and sidebar groups, while `runtime-web-client/projects.js`
231
+ owns transport. The folder form occupies the chat canvas without resetting the
232
+ active conversation or draft. It closes the file viewer through its existing
233
+ presentation lifecycle. Creation calls the owner API; a saved project session is
234
+ opened through the canonical conversation controller without a model request.
235
+
236
+ The session controller remains the owner of session row actions and read state.
237
+ Its injected group renderer places project groups above ordinary conversations,
238
+ including projects with no sessions. The session's saved project snapshot also
239
+ provides the visible working-folder label. Neither project presentation nor client
240
+ request payloads overwrite global runtime paths.
241
+
242
+ `tool-permission-mode-controller.js` owns the permission selector and explicit
243
+ per-session preference changes; `lib/tool-permission-mode.js` owns known browser
244
+ values and server compatibility. FULL+ requires advertised server support, and
245
+ transport rejects unsupported requests without a silent downgrade. The existing
246
+ composer queue keeps its captured mode. Project membership never selects FULL+.
247
+ `app-state.js` constructs the same one shared browser state identity for `app.js`.
@@ -8,6 +8,7 @@ export async function bootstrapWebApp({
8
8
  homeComposer,
9
9
  dashboard,
10
10
  schedules,
11
+ projects,
11
12
  selection,
12
13
  client,
13
14
  bindables,
@@ -30,6 +31,7 @@ export async function bootstrapWebApp({
30
31
  renderMessages();
31
32
  state.config = await client.loadWebConfig();
32
33
  schedules.refreshAvailability();
34
+ projects?.refreshAvailability();
33
35
  selection.renderEnvironmentOptions();
34
36
  const options = selection.environmentOptions();
35
37
  const saved = preferences.environmentId();
@@ -42,6 +44,7 @@ export async function bootstrapWebApp({
42
44
  selection.renderAgentPicker();
43
45
  realtime.connect();
44
46
  await Promise.allSettled([
47
+ projects?.load(),
45
48
  selection.loadModels(),
46
49
  selection.loadAgentMode(),
47
50
  operations.loadRuntimeStatus(),
@@ -26,6 +26,8 @@ export function findAppDom(documentRoot = document) {
26
26
  environmentSelect: documentRoot.getElementById("environmentSelect"),
27
27
  agentPickerButton: documentRoot.getElementById("agentPickerButton"),
28
28
  agentPickerMenu: documentRoot.getElementById("agentPickerMenu"),
29
+ newProjectButton: documentRoot.getElementById("newProjectButton"),
30
+ projectCreationRoot: documentRoot.getElementById("projectCreationRoot"),
29
31
  newSessionButton: documentRoot.getElementById("newSessionButton"),
30
32
  refreshSessionsButton: documentRoot.getElementById("refreshSessionsButton"),
31
33
  closeSessionsButton: documentRoot.getElementById("closeSessionsButton"),
@@ -33,6 +35,7 @@ export function findAppDom(documentRoot = document) {
33
35
  sessionSearchInput: documentRoot.getElementById("sessionSearchInput"),
34
36
  sessionsCount: documentRoot.getElementById("sessionsCount"),
35
37
  sessionsList: documentRoot.getElementById("sessionsList"),
38
+ currentProjectContext: documentRoot.getElementById("currentProjectContext"),
36
39
  sessionTitle: documentRoot.getElementById("sessionTitle"),
37
40
  agentModeButton: documentRoot.getElementById("agentModeButton"),
38
41
  agentModeMenu: documentRoot.getElementById("agentModeMenu"),
@@ -0,0 +1,38 @@
1
+ export function createAppState() {
2
+ return {
3
+ config: null,
4
+ connected: false,
5
+ sessions: [],
6
+ pinnedSessionIds: [],
7
+ sessionModes: {},
8
+ sessionModels: {},
9
+ lastModelByEnvironment: {},
10
+ agentMode: "reasoning",
11
+ supportedAgentModes: ["fast", "reasoning", "deep", "auto"],
12
+ agentModeMenuOpen: false,
13
+ permissionModeMenuOpen: false,
14
+ agentPickerOpen: false,
15
+ busySessionIds: new Set(),
16
+ messages: [],
17
+ events: [],
18
+ taskProgressByRequest: new Map(),
19
+ contextWindowByRequest: new Map(),
20
+ submittedToolApprovalIds: new Set(),
21
+ requestMessages: new Map(),
22
+ currentSessionId: "",
23
+ activeRequestId: "",
24
+ sessionViewVersion: 0,
25
+ lastSeqByRequest: new Map(),
26
+ modelProfiles: [],
27
+ defaultModelProfileId: "",
28
+ runtimeAvailability: { status: "loading" },
29
+ pendingAttachments: [],
30
+ pendingAttachmentUploadCounts: new Map(),
31
+ composerAttachmentGeneration: 0,
32
+ composerSending: false,
33
+ composerQueueDrainingScopes: new Set(),
34
+ composerQueueRecoveredReleaseTokens: new Set(),
35
+ activeComposerQueueRecovery: null,
36
+ sessionQuery: "",
37
+ };
38
+ }
@@ -1,7 +1,13 @@
1
- import { captureComposerSubmissionScope, isCurrentComposerSubmissionScope } from "./lib/composer-submission-scope.js";
1
+ import { createAppState } from "./app-state.js";
2
+ import { createProjectsFeature } from "./projects-feature.js";
3
+ import {
4
+ captureComposerSubmissionScope,
5
+ isCurrentComposerSubmissionScope,
6
+ } from "./lib/composer-submission-scope.js";
2
7
  import { createComposerSurfaceController } from "./controllers/composer-surface-controller.js";
3
8
  import { bootstrapWebApp } from "./app-bootstrap.js";
4
- import { createConfigurationFeature } from "./configuration-feature.js";
9
+ import { bindRuntimeSetupPageLifecycle } from "./runtime-setup-page-lifecycle.js";
10
+ import { createConfigurationFeature } from "./configuration-environment-refresh.js";
5
11
  import { createDashboardFeature } from "./dashboard-feature.js";
6
12
  import { createComposerWorkspaceController } from "./controllers/composer-workspace-controller.js";
7
13
  import { createHomeComposerFeature } from "./controllers/home-composer-feature.js";
@@ -11,11 +17,11 @@ import { createSchedulesFeature } from "./schedules-feature.js";
11
17
  import { createWorkspaceShell } from "./components/workspace-shell.js";
12
18
  import { createComposerActions } from "./components/composer-actions.js";
13
19
  import { createModelSelector } from "./components/model-selector.js";
14
- import { createRuntimeSetupGuide } from "./components/runtime-setup-guide.js";
20
+ import { createRuntimeOnboardingFeature } from "./runtime-onboarding-feature.js";
15
21
  import { createSessionActionsMenu } from "./components/session-actions-menu.js";
16
22
  import { createToolApprovalCard } from "./components/tool-approval-card.js";
17
23
  import { textOf } from "./lib/text-format.js";
18
- import { createConversationView } from "./components/conversation-view.js";
24
+ import { createConversationViewFeature as createConversationView } from "./controllers/conversation-view-feature.js";
19
25
  import { createSessionComposerQueue } from "./lib/session-composer-queue.js";
20
26
  import { createRuntimeWebClient } from "./services/runtime-web-client.js";
21
27
  import { createClientPreferences } from "./services/client-preferences.js";
@@ -27,49 +33,13 @@ import { createComposerAttachmentsController } from "./controllers/composer-atta
27
33
  import { createComposerQueueController } from "./controllers/composer-queue-controller.js";
28
34
  import { createRealtimeEventController } from "./controllers/realtime-event-controller.js";
29
35
  import { createRuntimeSelectionController } from "./controllers/runtime-selection-controller.js";
30
- import { createRuntimeOnboardingController } from "./controllers/runtime-onboarding-controller.js";
31
36
  import { createAppEventBindings } from "./controllers/app-event-bindings.js";
32
37
  import { createConversationSessionController } from "./controllers/conversation-session-controller.js";
33
38
  import { createChatRequestController } from "./controllers/chat-request-controller.js";
34
39
  import { createToolApprovalController } from "./controllers/tool-approval-controller.js";
35
40
  import { createComposerSubmitController } from "./controllers/composer-submit-controller.js";
36
41
 
37
- const state = {
38
- config: null,
39
- connected: false,
40
- sessions: [],
41
- pinnedSessionIds: [],
42
- sessionModes: {},
43
- sessionModels: {},
44
- lastModelByEnvironment: {},
45
- agentMode: "reasoning",
46
- supportedAgentModes: ["fast", "reasoning", "deep", "auto"],
47
- agentModeMenuOpen: false,
48
- permissionModeMenuOpen: false,
49
- agentPickerOpen: false,
50
- busySessionIds: new Set(),
51
- messages: [],
52
- events: [],
53
- taskProgressByRequest: new Map(),
54
- contextWindowByRequest: new Map(),
55
- submittedToolApprovalIds: new Set(),
56
- requestMessages: new Map(),
57
- currentSessionId: "",
58
- activeRequestId: "",
59
- sessionViewVersion: 0,
60
- lastSeqByRequest: new Map(),
61
- modelProfiles: [],
62
- defaultModelProfileId: "",
63
- runtimeAvailability: { status: "loading" },
64
- pendingAttachments: [],
65
- pendingAttachmentUploadCounts: new Map(),
66
- composerAttachmentGeneration: 0,
67
- composerSending: false,
68
- composerQueueDrainingScopes: new Set(),
69
- composerQueueRecoveredReleaseTokens: new Set(),
70
- activeComposerQueueRecovery: null,
71
- sessionQuery: "",
72
- };
42
+ const state = createAppState();
73
43
 
74
44
  const dom = findAppDom();
75
45
 
@@ -89,6 +59,7 @@ let schedulesFeature;
89
59
  let dashboardFeature;
90
60
  let homeComposer;
91
61
  let runtimeSelection;
62
+ let projectsFeature;
92
63
  const operationsController = createOperationsController({
93
64
  dom,
94
65
  client: runtimeClient,
@@ -141,6 +112,9 @@ const shell = createWorkspaceShell({
141
112
  onWorkspaceChange: (workspace) => {
142
113
  runtimeSelection?.rememberModelSelection();
143
114
  homeComposer?.setWorkspace(workspace);
115
+ conversationView?.setWorkspace(workspace);
116
+ projectsFeature?.workspaceChanged(workspace);
117
+ runtimeSetupGuide.clearSecret();
144
118
  schedulesFeature?.setActive(workspace === "schedules");
145
119
  dashboardFeature?.setActive(workspace === "home");
146
120
  runtimeSelection?.applyModelSelection();
@@ -157,23 +131,21 @@ const shell = createWorkspaceShell({
157
131
  return configWorkspace.prepareDiscardChanges("leave configuration");
158
132
  },
159
133
  });
160
- const runtimeSetupGuide = createRuntimeSetupGuide({
161
- container: dom.runtimeSetupGuide,
162
- conversationRegion: dom.messagesList,
163
- copyText: (value) => navigator.clipboard.writeText(value),
164
- getSetupCommandMode: () => state.config?.setupCommandMode,
165
- });
166
- const runtimeOnboarding = createRuntimeOnboardingController({
167
- state,
168
- guide: runtimeSetupGuide,
169
- reloadModels: loadModels,
170
- setMessageStatus: setMessageActivityStatus,
171
- onStateChange: () => {
172
- updateComposerSendState();
173
- renderAttachmentComposer();
174
- dashboardFeature?.publish();
175
- },
176
- });
134
+ const { guide: runtimeSetupGuide, controller: runtimeOnboarding } =
135
+ createRuntimeOnboardingFeature({
136
+ dom,
137
+ runtimeClient,
138
+ selectedEnvironmentId,
139
+ state,
140
+ reloadModels: () => configWorkspace.reloadAppliedEnvironmentModels(),
141
+ reloadCatalog: loadModels,
142
+ setMessageStatus: setMessageActivityStatus,
143
+ onStateChange: () => {
144
+ updateComposerSendState();
145
+ renderAttachmentComposer();
146
+ dashboardFeature?.runtimeAvailabilityChanged();
147
+ },
148
+ });
177
149
 
178
150
  const composerActions = createComposerActions({
179
151
  dom,
@@ -200,6 +172,7 @@ dashboardFeature = createDashboardFeature({
200
172
  isComposerAvailable: runtimeOnboarding.isReady,
201
173
  });
202
174
  const composerWorkspace = createComposerWorkspaceController({
175
+ onSessionCreated: (sessionId) => runtimeSelection.initializeSessionMode(sessionId),
203
176
  state,
204
177
  dom,
205
178
  homeComposerHost: dashboardFeature.composerHost,
@@ -231,6 +204,7 @@ const sessionController = createSessionController({
231
204
  state,
232
205
  dom,
233
206
  sessionActionsMenu,
207
+ renderGroups: (input) => projectsFeature?.renderSessionGroups(input) ?? false,
234
208
  shell,
235
209
  preferences,
236
210
  client: runtimeClient,
@@ -276,12 +250,10 @@ const toolApprovalController = createToolApprovalController({
276
250
  createCard: createToolApprovalCard,
277
251
  });
278
252
  conversationView = createConversationView({
279
- dom: {
280
- messagesList: dom.messagesList,
281
- jumpToLatestButton: dom.jumpToLatestButton,
282
- composerContextWindow: dom.composerContextWindow,
283
- composerPlan: dom.composerPlan,
284
- },
253
+ dom,
254
+ filePreviewClient: runtimeClient,
255
+ getFileEnvironmentId: selectedEnvironmentId,
256
+ getFileSessionId: () => state.currentSessionId,
285
257
  getMessages: () => state.messages,
286
258
  getActiveRequestId: () => state.activeRequestId,
287
259
  isConnected: () => state.connected,
@@ -301,6 +273,7 @@ conversationView = createConversationView({
301
273
  canOpenSchedule: runtimeClient.supportsSchedules,
302
274
  });
303
275
  conversationSession = createConversationSessionController({
276
+ onSessionCreated: (sessionId) => runtimeSelection.initializeSessionMode(sessionId),
304
277
  state,
305
278
  dom,
306
279
  client: runtimeClient,
@@ -335,6 +308,23 @@ conversationSession = createConversationSessionController({
335
308
  isCurrentComposerScope: (scope) =>
336
309
  composerQueueController.isCurrentScope(scope),
337
310
  });
311
+ projectsFeature = createProjectsFeature({
312
+ onSessionCreated: (sessionId) => runtimeSelection.initializeSessionMode(sessionId),
313
+ dom,
314
+ state,
315
+ client: runtimeClient,
316
+ shell,
317
+ selectedEnvironmentId,
318
+ conversationSession,
319
+ renderSessions,
320
+ closeFilePreview: conversationView.closeFilePreview,
321
+ prepareConversation: () => {
322
+ const activate = shell.prepareWorkspaceActivation("chat", { focus: false });
323
+ if (!activate) return false;
324
+ if (!composerQueueController.suspendRecoveryForNavigation()) return false;
325
+ return activate() !== false;
326
+ },
327
+ });
338
328
  chatRequests = createChatRequestController({
339
329
  state,
340
330
  client: runtimeClient,
@@ -472,16 +462,24 @@ homeComposer = createHomeComposerFeature({
472
462
  updateComposerSendState,
473
463
  }),
474
464
  sendMessage: async (text) => {
475
- const scope = captureComposerSubmissionScope(state, selectedEnvironmentId());
465
+ const scope = captureComposerSubmissionScope(
466
+ state,
467
+ selectedEnvironmentId(),
468
+ );
476
469
  state.composerSending = true;
477
470
  updateComposerSendState();
478
471
  try {
479
472
  await chatRequests.sendMessage(text);
480
473
  } catch (error) {
481
- if (!isCurrentComposerSubmissionScope(scope, state, selectedEnvironmentId())) return;
474
+ if (
475
+ !isCurrentComposerSubmissionScope(scope, state, selectedEnvironmentId())
476
+ )
477
+ return;
482
478
  conversationSession.appendRequestError(error);
483
479
  } finally {
484
- if (isCurrentComposerSubmissionScope(scope, state, selectedEnvironmentId())) {
480
+ if (
481
+ isCurrentComposerSubmissionScope(scope, state, selectedEnvironmentId())
482
+ ) {
485
483
  state.composerSending = false;
486
484
  updateComposerSendState();
487
485
  }
@@ -489,6 +487,7 @@ homeComposer = createHomeComposerFeature({
489
487
  },
490
488
  });
491
489
  const appEventBindings = createAppEventBindings({
490
+ onSessionCreated: (sessionId) => runtimeSelection.initializeSessionMode(sessionId),
492
491
  state,
493
492
  dom,
494
493
  shell,
@@ -535,6 +534,9 @@ const appEventBindings = createAppEventBindings({
535
534
  });
536
535
 
537
536
  configWorkspace = createConfigurationFeature({
537
+ state,
538
+ selection: runtimeSelection,
539
+ onConfigurationApplied: loadModels,
538
540
  dom,
539
541
  runtimeClient,
540
542
  selectedEnvironmentId,
@@ -726,6 +728,11 @@ async function loadSystemHealth() {
726
728
 
727
729
  function bindEvents() {
728
730
  appEventBindings.bind();
731
+ bindRuntimeSetupPageLifecycle({
732
+ page: window,
733
+ dispose: runtimeSetupGuide.dispose,
734
+ reloadModels: loadModels,
735
+ });
729
736
  document.addEventListener(
730
737
  "visibilitychange",
731
738
  conversationSession.markCurrentSessionReadSoon,
@@ -748,10 +755,12 @@ void bootstrapWebApp({
748
755
  homeComposer,
749
756
  dashboard: dashboardFeature,
750
757
  schedules: schedulesFeature,
758
+ projects: projectsFeature,
751
759
  selection: runtimeSelection,
752
760
  client: runtimeClient,
753
761
  bindables: [
754
762
  sessionActionsMenu,
763
+ projectsFeature,
755
764
  conversationView,
756
765
  configWorkspace,
757
766
  composerActions,
@@ -1,6 +1,17 @@
1
+ import {
2
+ malformedConfigRaw,
3
+ configRequiresRawRepair,
4
+ } from "./raw-config-repair.js";
1
5
  import { textOf } from "../../lib/text-format.js";
2
6
 
3
- export const CONFIG_CATEGORIES = ["memory", "pipeline", "models", "advanced"];
7
+ export const CONFIG_CATEGORIES = [
8
+ "memory",
9
+ "pipeline",
10
+ "models",
11
+ "plugins",
12
+ "computer",
13
+ "advanced",
14
+ ];
4
15
 
5
16
  const DEFAULT_MODEL_EXECUTION_POLICY = "supervisor-worker-v1";
6
17
 
@@ -120,6 +131,7 @@ export function createConfigWorkspaceModel() {
120
131
  configDashboard: null,
121
132
  baselinesByKey: new Map(),
122
133
  rawDraftsByKey: new Map(),
134
+ appliedJsonRepairKeys: new Set(),
123
135
  savingKeys: new Set(),
124
136
  savedKeys: new Set(),
125
137
  expandedCalibrationKeys: new Set(),
@@ -165,11 +177,15 @@ export function createConfigWorkspaceModel() {
165
177
  function captureBaselines() {
166
178
  state.baselinesByKey.clear();
167
179
  state.rawDraftsByKey.clear();
180
+ state.appliedJsonRepairKeys.clear();
168
181
  state.savedKeys.clear();
169
182
  for (const file of configFileEntries()) {
170
183
  const key = configFileKey(file);
171
184
  state.baselinesByKey.set(key, cloneConfig(file.config));
172
- state.rawDraftsByKey.set(key, formattedConfig(file.config));
185
+ state.rawDraftsByKey.set(
186
+ key,
187
+ malformedConfigRaw(file) ?? formattedConfig(file.config),
188
+ );
173
189
  }
174
190
  }
175
191
 
@@ -178,6 +194,7 @@ export function createConfigWorkspaceModel() {
178
194
  }
179
195
 
180
196
  function isFileDirty(file) {
197
+ if (state.appliedJsonRepairKeys.has(configFileKey(file))) return true;
181
198
  const baseline = baselineFor(file);
182
199
  return baseline ? !configValuesEqual(file.config, baseline) : false;
183
200
  }
@@ -186,10 +203,13 @@ export function createConfigWorkspaceModel() {
186
203
  const key = configFileKey(file);
187
204
  return state.rawDraftsByKey.has(key)
188
205
  ? state.rawDraftsByKey.get(key)
189
- : formattedConfig(file.config);
206
+ : (malformedConfigRaw(file) ?? formattedConfig(file.config));
190
207
  }
191
208
 
192
209
  function hasRawDraftChanges(file) {
210
+ const appliedRepair = state.appliedJsonRepairKeys.has(configFileKey(file));
211
+ if (configRequiresRawRepair(file, appliedRepair))
212
+ return rawDraftFor(file) !== malformedConfigRaw(file);
193
213
  return rawConfigDraftHasChanges(rawDraftFor(file), file.config);
194
214
  }
195
215
 
@@ -1,3 +1,4 @@
1
+ import { configRepairGuidance } from "./raw-config-repair.js";
1
2
  import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
2
3
 
3
4
  export function createConfigDashboardRendering({
@@ -78,6 +79,7 @@ export function createConfigDashboardRendering({
78
79
  >Save file</button>
79
80
  </div>
80
81
  </div>
82
+ <p id="configRawRepairGuidance" class="error-text" ${configRepairGuidance(file) ? "" : "hidden"}>${escapeHtml(configRepairGuidance(file))}</p>
81
83
  <textarea
82
84
  id="configRawEditor"
83
85
  class="config-view"
@@ -1,3 +1,4 @@
1
+ import { malformedConfigRaw } from "./raw-config-repair.js";
1
2
  import { escapeAttribute, escapeHtml, textOf } from "../../lib/text-format.js";
2
3
  import {
3
4
  isConfigObject,
@@ -224,6 +225,7 @@ export function createConfigFieldRendering({
224
225
  if (hasRawDraftChanges(file)) return "Raw draft not applied";
225
226
  if (isFileDirty(file)) return "Unsaved changes";
226
227
  if (state.savedKeys.has(key)) return "Saved";
228
+ if (malformedConfigRaw(file) !== undefined) return "Invalid JSON";
227
229
  return "Clean";
228
230
  }
229
231
 
@@ -1,3 +1,4 @@
1
+ import { configRequiresRawRepair } from "./raw-config-repair.js";
1
2
  import { escapeAttribute, escapeHtml, textOf } from "../../lib/text-format.js";
2
3
  import { isConfigObject } from "./config-model.js";
3
4
 
@@ -152,6 +153,11 @@ export function createConfigModelRendering({
152
153
  return '<div class="empty-state compact">No model configs found</div>';
153
154
  }
154
155
  state.selectedConfigModelId = model.id;
156
+ if (configRequiresRawRepair(
157
+ model,
158
+ state.appliedJsonRepairKeys.has(configFileKey(model)),
159
+ ))
160
+ return '<p class="error-text">Repair this linked file in Advanced → Raw JSON before editing model settings.</p>';
155
161
  const calibration = isConfigObject(model.config?.calibration)
156
162
  ? model.config.calibration
157
163
  : {};