@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
package/README.md CHANGED
@@ -68,7 +68,7 @@ You need:
68
68
 
69
69
  - Node.js `^20.19.0` or `>=22.12.0`; Node.js 21 is not supported
70
70
  - npm
71
- - An OpenAI or Ollama model connection
71
+ - An OpenAI, Ollama or llama.cpp model connection
72
72
 
73
73
  Create a directory for your ABot installation:
74
74
 
@@ -89,6 +89,10 @@ choosing tools, and optionally enabling semantic memory.
89
89
  - **Ollama:** install and start Ollama separately, download your chosen model,
90
90
  and provide an address reachable from the Runtime.
91
91
 
92
+ - **llama.cpp:** run llama-server separately and connect its model alias and
93
+ reachable origin. Thinking-capable models can use a token budget. See
94
+ [llama.cpp setup](docs/llamacpp.md).
95
+
92
96
  ABot includes the provider adapters. You supply the model and any required
93
97
  credentials. Configuration and runtime state are stored in your project.
94
98
 
@@ -1,4 +1,6 @@
1
1
  import { mergeRuntimeModelAddition, parseRuntimeModelProfileId, } from "./runtime-model-addition.js";
2
+ import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
3
+ import { parseSetupCommandOptions, requireSetupCommandProviderOptions } from "./runtime-setup-command-options.js";
2
4
  import { constants } from "node:fs";
3
5
  import { access, mkdir } from "node:fs/promises";
4
6
  import { dirname, join, resolve } from "node:path";
@@ -17,6 +19,8 @@ function requireValue(argv, index, flag) {
17
19
  return value;
18
20
  }
19
21
  function parseArgs(argv, commandMode) {
22
+ const shared = parseSetupCommandOptions(argv);
23
+ argv = shared.argv;
20
24
  let rootDir = process.cwd();
21
25
  let provider;
22
26
  let model;
@@ -91,10 +95,11 @@ function parseArgs(argv, commandMode) {
91
95
  throw new Error("--model is required");
92
96
  if (!profile)
93
97
  throw new Error("--profile is required");
94
- if (baseUrl && provider !== "ollama") {
95
- throw new Error("--base-url is supported only with --provider ollama");
98
+ if (baseUrl && !supportsProviderAddress(provider)) {
99
+ throw new Error("--base-url is supported only with --provider ollama or llamacpp");
96
100
  }
97
- return { rootDir, provider, model, profile, baseUrl, setDefault };
101
+ requireSetupCommandProviderOptions(provider, shared);
102
+ return { ...shared, rootDir, provider, model, profile, baseUrl, setDefault };
98
103
  }
99
104
  function printHelp(commandMode) {
100
105
  console.log([
@@ -165,14 +170,14 @@ export async function runAddRuntimeModel(argv = process.argv.slice(2), runOption
165
170
  const merged = mergeRuntimeModelAddition(runtimeConfig, {
166
171
  profileId: options.profile,
167
172
  providerId: options.provider,
168
- provider: buildProviderConfig(options.provider, options.baseUrl),
173
+ provider: buildProviderConfig(options.provider, options.baseUrl, options.apiKeyEnv),
169
174
  profile: { configRef: `./models/${options.profile}.config.json` },
170
175
  baseUrl: options.baseUrl,
171
176
  });
172
177
  const nextRunnerConfig = options.setDefault
173
178
  ? selectDefaultProfile(runnerConfig, options.profile)
174
179
  : runnerConfig;
175
- const modelConfig = buildModelConfig(modelTemplate, options.provider, options.model);
180
+ const modelConfig = buildModelConfig(modelTemplate, options.provider, options.model, options.contextWindowTokens, options.modelOptions);
176
181
  await mkdir(dirname(modelConfigPath), { recursive: true });
177
182
  await writeJsonObject(modelConfigPath, modelConfig, { exclusive: true });
178
183
  await writeJsonObject(runtimeConfigPath, merged.config);
@@ -188,6 +193,7 @@ export async function runAddRuntimeModel(argv = process.argv.slice(2), runOption
188
193
  ...(options.provider === "openai"
189
194
  ? ["credential: set OPENAI_API_KEY in .env"]
190
195
  : []),
196
+ ...(options.apiKeyEnv ? ["credential: set " + options.apiKeyEnv + " in .env"] : []),
191
197
  getRestartInstruction(commandMode),
192
198
  ].join("\n"));
193
199
  }
@@ -1,3 +1,5 @@
1
+ import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
2
+ import { parseSetupCommandOptions, requireSetupCommandProviderOptions } from "./runtime-setup-command-options.js";
1
3
  import { constants } from "node:fs";
2
4
  import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
3
5
  import { dirname, join, relative, resolve } from "node:path";
@@ -22,6 +24,8 @@ function requireValue(argv, index, flag) {
22
24
  return value;
23
25
  }
24
26
  function parseArgs(argv, commandMode) {
27
+ const shared = parseSetupCommandOptions(argv);
28
+ argv = shared.argv;
25
29
  let rootDir = process.cwd();
26
30
  let provider;
27
31
  let model;
@@ -88,10 +92,11 @@ function parseArgs(argv, commandMode) {
88
92
  if (!model) {
89
93
  throw new Error("--model is required");
90
94
  }
91
- if (baseUrl && provider !== "ollama") {
92
- throw new Error("--base-url is supported only with --provider ollama");
95
+ if (baseUrl && !supportsProviderAddress(provider)) {
96
+ throw new Error("--base-url is supported only with --provider ollama or llamacpp");
93
97
  }
94
- return { rootDir, provider, model, baseUrl, force };
98
+ requireSetupCommandProviderOptions(provider, shared);
99
+ return { ...shared, rootDir, provider, model, baseUrl, force };
95
100
  }
96
101
  function printHelp(commandMode) {
97
102
  console.log([
@@ -108,7 +113,7 @@ function printHelp(commandMode) {
108
113
  "- .runtime/prod and .runtime/dev",
109
114
  "",
110
115
  "Both --provider and --model are required; the runtime has no built-in model choice.",
111
- "--base-url configures the Ollama origin when Ollama runs outside the runtime host.",
116
+ "--base-url configures the Ollama or llama.cpp origin reachable from the Runtime.",
112
117
  ].join("\n"));
113
118
  }
114
119
  async function exists(path) {
@@ -147,12 +152,12 @@ async function ensureEnvLine(envPath) {
147
152
  await writeFile(envPath, next, "utf-8");
148
153
  return true;
149
154
  }
150
- async function configureRuntimeProvider(configPath, provider, baseUrl) {
155
+ async function configureRuntimeProvider(configPath, provider, baseUrl, apiKeyEnv) {
151
156
  const config = await readJsonObject(configPath);
152
157
  const models = isRecord(config.models) ? config.models : {};
153
158
  const { defaults: _ignoredDefaults, ...modelSettings } = models;
154
159
  const providers = {
155
- [provider]: buildProviderConfig(provider, baseUrl),
160
+ [provider]: buildProviderConfig(provider, baseUrl, apiKeyEnv),
156
161
  };
157
162
  config.models = {
158
163
  ...modelSettings,
@@ -165,9 +170,9 @@ async function configureRuntimeProvider(configPath, provider, baseUrl) {
165
170
  };
166
171
  await writeJsonObject(configPath, config);
167
172
  }
168
- async function configureModelProfile(configPath, provider, model) {
173
+ async function configureModelProfile(configPath, provider, model, options) {
169
174
  const config = await readJsonObject(configPath);
170
- await writeJsonObject(configPath, buildModelConfig(config, provider, model));
175
+ await writeJsonObject(configPath, buildModelConfig(config, provider, model, options.contextWindowTokens, options.modelOptions));
171
176
  }
172
177
  async function configureRunner(configPath) {
173
178
  const config = await readJsonObject(configPath);
@@ -221,13 +226,13 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
221
226
  }),
222
227
  })));
223
228
  if (configStatus !== "kept") {
224
- await configureRuntimeProvider(configPath, options.provider, options.baseUrl);
229
+ await configureRuntimeProvider(configPath, options.provider, options.baseUrl, options.apiKeyEnv);
225
230
  }
226
231
  if (requestRunnerConfigStatus !== "kept") {
227
232
  await configureRunner(requestRunnerConfigPath);
228
233
  }
229
234
  if (modelConfigStatus !== "kept") {
230
- await configureModelProfile(modelConfigPath, options.provider, options.model);
235
+ await configureModelProfile(modelConfigPath, options.provider, options.model, options);
231
236
  }
232
237
  const runtimeDirectories = await initializeConfiguredRuntimeDirectories(options.rootDir, configPath);
233
238
  console.log([
@@ -1,3 +1,4 @@
1
+ import { supportsProviderAddress } from "./runtime-setup-provider-options.js";
1
2
  import { isRecord } from "./runtime-setup-files.js";
2
3
  export function parseRuntimeModelProfileId(value) {
3
4
  const profile = value.trim();
@@ -28,11 +29,15 @@ export function mergeRuntimeModelAddition(runtimeConfig, input) {
28
29
  existingProvider.type !== input.provider.type) {
29
30
  throw new Error(`provider id is already configured with a different adapter: ${input.providerId}; no files were changed`);
30
31
  }
31
- if (input.provider.type === "ollama" &&
32
+ if (supportsProviderAddress(String(input.provider.type)) &&
32
33
  input.baseUrl &&
33
34
  existingProvider.baseUrl !== input.baseUrl) {
34
35
  throw new Error(`provider ${input.providerId} already uses a different base URL; no files were changed`);
35
36
  }
37
+ const changesLlamaCredentialBinding = input.provider.type === "llamacpp" &&
38
+ input.provider.apiKeyEnv !== undefined && input.provider.apiKeyEnv !== existingProvider.apiKeyEnv;
39
+ if (changesLlamaCredentialBinding)
40
+ throw new Error("provider " + input.providerId + " already uses a different credential binding; no files were changed");
36
41
  }
37
42
  return {
38
43
  providerAdded: existingProvider === undefined,
@@ -0,0 +1,11 @@
1
+ import { type SetupModelOptions } from "./runtime-setup-model-options.js";
2
+ export type SetupCommandOptions = Readonly<{
3
+ contextWindowTokens?: number;
4
+ apiKeyEnv?: string;
5
+ modelOptions: SetupModelOptions;
6
+ }>;
7
+ /** Reads shared setup flags before the existing command-specific argument parser. */
8
+ export declare function parseSetupCommandOptions(args: string[]): SetupCommandOptions & {
9
+ argv: string[];
10
+ };
11
+ export declare function requireSetupCommandProviderOptions(provider: string, options: SetupCommandOptions): void;
@@ -0,0 +1,41 @@
1
+ import { parseContextWindowTokens } from "./runtime-setup-files.js";
2
+ import { parseProviderCredentialEnvironment } from "./runtime-setup-provider-options.js";
3
+ import { parseCliReasoningBudget, parseSetupModelOptions } from "./runtime-setup-model-options.js";
4
+ /** Reads shared setup flags before the existing command-specific argument parser. */
5
+ export function parseSetupCommandOptions(args) {
6
+ const argv = [];
7
+ const options = {};
8
+ let contextWindowTokens;
9
+ let apiKeyEnv;
10
+ const flags = ["--supports-thinking", "--reasoning-budget", "--context-window", "--api-key-env"];
11
+ for (let index = 0; index < args.length; index += 1) {
12
+ const arg = args[index];
13
+ const flag = arg.split("=")[0];
14
+ if (!flags.includes(flag)) {
15
+ argv.push(arg);
16
+ continue;
17
+ }
18
+ const hasInlineValue = arg.startsWith(flag + "=");
19
+ const value = hasInlineValue ? arg.slice(flag.length + 1) : args[++index];
20
+ if (!value || value.startsWith("--"))
21
+ throw new Error(flag + " requires a value");
22
+ if (flag === "--supports-thinking") {
23
+ if (value !== "true" && value !== "false")
24
+ throw new Error("--supports-thinking must be true or false");
25
+ options.supportsThinking = value === "true";
26
+ }
27
+ if (flag === "--reasoning-budget")
28
+ options.reasoningBudget = parseCliReasoningBudget(value);
29
+ if (flag === "--context-window")
30
+ contextWindowTokens = parseContextWindowTokens(Number(value));
31
+ if (flag === "--api-key-env")
32
+ apiKeyEnv = parseProviderCredentialEnvironment(value);
33
+ }
34
+ return { argv, contextWindowTokens, apiKeyEnv, modelOptions: parseSetupModelOptions(options) };
35
+ }
36
+ export function requireSetupCommandProviderOptions(provider, options) {
37
+ if (options.apiKeyEnv && provider !== "llamacpp")
38
+ throw new Error("--api-key-env is supported only with --provider llamacpp");
39
+ if (options.modelOptions.reasoningBudget && provider !== "llamacpp")
40
+ throw new Error("--reasoning-budget is supported only with --provider llamacpp");
41
+ }
@@ -1,3 +1,4 @@
1
+ import { type SetupModelOptions } from "./runtime-setup-model-options.js";
1
2
  export type Provider = string;
2
3
  export type JsonObject = Record<string, unknown>;
3
4
  export declare const DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES: readonly string[];
@@ -9,7 +10,7 @@ export declare function readJsonObject(path: string): Promise<JsonObject>;
9
10
  export declare function writeJsonObject(path: string, value: JsonObject, options?: Readonly<{
10
11
  exclusive?: boolean;
11
12
  }>): Promise<void>;
12
- export declare function buildProviderConfig(provider: Provider, baseUrl?: string): JsonObject;
13
- export declare function buildModelConfig(template: JsonObject, provider: Provider, model: string, contextWindowTokens?: number): JsonObject;
13
+ export declare function buildProviderConfig(provider: Provider, baseUrl?: string, apiKeyEnv?: string): JsonObject;
14
+ export declare function buildModelConfig(template: JsonObject, provider: Provider, model: string, contextWindowTokens?: number, modelOptions?: SetupModelOptions): JsonObject;
14
15
  export declare function parseContextWindowTokens(value: unknown): number | undefined;
15
16
  export declare function readDefaultContextWindowTokens(): Promise<number>;
@@ -1,6 +1,8 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { readFile, writeFile } from "node:fs/promises";
3
3
  import { dirname, join, resolve } from "node:path";
4
+ import { defaultProviderAddress, parseProviderCredentialEnvironment } from "./runtime-setup-provider-options.js";
5
+ import { buildSetupModelReasoning } from "./runtime-setup-model-options.js";
4
6
  export const DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES = Object.freeze([
5
7
  "methodologies/response-ux.md",
6
8
  "methodologies/memory-informed-response.md",
@@ -61,7 +63,7 @@ export async function writeJsonObject(path, value, options = {}) {
61
63
  ...(options.exclusive ? { flag: "wx" } : {}),
62
64
  });
63
65
  }
64
- export function buildProviderConfig(provider, baseUrl) {
66
+ export function buildProviderConfig(provider, baseUrl, apiKeyEnv) {
65
67
  if (provider === "openai") {
66
68
  return {
67
69
  type: "openai",
@@ -74,9 +76,17 @@ export function buildProviderConfig(provider, baseUrl) {
74
76
  baseUrl: baseUrl ?? "http://127.0.0.1:11434",
75
77
  };
76
78
  }
79
+ if (provider === "llamacpp") {
80
+ const credential = parseProviderCredentialEnvironment(apiKeyEnv);
81
+ return {
82
+ type: "llamacpp",
83
+ baseUrl: baseUrl ?? defaultProviderAddress(provider),
84
+ ...(credential ? { apiKeyEnv: credential } : {}),
85
+ };
86
+ }
77
87
  return { type: provider };
78
88
  }
79
- export function buildModelConfig(template, provider, model, contextWindowTokens) {
89
+ export function buildModelConfig(template, provider, model, contextWindowTokens, modelOptions = {}) {
80
90
  const context = isRecord(template.context) ? template.context : {};
81
91
  const tokenEstimation = isRecord(context.tokenEstimation)
82
92
  ? context.tokenEstimation
@@ -86,10 +96,14 @@ export function buildModelConfig(template, provider, model, contextWindowTokens)
86
96
  ? calibration["context.compact"]
87
97
  : {};
88
98
  const generation = isRecord(compaction.generation) ? compaction.generation : {};
99
+ const rawPayload = isRecord(calibration["toolPayload.raw"])
100
+ ? calibration["toolPayload.raw"]
101
+ : {};
89
102
  const shouldApplyOllamaSetupCalibration = provider === "ollama";
90
- const shouldApplyOpenAiCompactionTimeout = provider === "openai";
103
+ const shouldApplyOpenAiStepTimeouts = provider === "openai";
91
104
  const modelConfig = {
92
105
  ...template,
106
+ ...buildSetupModelReasoning(provider, isRecord(template.generation) ? template.generation : {}, modelOptions),
93
107
  ...(shouldApplyOllamaSetupCalibration
94
108
  ? {
95
109
  calibration: {
@@ -135,13 +149,14 @@ export function buildModelConfig(template, provider, model, contextWindowTokens)
135
149
  },
136
150
  },
137
151
  };
138
- if (!shouldApplyOpenAiCompactionTimeout)
152
+ if (!shouldApplyOpenAiStepTimeouts)
139
153
  return modelConfig;
140
154
  return {
141
155
  ...modelConfig,
142
156
  calibration: {
143
157
  ...calibration,
144
158
  "context.compact": { timeoutMs: 300_000, ...compaction },
159
+ "toolPayload.raw": { timeoutMs: 300_000, ...rawPayload },
145
160
  },
146
161
  };
147
162
  }
@@ -0,0 +1,8 @@
1
+ import { type ModelReasoningBudget } from "../src/shared/model-reasoning.js";
2
+ export type SetupModelOptions = Readonly<{
3
+ supportsThinking?: boolean;
4
+ reasoningBudget?: ModelReasoningBudget;
5
+ }>;
6
+ export declare function parseSetupModelOptions(body: Record<string, unknown>): SetupModelOptions;
7
+ export declare function parseCliReasoningBudget(value: string): ModelReasoningBudget;
8
+ export declare function buildSetupModelReasoning(provider: string, generation: Record<string, unknown>, options: SetupModelOptions): Record<string, unknown>;
@@ -0,0 +1,40 @@
1
+ import { parseModelReasoningBudget, } from "../src/shared/model-reasoning.js";
2
+ export function parseSetupModelOptions(body) {
3
+ const supportsThinking = body.supportsThinking;
4
+ if (supportsThinking !== undefined && typeof supportsThinking !== "boolean")
5
+ throw new Error("Supports reasoning must be true or false.");
6
+ const reasoningBudget = parseModelReasoningBudget(body.reasoningBudget);
7
+ if (reasoningBudget !== undefined && supportsThinking !== true)
8
+ throw new Error("Enable reasoning support before configuring its budget.");
9
+ return {
10
+ ...(supportsThinking !== undefined ? { supportsThinking } : {}),
11
+ ...(reasoningBudget !== undefined ? { reasoningBudget } : {}),
12
+ };
13
+ }
14
+ export function parseCliReasoningBudget(value) {
15
+ const hasReasoningBudgetInput = value.trim().length > 0;
16
+ if (!hasReasoningBudgetInput)
17
+ throw new Error("A reasoning budget is required.");
18
+ if (value === "server-default")
19
+ return { mode: "server-default" };
20
+ const budget = parseModelReasoningBudget({ mode: "tokens", tokens: Number(value) });
21
+ if (!budget)
22
+ throw new Error("A reasoning budget is required.");
23
+ return budget;
24
+ }
25
+ export function buildSetupModelReasoning(provider, generation, options) {
26
+ const validated = parseSetupModelOptions(options);
27
+ if (validated.reasoningBudget && provider !== "llamacpp")
28
+ throw new Error("A token reasoning budget requires a llama.cpp provider.");
29
+ if (provider !== "llamacpp")
30
+ return validated.supportsThinking === undefined
31
+ ? {}
32
+ : { supportsThinking: validated.supportsThinking };
33
+ return {
34
+ supportsThinking: validated.supportsThinking === true,
35
+ capabilities: { inputModalities: ["text"] },
36
+ ...(validated.reasoningBudget
37
+ ? { generation: { ...generation, reasoningBudget: validated.reasoningBudget } }
38
+ : {}),
39
+ };
40
+ }
@@ -3,11 +3,11 @@ function commandForMode(mode, sourceCommand, packageCommand) {
3
3
  }
4
4
  export function getInitUsage(mode) {
5
5
  const command = commandForMode(mode, "npm run init --", "npx abot init");
6
- return `Usage: ${command} --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--force] [--root <dir>]`;
6
+ return `Usage: ${command} --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--context-window <tokens>] [--supports-thinking <true|false>] [--reasoning-budget <tokens|server-default>] [--api-key-env <name>] [--force] [--root <dir>]`;
7
7
  }
8
8
  export function getAddModelUsage(mode) {
9
9
  const command = commandForMode(mode, "npm run add-model --", "npx abot add-model");
10
- return `Usage: ${command} --profile <profile-id> --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--default] [--root <dir>]`;
10
+ return `Usage: ${command} --profile <profile-id> --provider <provider-adapter> --model <model-id> [--base-url <provider-origin>] [--context-window <tokens>] [--supports-thinking <true|false>] [--reasoning-budget <tokens|server-default>] [--api-key-env <name>] [--default] [--root <dir>]`;
11
11
  }
12
12
  export function getMissingInitializationInstruction(mode) {
13
13
  return commandForMode(mode, "run npm run init first", "run npx abot init first");
@@ -0,0 +1,4 @@
1
+ export declare function supportsProviderAddress(provider: string): boolean;
2
+ export declare function defaultProviderAddress(provider: string): string | undefined;
3
+ export declare function supportsProviderCredential(provider: string): boolean;
4
+ export declare function parseProviderCredentialEnvironment(value: unknown): string | undefined;
@@ -0,0 +1,20 @@
1
+ export function supportsProviderAddress(provider) {
2
+ return provider === "ollama" || provider === "llamacpp";
3
+ }
4
+ export function defaultProviderAddress(provider) {
5
+ if (provider === "ollama")
6
+ return "http://127.0.0.1:11434";
7
+ if (provider === "llamacpp")
8
+ return "http://127.0.0.1:8080";
9
+ return undefined;
10
+ }
11
+ export function supportsProviderCredential(provider) {
12
+ return provider === "openai" || provider === "llamacpp";
13
+ }
14
+ export function parseProviderCredentialEnvironment(value) {
15
+ if (value === undefined)
16
+ return undefined;
17
+ if (typeof value === "string" && /^[A-Za-z_][A-Za-z0-9_]*$/u.test(value))
18
+ return value;
19
+ throw new Error("API key environment name must be a valid environment variable name.");
20
+ }
@@ -1,3 +1,4 @@
1
+ import type { ModelReasoningPreference } from "../../shared/model-reasoning.js";
1
2
  import type { AgentMode, ModelReasoningLevel, ModelStep } from "../../shared/types.js";
2
3
  import type { StreamCallbacks } from "../client-stream-parser.js";
3
4
  import type { ModelGatewayAttachment, ModelGatewayPolicyConfig, ModelPreference, ModelTokenUsage } from "../types.js";
@@ -19,6 +20,7 @@ export type InvokeModelGatewayParams = StreamCallbacks & {
19
20
  modelOverride?: string;
20
21
  reasoningOverride?: ModelReasoningLevel;
21
22
  modelPreference?: ModelPreference;
23
+ reasoningPreference?: ModelReasoningPreference;
22
24
  modelPolicy?: ModelGatewayPolicyConfig;
23
25
  abortSignal: AbortSignal;
24
26
  debugRequestId?: string;
@@ -32,6 +34,7 @@ export type InvokeRawModelGatewayParams = {
32
34
  modelOverride?: string;
33
35
  reasoningOverride?: ModelReasoningLevel;
34
36
  modelPreference?: ModelPreference;
37
+ reasoningPreference?: ModelReasoningPreference;
35
38
  modelPolicy?: ModelGatewayPolicyConfig;
36
39
  abortSignal: AbortSignal;
37
40
  debugRequestId?: string;
@@ -1,5 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { traceDebug } from "../../runtime/observability/debug-logger.js";
3
+ import { InputTokenCountDiagnostics } from "../observability/input-token-count-diagnostics.js";
3
4
  import { toolMediaSafeMessage } from "../observability/tool-media-privacy.js";
4
5
  import { buildChatGatewayRequestBody, resolveRequestMessages, } from "./message-projection.js";
5
6
  import { resolveClientOptions } from "./options.js";
@@ -61,6 +62,10 @@ function updateInputTokenCountCache(cache, cacheKey, result) {
61
62
  cache.delete(oldestKey);
62
63
  }
63
64
  }
65
+ // A local llama.cpp server can change its template/tokenizer without changing the request.
66
+ function canCacheProviderInputTokenCount(provider) {
67
+ return provider !== "llamacpp";
68
+ }
64
69
  export async function countModelGatewayInputTokensWithOptions(params, options = {}, cache) {
65
70
  const clientOptions = resolveClientOptions(options);
66
71
  const provider = params.provider.trim();
@@ -71,7 +76,8 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
71
76
  const modelPolicy = params.modelPolicy ?? clientOptions.modelPolicy;
72
77
  const requestBody = buildChatGatewayRequestBody(params, requestMessages, modelPolicy);
73
78
  const cacheKey = createInputTokenCountCacheKey(provider, requestBody);
74
- const cached = cache?.get(cacheKey);
79
+ const eligibleCache = canCacheProviderInputTokenCount(provider) ? cache : undefined;
80
+ const cached = eligibleCache?.get(cacheKey);
75
81
  if (cached) {
76
82
  return cached;
77
83
  }
@@ -84,21 +90,35 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
84
90
  modelStep: params.modelStep,
85
91
  messageCount: requestMessages.length,
86
92
  });
87
- const response = await fetch(`${clientOptions.baseUrl}/input-tokens`, {
88
- method: "POST",
89
- headers: {
90
- "Content-Type": "application/json",
91
- },
92
- signal: params.abortSignal,
93
- body: JSON.stringify(requestBody),
94
- });
95
- if (!response.ok) {
96
- const errorText = await response.text().catch(() => "");
97
- throw new Error(`bridge_input_token_count_failed:${response.status}:${toolMediaSafeMessage(errorText || "empty error body", requestMessages)}`);
93
+ const diagnostics = new InputTokenCountDiagnostics("model-gateway.client", requestBody);
94
+ diagnostics.setProvider(provider);
95
+ let statusCode;
96
+ let result;
97
+ try {
98
+ diagnostics.setPhase("bridge_fetch");
99
+ const response = await fetch(`${clientOptions.baseUrl}/input-tokens`, {
100
+ method: "POST",
101
+ headers: {
102
+ "Content-Type": "application/json",
103
+ },
104
+ signal: params.abortSignal,
105
+ body: JSON.stringify(requestBody),
106
+ });
107
+ statusCode = response.status;
108
+ diagnostics.setPhase("bridge_response");
109
+ if (!response.ok) {
110
+ const errorText = await response.text().catch(() => "");
111
+ throw new Error(`bridge_input_token_count_failed:${response.status}:${toolMediaSafeMessage(errorText || "empty error body", requestMessages)}`);
112
+ }
113
+ diagnostics.setPhase("bridge_parse");
114
+ result = parseInputTokenCountResult(await response.json().catch(() => undefined));
115
+ if (result.provider !== provider) {
116
+ throw new Error("model_gateway_input_token_count_provider_mismatch");
117
+ }
98
118
  }
99
- const result = parseInputTokenCountResult(await response.json().catch(() => undefined));
100
- if (result.provider !== provider) {
101
- throw new Error("model_gateway_input_token_count_provider_mismatch");
119
+ catch (error) {
120
+ diagnostics.failed({ kind: "exception", error, statusCode, aborted: params.abortSignal.aborted });
121
+ throw error;
102
122
  }
103
123
  traceDebug("model-gateway.client", "input_tokens.request.completed", {
104
124
  requestId,
@@ -108,6 +128,6 @@ export async function countModelGatewayInputTokensWithOptions(params, options =
108
128
  inputTokens: result.inputTokens,
109
129
  durationMs: Date.now() - startedAt,
110
130
  });
111
- updateInputTokenCountCache(cache, cacheKey, result);
131
+ updateInputTokenCountCache(eligibleCache, cacheKey, result);
112
132
  return result;
113
133
  }
@@ -1,3 +1,4 @@
1
+ import type { ModelReasoningPreference } from "../../shared/model-reasoning.js";
1
2
  import type { AgentMode, ModelReasoningLevel, ModelStep } from "../../shared/types.js";
2
3
  import type { ChatMessage, ModelGatewayPolicyConfig, ModelPreference } from "../types.js";
3
4
  import type { ModelMetricMessage } from "./contracts.js";
@@ -14,6 +15,7 @@ export declare function buildChatGatewayRequestBody(params: Readonly<{
14
15
  modelOverride?: string;
15
16
  reasoningOverride?: ModelReasoningLevel;
16
17
  modelPreference?: ModelPreference;
18
+ reasoningPreference?: ModelReasoningPreference;
17
19
  debugRequestId?: string;
18
20
  format?: "json" | Record<string, unknown>;
19
21
  }>, messages: readonly ChatMessage[], modelPolicy: ModelGatewayPolicyConfig | undefined): Record<string, unknown>;
@@ -145,6 +145,7 @@ export function buildChatGatewayRequestBody(params, messages, modelPolicy) {
145
145
  ...(params.reasoningOverride
146
146
  ? { reasoningOverride: params.reasoningOverride }
147
147
  : {}),
148
+ ...(params.reasoningPreference ? { reasoningPreference: params.reasoningPreference } : {}),
148
149
  ...(params.modelPreference
149
150
  ? { modelPreference: params.modelPreference }
150
151
  : {}),
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_MODEL_GATEWAY_URL } from "../../shared/constants.js";
2
2
  const DEFAULT_STREAM_INACTIVITY_TIMEOUT_MS = 90_000;
3
- const DEFAULT_INPUT_TOKEN_COUNT_PROVIDERS = Object.freeze(["openai"]);
3
+ const DEFAULT_INPUT_TOKEN_COUNT_PROVIDERS = Object.freeze(["openai", "llamacpp"]);
4
4
  function readPositiveInt(name, fallback) {
5
5
  const raw = Number(process.env[name]);
6
6
  return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : fallback;
@@ -43,6 +43,7 @@ export async function invokeRawModelGatewayWithOptions(params, options = {}) {
43
43
  ...(params.reasoningOverride
44
44
  ? { reasoningOverride: params.reasoningOverride }
45
45
  : {}),
46
+ ...(params.reasoningPreference ? { reasoningPreference: params.reasoningPreference } : {}),
46
47
  ...(params.modelPreference
47
48
  ? { modelPreference: params.modelPreference }
48
49
  : {}),
@@ -2,4 +2,4 @@ export { createModelProviderAdapterRegistry, ModelProviderAdapterResolutionError
2
2
  export { createChatHandler, createEmbeddingHandler, createInputTokenCountHandler, createModelGatewayServer, createRawHandler, type GatewayFetch, type GatewayResponse, type ModelGatewayHandlerOptions, } from "./server.js";
3
3
  export { EmbeddingProviderRequestError, executeEmbeddingRequest, } from "./embeddings/execution.js";
4
4
  export { discoverEmbeddingModels } from "./embeddings/discovery.js";
5
- export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayEmbeddingParams, ModelGatewayEmbeddingProfileConfig, ModelGatewayEmbeddingRequest, ModelGatewayEmbeddingResult, ModelGatewayRequest, ModelProfile, ResolvedModelInvocation, } from "./types.js";
5
+ export type { ModelContextConfig, ModelFormatTokenAccountingConfig, ModelGatewayPolicyConfig, ModelGatewayProviderConfig, ModelGatewayInputTokenCountParams, ModelGatewayInputTokenCountResult, ModelGatewayEmbeddingParams, ModelGatewayEmbeddingProfileConfig, ModelGatewayEmbeddingRequest, ModelGatewayEmbeddingResult, ModelGatewayRequest, ModelReasoningBudget, ModelReasoningBudgetByMode, ModelReasoningPreference, ModelProfile, ResolvedModelInvocation, } from "./types.js";
@@ -0,0 +1,26 @@
1
+ import type { ModelGatewayRequest, ResolvedModelInvocation } from "../types.js";
2
+ type CountPhase = "prepare" | "resolve" | "provider_count" | "measurement_record" | "response_write" | "bridge_fetch" | "bridge_response" | "bridge_parse";
3
+ type CountFailureKind = "exception" | "provider_result";
4
+ /** Request-local metadata only. It never reads response bodies or alters failures. */
5
+ export declare class InputTokenCountDiagnostics {
6
+ private readonly scope;
7
+ private readonly requestBody;
8
+ private readonly startedAt;
9
+ private readonly diagnosticId;
10
+ private phase;
11
+ private invocation?;
12
+ private provider?;
13
+ private upstream;
14
+ constructor(scope: "model-gateway.client" | "model-gateway.server", requestBody: ModelGatewayRequest);
15
+ setPhase(phase: CountPhase): void;
16
+ setProvider(provider: string): void;
17
+ bindInvocation(invocation: ResolvedModelInvocation): void;
18
+ observeFetch(fetchImpl: typeof fetch): typeof fetch;
19
+ failed(params: {
20
+ kind: CountFailureKind;
21
+ aborted: boolean;
22
+ statusCode?: number;
23
+ error?: unknown;
24
+ }): void;
25
+ }
26
+ export {};