@abot-ai/runtime 1.9.0 → 2.0.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 (506) hide show
  1. package/README.md +5 -1
  2. package/dist/scripts/add-runtime-model.js +11 -5
  3. package/dist/scripts/init-runtime.js +15 -10
  4. package/dist/scripts/runtime-model-addition.js +6 -1
  5. package/dist/scripts/runtime-setup-command-options.d.ts +11 -0
  6. package/dist/scripts/runtime-setup-command-options.js +41 -0
  7. package/dist/scripts/runtime-setup-files.d.ts +3 -2
  8. package/dist/scripts/runtime-setup-files.js +19 -4
  9. package/dist/scripts/runtime-setup-model-options.d.ts +8 -0
  10. package/dist/scripts/runtime-setup-model-options.js +40 -0
  11. package/dist/scripts/runtime-setup-presentation.js +2 -2
  12. package/dist/scripts/runtime-setup-provider-options.d.ts +4 -0
  13. package/dist/scripts/runtime-setup-provider-options.js +20 -0
  14. package/dist/src/model-gateway/client/contracts.d.ts +3 -0
  15. package/dist/src/model-gateway/client/input-token-count.js +36 -16
  16. package/dist/src/model-gateway/client/message-projection.d.ts +2 -0
  17. package/dist/src/model-gateway/client/message-projection.js +1 -0
  18. package/dist/src/model-gateway/client/options.js +1 -1
  19. package/dist/src/model-gateway/client/raw.js +1 -0
  20. package/dist/src/model-gateway/index.d.ts +1 -1
  21. package/dist/src/model-gateway/observability/input-token-count-diagnostics.d.ts +26 -0
  22. package/dist/src/model-gateway/observability/input-token-count-diagnostics.js +178 -0
  23. package/dist/src/model-gateway/policy/invocation-policy.d.ts +1 -3
  24. package/dist/src/model-gateway/policy/invocation-policy.js +3 -30
  25. package/dist/src/model-gateway/policy/reasoning-mode-budget.d.ts +5 -0
  26. package/dist/src/model-gateway/policy/reasoning-mode-budget.js +13 -0
  27. package/dist/src/model-gateway/policy/reasoning-policy.d.ts +10 -0
  28. package/dist/src/model-gateway/policy/reasoning-policy.js +124 -0
  29. package/dist/src/model-gateway/protocol/openai-embedding-response.d.ts +1 -0
  30. package/dist/src/model-gateway/protocol/openai-embedding-response.js +28 -0
  31. package/dist/src/model-gateway/protocol/sse-data.d.ts +9 -0
  32. package/dist/src/model-gateway/protocol/sse-data.js +67 -0
  33. package/dist/src/model-gateway/providers/envelope-budget.js +10 -1
  34. package/dist/src/model-gateway/providers/llamacpp/adapter.d.ts +2 -0
  35. package/dist/src/model-gateway/providers/llamacpp/adapter.js +79 -0
  36. package/dist/src/model-gateway/providers/llamacpp/connection.d.ts +9 -0
  37. package/dist/src/model-gateway/providers/llamacpp/connection.js +73 -0
  38. package/dist/src/model-gateway/providers/llamacpp/diagnostics.d.ts +2 -0
  39. package/dist/src/model-gateway/providers/llamacpp/diagnostics.js +17 -0
  40. package/dist/src/model-gateway/providers/llamacpp/embeddings.d.ts +2 -0
  41. package/dist/src/model-gateway/providers/llamacpp/embeddings.js +56 -0
  42. package/dist/src/model-gateway/providers/llamacpp/input-token-count.d.ts +3 -0
  43. package/dist/src/model-gateway/providers/llamacpp/input-token-count.js +59 -0
  44. package/dist/src/model-gateway/providers/llamacpp/message-projection.d.ts +2 -0
  45. package/dist/src/model-gateway/providers/llamacpp/message-projection.js +33 -0
  46. package/dist/src/model-gateway/providers/llamacpp/payload.d.ts +2 -0
  47. package/dist/src/model-gateway/providers/llamacpp/payload.js +44 -0
  48. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.d.ts +1 -0
  49. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.js +56 -0
  50. package/dist/src/model-gateway/providers/llamacpp/schema-format.d.ts +2 -0
  51. package/dist/src/model-gateway/providers/llamacpp/schema-format.js +29 -0
  52. package/dist/src/model-gateway/providers/llamacpp/settings.d.ts +9 -0
  53. package/dist/src/model-gateway/providers/llamacpp/settings.js +25 -0
  54. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.d.ts +10 -0
  55. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.js +85 -0
  56. package/dist/src/model-gateway/providers/llamacpp/stream.d.ts +9 -0
  57. package/dist/src/model-gateway/providers/llamacpp/stream.js +33 -0
  58. package/dist/src/model-gateway/providers/openai/embeddings.js +2 -29
  59. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +1 -9
  60. package/dist/src/model-gateway/providers/openai/sse-data.js +1 -67
  61. package/dist/src/model-gateway/providers/registry.js +2 -0
  62. package/dist/src/model-gateway/server/input-token-count-handler.js +10 -1
  63. package/dist/src/model-gateway/types.d.ts +11 -1
  64. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.d.ts +4 -0
  65. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.js +11 -0
  66. package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +28 -1
  67. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +1 -0
  68. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +6 -1
  69. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/contracts.d.ts +1 -0
  70. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.d.ts +1 -0
  71. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +2 -0
  72. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
  73. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +2 -0
  74. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
  75. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +1 -0
  76. package/dist/src/runtime/adapters/registered-tool-worker-capabilities.js +1 -0
  77. package/dist/src/runtime/adapters/scheduler-runtime.js +2 -0
  78. package/dist/src/runtime/automations/agent-step-executor.js +1 -0
  79. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  80. package/dist/src/runtime/automations/catalog.js +2 -0
  81. package/dist/src/runtime/automations/definition-contracts.d.ts +2 -0
  82. package/dist/src/runtime/automations/definition-input.js +3 -1
  83. package/dist/src/runtime/automations/draft-mutations.js +5 -1
  84. package/dist/src/runtime/automations/model-dependency-projection.d.ts +3 -1
  85. package/dist/src/runtime/automations/model-dependency-projection.js +4 -2
  86. package/dist/src/runtime/automations/publication-validation.js +7 -0
  87. package/dist/src/runtime/automations/saved-agent-management.js +1 -0
  88. package/dist/src/runtime/automations/service.d.ts +3 -0
  89. package/dist/src/runtime/capabilities/automation-builder/payload-schema.js +7 -5
  90. package/dist/src/runtime/capabilities/automations/authoring-catalog.d.ts +9 -0
  91. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -0
  92. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +3 -0
  93. package/dist/src/runtime/capabilities/automations/tool-contract.js +3 -2
  94. package/dist/src/runtime/capabilities/automations/tool-module.js +16 -7
  95. package/dist/src/runtime/capabilities/model-reasoning-controls.d.ts +23 -0
  96. package/dist/src/runtime/capabilities/model-reasoning-controls.js +56 -0
  97. package/dist/src/runtime/capabilities/scheduling/create-operations.js +2 -0
  98. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +1 -0
  99. package/dist/src/runtime/capabilities/scheduling/tool-module.js +5 -2
  100. package/dist/src/runtime/capabilities/scheduling/update-operations.js +2 -0
  101. package/dist/src/runtime/config/builders.js +6 -0
  102. package/dist/src/runtime/config/effective-model-config-validation.js +4 -0
  103. package/dist/src/runtime/config/llamacpp-profile-validation.d.ts +3 -0
  104. package/dist/src/runtime/config/llamacpp-profile-validation.js +15 -0
  105. package/dist/src/runtime/config/model-reasoning-schema.d.ts +40 -0
  106. package/dist/src/runtime/config/model-reasoning-schema.js +38 -0
  107. package/dist/src/runtime/config/model-reasoning-validation.d.ts +3 -0
  108. package/dist/src/runtime/config/model-reasoning-validation.js +37 -0
  109. package/dist/src/runtime/config/runner/step-instructions.d.ts +4 -0
  110. package/dist/src/runtime/config/runner/step-instructions.js +10 -6
  111. package/dist/src/runtime/config/schema.js +3 -0
  112. package/dist/src/runtime/config/validation/model-invocation-config-validation.js +14 -0
  113. package/dist/src/runtime/context/compacted-capability-result-receipt.d.ts +2 -0
  114. package/dist/src/runtime/context/compacted-capability-result-receipt.js +8 -7
  115. package/dist/src/runtime/context/execution-compacted-evidence.d.ts +4 -0
  116. package/dist/src/runtime/context/execution-compacted-evidence.js +2 -23
  117. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.d.ts +19 -0
  118. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.js +104 -0
  119. package/dist/src/runtime/context/model-step-compaction-inheritance.d.ts +12 -0
  120. package/dist/src/runtime/context/model-step-compaction-inheritance.js +28 -0
  121. package/dist/src/runtime/context/model-step-compaction-projection.d.ts +12 -0
  122. package/dist/src/runtime/context/model-step-compaction-projection.js +322 -0
  123. package/dist/src/runtime/context/model-step-compaction.d.ts +2 -1
  124. package/dist/src/runtime/context/model-step-compaction.js +25 -316
  125. package/dist/src/runtime/context/operation-supervision-compacted-evidence.js +7 -1
  126. package/dist/src/runtime/context/request-context.d.ts +2 -0
  127. package/dist/src/runtime/context/request-context.js +16 -0
  128. package/dist/src/runtime/context/request-tool-results-checkpoint.d.ts +2 -1
  129. package/dist/src/runtime/context/request-tool-results-checkpoint.js +35 -6
  130. package/dist/src/runtime/context/request-tool-results.js +3 -1
  131. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.d.ts +5 -1
  132. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.js +10 -4
  133. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.d.ts +4 -0
  134. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.js +38 -0
  135. package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +3 -1
  136. package/dist/src/runtime/context/semantic-compaction/generation-input.js +15 -10
  137. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.d.ts +8 -0
  138. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.js +76 -0
  139. package/dist/src/runtime/context/semantic-compaction/replacement-budget.js +3 -1
  140. package/dist/src/runtime/context/semantic-compaction/run.js +6 -12
  141. package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +1 -1
  142. package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +20 -2
  143. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.d.ts +2 -0
  144. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.js +27 -0
  145. package/dist/src/runtime/knowledge-skills/catalog.js +2 -0
  146. package/dist/src/runtime/local-application.d.ts +5 -0
  147. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -1
  148. package/dist/src/runtime/local-host/app-service-dispatch.js +2 -0
  149. package/dist/src/runtime/local-host/client-services.d.ts +5 -0
  150. package/dist/src/runtime/local-host/saved-approvals.js +1 -0
  151. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +5 -7
  152. package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +26 -0
  153. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.d.ts +1 -0
  154. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.js +8 -0
  155. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.d.ts +17 -0
  156. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.js +77 -0
  157. package/dist/src/runtime/long-term-memory/onboarding/service.js +40 -10
  158. package/dist/src/runtime/model/input-token-count.js +1 -0
  159. package/dist/src/runtime/model/invoke-step.js +12 -0
  160. package/dist/src/runtime/model/invoke-structured-step.d.ts +4 -1
  161. package/dist/src/runtime/model/invoke-structured-step.js +4 -0
  162. package/dist/src/runtime/model/model-catalog.d.ts +3 -0
  163. package/dist/src/runtime/model/model-catalog.js +2 -0
  164. package/dist/src/runtime/model/model-context-budget.d.ts +5 -0
  165. package/dist/src/runtime/model/model-context-budget.js +2 -0
  166. package/dist/src/runtime/model/model-step-port.d.ts +7 -0
  167. package/dist/src/runtime/model/optional-context-admission.d.ts +18 -0
  168. package/dist/src/runtime/model/optional-context-admission.js +23 -0
  169. package/dist/src/runtime/ports.d.ts +3 -1
  170. package/dist/src/runtime/projects/contracts.d.ts +6 -0
  171. package/dist/src/runtime/projects/registry-format.d.ts +3 -0
  172. package/dist/src/runtime/projects/registry-format.js +50 -0
  173. package/dist/src/runtime/projects/repository.d.ts +6 -3
  174. package/dist/src/runtime/projects/repository.js +26 -19
  175. package/dist/src/runtime/projects/service.js +11 -0
  176. package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
  177. package/dist/src/runtime/request/approval-wait/snapshot.d.ts +1 -1
  178. package/dist/src/runtime/request/approval-wait/snapshot.js +1 -0
  179. package/dist/src/runtime/request/contracts.d.ts +5 -1
  180. package/dist/src/runtime/request/execution-facets.js +2 -0
  181. package/dist/src/runtime/request/execution-payload-artifact-policy.d.ts +3 -0
  182. package/dist/src/runtime/request/execution-payload-artifact-policy.js +6 -0
  183. package/dist/src/runtime/request/execution-payload-compacted-evidence.js +1 -0
  184. package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
  185. package/dist/src/runtime/request/execution-scope-surfaces.js +3 -0
  186. package/dist/src/runtime/request/execution-scope.d.ts +2 -0
  187. package/dist/src/runtime/request/execution-scope.js +2 -0
  188. package/dist/src/runtime/request/input.d.ts +1 -0
  189. package/dist/src/runtime/request/input.js +1 -0
  190. package/dist/src/runtime/request/prepared-execution.d.ts +1 -0
  191. package/dist/src/runtime/request/prepared-execution.js +3 -0
  192. package/dist/src/runtime/request/reasoning-preference.d.ts +10 -0
  193. package/dist/src/runtime/request/reasoning-preference.js +29 -0
  194. package/dist/src/runtime/request/root-reference-action.js +3 -3
  195. package/dist/src/runtime/request/root-skill-read-admission.d.ts +4 -0
  196. package/dist/src/runtime/request/root-skill-read-admission.js +14 -0
  197. package/dist/src/runtime/request/root-skill-read.js +13 -5
  198. package/dist/src/runtime/request/supervisor-skill-selection-window.d.ts +16 -0
  199. package/dist/src/runtime/request/supervisor-skill-selection-window.js +17 -0
  200. package/dist/src/runtime/request/worker-capability-composition.js +2 -0
  201. package/dist/src/runtime/scheduler/contracts.d.ts +7 -1
  202. package/dist/src/runtime/scheduler/job-management.js +7 -1
  203. package/dist/src/runtime/scheduler/run-records.js +2 -0
  204. package/dist/src/runtime/scheduler/schedule-validation.js +2 -0
  205. package/dist/src/runtime/scheduler/scheduler-engine.js +1 -0
  206. package/dist/src/runtime/scheduler/snapshot-validation.js +2 -0
  207. package/dist/src/runtime/steps/auditor-decision/projection.js +2 -0
  208. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.d.ts +9 -0
  209. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.js +29 -0
  210. package/dist/src/runtime/steps/execution-agent/capability-scope.d.ts +17 -0
  211. package/dist/src/runtime/steps/execution-agent/capability-scope.js +54 -0
  212. package/dist/src/runtime/steps/execution-agent/compaction.js +22 -6
  213. package/dist/src/runtime/steps/execution-agent/controls-compacted-evidence.js +2 -0
  214. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.d.ts +6 -0
  215. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.js +13 -0
  216. package/dist/src/runtime/steps/execution-agent/format.js +3 -6
  217. package/dist/src/runtime/steps/execution-agent/input.d.ts +5 -1
  218. package/dist/src/runtime/steps/execution-agent/input.js +10 -36
  219. package/dist/src/runtime/steps/execution-agent/observation-guidance.d.ts +11 -0
  220. package/dist/src/runtime/steps/execution-agent/observation-guidance.js +33 -0
  221. package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
  222. package/dist/src/runtime/steps/execution-agent/refinement.d.ts +3 -2
  223. package/dist/src/runtime/steps/execution-agent/refinement.js +17 -6
  224. package/dist/src/runtime/steps/execution-agent/run.js +7 -1
  225. package/dist/src/runtime/steps/skill-read-decision.d.ts +1 -0
  226. package/dist/src/runtime/steps/skill-read-decision.js +9 -4
  227. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +6 -1
  228. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +15 -0
  229. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +1 -1
  230. package/dist/src/runtime/steps/supervisor-decision/contracts.js +2 -0
  231. package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +3 -0
  232. package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +22 -3
  233. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.d.ts +9 -0
  234. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.js +82 -0
  235. package/dist/src/runtime/steps/supervisor-decision/delegation-input.d.ts +7 -0
  236. package/dist/src/runtime/steps/supervisor-decision/delegation-input.js +105 -0
  237. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.d.ts +7 -0
  238. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.js +13 -0
  239. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
  240. package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +3 -5
  241. package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +5 -21
  242. package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +4 -1
  243. package/dist/src/runtime/steps/supervisor-decision/preparation.js +58 -6
  244. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.d.ts +22 -0
  245. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.js +61 -0
  246. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.d.ts +39 -0
  247. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.js +146 -0
  248. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.d.ts +9 -0
  249. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.js +100 -0
  250. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.d.ts +10 -0
  251. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.js +52 -0
  252. package/dist/src/runtime/steps/supervisor-decision/prompt.js +3 -16
  253. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -2
  254. package/dist/src/runtime/steps/supervisor-decision/role-guidance.d.ts +3 -0
  255. package/dist/src/runtime/steps/supervisor-decision/role-guidance.js +20 -0
  256. package/dist/src/runtime/steps/supervisor-decision/run.js +50 -7
  257. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.d.ts +10 -0
  258. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.js +45 -0
  259. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.d.ts +15 -0
  260. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.js +25 -0
  261. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.d.ts +3 -0
  262. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.js +15 -0
  263. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.d.ts +10 -0
  264. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.js +65 -0
  265. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +3 -1
  266. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +20 -22
  267. package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +3 -2
  268. package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +62 -15
  269. package/dist/src/runtime/steps/supervisor-response/prompt.js +18 -4
  270. package/dist/src/shared/model-reasoning-modes.d.ts +5 -0
  271. package/dist/src/shared/model-reasoning-modes.js +20 -0
  272. package/dist/src/shared/model-reasoning-schema.d.ts +38 -0
  273. package/dist/src/shared/model-reasoning-schema.js +29 -0
  274. package/dist/src/shared/model-reasoning.d.ts +35 -0
  275. package/dist/src/shared/model-reasoning.js +100 -0
  276. package/dist/src/web-ui/app/ARCHITECTURE.md +13 -0
  277. package/dist/src/web-ui/app/app-bootstrap.js +9 -12
  278. package/dist/src/web-ui/app/app-dom.js +6 -1
  279. package/dist/src/web-ui/app/app-state.js +1 -0
  280. package/dist/src/web-ui/app/app.js +8 -3
  281. package/dist/src/web-ui/app/appearance-feature.js +28 -0
  282. package/dist/src/web-ui/app/automations-feature.js +20 -11
  283. package/dist/src/web-ui/app/components/appearance-dialog.js +79 -0
  284. package/dist/src/web-ui/app/components/automations/archive-actions.js +5 -3
  285. package/dist/src/web-ui/app/components/automations/authoring-entry.js +26 -7
  286. package/dist/src/web-ui/app/components/automations/confirmation-actions.js +78 -0
  287. package/dist/src/web-ui/app/components/automations/draft-recovery-actions.js +1 -0
  288. package/dist/src/web-ui/app/components/automations/node-inspector.js +5 -1
  289. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +4 -2
  290. package/dist/src/web-ui/app/components/automations/timeline.js +2 -2
  291. package/dist/src/web-ui/app/components/automations/workspace-navigation.js +37 -0
  292. package/dist/src/web-ui/app/components/automations/workspace.js +31 -46
  293. package/dist/src/web-ui/app/components/config-workspace/config-model.js +6 -0
  294. package/dist/src/web-ui/app/components/config-workspace/model-removal.js +4 -2
  295. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +8 -16
  296. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget-edit.js +113 -0
  297. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.d.ts +16 -0
  298. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.js +67 -0
  299. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.d.ts +7 -0
  300. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.js +25 -0
  301. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +15 -7
  302. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +32 -12
  303. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +1 -1
  304. package/dist/src/web-ui/app/components/config-workspace.js +2 -1
  305. package/dist/src/web-ui/app/components/confirmation-dialog.js +88 -0
  306. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  307. package/dist/src/web-ui/app/components/conversation-activity.js +32 -3
  308. package/dist/src/web-ui/app/components/conversation-memory-activity.js +31 -0
  309. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +2 -0
  310. package/dist/src/web-ui/app/components/conversation-role-cards.js +14 -11
  311. package/dist/src/web-ui/app/components/conversation-skill-activity.js +67 -0
  312. package/dist/src/web-ui/app/components/conversation-tools.js +5 -5
  313. package/dist/src/web-ui/app/components/conversation-view.js +6 -0
  314. package/dist/src/web-ui/app/components/dashboard/approvals.js +13 -1
  315. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.d.ts +38 -0
  316. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.js +289 -0
  317. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-feature.js +75 -0
  318. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-rendering.js +31 -0
  319. package/dist/src/web-ui/app/components/long-term-memory/manager.js +15 -5
  320. package/dist/src/web-ui/app/components/long-term-memory/saved-embedding-profiles.js +114 -0
  321. package/dist/src/web-ui/app/components/long-term-memory/setup-rendering.js +55 -0
  322. package/dist/src/web-ui/app/components/long-term-memory-setup.js +141 -76
  323. package/dist/src/web-ui/app/components/model-setup/rendering.js +3 -2
  324. package/dist/src/web-ui/app/components/model-setup/validation.js +6 -2
  325. package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +1 -0
  326. package/dist/src/web-ui/app/components/model-setup/wizard.js +28 -5
  327. package/dist/src/web-ui/app/components/passive-learning/memory.js +12 -5
  328. package/dist/src/web-ui/app/components/plugins/manager.js +14 -0
  329. package/dist/src/web-ui/app/components/plugins/removal.js +10 -2
  330. package/dist/src/web-ui/app/components/project-group-actions.js +35 -0
  331. package/dist/src/web-ui/app/components/project-session-groups.js +17 -31
  332. package/dist/src/web-ui/app/components/runtime-setup/commands.js +1 -1
  333. package/dist/src/web-ui/app/components/runtime-setup/connection-form.d.ts +15 -0
  334. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +32 -9
  335. package/dist/src/web-ui/app/components/runtime-setup/connection-input.js +23 -0
  336. package/dist/src/web-ui/app/components/runtime-setup/connection-inspection.js +57 -0
  337. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +18 -4
  338. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +3 -0
  339. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-options.js +54 -0
  340. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +3 -0
  341. package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +22 -22
  342. package/dist/src/web-ui/app/components/runtime-setup/embedding.js +60 -16
  343. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.d.ts +17 -0
  344. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.js +54 -0
  345. package/dist/src/web-ui/app/components/runtime-setup/validation.js +5 -1
  346. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +9 -3
  347. package/dist/src/web-ui/app/components/runtime-setup-guide.js +20 -29
  348. package/dist/src/web-ui/app/components/schedules/details.js +2 -2
  349. package/dist/src/web-ui/app/components/schedules/form.js +12 -5
  350. package/dist/src/web-ui/app/components/schedules/workspace.js +30 -18
  351. package/dist/src/web-ui/app/components/session-list-viewport.js +49 -0
  352. package/dist/src/web-ui/app/components/session-search-disclosure.js +27 -0
  353. package/dist/src/web-ui/app/components/skills/workspace.js +7 -3
  354. package/dist/src/web-ui/app/components/spark-chat/panel.js +7 -3
  355. package/dist/src/web-ui/app/components/spark-chat/settings.js +57 -15
  356. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +2 -1
  357. package/dist/src/web-ui/app/components/tool-approval-card.js +10 -2
  358. package/dist/src/web-ui/app/components/tool-approval-rejection-input.js +116 -0
  359. package/dist/src/web-ui/app/components/workspace-shell.js +30 -38
  360. package/dist/src/web-ui/app/components/workspace-transitions.js +42 -0
  361. package/dist/src/web-ui/app/configuration-feature.js +34 -4
  362. package/dist/src/web-ui/app/controllers/app-event-bindings.js +45 -29
  363. package/dist/src/web-ui/app/controllers/appearance-controller.js +105 -0
  364. package/dist/src/web-ui/app/controllers/automations-controller.js +9 -1
  365. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +1 -1
  366. package/dist/src/web-ui/app/controllers/composer-feature.js +10 -3
  367. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +1 -1
  368. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +9 -3
  369. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +1 -1
  370. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +8 -2
  371. package/dist/src/web-ui/app/controllers/dashboard-approvals-controller.js +10 -9
  372. package/dist/src/web-ui/app/controllers/environment-transition.js +2 -2
  373. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +9 -7
  374. package/dist/src/web-ui/app/controllers/preference-view-sync.js +35 -0
  375. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +4 -0
  376. package/dist/src/web-ui/app/controllers/projects-controller.js +64 -3
  377. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.d.ts +17 -0
  378. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.js +80 -0
  379. package/dist/src/web-ui/app/controllers/reasoning-budget-menu-events.js +45 -0
  380. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +35 -40
  381. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +6 -1
  382. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +16 -3
  383. package/dist/src/web-ui/app/controllers/session-controller.js +34 -9
  384. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +4 -3
  385. package/dist/src/web-ui/app/controllers/skills-controller.js +33 -16
  386. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +1 -1
  387. package/dist/src/web-ui/app/controllers/spark-handoff-navigation.js +7 -1
  388. package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +2 -1
  389. package/dist/src/web-ui/app/controllers/tool-approval-controller.js +36 -3
  390. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +8 -2
  391. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +41 -10
  392. package/dist/src/web-ui/app/index.html +38 -32
  393. package/dist/src/web-ui/app/lib/color-palettes.d.ts +17 -0
  394. package/dist/src/web-ui/app/lib/color-palettes.js +20 -0
  395. package/dist/src/web-ui/app/lib/memory-activity-model.d.ts +12 -0
  396. package/dist/src/web-ui/app/lib/memory-activity-model.js +61 -0
  397. package/dist/src/web-ui/app/lib/navigation-display.d.ts +8 -0
  398. package/dist/src/web-ui/app/lib/navigation-display.js +12 -0
  399. package/dist/src/web-ui/app/lib/reasoning-controls.js +47 -6
  400. package/dist/src/web-ui/app/lib/reasoning-preference.d.ts +9 -0
  401. package/dist/src/web-ui/app/lib/reasoning-preference.js +75 -0
  402. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +4 -0
  403. package/dist/src/web-ui/app/lib/session-composer-queue.js +4 -0
  404. package/dist/src/web-ui/app/lib/session-project-groups.js +28 -0
  405. package/dist/src/web-ui/app/lib/session-sidebar-order.js +7 -5
  406. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +1 -0
  407. package/dist/src/web-ui/app/lib/tool-activity-event.js +1 -0
  408. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +1 -0
  409. package/dist/src/web-ui/app/lib/tool-activity-model.js +1 -0
  410. package/dist/src/web-ui/app/lib/tool-approval-rejection-drafts.js +45 -0
  411. package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +1 -1
  412. package/dist/src/web-ui/app/notifications-feature.js +10 -2
  413. package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
  414. package/dist/src/web-ui/app/projects-feature.js +40 -10
  415. package/dist/src/web-ui/app/runtime-onboarding-feature.js +1 -0
  416. package/dist/src/web-ui/app/schedules-feature.js +28 -5
  417. package/dist/src/web-ui/app/services/client-preferences.d.ts +4 -1
  418. package/dist/src/web-ui/app/services/client-preferences.js +2 -0
  419. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.d.ts +11 -0
  420. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.js +30 -0
  421. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +6 -4
  422. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +5 -0
  423. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +21 -0
  424. package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +2 -1
  425. package/dist/src/web-ui/app/services/runtime-web-client/projects.js +4 -0
  426. package/dist/src/web-ui/app/services/runtime-web-client/tool-approvals.js +2 -0
  427. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +16 -0
  428. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  429. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +33 -13
  430. package/dist/src/web-ui/app/skills-feature.js +2 -3
  431. package/dist/src/web-ui/app/spark-chat-conversation.js +29 -3
  432. package/dist/src/web-ui/app/spark-chat-feature.js +13 -7
  433. package/dist/src/web-ui/app/styles/01-color-palettes.css +90 -0
  434. package/dist/src/web-ui/app/styles/11-product-links.css +6 -2
  435. package/dist/src/web-ui/app/styles/11-workspace-header-width.css +37 -25
  436. package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +56 -22
  437. package/dist/src/web-ui/app/styles/13-projects.css +56 -19
  438. package/dist/src/web-ui/app/styles/19-runtime-setup.css +16 -0
  439. package/dist/src/web-ui/app/styles/22-reasoning-budget.css +39 -0
  440. package/dist/src/web-ui/app/styles/27-conversation-memory.css +45 -0
  441. package/dist/src/web-ui/app/styles/27-conversation-skills.css +96 -0
  442. package/dist/src/web-ui/app/styles/28-tool-approval-card.css +38 -1
  443. package/dist/src/web-ui/app/styles/35-embedding-profiles.css +159 -0
  444. package/dist/src/web-ui/app/styles/54-spark-chat.css +62 -46
  445. package/dist/src/web-ui/app/styles/65-appearance.css +60 -0
  446. package/dist/src/web-ui/app/styles/66-navigation-display.css +30 -0
  447. package/dist/src/web-ui/app/styles/67-confirmation-dialog.css +32 -0
  448. package/dist/src/web-ui/app/styles.css +8 -0
  449. package/dist/src/web-ui/client-state/preference-shapes.js +6 -1
  450. package/dist/src/web-ui/client-state/preferences.js +8 -2
  451. package/dist/src/web-ui/client-state/reasoning-preference-shape.d.ts +1 -0
  452. package/dist/src/web-ui/client-state/reasoning-preference-shape.js +18 -0
  453. package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
  454. package/dist/src/web-ui/local-runtime/api-router.js +11 -0
  455. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.d.ts +7 -0
  456. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.js +22 -0
  457. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.d.ts +20 -0
  458. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.js +47 -0
  459. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +32 -0
  460. package/dist/src/web-ui/local-runtime/model-connection-inspection.d.ts +7 -0
  461. package/dist/src/web-ui/local-runtime/model-connection-inspection.js +48 -0
  462. package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +2 -1
  463. package/dist/src/web-ui/local-runtime/model-setup-catalog.js +3 -1
  464. package/dist/src/web-ui/local-runtime/model-setup-identity.js +1 -1
  465. package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +5 -2
  466. package/dist/src/web-ui/local-runtime/model-setup-input.js +29 -6
  467. package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +1 -1
  468. package/dist/src/web-ui/local-runtime/model-setup-provider.js +9 -6
  469. package/dist/src/web-ui/local-runtime/model-setup-retry.js +4 -1
  470. package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +2 -1
  471. package/dist/src/web-ui/local-runtime/pending-tool-approvals.js +4 -1
  472. package/dist/src/web-ui/local-runtime/project-routes.js +10 -2
  473. package/dist/src/web-ui/local-runtime/request-execution.js +1 -0
  474. package/dist/src/web-ui/local-runtime/runtime-setup-auth.d.ts +2 -0
  475. package/dist/src/web-ui/local-runtime/runtime-setup-auth.js +20 -0
  476. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +3 -2
  477. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +6 -1
  478. package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +3 -2
  479. package/dist/src/web-ui/local-runtime/runtime-setup-input.js +17 -5
  480. package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +4 -1
  481. package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +6 -2
  482. package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +11 -2
  483. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +11 -2
  484. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +3 -2
  485. package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +25 -4
  486. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +19 -9
  487. package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +3 -1
  488. package/dist/src/web-ui/local-runtime/setup-embedding-input.js +38 -6
  489. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.d.ts +11 -0
  490. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.js +53 -0
  491. package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +23 -9
  492. package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +7 -2
  493. package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +5 -3
  494. package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +1 -0
  495. package/docs/configuration.md +10 -8
  496. package/docs/installation.md +11 -5
  497. package/docs/llamacpp.md +248 -0
  498. package/docs/long-term-memory.md +12 -0
  499. package/docs/running-locally.md +7 -1
  500. package/package.json +2 -1
  501. package/plugins/project-orientation/source/index.ts +2 -3
  502. package/plugins/project-orientation/source/inspection-failure.ts +1 -1
  503. package/plugins/project-orientation/source/project-target.ts +29 -0
  504. package/plugins/project-orientation/src/index.cjs +21 -2
  505. package/runtime.config.schema.json +140 -0
  506. package/src/runtime/README.md +50 -4
@@ -1,5 +1,5 @@
1
1
  import type { ModelStep } from "../../../shared/model-steps.js";
2
- import type { SemanticCompactionCheckpoint, SemanticCompactionCheckpointBinding, SemanticCompactionSource } from "./contracts.js";
2
+ import type { SemanticCompactionCheckpoint, SemanticCompactionCheckpointBinding, SemanticCompactionDigest, SemanticCompactionSource } from "./contracts.js";
3
3
  import type { BoundRequestModelInvocationContext, RequestExecutionSeed } from "../../request/contracts.js";
4
4
  import type { SuperCompactionFailureOwner } from "../super-compaction-failure-owner.js";
5
5
  export type SemanticCompactionGenerationParams = Readonly<{
@@ -11,6 +11,8 @@ export type SemanticCompactionGenerationParams = Readonly<{
11
11
  /** Invocation-local freshness binding; never part of a saved checkpoint. */
12
12
  boundSteeringVersion?: number;
13
13
  previous?: SemanticCompactionCheckpoint;
14
+ /** Verified EA predecessor evidence only; exclusive with previous and never persisted. */
15
+ inheritedSourceDigests?: readonly SemanticCompactionDigest[];
14
16
  /** Model step that will consume the checkpoint. */
15
17
  consumer?: ModelStep;
16
18
  sources: readonly SemanticCompactionSource[];
@@ -1,11 +1,12 @@
1
1
  import { SEMANTIC_COMPACTION_EVIDENCE_SCOPE } from "./evidence-scope.js";
2
- import { SEMANTIC_COMPACTION_INSTRUCTIONS } from "./prompt.js";
2
+ import { resolveSemanticCompactionInstructions } from "./execution-evidence-instructions.js";
3
3
  import { bindSemanticCompactionSourceSlots } from "./source-slots.js";
4
+ import { resolvePriorCompactionSourceDigests } from "./inherited-source-digests.js";
4
5
  export function buildSemanticCompactionMessages(params) {
5
6
  return [
6
7
  Object.freeze({
7
8
  role: "system",
8
- content: SEMANTIC_COMPACTION_INSTRUCTIONS,
9
+ content: resolveSemanticCompactionInstructions(params.binding.allowedConsumers),
9
10
  }),
10
11
  Object.freeze({
11
12
  role: "user",
@@ -15,12 +16,14 @@ export function buildSemanticCompactionMessages(params) {
15
16
  currentRequest: params.request.prompt,
16
17
  active: projectActiveAssignment(params),
17
18
  ...(params.previous
19
+ ? { previousContinuation: params.previous.continuation }
20
+ : {}),
21
+ ...(resolvePriorCompactionSourceDigests(params).length > 0
18
22
  ? {
19
- previousContinuation: params.previous.continuation,
20
- previousSourceDigests: bindSemanticCompactionSourceSlots(params.previous.sourceDigests),
23
+ previousSourceDigests: bindSemanticCompactionSourceSlots(resolvePriorCompactionSourceDigests(params)),
21
24
  }
22
25
  : {}),
23
- newSources: bindSemanticCompactionSourceSlots(params.sources, params.previous?.sourceDigests.length ?? 0),
26
+ newSources: bindSemanticCompactionSourceSlots(params.sources, resolvePriorCompactionSourceDigests(params).length),
24
27
  }),
25
28
  }),
26
29
  ];
@@ -30,7 +33,7 @@ export function buildSemanticCompactionSliceMessages(params, slice, state) {
30
33
  Object.freeze({
31
34
  role: "system",
32
35
  content: [
33
- SEMANTIC_COMPACTION_INSTRUCTIONS,
36
+ resolveSemanticCompactionInstructions(params.binding.allowedConsumers),
34
37
  "The supplied source is one exact contiguous UTF-8 range of a larger canonical source.",
35
38
  "Return all replacement source digests and one replacement continuation. For the sliced source, preserve every previously supplied range plus this range; do not treat ranges as separate sources. partialSourceFold is the latest summary of the covered ranges and replaces the older checkpoint for this generation.",
36
39
  ].join("\n"),
@@ -42,11 +45,13 @@ export function buildSemanticCompactionSliceMessages(params, slice, state) {
42
45
  evidenceScope: SEMANTIC_COMPACTION_EVIDENCE_SCOPE,
43
46
  currentRequest: params.request.prompt,
44
47
  active: projectActiveAssignment(params),
45
- ...(params.previous && !state
48
+ ...(resolvePriorCompactionSourceDigests(params).length > 0 && !state
46
49
  ? {
47
50
  previousCheckpoint: {
48
- continuation: params.previous.continuation,
49
- sourceDigests: bindSemanticCompactionSourceSlots(params.previous.sourceDigests),
51
+ ...(params.previous
52
+ ? { continuation: params.previous.continuation }
53
+ : {}),
54
+ sourceDigests: bindSemanticCompactionSourceSlots(resolvePriorCompactionSourceDigests(params)),
50
55
  },
51
56
  }
52
57
  : {}),
@@ -59,7 +64,7 @@ export function buildSemanticCompactionSliceMessages(params, slice, state) {
59
64
  },
60
65
  }
61
66
  : {}),
62
- sourceSlice: bindSemanticCompactionSourceSlots([slice], params.previous?.sourceDigests.length ?? 0)[0],
67
+ sourceSlice: bindSemanticCompactionSourceSlots([slice], resolvePriorCompactionSourceDigests(params).length)[0],
63
68
  }),
64
69
  }),
65
70
  ];
@@ -0,0 +1,8 @@
1
+ import { type SemanticCompactionCheckpoint, type SemanticCompactionDigest, type SemanticCompactionSource } from "./contracts.js";
2
+ import type { SemanticCompactionGenerationParams } from "./generation-contracts.js";
3
+ /** The EA owner validates predecessor lineage; generation verifies its exact sources. */
4
+ export declare function assertInheritedCompactionSourceDigests(params: SemanticCompactionGenerationParams): void;
5
+ /** Inherited evidence carries no old objective-dependent continuation. */
6
+ export declare function resolvePriorCompactionSourceDigests(params: SemanticCompactionGenerationParams): readonly SemanticCompactionDigest[];
7
+ /** After the first fold, only the real candidate bound to the new objective survives. */
8
+ export declare function projectCompactionBatchParams(params: SemanticCompactionGenerationParams, previous: SemanticCompactionCheckpoint | undefined, sources: readonly SemanticCompactionSource[]): SemanticCompactionGenerationParams;
@@ -0,0 +1,76 @@
1
+ import { createSemanticCompactionSha256Fingerprint, isSemanticCompactionSha256Fingerprint, SEMANTIC_COMPACTION_ID_MAX_LENGTH, } from "./contracts.js";
2
+ /** The EA owner validates predecessor lineage; generation verifies its exact sources. */
3
+ export function assertInheritedCompactionSourceDigests(params) {
4
+ const inherited = params.inheritedSourceDigests;
5
+ if (inherited === undefined)
6
+ return;
7
+ if (params.previous !== undefined)
8
+ throw new Error("context_compaction_inheritance_previous_conflict");
9
+ if (!hasExclusiveExecutionCompactionConsumers(params.binding.allowedConsumers))
10
+ throw new Error("context_compaction_inheritance_consumer_invalid");
11
+ if (!Number.isSafeInteger(params.sourceRevision) || params.sourceRevision < 0)
12
+ throw new Error("context_compaction_inheritance_revision_invalid");
13
+ if (!Array.isArray(inherited) || inherited.length === 0)
14
+ throw new Error("context_compaction_inheritance_sources_invalid");
15
+ const store = params.request.contextCompactionStore;
16
+ if (!store)
17
+ throw new Error("context_compaction_store_required");
18
+ const newSourceRefs = new Set(params.sources.map(({ sourceRef }) => sourceRef));
19
+ const inheritedRefs = new Set();
20
+ for (const digest of inherited) {
21
+ if (!isWellFormedInheritedSourceDigest(digest))
22
+ throw new Error("context_compaction_inheritance_digest_invalid");
23
+ if (inheritedRefs.has(digest.sourceRef) || newSourceRefs.has(digest.sourceRef))
24
+ throw new Error("context_compaction_inheritance_source_overlap");
25
+ const source = store.materializeSource(digest.sourceRef, digest.sourceFingerprint);
26
+ if (!hasExactInheritedSourceIdentity(source, digest))
27
+ throw new Error("context_compaction_inheritance_source_missing");
28
+ inheritedRefs.add(digest.sourceRef);
29
+ }
30
+ }
31
+ /** Inherited evidence carries no old objective-dependent continuation. */
32
+ export function resolvePriorCompactionSourceDigests(params) {
33
+ return params.previous?.sourceDigests ?? params.inheritedSourceDigests ?? [];
34
+ }
35
+ /** After the first fold, only the real candidate bound to the new objective survives. */
36
+ export function projectCompactionBatchParams(params, previous, sources) {
37
+ return Object.freeze({
38
+ ...params,
39
+ previous,
40
+ inheritedSourceDigests: previous ? undefined : params.inheritedSourceDigests,
41
+ sources,
42
+ });
43
+ }
44
+ function hasExclusiveExecutionCompactionConsumers(consumers) {
45
+ if (consumers.length === 0)
46
+ return false;
47
+ return consumers.every(isExecutionCompactionConsumer);
48
+ }
49
+ function isExecutionCompactionConsumer(consumer) {
50
+ return consumer === "execution.decision" || consumer === "execution.response";
51
+ }
52
+ function isWellFormedInheritedSourceDigest(digest) {
53
+ if (!digest || typeof digest !== "object")
54
+ return false;
55
+ if (typeof digest.sourceRef !== "string")
56
+ return false;
57
+ if (!digest.sourceRef.trim())
58
+ return false;
59
+ if (digest.sourceRef !== digest.sourceRef.trim())
60
+ return false;
61
+ if (digest.sourceRef.length > SEMANTIC_COMPACTION_ID_MAX_LENGTH)
62
+ return false;
63
+ if (!isSemanticCompactionSha256Fingerprint(digest.sourceFingerprint))
64
+ return false;
65
+ if (typeof digest.digest !== "string" || !digest.digest.trim())
66
+ return false;
67
+ return digest.digest === digest.digest.trim();
68
+ }
69
+ function hasExactInheritedSourceIdentity(source, digest) {
70
+ if (!source || source.sourceRef !== digest.sourceRef)
71
+ return false;
72
+ if (source.sourceFingerprint !== digest.sourceFingerprint)
73
+ return false;
74
+ return (createSemanticCompactionSha256Fingerprint(source.content) ===
75
+ digest.sourceFingerprint);
76
+ }
@@ -1,8 +1,10 @@
1
1
  import { resolveModelContextAdmission } from "../../model/model-context-budget.js";
2
+ import { assertInheritedCompactionSourceDigests, resolvePriorCompactionSourceDigests, } from "./inherited-source-digests.js";
2
3
  const CHECKPOINT_CONTEXT_WINDOW_SHARE = 0.3;
3
4
  /** A shared checkpoint must fit every declared consumer, starting with its caller. */
4
5
  export function prepareReplacementCompactionBudget(params, sources = params.sources) {
5
- const expectedSources = Object.freeze([...(params.previous?.sourceDigests ?? []), ...sources].map(({ sourceRef, sourceFingerprint }) => Object.freeze({ sourceRef, sourceFingerprint })));
6
+ assertInheritedCompactionSourceDigests(params);
7
+ const expectedSources = Object.freeze([...resolvePriorCompactionSourceDigests(params), ...sources].map(({ sourceRef, sourceFingerprint }) => Object.freeze({ sourceRef, sourceFingerprint })));
6
8
  const allowedConsumers = [...new Set(params.binding.allowedConsumers)];
7
9
  const consumer = params.consumer ??
8
10
  (allowedConsumers.length === 1 ? allowedConsumers[0] : undefined);
@@ -1,3 +1,4 @@
1
+ import { assertInheritedCompactionSourceDigests, projectCompactionBatchParams, resolvePriorCompactionSourceDigests, } from "./inherited-source-digests.js";
1
2
  import { registerSemanticCompactionSources } from "./generation-source-registration.js";
2
3
  import { projectConfiguredStepMessages } from "../../config/runner/step-instructions.js";
3
4
  import { assessRequestMessagesBudget, resolveRequestBudgetInputTokens, } from "../request-context-budget.js";
@@ -46,7 +47,7 @@ export async function generateSemanticCompactionCandidate(params) {
46
47
  modelStep: CONTEXT_COMPACTION_MODEL_STEP,
47
48
  scopeId: params.scopeId,
48
49
  sourceRevision: params.sourceRevision,
49
- previousCoveredSourceCount: params.previous?.sourceDigests.length ?? 0,
50
+ previousCoveredSourceCount: resolvePriorCompactionSourceDigests(params).length,
50
51
  newSourceCount: params.sources.length,
51
52
  inputCharacterCount: prepared.messages.reduce((total, message) => total + message.content.length, 0),
52
53
  });
@@ -78,7 +79,7 @@ export async function generateSemanticCompactionCandidate(params) {
78
79
  coveredSourceCount: candidate.sourceDigests.length,
79
80
  replacementCheckpoint: true,
80
81
  digestMode: "rolling_replacement",
81
- previousDigestCharacters: semanticCompactionDigestTotalLength(params.previous?.sourceDigests ?? []),
82
+ previousDigestCharacters: semanticCompactionDigestTotalLength(resolvePriorCompactionSourceDigests(params)),
82
83
  replacementDigestCharacters: semanticCompactionDigestTotalLength(candidate.sourceDigests),
83
84
  durationMs: Date.now() - startedAt,
84
85
  });
@@ -102,6 +103,7 @@ export async function generateSemanticCompactionCandidate(params) {
102
103
  * returned checkpoint still contains exactly one digest for the full source.
103
104
  */
104
105
  export async function generateSemanticCompactionCandidateBatched(params) {
106
+ assertInheritedCompactionSourceDigests(params);
105
107
  registerSemanticCompactionSources(params);
106
108
  let candidate = params.previous;
107
109
  let nextSourceIndex = 0;
@@ -109,11 +111,7 @@ export async function generateSemanticCompactionCandidateBatched(params) {
109
111
  let selectedParams;
110
112
  for (let endSourceIndex = Math.min(params.sources.length, nextSourceIndex + SEMANTIC_COMPACTION_BATCH_SOURCE_MAX_COUNT); endSourceIndex > nextSourceIndex; endSourceIndex -= 1) {
111
113
  const batch = Object.freeze(params.sources.slice(nextSourceIndex, endSourceIndex));
112
- const batchParams = Object.freeze({
113
- ...params,
114
- ...(candidate ? { previous: candidate } : { previous: undefined }),
115
- sources: batch,
116
- });
114
+ const batchParams = projectCompactionBatchParams(params, candidate, batch);
117
115
  if ((await assessSemanticCompactionInputForAdmission(batchParams)).fits) {
118
116
  selectedParams = batchParams;
119
117
  break;
@@ -125,11 +123,7 @@ export async function generateSemanticCompactionCandidateBatched(params) {
125
123
  continue;
126
124
  }
127
125
  const source = params.sources[nextSourceIndex];
128
- const slicedParams = Object.freeze({
129
- ...params,
130
- ...(candidate ? { previous: candidate } : { previous: undefined }),
131
- sources: Object.freeze([source]),
132
- });
126
+ const slicedParams = projectCompactionBatchParams(params, candidate, Object.freeze([source]));
133
127
  candidate = await generateSemanticCompactionSlicedSource(slicedParams, source);
134
128
  nextSourceIndex += 1;
135
129
  }
@@ -1,7 +1,7 @@
1
1
  export const COMPUTER_USE_SKILL = Object.freeze({
2
2
  skillId: "computer-use",
3
3
  name: "Computer Use",
4
- description: "Performing and explaining desktop tasks: observe, act, and verify results.",
4
+ description: "Tasks requiring observation or interaction with a graphical desktop application.",
5
5
  content: `# Computer Use
6
6
 
7
7
  Use this reference when completing the current task requires observing or interacting with a desktop application. It is procedural documentation under the user's request, your assigned objective and existing permissions. It does not make a desktop available or authorize additional actions. Use the currently offered tool schemas for exact inputs and supported operations.
@@ -7,13 +7,31 @@ export const TECHNICAL_WORK_SKILL = Object.freeze({
7
7
  Use this guidance for building, changing, debugging or verifying software, scripts and configuration. Apply only what the current request or assigned task needs. It adds no work, permissions or tool availability.
8
8
 
9
9
  ## Ground the work
10
- Identify the requested outcome and acceptance criteria. Inspect the relevant implementation, interfaces, data and existing checks. Distinguish observed facts from assumptions; obtain focused observations when essential details are missing.
10
+ Identify the requested outcome and acceptance criteria. Ground decisions in the relevant implementation, interfaces, data and existing checks. Reuse available context before fetching more. Distinguish observed facts from assumptions; obtain focused observations when essential details are missing.
11
+
12
+ ## Plan around outcomes
13
+ - Plan the requested outcomes, not a standard development ceremony. Include only work needed to satisfy the request; do not add exploration, review or validation phases by habit.
14
+ - Give each planned outcome a clear completion condition. Identify the smallest relevant verification needed, if any, and what uncertainty it resolves. Avoid open-ended instructions such as "validate the project" or "check all files."
15
+ - Keep focused verification with the implementation it supports. Create a separate verification task only for an explicit requirement or a concrete risk not covered by those checks, such as integration between components. State its scope and completion condition.
16
+ - Build on established facts and completed work. Do not schedule re-reading successfully written content or repeating valid checks without a specific information gap, relevant change or uncertain result.
17
+ - In delegated work, request the changes made, checks performed, their results and remaining gaps. Evaluate that evidence before commissioning another inspection; retrieve only what is missing for the next decision.
18
+ - Extend the plan only for a concrete unmet requirement, failed check or newly discovered risk—not merely because more inspection is possible.
19
+
20
+ ## Read selectively
21
+ - Treat file reads, tool calls and returned text as expensive resources. Before reading, identify the concrete information gap it must resolve. Skip reads whose answer is already available in context.
22
+ - Reuse content already available in context, including the portions you successfully wrote or patched. Treat it as current unless there is evidence of a subsequent change. Do not re-read it merely to confirm a successful edit, refresh your memory or prepare the final report. Read again only where needed content is missing or incomplete, a tool result is uncertain, or there is evidence of an intervening change.
23
+ - For follow-up tasks, start from known files, symbols and sections rather than restarting exploration. Retrieve only the relevant sections and enough surrounding context to understand dependencies and edit safely.
24
+ - Prefer available targeted retrieval tools: read a known range directly; use scoped symbol/text search when the location is unknown. Reuse sufficient search output without fetching the same content again. Do not search again for locations already known.
25
+ - Expand scope only for a specific unresolved question or dependency. Whole-file reads are justified when broader context is necessary, not simply because a file is involved. Batch related lookups when supported and prefer one sufficient bounded retrieval over many tiny calls.
11
26
 
12
27
  ## Make focused changes
13
28
  Choose the smallest coherent change that meets the request. Preserve unrelated work and reuse established patterns. Use offered capabilities and confirmed prerequisites; do not assume a particular operating system, runtime or dependency is available.
14
29
 
15
30
  ## Verify proportionately
16
- - Default to focused code checks and relevant unit/integration tests. Browser end-to-end tests, UI/responsive audits, or new test infrastructure require an explicit user request for that level of testing; a request for a working or responsive product alone is not sufficient.
31
+ A successful write establishes the saved content, not its correctness. Avoiding redundant reads does not replace relevant verification.
32
+ - Default to focused code checks and relevant existing unit/integration tests.
33
+ - Perform browser interaction testing only when the user explicitly requests that level of testing. Without that request, do not run browser interaction checks, browser end-to-end tests or UI/responsive audits, and do not create a DOM mock, simulated browser or custom interaction harness as a substitute. A request to build a working, connected or responsive product does not authorize these checks.
34
+ - New test infrastructure also requires an explicit user request. Keep verification within the requested scope; do not add interaction testing to turn an unverified browser outcome into a successful one. Do not present unrequested browser testing as an unmet acceptance criterion or a reason to continue working.
17
35
  - Check unknown prerequisites before dependent verification.
18
36
  - Use small, independently diagnostic checks; reuse passing results until relevant changes.
19
37
  - Diagnose a failed check before changing the product.
@@ -0,0 +1,2 @@
1
+ import type { KnowledgeSkillDocument } from "../store.js";
2
+ export declare const WHAT_CAN_I_DO_SKILL: KnowledgeSkillDocument;
@@ -0,0 +1,27 @@
1
+ export const WHAT_CAN_I_DO_SKILL = Object.freeze({
2
+ skillId: "what-can-i-do",
3
+ name: "What Can I Do?",
4
+ description: "ABot abilities, tools and plugins overview; not requests to perform a task.",
5
+ content: `# What Can I Do?
6
+
7
+ Explain what ABot can help the user accomplish, in the user's language. Give a short, practical overview suited to their question. Include useful actions as well as conversational help; a generic description of a language model misses ABot's purpose.
8
+
9
+ ## Useful work
10
+ ABot combines writing, explanation, translation, summarization and coding assistance with actions through enabled tools. Depending on the configured tools and permissions, supported work includes:
11
+
12
+ - Research public websites and recent news, compare sources and prepare a sourced summary.
13
+ - Read, search, create and edit files within the configured workspace; save useful results as documents or project files.
14
+ - Inspect code and configuration, develop scripts, and run supported commands or checks.
15
+ - Work with connected desktop applications through Computer Use, with explicit approval for the target and task.
16
+ - Schedule recurring tasks or build reusable automation drafts in ABot Studio.
17
+
18
+ Choose a few relevant examples rather than reciting every area. Distinguish writing an explanation or draft from actually searching, saving, scheduling or operating an application.
19
+
20
+ ## Describe the current installation honestly
21
+ The examples above describe supported uses of ABot, not a verified inventory of this installation. Current request metadata and discovery results determine which tools are enabled. Availability does not prove a connected account, permission, successful execution or unrestricted computer/file access.
22
+
23
+ For a broad introduction, describe these areas with a brief qualification that actions depend on enabled tools. If the user asks for the exact current tools or plugins, use supplied current metadata or the offered capability_brief / describe_available_tools discovery operation when the current role can invoke it. If that information is unavailable, state the limit; do not invent a list or conclude that no tools exist.
24
+
25
+ Explaining an ability does not authorize demonstrating it. Do not inspect a desktop, change files, activate an automation or load unrelated Skills merely to introduce yourself. Keep any separately requested action within its normal workflow and permissions.
26
+ `,
27
+ });
@@ -2,6 +2,7 @@ import { SKILL_CREATOR } from "./builtins/skill-creator.js";
2
2
  import { ABOT_STUDIO_SKILL } from "./builtins/abot-studio.js";
3
3
  import { COMPUTER_USE_SKILL } from "./builtins/computer-use.js";
4
4
  import { TECHNICAL_WORK_SKILL } from "./builtins/technical-work.js";
5
+ import { WHAT_CAN_I_DO_SKILL } from "./builtins/what-can-i-do.js";
5
6
  import { createKnowledgeSkillStore } from "./store.js";
6
7
  /** Packaged read-only documents; independent of installed or enabled plugins. */
7
8
  export const builtinKnowledgeSkillStore = createKnowledgeSkillStore([
@@ -9,4 +10,5 @@ export const builtinKnowledgeSkillStore = createKnowledgeSkillStore([
9
10
  COMPUTER_USE_SKILL,
10
11
  SKILL_CREATOR,
11
12
  TECHNICAL_WORK_SKILL,
13
+ WHAT_CAN_I_DO_SKILL,
12
14
  ]);
@@ -157,6 +157,9 @@ export declare function createLocalRuntimeApplication(config?: RuntimeConfig, op
157
157
  }>[];
158
158
  models: {
159
159
  provider?: string | undefined;
160
+ reasoningControls?: {
161
+ budgetTokens: boolean;
162
+ } | undefined;
160
163
  id: string;
161
164
  label: string;
162
165
  }[];
@@ -289,6 +292,8 @@ export declare function createLocalRuntimeApplication(config?: RuntimeConfig, op
289
292
  };
290
293
  projects: Readonly<{
291
294
  list: () => Promise<readonly import("./projects/contracts.js").RuntimeProject[]>;
295
+ catalog: () => Promise<import("./projects/contracts.js").RuntimeProjectCatalog>;
296
+ delete: (projectId: string) => Promise<void>;
292
297
  get: (id: string) => Promise<import("./projects/contracts.js").RuntimeProject | null>;
293
298
  create: (input: {
294
299
  name?: string;
@@ -1,6 +1,6 @@
1
1
  import type { RuntimeEnvironmentServices } from "../composition.js";
2
2
  export declare const LOCAL_SESSION_METHODS: readonly ["getOrCreateSession", "createAssistantConversation", "getAllSessions", "listSessions", "getSessionById", "getSessionSnapshot", "getRequestReplayById", "updateSessionTitle", "updateSessionRuntimeMode", "appendMessage", "appendContextEntry", "upsertArtifactPaths", "startRequestStream", "appendRequestEvent", "deleteSession", "deleteSessionWithStats", "resetSession", "clearSessionMessages", "deleteMessage", "deleteMessageWithStats", "compareAndSwapSessionMemoryCheckpoint"];
3
- export declare const LOCAL_PROJECT_METHODS: readonly ["list", "get", "create", "browseFolders", "createSession"];
3
+ export declare const LOCAL_PROJECT_METHODS: readonly ["list", "catalog", "delete", "get", "create", "browseFolders", "createSession"];
4
4
  export declare const LOCAL_ATTACHMENT_METHODS: readonly ["saveAttachment", "validateAttachmentReferences", "resolveAttachment", "deleteAttachment", "deleteSessionAttachments"];
5
5
  export declare const LOCAL_SCHEDULER_METHODS: readonly ["tick", "create", "list", "get", "update", "pause", "resume", "cancel", "runNow", "deleteSession", "listRuns"];
6
6
  export declare const LOCAL_AUTOMATION_METHODS: readonly ["list", "create", "createDraftPlan", "applyDraftPlan", "getDraft", "deleteDraft", "archive", "restore", "getPublishedDefinition", "updateDraft", "getSavedAgent", "listSavedAgents", "saveAgentFromDraft", "validate", "catalog", "getGrant", "replaceGrant", "publish", "activate", "pause", "runNow", "listRuns", "getRun", "getStepEvidence", "stopRun", "rerun"];
@@ -23,6 +23,8 @@ export const LOCAL_SESSION_METHODS = [
23
23
  ];
24
24
  export const LOCAL_PROJECT_METHODS = [
25
25
  "list",
26
+ "catalog",
27
+ "delete",
26
28
  "get",
27
29
  "create",
28
30
  "browseFolders",
@@ -153,6 +153,9 @@ export declare function createLocalServiceClients(call: LocalRuntimeCallHandler)
153
153
  }>[];
154
154
  models: {
155
155
  provider?: string | undefined;
156
+ reasoningControls?: {
157
+ budgetTokens: boolean;
158
+ } | undefined;
156
159
  id: string;
157
160
  label: string;
158
161
  }[];
@@ -285,6 +288,8 @@ export declare function createLocalServiceClients(call: LocalRuntimeCallHandler)
285
288
  };
286
289
  projects: Readonly<{
287
290
  list: () => Promise<readonly import("../projects/contracts.js").RuntimeProject[]>;
291
+ catalog: () => Promise<import("../projects/contracts.js").RuntimeProjectCatalog>;
292
+ delete: (projectId: string) => Promise<void>;
288
293
  get: (id: string) => Promise<import("../projects/contracts.js").RuntimeProject | null>;
289
294
  create: (input: {
290
295
  name?: string;
@@ -293,6 +293,7 @@ export class SavedRequestApprovals {
293
293
  text: snapshot.originalPrompt,
294
294
  agentMode: snapshot.seed.agentMode,
295
295
  modelPreference: snapshot.seed.modelPreference,
296
+ reasoningPreference: snapshot.seed.reasoningPreference,
296
297
  toolPermissionMode: snapshot.seed.toolPermissionMode,
297
298
  }, {
298
299
  ...options,
@@ -1,9 +1,10 @@
1
+ import { listSavedEmbeddingProfiles, matchingEmbeddingProfileLabel, readSavedEmbeddingProfiles } from "./saved-profiles.js";
1
2
  import { isRecord } from "../../config/utils.js";
2
3
  export const DEFAULT_MEMORY_EMBEDDING_PROFILE_ID = "memory-embedding";
3
4
  export function projectOnboardingStatus(config) {
4
5
  const memory = isRecord(config.longTermMemory) ? config.longTermMemory : {};
5
6
  const profileId = readText(memory.embeddingProfileId);
6
- const embeddingProfiles = readEmbeddingProfiles(config);
7
+ const embeddingProfiles = readSavedEmbeddingProfiles(config);
7
8
  const profile = profileId ? embeddingProfiles[profileId] : undefined;
8
9
  const providerId = isRecord(profile) ? readText(profile.provider) : undefined;
9
10
  const model = isRecord(profile) ? readText(profile.model) : undefined;
@@ -11,6 +12,7 @@ export function projectOnboardingStatus(config) {
11
12
  enabled: memory.enabled === true,
12
13
  emitClientEvents: memory.emitClientEvents === true,
13
14
  providers: listConfiguredProviders(config),
15
+ embeddingProfiles: listSavedEmbeddingProfiles(config),
14
16
  ...(profileId ? { profileId } : {}),
15
17
  ...(providerId ? { providerId } : {}),
16
18
  ...(model ? { model } : {}),
@@ -21,7 +23,7 @@ export function buildEnabledMemoryConfig(params) {
21
23
  const memory = isRecord(params.config.longTermMemory)
22
24
  ? params.config.longTermMemory
23
25
  : {};
24
- const profiles = readEmbeddingProfiles(params.config);
26
+ const profiles = readSavedEmbeddingProfiles(params.config);
25
27
  const existingProfile = profiles[params.profileId];
26
28
  const existingOptions = readMatchingProfileOptions({
27
29
  profile: existingProfile,
@@ -35,7 +37,7 @@ export function buildEnabledMemoryConfig(params) {
35
37
  embeddingProfiles: {
36
38
  ...profiles,
37
39
  [params.profileId]: {
38
- label: "Long-term memory embeddings",
40
+ label: matchingEmbeddingProfileLabel(existingProfile, params.providerId, params.model) ?? "Long-term memory embeddings",
39
41
  provider: params.providerId,
40
42
  model: params.model,
41
43
  ...(existingOptions ? { options: existingOptions } : {}),
@@ -89,10 +91,6 @@ export function requireConfiguredProvider(config, providerId) {
89
91
  throw new Error(`long_term_memory_provider_not_configured:${providerId}`);
90
92
  }
91
93
  }
92
- function readEmbeddingProfiles(config) {
93
- const models = isRecord(config.models) ? config.models : {};
94
- return isRecord(models.embeddingProfiles) ? models.embeddingProfiles : {};
95
- }
96
94
  function readText(value) {
97
95
  return typeof value === "string" && value.trim() ? value.trim() : undefined;
98
96
  }
@@ -3,6 +3,21 @@ export type LongTermMemoryOnboardingProvider = Readonly<{
3
3
  id: string;
4
4
  type: string;
5
5
  }>;
6
+ export type SavedMemoryEmbeddingProfile = Readonly<{
7
+ id: string;
8
+ label: string;
9
+ providerId: string;
10
+ model: string;
11
+ }>;
12
+ export type LongTermMemoryEmbeddingProfileSaveResult = Readonly<{
13
+ status: LongTermMemoryOnboardingStatus;
14
+ profileId: string;
15
+ configPath: string;
16
+ backupPath?: string;
17
+ }>;
18
+ export type LongTermMemoryEmbeddingProfileRemoveResult = LongTermMemoryEmbeddingProfileSaveResult & Readonly<{
19
+ removed: true;
20
+ }>;
6
21
  export type LongTermMemoryOnboardingStatus = Readonly<{
7
22
  enabled: boolean;
8
23
  emitClientEvents: boolean;
@@ -10,6 +25,7 @@ export type LongTermMemoryOnboardingStatus = Readonly<{
10
25
  providerId?: string;
11
26
  model?: string;
12
27
  providers: readonly LongTermMemoryOnboardingProvider[];
28
+ embeddingProfiles: readonly SavedMemoryEmbeddingProfile[];
13
29
  }>;
14
30
  export type LongTermMemoryOnboardingResult = Readonly<{
15
31
  status: LongTermMemoryOnboardingStatus;
@@ -48,5 +64,15 @@ export type LongTermMemoryOnboardingService = Readonly<{
48
64
  emitClientEvents?: boolean;
49
65
  abortSignal?: AbortSignal;
50
66
  }>): Promise<LongTermMemoryOnboardingResult>;
67
+ saveProfile(input: Readonly<{
68
+ providerId: string;
69
+ model: string;
70
+ label: string;
71
+ abortSignal?: AbortSignal;
72
+ }>): Promise<LongTermMemoryEmbeddingProfileSaveResult>;
73
+ removeProfile(input: Readonly<{
74
+ profileId: string;
75
+ abortSignal?: AbortSignal;
76
+ }>): Promise<LongTermMemoryEmbeddingProfileRemoveResult>;
51
77
  disable(): Promise<LongTermMemoryOnboardingResult>;
52
78
  }>;
@@ -0,0 +1 @@
1
+ export declare function readEmbeddingProfileId(value: string | undefined): string;
@@ -0,0 +1,8 @@
1
+ import { DEFAULT_MEMORY_EMBEDDING_PROFILE_ID } from "./configuration.js";
2
+ const PROFILE_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
3
+ export function readEmbeddingProfileId(value) {
4
+ const profileId = value?.trim() || DEFAULT_MEMORY_EMBEDDING_PROFILE_ID;
5
+ if (!PROFILE_ID_PATTERN.test(profileId))
6
+ throw new Error("long_term_memory_embedding_profile_id_invalid");
7
+ return profileId;
8
+ }
@@ -0,0 +1,17 @@
1
+ import type { RuntimeConfigFile } from "../../config/types.js";
2
+ import type { SavedMemoryEmbeddingProfile } from "./contracts.js";
3
+ export declare function readSavedEmbeddingProfiles(config: RuntimeConfigFile): Record<string, unknown>;
4
+ export declare function listSavedEmbeddingProfiles(config: RuntimeConfigFile): readonly SavedMemoryEmbeddingProfile[];
5
+ /** A saved choice is independent of the active memory binding and credentials. */
6
+ export declare function buildSavedEmbeddingProfile(params: {
7
+ config: RuntimeConfigFile;
8
+ providerId: string;
9
+ model: string;
10
+ label: string;
11
+ }): {
12
+ config: RuntimeConfigFile;
13
+ profileId: string;
14
+ };
15
+ export declare function matchingEmbeddingProfileLabel(profile: unknown, providerId: string, model: string): string | undefined;
16
+ /** Remove a saved choice, never its provider or stored memory data. */
17
+ export declare function buildRemovedEmbeddingProfile(config: RuntimeConfigFile, profileId: string): RuntimeConfigFile;
@@ -0,0 +1,77 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { isRecord } from "../../config/utils.js";
3
+ export function readSavedEmbeddingProfiles(config) {
4
+ const models = isRecord(config.models) ? config.models : {};
5
+ return isRecord(models.embeddingProfiles) ? models.embeddingProfiles : {};
6
+ }
7
+ export function listSavedEmbeddingProfiles(config) {
8
+ return Object.freeze(Object.entries(readSavedEmbeddingProfiles(config)).flatMap(([id, profile]) => {
9
+ if (!isRecord(profile))
10
+ return [];
11
+ if (typeof profile.provider !== "string")
12
+ return [];
13
+ if (typeof profile.model !== "string")
14
+ return [];
15
+ return [Object.freeze({
16
+ id,
17
+ label: typeof profile.label === "string" ? profile.label : id,
18
+ providerId: profile.provider,
19
+ model: profile.model,
20
+ })];
21
+ }));
22
+ }
23
+ /** A saved choice is independent of the active memory binding and credentials. */
24
+ export function buildSavedEmbeddingProfile(params) {
25
+ const models = isRecord(params.config.models) ? params.config.models : {};
26
+ const profiles = readSavedEmbeddingProfiles(params.config);
27
+ const profileId = `embedding-${randomUUID()}`;
28
+ return {
29
+ profileId,
30
+ config: {
31
+ ...params.config,
32
+ models: {
33
+ ...models,
34
+ embeddingProfiles: {
35
+ ...profiles,
36
+ [profileId]: { label: params.label, provider: params.providerId, model: params.model },
37
+ },
38
+ },
39
+ },
40
+ };
41
+ }
42
+ export function matchingEmbeddingProfileLabel(profile, providerId, model) {
43
+ if (!isRecord(profile))
44
+ return undefined;
45
+ if (profile.provider !== providerId)
46
+ return undefined;
47
+ if (profile.model !== model)
48
+ return undefined;
49
+ return typeof profile.label === "string" ? profile.label : undefined;
50
+ }
51
+ class SavedEmbeddingProfileRemovalError extends Error {
52
+ statusCode;
53
+ constructor(message, statusCode) {
54
+ super(message);
55
+ this.statusCode = statusCode;
56
+ }
57
+ }
58
+ function hasConfiguredMemoryProfile(config, profileId) {
59
+ if (!isRecord(config.longTermMemory))
60
+ return false;
61
+ const selected = config.longTermMemory.embeddingProfileId;
62
+ return typeof selected === "string" && selected.trim() === profileId;
63
+ }
64
+ function requireRemovableSavedProfile(config, profileId) {
65
+ if (!Object.hasOwn(readSavedEmbeddingProfiles(config), profileId))
66
+ throw new SavedEmbeddingProfileRemovalError("The saved embedding profile no longer exists.", 404);
67
+ if (hasConfiguredMemoryProfile(config, profileId))
68
+ throw new SavedEmbeddingProfileRemovalError("Choose another memory profile before removing this one.", 409);
69
+ }
70
+ /** Remove a saved choice, never its provider or stored memory data. */
71
+ export function buildRemovedEmbeddingProfile(config, profileId) {
72
+ requireRemovableSavedProfile(config, profileId);
73
+ const models = isRecord(config.models) ? config.models : {};
74
+ const profiles = { ...readSavedEmbeddingProfiles(config) };
75
+ delete profiles[profileId];
76
+ return { ...config, models: { ...models, embeddingProfiles: profiles } };
77
+ }