@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,3 +1,4 @@
1
+ import { requiresProviderCredential } from "./runtime-setup-auth.js";
1
2
  import { readFileSync } from "node:fs";
2
3
  import { dirname, resolve } from "node:path";
3
4
  import { buildRuntimeModelConfiguration } from "../../runtime/config/builders.js";
@@ -43,18 +44,21 @@ export function configuredSetupModel(source) {
43
44
  const provider = policy?.providers?.[profile.provider];
44
45
  if (!provider)
45
46
  return undefined;
46
- const apiKeyEnv = provider.apiKeyEnv?.trim() || "OPENAI_API_KEY";
47
+ const apiKeyEnv = provider.apiKeyEnv?.trim() || (provider.type === "openai" ? "OPENAI_API_KEY" : undefined);
47
48
  return {
48
49
  provider: provider.type,
49
50
  model: profile.model,
50
51
  contextWindowTokens: profile.contextWindowTokens,
52
+ supportsThinking: profile.supportsThinking,
53
+ reasoningBudget: profile.generation?.reasoningBudget,
54
+ requiresApiKey: requiresProviderCredential(provider),
51
55
  apiKeyEnv,
52
56
  baseUrl: configuredSetupBaseUrl(provider.baseUrl),
53
57
  };
54
58
  }
55
59
  export function requiresConfiguredCredential(source, rootDir) {
56
60
  const model = configuredSetupModel(source);
57
- if (model?.provider !== "openai")
61
+ if (!model?.requiresApiKey)
58
62
  return false;
59
63
  return !readRuntimeSetupCredential(rootDir, model.apiKeyEnv);
60
64
  }
@@ -4,17 +4,26 @@ export declare class RuntimeSetupRoutes {
4
4
  private readonly service;
5
5
  constructor(service: RuntimeSetupService);
6
6
  status(): Promise<{
7
- providers: {
7
+ providers: ({
8
8
  id: string;
9
9
  label: string;
10
+ description: string;
10
11
  requiresApiKey: boolean;
11
12
  credentialConfigured: boolean;
12
- }[];
13
+ } | {
14
+ id: string;
15
+ label: string;
16
+ requiresApiKey: boolean;
17
+ credentialConfigured: boolean;
18
+ description?: undefined;
19
+ })[];
13
20
  existingModel?: {
14
21
  baseUrl?: string | undefined;
15
22
  provider: string;
16
23
  model: string;
17
24
  contextWindowTokens: number | undefined;
25
+ supportsThinking: boolean | undefined;
26
+ reasoningBudget: import("../../shared/model-reasoning.js").ModelReasoningBudget | undefined;
18
27
  } | undefined;
19
28
  defaultContextWindowTokens: number;
20
29
  editableConnection?: {
@@ -1,3 +1,4 @@
1
+ import { withHttpRequestAbortSignal } from "./request-abort.js";
1
2
  import { assertConfigMutationRequest, ConfigMutationRequestError, } from "./config-mutation-request.js";
2
3
  import { readBody, readJsonBody, sendJson } from "./http.js";
3
4
  import { RuntimeSetupError } from "./runtime-setup-input.js";
@@ -14,11 +15,11 @@ export class RuntimeSetupRoutes {
14
15
  return this.service.finalize(connectionRevision);
15
16
  }
16
17
  async handle(params) {
17
- if (params.route !== "runtime/setup")
18
+ if (!["runtime/setup", "runtime/setup/connection"].includes(params.route))
18
19
  return false;
19
20
  params.response.setHeader("cache-control", "no-store");
20
21
  try {
21
- if (params.method === "GET") {
22
+ if (params.method === "GET" && params.route === "runtime/setup") {
22
23
  sendJson(params.response, 200, {
23
24
  ok: true,
24
25
  setup: await this.service.status(),
@@ -34,6 +35,14 @@ export class RuntimeSetupRoutes {
34
35
  }
35
36
  assertConfigMutationRequest(params.request);
36
37
  const body = readJsonBody(await readBody(params.request, { maxBytes: 16_384 }));
38
+ if (params.route === "runtime/setup/connection") {
39
+ const connection = await withHttpRequestAbortSignal({
40
+ request: params.request, response: params.response, reason: "model_connection_inspection_aborted",
41
+ run: (signal) => this.service.inspectConnection(body, signal),
42
+ });
43
+ sendJson(params.response, 200, { ok: true, connection });
44
+ return true;
45
+ }
37
46
  sendJson(params.response, 200, {
38
47
  ok: true,
39
48
  ...(await this.service.save(body)),
@@ -1,3 +1,4 @@
1
+ import { resolveRuntimeSetupCredentialEnvironment } from "./runtime-setup-auth.js";
1
2
  import { createRuntimeSetupDraft, } from "./runtime-setup-draft.js";
2
3
  import { withConfigFileTransaction, readConfigFileSnapshot, } from "../../runtime/adapters/config-file-transaction.js";
3
4
  import { validateRuntimeSetupPlan } from "./runtime-setup-validation.js";
@@ -103,7 +104,7 @@ async function saveRuntimeSetupScaffold(params, transaction) {
103
104
  const configDirectory = dirname(params.configPath);
104
105
  const models = configMap(params.source.config.models);
105
106
  const providers = configMap(models.providers);
106
- const provider = buildProviderConfig(params.input.provider, params.input.baseUrl);
107
+ const provider = buildProviderConfig(params.input.provider, params.input.baseUrl, resolveRuntimeSetupCredentialEnvironment(params.input.provider, providers[params.input.provider], params.input.apiKey));
107
108
  const ownedProviders = await recoverSetupProviderOwnership(params.source, params.recoveringDraft ? params.recoveryDraft : undefined, transaction.path);
108
109
  const existingProvider = providers[params.input.provider];
109
110
  requireCompatibleProvider(existingProvider, provider, Object.hasOwn(ownedProviders, params.input.provider));
@@ -134,7 +135,7 @@ async function saveRuntimeSetupScaffold(params, transaction) {
134
135
  ...runnerModels,
135
136
  defaults: { ...configMap(runnerModels.defaults), profileId: "default" },
136
137
  };
137
- const modelConfig = buildModelConfig(modelTemplate, params.input.provider, params.input.model, params.input.contextWindowTokens);
138
+ const modelConfig = buildModelConfig(modelTemplate, params.input.provider, params.input.model, params.input.contextWindowTokens, params.input);
138
139
  const rebasedRunner = rebaseRunnerInstructions(runnerTemplate, (file) => relative(dirname(runnerPath), join(params.rootDir, file)));
139
140
  const runnerFiles = await planRunnerFile(runnerPath, rebasedRunner);
140
141
  const plannedFiles = [
@@ -11,17 +11,26 @@ export declare class RuntimeSetupService {
11
11
  constructor(options: RuntimeSetupServiceOptions);
12
12
  private source;
13
13
  status(): Promise<{
14
- providers: {
14
+ providers: ({
15
15
  id: string;
16
16
  label: string;
17
+ description: string;
17
18
  requiresApiKey: boolean;
18
19
  credentialConfigured: boolean;
19
- }[];
20
+ } | {
21
+ id: string;
22
+ label: string;
23
+ requiresApiKey: boolean;
24
+ credentialConfigured: boolean;
25
+ description?: undefined;
26
+ })[];
20
27
  existingModel?: {
21
28
  baseUrl?: string | undefined;
22
29
  provider: string;
23
30
  model: string;
24
31
  contextWindowTokens: number | undefined;
32
+ supportsThinking: boolean | undefined;
33
+ reasoningBudget: import("../../shared/model-reasoning.js").ModelReasoningBudget | undefined;
25
34
  } | undefined;
26
35
  defaultContextWindowTokens: number;
27
36
  editableConnection?: {
@@ -32,20 +41,32 @@ export declare class RuntimeSetupService {
32
41
  status: "required" | "ready";
33
42
  configExists: boolean;
34
43
  }>;
44
+ inspectConnection(body: Record<string, unknown>, signal: AbortSignal): Promise<{
45
+ models: readonly string[];
46
+ }>;
35
47
  finalize(connectionRevision?: string): Promise<boolean>;
36
48
  save(body: Record<string, unknown> | null): Promise<{
37
49
  setup: {
38
- providers: {
50
+ providers: ({
51
+ id: string;
52
+ label: string;
53
+ description: string;
54
+ requiresApiKey: boolean;
55
+ credentialConfigured: boolean;
56
+ } | {
39
57
  id: string;
40
58
  label: string;
41
59
  requiresApiKey: boolean;
42
60
  credentialConfigured: boolean;
43
- }[];
61
+ description?: undefined;
62
+ })[];
44
63
  existingModel?: {
45
64
  baseUrl?: string | undefined;
46
65
  provider: string;
47
66
  model: string;
48
67
  contextWindowTokens: number | undefined;
68
+ supportsThinking: boolean | undefined;
69
+ reasoningBudget: import("../../shared/model-reasoning.js").ModelReasoningBudget | undefined;
49
70
  } | undefined;
50
71
  defaultContextWindowTokens: number;
51
72
  editableConnection?: {
@@ -1,3 +1,5 @@
1
+ import { inspectModelSetupConnection } from "./model-connection-inspection.js";
2
+ import { resolveRuntimeSetupCredentialEnvironment } from "./runtime-setup-auth.js";
1
3
  import { requireRuntimeSetupEditSettled } from "./runtime-setup-edit-recovery.js";
2
4
  import { readDefaultContextWindowTokens } from "../../../scripts/runtime-setup-files.js";
3
5
  import { initializeConfiguredRuntimeDirectories } from "../../../scripts/runtime-setup-directories.js";
@@ -51,6 +53,8 @@ export class RuntimeSetupService {
51
53
  provider: existingModel.provider,
52
54
  model: existingModel.model,
53
55
  contextWindowTokens: existingModel.contextWindowTokens,
56
+ supportsThinking: existingModel.supportsThinking,
57
+ reasoningBudget: existingModel.reasoningBudget,
54
58
  ...(existingModel.baseUrl
55
59
  ? { baseUrl: existingModel.baseUrl }
56
60
  : {}),
@@ -58,6 +62,14 @@ export class RuntimeSetupService {
58
62
  }
59
63
  : {}),
60
64
  providers: [
65
+ {
66
+ id: "llamacpp",
67
+ label: "llama.cpp",
68
+ description: "A separately running llama-server with token reasoning controls",
69
+ requiresApiKey: existingModel?.provider === "llamacpp" && existingModel.requiresApiKey,
70
+ credentialConfigured: existingModel?.provider === "llamacpp" && Boolean(existingModel.apiKeyEnv) &&
71
+ await hasRuntimeSetupCredential(this.options.rootDir, existingModel.apiKeyEnv),
72
+ },
61
73
  {
62
74
  id: "ollama",
63
75
  label: "Ollama",
@@ -68,11 +80,14 @@ export class RuntimeSetupService {
68
80
  id: "openai",
69
81
  label: "OpenAI",
70
82
  requiresApiKey: true,
71
- credentialConfigured: await hasRuntimeSetupCredential(this.options.rootDir, existingModel?.apiKeyEnv),
83
+ credentialConfigured: await hasRuntimeSetupCredential(this.options.rootDir, existingModel?.provider === "openai" ? existingModel.apiKeyEnv : undefined),
72
84
  },
73
85
  ],
74
86
  };
75
87
  }
88
+ async inspectConnection(body, signal) {
89
+ return inspectModelSetupConnection({ rootDir: this.options.rootDir, configPath: this.source().path }, body, signal);
90
+ }
76
91
  async finalize(connectionRevision) {
77
92
  return withFileLock(join(this.options.rootDir, ".runtime-setup.lock"), async () => {
78
93
  const source = this.source();
@@ -117,16 +132,11 @@ export class RuntimeSetupService {
117
132
  }
118
133
  const requestedProviders = setupConfigMap(setupConfigMap(source.config.models).providers);
119
134
  const requestedProvider = setupConfigMap(requestedProviders[input.provider]);
120
- let apiKeyEnv = existingModel?.apiKeyEnv;
121
- if (editingDraft)
122
- apiKeyEnv =
123
- typeof requestedProvider.apiKeyEnv === "string"
124
- ? requestedProvider.apiKeyEnv
125
- : undefined;
135
+ const apiKeyEnv = resolveRuntimeSetupCredentialEnvironment(input.provider, requestedProvider, input.apiKey);
126
136
  const hasCredential = input.apiKey ||
127
137
  (await hasRuntimeSetupCredential(this.options.rootDir, apiKeyEnv));
128
- if (input.provider === "openai" && !hasCredential) {
129
- throw new RuntimeSetupError("setup_credential_required", "Enter your OpenAI API key to finish setup.");
138
+ if ((input.provider === "openai" || apiKeyEnv !== undefined) && !hasCredential) {
139
+ throw new RuntimeSetupError("setup_credential_required", "Enter the API key for this connection to finish setup.");
130
140
  }
131
141
  const configuredPath = this.options.getConfigPath();
132
142
  const shouldUseLocalConfig = !source.exists && !configuredPath;
@@ -1,6 +1,8 @@
1
1
  export type SetupEmbeddingInput = Readonly<{
2
2
  providerId?: string;
3
- provider?: "openai" | "ollama";
3
+ provider?: "openai" | "ollama" | "llamacpp";
4
+ newProviderId?: string;
5
+ useApiKey?: boolean;
4
6
  model: string;
5
7
  baseUrl?: string;
6
8
  apiKey?: string;
@@ -15,7 +15,7 @@ function hasOneProviderSelection(providerId, provider) {
15
15
  return provider !== undefined;
16
16
  }
17
17
  function isSupportedProvider(provider) {
18
- return provider === "openai" || provider === "ollama";
18
+ return (provider === "openai" || provider === "ollama" || provider === "llamacpp");
19
19
  }
20
20
  function isUsableModelIdentifier(model) {
21
21
  if (!model || model.length > 256)
@@ -30,7 +30,15 @@ function isSafeCredential(apiKey) {
30
30
  return !/[\u0000-\u0020\u007f'"`]/u.test(apiKey);
31
31
  }
32
32
  export function parseSetupEmbeddingInput(body) {
33
- const allowed = ["providerId", "provider", "model", "baseUrl", "apiKey"];
33
+ const allowed = [
34
+ "providerId",
35
+ "provider",
36
+ "model",
37
+ "baseUrl",
38
+ "apiKey",
39
+ "newProviderId",
40
+ "useApiKey",
41
+ ];
34
42
  if (Object.keys(body).some((key) => !allowed.includes(key))) {
35
43
  throw new RuntimeSetupError("invalid_embedding_input", "The embedding update contains unsupported fields.");
36
44
  }
@@ -40,8 +48,9 @@ export function parseSetupEmbeddingInput(body) {
40
48
  throw new RuntimeSetupError("invalid_embedding_provider", "Choose one configured provider or one provider type.");
41
49
  }
42
50
  if (provider && !isSupportedProvider(provider)) {
43
- throw new RuntimeSetupError("invalid_embedding_provider", "Choose OpenAI or Ollama when adding a provider.");
51
+ throw new RuntimeSetupError("invalid_embedding_provider", "Choose OpenAI, Ollama or llama.cpp when adding a provider.");
44
52
  }
53
+ const newConnection = parseNewLlamaEmbeddingConnection(body, provider);
45
54
  const model = optionalInputString(body, "model");
46
55
  if (!isUsableModelIdentifier(model)) {
47
56
  throw new RuntimeSetupError("invalid_embedding_model", "Enter a model ID without spaces or control characters.");
@@ -51,8 +60,8 @@ export function parseSetupEmbeddingInput(body) {
51
60
  throw new RuntimeSetupError("invalid_embedding_credential", "The API key contains unsupported characters.");
52
61
  }
53
62
  const address = optionalInputString(body, "baseUrl");
54
- if (address && provider !== "ollama") {
55
- throw new RuntimeSetupError("invalid_embedding_address", "An address can be supplied when adding an Ollama provider.");
63
+ if (address && provider !== "ollama" && provider !== "llamacpp") {
64
+ throw new RuntimeSetupError("invalid_embedding_address", "An address can be supplied when adding an Ollama or llama.cpp provider.");
56
65
  }
57
66
  let baseUrl;
58
67
  try {
@@ -63,9 +72,32 @@ export function parseSetupEmbeddingInput(body) {
63
72
  }
64
73
  return {
65
74
  ...(providerId ? { providerId } : {}),
66
- ...(provider ? { provider: provider } : {}),
75
+ ...(provider
76
+ ? { provider: provider }
77
+ : {}),
78
+ ...newConnection,
67
79
  model,
68
80
  ...(baseUrl ? { baseUrl } : {}),
69
81
  ...(apiKey ? { apiKey } : {}),
70
82
  };
71
83
  }
84
+ function parseNewLlamaEmbeddingConnection(body, provider) {
85
+ const newProviderId = optionalInputString(body, "newProviderId");
86
+ const useApiKey = body.useApiKey;
87
+ const hasConnectionIntent = newProviderId !== undefined || useApiKey !== undefined;
88
+ if (provider !== "llamacpp" && hasConnectionIntent)
89
+ throw new RuntimeSetupError("invalid_embedding_input", "New connection identity and authentication apply only to a new llama.cpp connection.");
90
+ if (provider !== "llamacpp")
91
+ return {};
92
+ const hasValidNewProviderId = typeof newProviderId === "string" &&
93
+ newProviderId.length <= 128 &&
94
+ /^[A-Za-z][A-Za-z0-9._-]*$/u.test(newProviderId) &&
95
+ !["__proto__", "prototype", "constructor"].includes(newProviderId);
96
+ if (!hasValidNewProviderId)
97
+ throw new RuntimeSetupError("invalid_embedding_provider", "Enter a connection ID starting with a letter and containing only letters, numbers, dots, underscores or hyphens.");
98
+ if (useApiKey !== undefined && typeof useApiKey !== "boolean")
99
+ throw new RuntimeSetupError("invalid_embedding_input", "The API key choice must be true or false.");
100
+ if (useApiKey === false && body.apiKey !== undefined)
101
+ throw new RuntimeSetupError("invalid_embedding_credential", "The API key conflicts with the no-authentication choice.");
102
+ return { newProviderId, ...(useApiKey !== undefined ? { useApiKey } : {}) };
103
+ }
@@ -0,0 +1,11 @@
1
+ import type { SetupEmbeddingInput } from "./setup-embedding-input.js";
2
+ /** A new embedding server has its own explicit, replayable connection identity. */
3
+ export declare function planNewLlamaEmbeddingProvider(providers: Record<string, unknown>, input: SetupEmbeddingInput): {
4
+ providerId: string;
5
+ provider: Record<string, unknown>;
6
+ };
7
+ /** A saved llama.cpp connection keeps its existing optional authentication binding. */
8
+ export declare function commitLlamaEmbeddingProvider(options: {
9
+ rootDir: string;
10
+ configPath: string;
11
+ }, provider: Record<string, unknown>, input: SetupEmbeddingInput, commit: () => Promise<unknown>): Promise<void>;
@@ -0,0 +1,53 @@
1
+ import { buildProviderConfig } from "../../../scripts/runtime-setup-files.js";
2
+ import { isRecord } from "../../runtime/config/utils.js";
3
+ import { hasProviderCredentialBinding, isolatedProviderCredentialName, } from "./provider-credential-identity.js";
4
+ import { requiresProviderCredential } from "./runtime-setup-auth.js";
5
+ import { assertRuntimeSetupCredentialFile, hasRuntimeSetupCredential, commitRuntimeSetupCredentials, } from "./runtime-setup-credentials.js";
6
+ import { RuntimeSetupError } from "./runtime-setup-input.js";
7
+ /** A new embedding server has its own explicit, replayable connection identity. */
8
+ export function planNewLlamaEmbeddingProvider(providers, input) {
9
+ const providerId = input.newProviderId;
10
+ const useApiKey = input.useApiKey === true || Boolean(input.apiKey);
11
+ const apiKeyEnv = useApiKey
12
+ ? isolatedProviderCredentialName(providerId)
13
+ : undefined;
14
+ const provider = buildProviderConfig("llamacpp", input.baseUrl, apiKeyEnv);
15
+ const existing = providers[providerId];
16
+ if (existing !== undefined) {
17
+ requireMatchingLlamaEmbeddingConnection(existing, provider);
18
+ return { providerId, provider: existing };
19
+ }
20
+ if (apiKeyEnv && hasProviderCredentialBinding(providers, apiKeyEnv))
21
+ throw new RuntimeSetupError("embedding_credential_conflict", "This connection's credential name is already used by another provider. Choose another connection ID.", 409);
22
+ return { providerId, provider };
23
+ }
24
+ function requireMatchingLlamaEmbeddingConnection(existing, requested) {
25
+ if (isRecord(existing) &&
26
+ existing.type === requested.type &&
27
+ existing.baseUrl === requested.baseUrl &&
28
+ existing.apiKeyEnv === requested.apiKeyEnv)
29
+ return;
30
+ throw new RuntimeSetupError("embedding_provider_conflict", "That connection ID already has different settings. Choose its saved connection or use another ID. Existing settings were preserved.", 409);
31
+ }
32
+ /** A saved llama.cpp connection keeps its existing optional authentication binding. */
33
+ export async function commitLlamaEmbeddingProvider(options, provider, input, commit) {
34
+ if (!requiresProviderCredential(provider)) {
35
+ if (input.apiKey)
36
+ throw new RuntimeSetupError("invalid_embedding_credential", "This saved connection has no API key binding. Add a separate connection to use authentication.");
37
+ await commit();
38
+ return;
39
+ }
40
+ const apiKeyEnv = provider.apiKeyEnv;
41
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(apiKeyEnv))
42
+ throw new RuntimeSetupError("invalid_embedding_credential_environment", "The configured credential environment name is invalid. Its settings were preserved.");
43
+ await assertRuntimeSetupCredentialFile(options.rootDir);
44
+ if (!input.apiKey &&
45
+ !(await hasRuntimeSetupCredential(options.rootDir, apiKeyEnv)))
46
+ throw new RuntimeSetupError("embedding_credential_required", "Enter the API key for this llama.cpp connection.");
47
+ await commitRuntimeSetupCredentials({
48
+ ...options,
49
+ apiKeyEnv,
50
+ apiKey: input.apiKey,
51
+ preserveExistingCredential: true,
52
+ }, commit);
53
+ }
@@ -1,3 +1,4 @@
1
+ import { planNewLlamaEmbeddingProvider, commitLlamaEmbeddingProvider, } from "./setup-embedding-llamacpp.js";
1
2
  import { buildProviderConfig } from "../../../scripts/runtime-setup-files.js";
2
3
  import { createFileLongTermMemoryOnboardingConfigRepository } from "../../runtime/adapters/long-term-memory/onboarding-config-repository.js";
3
4
  import { isRecord } from "../../runtime/config/utils.js";
@@ -57,8 +58,10 @@ function requirePreservedProviderSettings(provider, input) {
57
58
  if (input.baseUrl && input.baseUrl !== provider.baseUrl) {
58
59
  throw new RuntimeSetupError("embedding_provider_conflict", "That provider already uses another address. Choose its saved connection or edit it in Settings.", 409);
59
60
  }
60
- if (input.apiKey && provider.type !== "openai") {
61
- throw new RuntimeSetupError("invalid_embedding_credential", "Only an OpenAI connection accepts an API key here.");
61
+ if (input.apiKey &&
62
+ provider.type !== "openai" &&
63
+ provider.type !== "llamacpp") {
64
+ throw new RuntimeSetupError("invalid_embedding_credential", "This connection does not support an API key.");
62
65
  }
63
66
  }
64
67
  /** Adds only the requested provider; chat profiles and existing provider settings stay intact. */
@@ -66,14 +69,19 @@ export async function prepareSetupEmbeddingProvider(options, input) {
66
69
  const repository = createFileLongTermMemoryOnboardingConfigRepository(options);
67
70
  const snapshot = await repository.read();
68
71
  const providers = readProviderMap(snapshot.config.models);
69
- const providerId = resolveSetupEmbeddingProviderId(providers, input);
72
+ const llamaConnection = input.provider === "llamacpp"
73
+ ? planNewLlamaEmbeddingProvider(providers, input)
74
+ : undefined;
75
+ const providerId = llamaConnection?.providerId ??
76
+ resolveSetupEmbeddingProviderId(providers, input);
70
77
  const existing = providers[providerId];
71
78
  if (input.providerId && !isRecord(existing)) {
72
- throw new RuntimeSetupError("embedding_provider_not_configured", "Choose a configured provider or add an OpenAI or Ollama connection.", 404);
79
+ throw new RuntimeSetupError("embedding_provider_not_configured", "Choose a configured provider or add an OpenAI, Ollama or llama.cpp connection.", 404);
73
80
  }
74
- const provider = isRecord(existing)
75
- ? existing
76
- : buildProviderConfig(input.provider, input.baseUrl);
81
+ const provider = llamaConnection?.provider ??
82
+ (isRecord(existing)
83
+ ? existing
84
+ : buildProviderConfig(input.provider, input.baseUrl));
77
85
  const isolatedCredential = needsIsolatedEmbeddingCredential(existing, input, providerId);
78
86
  if (isolatedCredential)
79
87
  provider.apiKeyEnv = resolveIsolatedEmbeddingCredentialName(providers, providerId);
@@ -105,8 +113,14 @@ export async function prepareSetupEmbeddingProvider(options, input) {
105
113
  preserveExistingCredential: true,
106
114
  });
107
115
  }
108
- if (!isRecord(existing))
109
- await repository.write(candidate, snapshot.config);
116
+ const persistProvider = async () => {
117
+ if (!isRecord(existing))
118
+ await repository.write(candidate, snapshot.config);
119
+ };
120
+ if (provider.type === "llamacpp")
121
+ await commitLlamaEmbeddingProvider({ rootDir: options.rootDir, configPath: snapshot.path }, provider, input, persistProvider);
122
+ else
123
+ await persistProvider();
110
124
  return {
111
125
  providerId,
112
126
  savedProvider: { id: providerId, type: provider.type },
@@ -1,8 +1,12 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
- import { SetupEmbeddingService } from "./setup-embedding-service.js";
2
+ import type { LongTermMemoryOnboardingResult } from "../../runtime/long-term-memory/onboarding/contracts.js";
3
+ type EmbeddingConnectionService = {
4
+ enable(body: Record<string, unknown>, signal: AbortSignal): Promise<Pick<LongTermMemoryOnboardingResult, "status" | "probe" | "restartRequired">>;
5
+ };
3
6
  export declare class SetupEmbeddingRoutes {
4
7
  private readonly service;
5
- constructor(service: SetupEmbeddingService);
8
+ private readonly route;
9
+ constructor(service: EmbeddingConnectionService, route?: string);
6
10
  handle(params: {
7
11
  method: string;
8
12
  route: string;
@@ -10,3 +14,4 @@ export declare class SetupEmbeddingRoutes {
10
14
  response: ServerResponse;
11
15
  }): Promise<boolean>;
12
16
  }
17
+ export {};
@@ -2,14 +2,16 @@ import { assertConfigMutationRequest, ConfigMutationRequestError, } from "./conf
2
2
  import { readBody, readJsonBody, sendJson } from "./http.js";
3
3
  import { withHttpRequestAbortSignal } from "./request-abort.js";
4
4
  import { RuntimeSetupError } from "./runtime-setup-input.js";
5
- import { SetupEmbeddingFailure, } from "./setup-embedding-service.js";
5
+ import { SetupEmbeddingFailure } from "./setup-embedding-service.js";
6
6
  export class SetupEmbeddingRoutes {
7
7
  service;
8
- constructor(service) {
8
+ route;
9
+ constructor(service, route = "runtime/setup/embedding") {
9
10
  this.service = service;
11
+ this.route = route;
10
12
  }
11
13
  async handle(params) {
12
- if (params.route !== "runtime/setup/embedding")
14
+ if (params.route !== this.route)
13
15
  return false;
14
16
  params.response.setHeader("cache-control", "no-store");
15
17
  try {
@@ -22,6 +22,7 @@ export declare class SetupEmbeddingService {
22
22
  providerId?: string;
23
23
  model?: string;
24
24
  providers: readonly import("../../runtime/index.js").LongTermMemoryOnboardingProvider[];
25
+ embeddingProfiles: readonly import("../../runtime/index.js").SavedMemoryEmbeddingProfile[];
25
26
  }>;
26
27
  probe: Readonly<{
27
28
  modelFingerprint: string;
@@ -83,7 +83,7 @@ Provider configs should reference env var names:
83
83
  }
84
84
  ```
85
85
 
86
- Ollama and OpenAI adapters are included. A host may register another adapter
86
+ Ollama, OpenAI and llama.cpp adapters are included. See [llama.cpp setup and reasoning budgets](llamacpp.md). A host may register another adapter
87
87
  through `@abot-ai/runtime/model-gateway`; its config uses that adapter's `type` and
88
88
  may place adapter-owned JSON-safe values under `settings`. Merely naming an
89
89
  unknown type never selects a fallback provider.
@@ -610,13 +610,15 @@ The common slots and their first tuning targets are:
610
610
  | Context compaction | `context.compact` | Structured format and preservation of facts that later steps still require; physical capacity remains profile-owned. |
611
611
  | Literal tool payloads | `toolPayload.raw` | Literal-payload instructions and any intentional provider-native output controls. Verify the produced payload or artifact directly, not the model's description of it. |
612
612
 
613
- New OpenAI profiles created through CLI setup or Web onboarding set
614
- `calibration["context.compact"].timeoutMs` to `300000` (five minutes). This
615
- profile override takes precedence over the shared 180-second compaction
616
- default; other steps retain their own timeouts. An explicit template timeout
617
- is preserved, and existing profiles are not migrated automatically. To apply
618
- the same setting to an existing GPT profile, add `"timeoutMs": 300000` to its
619
- `calibration["context.compact"]` object. This does not change reasoning effort.
613
+ New OpenAI profiles created through CLI setup, Web onboarding, or model
614
+ addition set `timeoutMs` to `300000` (five minutes) in both
615
+ `calibration["context.compact"]` and `calibration["toolPayload.raw"]`. These
616
+ profile overrides take precedence over the shared 180-second compaction and
617
+ 90-second literal-payload defaults; other steps retain their own timeouts.
618
+ Explicit template timeouts are preserved, and existing profiles are not
619
+ migrated automatically. To apply these settings to an existing GPT profile,
620
+ add `"timeoutMs": 300000` to each of those calibration objects, preserving
621
+ their other fields. This does not change reasoning effort.
620
622
 
621
623
  `timeoutMs` addresses provider latency only; raising it does not improve model
622
624
  reasoning. Top-level `contextWindowTokens` declares the concrete model
@@ -13,6 +13,7 @@ This guide covers three entry points:
13
13
  - TypeScript-capable host project if using the library directly
14
14
  - Optional: an installed and running Ollama service for Ollama model profiles
15
15
  - Optional: OpenAI API key for OpenAI model profiles
16
+ - Optional: a running llama.cpp server for [llama.cpp model profiles](llamacpp.md)
16
17
 
17
18
  ## Prepare Ollama (If Selected)
18
19
 
@@ -64,12 +65,15 @@ npx abot start
64
65
 
65
66
  Open [http://127.0.0.1:5177](http://127.0.0.1:5177). The command binds to
66
67
  loopback by default. On a fresh installation, the setup wizard lets you select
67
- OpenAI or Ollama, enter a concrete model ID, and save the connection. OpenAI
68
+ OpenAI, Ollama or llama.cpp, enter a concrete model ID, and save the connection. OpenAI
68
69
  accepts the API key directly in the form and stores it privately in the
69
70
  consumer's `.env`. The key is not returned to the browser or stored in runtime
70
71
  JSON. Existing OpenAI configurations missing a key open the same completion flow.
71
72
 
72
- For Ollama, the server must already be running with the selected model available.
73
+ For Ollama and llama.cpp, the server must already be running with the selected model available.
74
+ Every provider's model registration includes an explicit thinking-support checkbox.
75
+ llama.cpp additionally offers per-segment token budgets and a metadata-only
76
+ connection check; see [llama.cpp setup](llamacpp.md).
73
77
  Its address is resolved from the ABot host, even when you use the UI from a phone.
74
78
  Continue through the optional **Embedding** step to configure semantic memory,
75
79
  or choose to set it up later. **Plugins** starts with all tools selected for a
@@ -93,7 +97,7 @@ managed by a separate process remains under that process's lifecycle; the UI
93
97
  reports when saved changes require that owner to restart.
94
98
 
95
99
  In the Web UI, open **Models → Add model** to add another model.
96
- Choose a saved provider connection or create a new OpenAI/Ollama connection.
100
+ Choose a saved provider connection or create a new OpenAI/Ollama/llama.cpp connection.
97
101
  Each provider card also has an **Add model** shortcut. Review the model, then
98
102
  choose **Save and apply**. Saved API keys are reused; existing model profiles and
99
103
  the default model are preserved. The added model is selected in the Models list.
@@ -133,8 +137,10 @@ npx abot memory enable --provider <provider-id> --model <embedding-model-id>
133
137
 
134
138
  ABot does not install or choose the embedding model. The enable command performs
135
139
  a real probe, writes config only after it succeeds, and reports that the Runtime
136
- must be restarted. OpenAI users enter the embedding model id manually; Ollama
137
- users can discover model ids installed at the configured Ollama endpoint.
140
+ must be restarted. OpenAI and llama.cpp users enter the embedding model id
141
+ manually; Ollama users can discover model ids installed at the configured Ollama
142
+ endpoint. For llama.cpp, use an embedding-enabled server and, if needed, a
143
+ [separate connection from chat](llamacpp.md#embeddings-and-semantic-memory).
138
144
 
139
145
  See [Passive Long-Term Memory](long-term-memory.md) before enabling persistence.
140
146