@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,67 +1 @@
1
- // Decode complete SSE data frames identically for response lifetime and output.
2
- // Event names are metadata; the Responses payload owns its typed event.
3
- export class OpenAISseDataDecoder {
4
- decoder = new TextDecoder();
5
- line = "";
6
- data = [];
7
- afterCr = false;
8
- accept(bytes) {
9
- const text = this.decoder.decode(bytes, { stream: true });
10
- const frames = [];
11
- let start = 0;
12
- for (let index = 0; index < text.length; index += 1) {
13
- const char = text[index];
14
- if (this.afterCr) {
15
- this.afterCr = false;
16
- if (char === "\n") {
17
- start = index + 1;
18
- continue;
19
- }
20
- }
21
- if (char !== "\r" && char !== "\n")
22
- continue;
23
- this.line += text.slice(start, index);
24
- this.acceptLine(frames);
25
- this.line = "";
26
- this.afterCr = char === "\r";
27
- start = index + 1;
28
- }
29
- this.line += text.slice(start);
30
- return frames;
31
- }
32
- acceptLine(frames) {
33
- if (!this.line) {
34
- if (this.data.length)
35
- frames.push(this.data.join("\n"));
36
- this.data = [];
37
- return;
38
- }
39
- const colon = this.line.indexOf(":");
40
- const field = colon < 0 ? this.line : this.line.slice(0, colon);
41
- if (field !== "data")
42
- return;
43
- const value = colon < 0 ? "" : this.line.slice(colon + 1);
44
- this.data.push(value.startsWith(" ") ? value.slice(1) : value);
45
- }
46
- }
47
- export async function* readOpenAIDataFrames(body) {
48
- const reader = body.getReader();
49
- const decoder = new OpenAISseDataDecoder();
50
- let reachedEof = false;
51
- try {
52
- while (true) {
53
- const { done, value } = await reader.read();
54
- if (done) {
55
- reachedEof = true;
56
- return;
57
- }
58
- yield* decoder.accept(value);
59
- }
60
- }
61
- finally {
62
- // A tee branch cannot await cancellation before the other readers finish.
63
- if (!reachedEof)
64
- void reader.cancel().catch(() => { });
65
- reader.releaseLock();
66
- }
67
- }
1
+ export { SseDataDecoder as OpenAISseDataDecoder, readSseDataFrames as readOpenAIDataFrames } from "../../protocol/sse-data.js";
@@ -1,10 +1,12 @@
1
1
  import { createModelProviderAdapterRegistry, } from "./contracts.js";
2
+ import { createLlamaCppProviderAdapter } from "./llamacpp/adapter.js";
2
3
  import { createOllamaProviderAdapter } from "./ollama/adapter.js";
3
4
  import { createOpenAIProviderAdapter } from "./openai/adapter.js";
4
5
  export function createBuiltInModelProviderAdapterRegistry(options) {
5
6
  return createModelProviderAdapterRegistry([
6
7
  createOllamaProviderAdapter({ fallbackUrl: options.ollamaUrl }),
7
8
  createOpenAIProviderAdapter(),
9
+ createLlamaCppProviderAdapter(),
8
10
  ...(options.additionalAdapters ?? []),
9
11
  ]);
10
12
  }
@@ -1,3 +1,4 @@
1
+ import { InputTokenCountDiagnostics } from "../observability/input-token-count-diagnostics.js";
1
2
  import { traceDebug } from "../../runtime/observability/debug-logger.js";
2
3
  import { resolveModelInvocation } from "../policy/invocation-policy.js";
3
4
  import { respondToGatewayHandlerError } from "./errors.js";
@@ -10,6 +11,7 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
10
11
  const providerAdapters = resolveProviderAdapters(options);
11
12
  return async function inputTokenCountHandler(requestBody, response, context = {}) {
12
13
  const abortSignal = context.abortSignal ?? new AbortController().signal;
14
+ const diagnostics = new InputTokenCountDiagnostics("model-gateway.server", requestBody);
13
15
  try {
14
16
  abortSignal.throwIfAborted();
15
17
  const effectiveRequestBody = applyConfiguredModelPolicy(requestBody, modelPolicy);
@@ -20,7 +22,9 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
20
22
  if (messageValidationError) {
21
23
  return sendText(response, 400, messageValidationError);
22
24
  }
25
+ diagnostics.setPhase("resolve");
23
26
  const invocation = resolveModelInvocation(effectiveRequestBody);
27
+ diagnostics.bindInvocation(invocation);
24
28
  const providerAdapter = providerAdapters.resolve(invocation.profile.provider);
25
29
  const imageValidationError = validateImageInvocationSupport({
26
30
  requestBody: effectiveRequestBody,
@@ -34,6 +38,7 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
34
38
  if (!providerAdapter.countInputTokens) {
35
39
  return sendText(response, 501, "model_provider_input_token_count_unsupported");
36
40
  }
41
+ diagnostics.setPhase("provider_count");
37
42
  const result = await providerAdapter.countInputTokens({
38
43
  endpoint: "chat",
39
44
  requestBody: effectiveRequestBody,
@@ -42,7 +47,7 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
42
47
  endpoint: "input_tokens",
43
48
  requestBody: effectiveRequestBody,
44
49
  invocation,
45
- fetchImpl,
50
+ fetchImpl: diagnostics.observeFetch(fetchImpl),
46
51
  abortSignal,
47
52
  }),
48
53
  });
@@ -50,8 +55,10 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
50
55
  return;
51
56
  }
52
57
  if (result.kind === "error") {
58
+ diagnostics.failed({ kind: "provider_result", statusCode: result.statusCode, aborted: false });
53
59
  return sendText(response, result.statusCode, result.message);
54
60
  }
61
+ diagnostics.setPhase("measurement_record");
55
62
  inputTokenMeasurements?.record({ requestBody: effectiveRequestBody, invocation }, result);
56
63
  traceDebug("model-gateway.server", "model.input_tokens.counted", {
57
64
  requestId: typeof effectiveRequestBody.debugRequestId === "string"
@@ -63,6 +70,7 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
63
70
  model: invocation.model,
64
71
  inputTokens: result.inputTokens,
65
72
  });
73
+ diagnostics.setPhase("response_write");
66
74
  return sendJson(response, 200, {
67
75
  inputTokens: result.inputTokens,
68
76
  profileId: invocation.profile.id,
@@ -73,6 +81,7 @@ export function createInputTokenCountHandler(options = {}, inputTokenMeasurement
73
81
  });
74
82
  }
75
83
  catch (error) {
84
+ diagnostics.failed({ kind: "exception", error, aborted: abortSignal.aborted });
76
85
  respondToGatewayHandlerError({
77
86
  error,
78
87
  response,
@@ -1,6 +1,10 @@
1
+ import type { ModelReasoningBudgetByMode } from "../shared/model-reasoning-modes.js";
2
+ export type { ModelReasoningBudgetByMode } from "../shared/model-reasoning-modes.js";
3
+ import type { ModelReasoningBudget, ModelReasoningPreference } from "../shared/model-reasoning.js";
4
+ export type { ModelReasoningBudget, ModelReasoningPreference } from "../shared/model-reasoning.js";
1
5
  import type { AgentMode, ModelReasoningLevel, ModelStep } from "../shared/types.js";
2
6
  import type { RuntimeAttachmentReference } from "../shared/attachments.js";
3
- /** Stable adapter identifier. Built-ins currently register `ollama` and `openai`. */
7
+ /** Stable adapter identifier. Built-ins currently register `ollama`, `openai`, and `llamacpp`. */
4
8
  export type ModelProvider = string;
5
9
  export type ChatTextMessage = {
6
10
  role: "system" | "user" | "assistant";
@@ -102,6 +106,8 @@ export type ModelGenerationConfig = {
102
106
  temperature?: number;
103
107
  topP?: number;
104
108
  reasoningEffort?: ModelReasoningLevel;
109
+ reasoningBudget?: ModelReasoningBudget;
110
+ reasoningBudgetByMode?: ModelReasoningBudgetByMode;
105
111
  };
106
112
  export type ModelTokenEstimationConfig = {
107
113
  asciiCharactersPerToken?: number;
@@ -184,6 +190,7 @@ export type ModelGatewayRequest = {
184
190
  modelStep?: ModelStep | string;
185
191
  modelOverride?: string;
186
192
  reasoningOverride?: ModelReasoningLevel | string;
193
+ reasoningPreference?: ModelReasoningPreference;
187
194
  format?: unknown;
188
195
  modelPreference?: ModelPreference;
189
196
  modelPolicy?: ModelGatewayPolicyConfig;
@@ -198,6 +205,7 @@ export type ModelGatewayInputTokenCountParams = {
198
205
  modelStep?: ModelStep;
199
206
  modelOverride?: string;
200
207
  reasoningOverride?: ModelReasoningLevel;
208
+ reasoningPreference?: ModelReasoningPreference;
201
209
  modelPreference?: ModelPreference;
202
210
  modelPolicy?: ModelGatewayPolicyConfig;
203
211
  abortSignal: AbortSignal;
@@ -233,6 +241,8 @@ export type ResolvedModelInvocation = {
233
241
  model: string;
234
242
  /** `none` is an explicit disable; only `undefined` permits adapter omission. */
235
243
  think?: ModelReasoningLevel;
244
+ reasoningBudget?: ModelReasoningBudget;
245
+ reasoningControlSource?: "invocation" | "request" | "configuration" | "agent-mode";
236
246
  format?: ModelGatewayFormat;
237
247
  instructions?: string[];
238
248
  };
@@ -0,0 +1,4 @@
1
+ import type { ModelProviderAdapterRegistry } from "../../../model-gateway/index.js";
2
+ import type { LongTermMemoryOnboardingProvider } from "../../long-term-memory/onboarding/contracts.js";
3
+ /** Chat-only adapters must not be advertised as usable embedding connections. */
4
+ export declare function availableEmbeddingProviders(providers: readonly LongTermMemoryOnboardingProvider[], adapters: ModelProviderAdapterRegistry): readonly LongTermMemoryOnboardingProvider[];
@@ -0,0 +1,11 @@
1
+ /** Chat-only adapters must not be advertised as usable embedding connections. */
2
+ export function availableEmbeddingProviders(providers, adapters) {
3
+ return providers.filter((provider) => {
4
+ try {
5
+ return typeof adapters.resolve(provider.type).embed === "function";
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ });
11
+ }
@@ -1,3 +1,4 @@
1
+ import { availableEmbeddingProviders } from "./onboarding-provider-availability.js";
1
2
  import { discoverEmbeddingModels, executeEmbeddingRequest, } from "../../../model-gateway/index.js";
2
3
  import { createLongTermMemoryOnboardingService } from "../../long-term-memory/onboarding/service.js";
3
4
  import { createFileLongTermMemoryOnboardingConfigRepository } from "./onboarding-config-repository.js";
@@ -8,7 +9,7 @@ export function createLocalLongTermMemoryOnboardingService(params) {
8
9
  rootDir: params.rootDir,
9
10
  ...(params.configPath ? { configPath: params.configPath } : {}),
10
11
  });
11
- return createLongTermMemoryOnboardingService({
12
+ const service = createLongTermMemoryOnboardingService({
12
13
  repository,
13
14
  probe: async (input) => {
14
15
  const result = await executeEmbeddingRequest({
@@ -32,4 +33,30 @@ export function createLocalLongTermMemoryOnboardingService(params) {
32
33
  ...(params.fetchImpl ? { fetchImpl: params.fetchImpl } : {}),
33
34
  }),
34
35
  });
36
+ const projectStatus = (status) => Object.freeze({
37
+ ...status, providers: availableEmbeddingProviders(status.providers, params.providerAdapters),
38
+ });
39
+ return Object.freeze({
40
+ ...service,
41
+ async enable(input) {
42
+ const result = await service.enable(input);
43
+ return { ...result, status: projectStatus(result.status) };
44
+ },
45
+ async saveProfile(input) {
46
+ const result = await service.saveProfile(input);
47
+ return { ...result, status: projectStatus(result.status) };
48
+ },
49
+ async removeProfile(input) {
50
+ const result = await service.removeProfile(input);
51
+ return { ...result, status: projectStatus(result.status) };
52
+ },
53
+ async disable() {
54
+ const result = await service.disable();
55
+ return { ...result, status: projectStatus(result.status) };
56
+ },
57
+ async status() {
58
+ const status = await service.status();
59
+ return projectStatus(status);
60
+ },
61
+ });
35
62
  }
@@ -4,6 +4,7 @@ import { type WorkerCapabilityPayloadRelatedArtifactContext } from "../orchestra
4
4
  import type { RoleCallFrame } from "../orchestration/role-calls/contracts.js";
5
5
  export declare function resolveRegisteredToolPayloadRelatedArtifactContexts(params: {
6
6
  contextScope?: ToolPayloadChannelSpec["contextScope"];
7
+ allowRelatedArtifactLoading?: boolean;
7
8
  targetParam?: string;
8
9
  controls: Readonly<Record<string, unknown>>;
9
10
  sharedState: ToolExecutionSharedState;
@@ -4,7 +4,7 @@ import { projectWorkerCapabilityDependencyArtifactReceipts, } from "../orchestra
4
4
  import { projectWorkerPayloadPlannerItemProvenance } from "../orchestration/worker-capabilities/payload-source-provenance.js";
5
5
  import { WORKER_CAPABILITY_RELATED_ARTIFACT_CONTEXT_MAX_CHARS, WORKER_CAPABILITY_RELATED_ARTIFACT_CONTEXT_MAX_COUNT, } from "../orchestration/worker-capabilities/payload-contracts.js";
6
6
  export async function resolveRegisteredToolPayloadRelatedArtifactContexts(params) {
7
- if (params.contextScope !== "target_with_artifacts") {
7
+ if (!canLoadRelatedArtifactContexts(params.contextScope, params.allowRelatedArtifactLoading)) {
8
8
  return Object.freeze([]);
9
9
  }
10
10
  const dependencyReceipts = projectWorkerCapabilityDependencyArtifactReceipts(projectWorkerPayloadPlannerItemProvenance(params.assignmentProvenance, params.call), params.call);
@@ -14,6 +14,11 @@ export async function resolveRegisteredToolPayloadRelatedArtifactContexts(params
14
14
  ];
15
15
  return loadRelatedArtifactContexts(params, receipts);
16
16
  }
17
+ function canLoadRelatedArtifactContexts(contextScope, allowRelatedArtifactLoading) {
18
+ if (allowRelatedArtifactLoading === false)
19
+ return false;
20
+ return contextScope === "target_with_artifacts";
21
+ }
17
22
  function projectSameCallArtifactReceipts(results) {
18
23
  return results.flatMap((result) => {
19
24
  if (result.outcome !== "succeeded")
@@ -19,6 +19,7 @@ export type RegisteredToolWorkerCapabilityProviderParams = Readonly<{
19
19
  toolPermissionMode: ToolPermissionMode;
20
20
  toolApprovalController?: ToolApprovalController;
21
21
  payloadAuthor?: WorkerCapabilityPayloadAuthor;
22
+ allowRelatedArtifactLoading?: boolean;
22
23
  loadActionSkillContext?(toolName: string): Promise<string>;
23
24
  nextApprovalId(): string;
24
25
  onEvent?(name: string, payload: Record<string, unknown>): void;
@@ -9,4 +9,5 @@ export declare function projectWorkerAdapters<TContext>(params: Readonly<{
9
9
  sharedState: ToolExecutionSharedState;
10
10
  diagnostic: RegisteredToolWorkerCapabilityProviderDiagnostic;
11
11
  payloadAuthor?: WorkerCapabilityPayloadAuthor;
12
+ allowRelatedArtifactLoading?: boolean;
12
13
  }>): readonly WorkerCapabilityAdapter<TContext>[];
@@ -37,6 +37,7 @@ export function projectWorkerAdapters(params) {
37
37
  executor: params.executor,
38
38
  sharedState: params.sharedState,
39
39
  diagnostic: params.diagnostic,
40
+ allowRelatedArtifactLoading: params.allowRelatedArtifactLoading ?? true,
40
41
  ...(params.payloadAuthor
41
42
  ? { payloadAuthor: params.payloadAuthor }
42
43
  : {}),
@@ -118,6 +119,7 @@ async function prepareRegisteredToolWorkerCapability(params, input, payloadObser
118
119
  projection: params.projection,
119
120
  executor: payloadObservability.lifecycleEmitter,
120
121
  sharedState: params.sharedState,
122
+ allowRelatedArtifactLoading: params.allowRelatedArtifactLoading ?? true,
121
123
  ...(params.payloadAuthor ? { payloadAuthor: params.payloadAuthor } : {}),
122
124
  call: input.call,
123
125
  ...(input.assignmentProvenance
@@ -8,6 +8,7 @@ export declare function prepareOperationPayload(params: Readonly<{
8
8
  executor: PayloadLifecycleEmitter;
9
9
  sharedState: ToolExecutionSharedState;
10
10
  payloadAuthor?: WorkerCapabilityPayloadAuthor;
11
+ allowRelatedArtifactLoading: boolean;
11
12
  call: Parameters<WorkerCapabilityPayloadAuthor["author"]>[0]["call"];
12
13
  assignmentProvenance?: Parameters<WorkerCapabilityPayloadAuthor["author"]>[0]["assignmentProvenance"];
13
14
  executionId: string;
@@ -9,6 +9,7 @@ export async function prepareOperationPayload(params) {
9
9
  handle: params.projection.handle,
10
10
  executor: params.executor,
11
11
  sharedState: params.sharedState,
12
+ allowRelatedArtifactLoading: params.allowRelatedArtifactLoading,
12
13
  ...(params.payloadAuthor ? { payloadAuthor: params.payloadAuthor } : {}),
13
14
  call: params.call,
14
15
  ...(params.assignmentProvenance
@@ -55,6 +56,7 @@ export async function prepareOperationPayload(params) {
55
56
  const contextScope = params.projection.payloadContextPlan?.contextScope ?? "standard";
56
57
  const relatedArtifactContexts = await resolveRegisteredToolPayloadRelatedArtifactContexts({
57
58
  contextScope,
59
+ allowRelatedArtifactLoading: params.allowRelatedArtifactLoading,
58
60
  targetParam: params.projection.payloadContextPlan?.targetParam,
59
61
  controls: params.controls,
60
62
  sharedState: params.sharedState,
@@ -10,6 +10,7 @@ export type StagedOperationPayloadParams = Readonly<{
10
10
  executor: PayloadLifecycleEmitter;
11
11
  sharedState: ToolExecutionSharedState;
12
12
  payloadAuthor?: WorkerCapabilityPayloadAuthor;
13
+ allowRelatedArtifactLoading: boolean;
13
14
  call: Parameters<WorkerCapabilityPayloadAuthor["author"]>[0]["call"];
14
15
  assignmentProvenance?: Parameters<WorkerCapabilityPayloadAuthor["author"]>[0]["assignmentProvenance"];
15
16
  executionId: string;
@@ -170,6 +170,7 @@ class PayloadStageRunner {
170
170
  const contextScope = stage.contextScope ?? "standard";
171
171
  const relatedArtifactContexts = await resolveRegisteredToolPayloadRelatedArtifactContexts({
172
172
  contextScope,
173
+ allowRelatedArtifactLoading: this.params.allowRelatedArtifactLoading,
173
174
  targetParam: this.params.plan.targetParam,
174
175
  controls: this.params.controls,
175
176
  sharedState: this.params.sharedState,
@@ -118,6 +118,7 @@ export function createRegisteredToolWorkerCapabilityProvider(params) {
118
118
  executor,
119
119
  sharedState,
120
120
  diagnostic,
121
+ allowRelatedArtifactLoading: params.allowRelatedArtifactLoading ?? true,
121
122
  ...(params.payloadAuthor
122
123
  ? { payloadAuthor: params.payloadAuthor }
123
124
  : {}),
@@ -54,6 +54,7 @@ export function createRuntimeScheduler(options) {
54
54
  return finish(failedScheduledRequestOutcome("session_deleted"));
55
55
  const selection = resolveModelSelection({
56
56
  agentMode: job.agentMode,
57
+ ...(job.reasoningPreference ? { reasoningPreference: job.reasoningPreference } : {}),
57
58
  modelPreference: { profileId: job.modelProfileId, scope: "all" },
58
59
  modelPolicy: options.config.models,
59
60
  });
@@ -82,6 +83,7 @@ export function createRuntimeScheduler(options) {
82
83
  sessionId: job.sessionId,
83
84
  text: run.prompt,
84
85
  agentMode: job.agentMode,
86
+ ...(job.reasoningPreference ? { reasoningPreference: job.reasoningPreference } : {}),
85
87
  modelPreference: { profileId: job.modelProfileId, scope: "all" },
86
88
  toolPermissionMode: run.toolPermissionMode ?? "full_access",
87
89
  };
@@ -201,6 +201,7 @@ export function createAutomationAgentStepExecutor(options) {
201
201
  const outcome = await handleRunRequestWithOutcome(ws, {
202
202
  type: "run_request", requestId, sessionId, text: prompt,
203
203
  agentMode: node.agentMode,
204
+ ...(node.reasoningPreference ? { reasoningPreference: node.reasoningPreference } : {}),
204
205
  modelPreference: { profileId: node.modelProfileId, scope: "all" },
205
206
  toolPermissionMode: capturedGrant?.mode ?? "full_access",
206
207
  }, {
@@ -66,6 +66,9 @@ export declare function readAutomationCatalog(input: {
66
66
  }>[];
67
67
  models: {
68
68
  provider?: string | undefined;
69
+ reasoningControls?: {
70
+ budgetTokens: boolean;
71
+ } | undefined;
69
72
  id: string;
70
73
  label: string;
71
74
  }[];
@@ -1,3 +1,4 @@
1
+ import { supportsModelReasoningBudget } from "../../shared/model-reasoning.js";
1
2
  import { currentAutomationGrant, permitsAutomationOperation } from "./permission-grants.js";
2
3
  const EXCLUDED_RUNNING_TOOLS = new Set(["schedules", "automations", "automation_builder"]);
3
4
  export async function readAutomationCatalog(input) {
@@ -49,6 +50,7 @@ export async function readAutomationCatalog(input) {
49
50
  const models = Object.entries(input.config.models?.profiles ?? {}).map(([id, profile]) => ({
50
51
  id,
51
52
  label: profile.label ?? id,
53
+ ...(supportsModelReasoningBudget({ provider: input.config.models?.providers?.[profile.provider ?? ""]?.type ?? "", supportsThinking: profile.supportsThinking }) ? { reasoningControls: { budgetTokens: true } } : {}),
52
54
  ...(profile.provider ? { provider: profile.provider } : {}),
53
55
  }));
54
56
  const latestAgents = new Map();
@@ -1,3 +1,4 @@
1
+ import type { ModelReasoningPreference } from "../../shared/model-reasoning.js";
1
2
  import type { ToolNormalInvocationInput } from "../../capabilities/normal-invocation/contracts.js";
2
3
  import type { AgentMode } from "../../shared/types.js";
3
4
  import type { CapabilityJsonValue } from "../orchestration/capability-adapters/result.js";
@@ -72,6 +73,7 @@ export type AgentNode = AutomationNodeBase & Readonly<{
72
73
  kind: "agent";
73
74
  modelProfileId: string;
74
75
  agentMode: AgentMode;
76
+ reasoningPreference?: ModelReasoningPreference;
75
77
  roleInstructions: string;
76
78
  prompt: string;
77
79
  inputs: Readonly<Record<string, ValueBinding>>;
@@ -1,3 +1,4 @@
1
+ import { parseBoundModelReasoningPreference } from "../../shared/model-reasoning.js";
1
2
  import { Buffer } from "node:buffer";
2
3
  import { isAutomationRunFileName } from "./run-file-binding.js";
3
4
  import { AUTOMATION_GRAPH_LIMITS } from "./limits.js";
@@ -150,8 +151,9 @@ function node(value, path, depth) {
150
151
  }
151
152
  if (input.kind !== "agent")
152
153
  invalid(`${path}.kind`);
153
- onlyKeys(input, ["kind", "id", "title", "onFailure", "modelProfileId", "agentMode", "roleInstructions", "prompt", "inputs", "tools", "result", "acceptance", "savedAgentOrigin"], path);
154
+ onlyKeys(input, ["kind", "id", "title", "onFailure", "modelProfileId", "agentMode", "reasoningPreference", "roleInstructions", "prompt", "inputs", "tools", "result", "acceptance", "savedAgentOrigin"], path);
154
155
  text(input.modelProfileId, `${path}.modelProfileId`, 128);
156
+ parseBoundModelReasoningPreference(input.reasoningPreference, String(input.modelProfileId));
155
157
  if (!["fast", "reasoning", "deep"].includes(String(input.agentMode)))
156
158
  invalid(`${path}.agentMode`);
157
159
  text(input.roleInstructions, `${path}.roleInstructions`);
@@ -6,7 +6,7 @@ const DEFINITION_EDITABLE = new Set([
6
6
  ]);
7
7
  const NODE_EDITABLE = new Set([
8
8
  "title", "onFailure", "operation", "controls", "payload", "modelProfileId",
9
- "agentMode", "roleInstructions", "prompt", "inputs", "tools", "result",
9
+ "agentMode", "reasoningPreference", "roleInstructions", "prompt", "inputs", "tools", "result",
10
10
  "acceptance", "savedAgentOrigin",
11
11
  ]);
12
12
  function error(code) {
@@ -131,6 +131,10 @@ function mutateNode(root, mutation) {
131
131
  delete found.node.payload;
132
132
  delete normalized.payload;
133
133
  }
134
+ if (normalized.reasoningPreference === null) {
135
+ delete found.node.reasoningPreference;
136
+ delete normalized.reasoningPreference;
137
+ }
134
138
  Object.assign(found.node, normalized);
135
139
  return;
136
140
  }
@@ -36,6 +36,8 @@ export declare function projectAutomationModelDependencies(config: RuntimeConfig
36
36
  timeoutMs: number;
37
37
  model: string;
38
38
  think?: import("../../shared/types.js").ModelReasoningLevel;
39
+ reasoningBudget?: import("../../shared/model-reasoning.js").ModelReasoningBudget;
40
+ reasoningControlSource?: "invocation" | "request" | "configuration" | "agent-mode";
39
41
  format?: import("../../model-gateway/types.js").ModelGatewayFormat;
40
42
  instructions: string[] | Readonly<{
41
43
  blockCount: number;
@@ -45,7 +47,7 @@ export declare function projectAutomationModelDependencies(config: RuntimeConfig
45
47
  }> | undefined;
46
48
  modelStep: "learning.batch" | "supervisor.decision" | "supervisor.response" | "worker.decision" | "worker.result" | "capability.controls" | "planner.decision" | "planner.graph" | "reviewer.decision" | "degraded.finalization" | "execution.decision" | "execution.response" | "auditor.decision" | "context.compact" | "tool_payload.raw";
47
49
  } | {
48
- unavailable: import("../../model-gateway/invocation-policy.js").ModelInvocationResolutionErrorCode;
50
+ unavailable: string;
49
51
  modelStep: "learning.batch" | "supervisor.decision" | "supervisor.response" | "worker.decision" | "worker.result" | "capability.controls" | "planner.decision" | "planner.graph" | "reviewer.decision" | "degraded.finalization" | "execution.decision" | "execution.response" | "auditor.decision" | "context.compact" | "tool_payload.raw";
50
52
  instructions: Readonly<{
51
53
  blockCount: number;
@@ -1,3 +1,4 @@
1
+ import { ModelReasoningConfigurationError } from "../../shared/model-reasoning.js";
1
2
  import { ModelInvocationResolutionError, resolveModelInvocation, } from "../../model-gateway/invocation-policy.js";
2
3
  import { MODEL_STEPS } from "../../shared/model-steps.js";
3
4
  import { loadRequestRunnerConfig } from "../config/runner/loader.js";
@@ -35,6 +36,7 @@ function invocationDependency(input) {
35
36
  try {
36
37
  const invocation = resolveModelInvocation({
37
38
  agentMode: input.node.agentMode, modelPreference,
39
+ ...(input.node.reasoningPreference ? { reasoningPreference: input.node.reasoningPreference } : {}),
38
40
  modelStep: input.modelStep, modelPolicy: input.modelPolicy,
39
41
  });
40
42
  // Unused calibration slots and display labels are not execution dependencies.
@@ -46,7 +48,7 @@ function invocationDependency(input) {
46
48
  return { ...dependency, ...invocation, profile, timeoutMs: timeout.timeoutMs };
47
49
  }
48
50
  catch (error) {
49
- if (!(error instanceof ModelInvocationResolutionError))
51
+ if (!(error instanceof ModelInvocationResolutionError) && !(error instanceof ModelReasoningConfigurationError))
50
52
  throw error;
51
53
  return { ...dependency, unavailable: error.code };
52
54
  }
@@ -62,7 +64,7 @@ export function projectAutomationModelDependencies(config, nodes) {
62
64
  : config.models;
63
65
  const selected = new Map();
64
66
  for (const node of nodes) {
65
- const key = JSON.stringify([node.modelProfileId, node.agentMode]);
67
+ const key = JSON.stringify(node.reasoningPreference ? [node.modelProfileId, node.agentMode, node.reasoningPreference] : [node.modelProfileId, node.agentMode]);
66
68
  const hasTools = node.tools.length > 0 || selected.get(key)?.hasTools === true;
67
69
  selected.set(key, { node, hasTools });
68
70
  }
@@ -1,3 +1,4 @@
1
+ import { captureRequestReasoningPreference } from "../request/reasoning-preference.js";
1
2
  import { resolveModelSelection } from "../model/model-selection.js";
2
3
  import { validateToolNormalInvocationInput, validateToolNormalInvocationPayload, } from "../../capabilities/normal-invocation/validator.js";
3
4
  import { compileAutomationGraph } from "./graph-validation.js";
@@ -142,6 +143,12 @@ export function validateAutomationPublication(input) {
142
143
  modelPolicy: input.config.models,
143
144
  modelExecutionPolicies: input.config.modelExecutionPolicies,
144
145
  });
146
+ try {
147
+ captureRequestReasoningPreference(node.reasoningPreference, selection);
148
+ }
149
+ catch (error) {
150
+ issues.push({ code: "automation_model_unavailable", path: `nodes.${node.id}.reasoningPreference`, message: String(error) });
151
+ }
145
152
  if (selection.execution.primaryProfileId !== node.modelProfileId) {
146
153
  issues.push({
147
154
  code: "automation_model_unavailable",
@@ -27,6 +27,7 @@ function snapshotAgent(agent, id) {
27
27
  onFailure: agent.onFailure,
28
28
  modelProfileId: agent.modelProfileId,
29
29
  agentMode: agent.agentMode,
30
+ ...(agent.reasoningPreference ? { reasoningPreference: agent.reasoningPreference } : {}),
30
31
  roleInstructions: agent.roleInstructions,
31
32
  prompt: agent.prompt,
32
33
  inputs: {},
@@ -155,6 +155,9 @@ export declare function createAutomationService(options: {
155
155
  }>[];
156
156
  models: {
157
157
  provider?: string | undefined;
158
+ reasoningControls?: {
159
+ budgetTokens: boolean;
160
+ } | undefined;
158
161
  id: string;
159
162
  label: string;
160
163
  }[];
@@ -1,3 +1,4 @@
1
+ import { modelReasoningPreferenceSchema } from "../../../shared/model-reasoning-schema.js";
1
2
  import { AUTOMATION_DRAFT_BATCH_LIMITS } from "../../automations/draft-batch.js";
2
3
  import { AUTOMATION_GRAPH_LIMITS, DEFAULT_AUTOMATION_LIMITS } from "../../automations/limits.js";
3
4
  import { AUTOMATION_CREATION_RECIPE_LIMITS } from "./creation-recipe.js";
@@ -50,12 +51,13 @@ const agentTools = { $ref: "#/$defs/selectedTools" };
50
51
  const savedOrigin = object({ agentId: text(1), revision: integer });
51
52
  const sharedNode = { title: text(1), onFailure: choices("stop", "skip") };
52
53
  const toolFields = { operation, controls: map(binding), payload: binding };
53
- const agentFields = { modelProfileId: text(1), agentMode: choices("fast", "reasoning", "deep"),
54
+ const reasoningPreference = { $ref: "#/$defs/reasoningPreference" };
55
+ const agentFields = { reasoningPreference, modelProfileId: text(1), agentMode: choices("fast", "reasoning", "deep"),
54
56
  roleInstructions: text(), prompt: text(), inputs: map(binding), tools: agentTools,
55
57
  result, acceptance, savedAgentOrigin: savedOrigin };
56
58
  const toolNode = object({ kind: choices("tool"), ...sharedNode, ...toolFields }, ["payload"]);
57
- const agentNode = object({ kind: choices("agent"), ...sharedNode, ...agentFields }, ["acceptance", "savedAgentOrigin"]);
58
- const editableNodeFields = { ...sharedNode, ...toolFields, ...agentFields, payload: nullable(binding) };
59
+ const agentNode = object({ kind: choices("agent"), ...sharedNode, ...agentFields }, ["acceptance", "savedAgentOrigin", "reasoningPreference"]);
60
+ const editableNodeFields = { ...sharedNode, ...toolFields, ...agentFields, payload: nullable(binding), reasoningPreference: nullable(reasoningPreference) };
59
61
  const nodePatch = object(editableNodeFields, Object.keys(editableNodeFields));
60
62
  const schedule = { anyOf: [
61
63
  object({ kind: choices("timer"), delayMs: integer }),
@@ -92,13 +94,13 @@ const command = { anyOf: [
92
94
  ] };
93
95
  const recipeStep = { anyOf: [
94
96
  object({ key: text(1), kind: choices("tool"), ...sharedNode, ...toolFields }, ["onFailure", "controls", "payload"]),
95
- object({ key: text(1), kind: choices("agent"), ...sharedNode, ...agentFields }, ["onFailure", "agentMode", "roleInstructions", "inputs", "tools", "result", "acceptance", "savedAgentOrigin"]),
97
+ object({ key: text(1), kind: choices("agent"), ...sharedNode, ...agentFields }, ["onFailure", "agentMode", "reasoningPreference", "roleInstructions", "inputs", "tools", "result", "acceptance", "savedAgentOrigin"]),
96
98
  object({ key: text(1), kind: choices("parallel"), branches: array(array({ $ref: "#/properties/steps/items" }, AUTOMATION_CREATION_RECIPE_LIMITS.executableNodes, 1), AUTOMATION_GRAPH_LIMITS.branchesPerGroup, 2) }),
97
99
  ] };
98
100
  const schema = { ...object({ version: { type: "integer", const: 1 },
99
101
  commands: array(command, AUTOMATION_DRAFT_BATCH_LIMITS.commands, 1),
100
102
  settings: { $ref: "#/$defs/definitionPatch" }, steps: array(recipeStep, AUTOMATION_CREATION_RECIPE_LIMITS.executableNodes),
101
- }, ["commands", "settings", "steps"]), $defs: { valueBinding, definitionPatch, operationReference, selectedTools } };
103
+ }, ["commands", "settings", "steps"]), $defs: { valueBinding, definitionPatch, operationReference, selectedTools, reasoningPreference: modelReasoningPreferenceSchema } };
102
104
  /** Structural generation grammar. Canonical parsers own route exclusivity, references, bounds and graph semantics. */
103
105
  export const AUTOMATION_BUILDER_PAYLOAD_FORMAT = Object.freeze({
104
106
  type: "json_schema", name: "automation_draft_plan", strict: false, schema,
@@ -63,6 +63,9 @@ export declare function readAutomationAuthoringCatalog(service: CatalogService,
63
63
  };
64
64
  models: {
65
65
  items: {
66
+ reasoningControls?: {
67
+ budgetTokens: boolean;
68
+ } | undefined;
66
69
  provider?: string | undefined;
67
70
  id: string;
68
71
  label: string;
@@ -177,6 +180,9 @@ export declare function readAutomationAuthoringCatalogIndex(service: CatalogServ
177
180
  };
178
181
  models: {
179
182
  items: {
183
+ reasoningControls?: {
184
+ budgetTokens: boolean;
185
+ } | undefined;
180
186
  provider?: string | undefined;
181
187
  id: string;
182
188
  label: string;
@@ -250,6 +256,9 @@ export declare function projectAutomationAuthoringCatalogIndex(catalog: Authorin
250
256
  };
251
257
  models: {
252
258
  items: {
259
+ reasoningControls?: {
260
+ budgetTokens: boolean;
261
+ } | undefined;
253
262
  provider?: string | undefined;
254
263
  id: string;
255
264
  label: string;