@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
@@ -119,6 +119,7 @@ export function projectAutomationAuthoringCatalogIndex(catalog, offset, automati
119
119
  id: model.id, label: model.label.slice(0, LABEL_MAX_LENGTH),
120
120
  labelTruncated: model.label.length > LABEL_MAX_LENGTH,
121
121
  ...(model.provider ? { provider: model.provider } : {}),
122
+ ...(model.reasoningControls ? { reasoningControls: model.reasoningControls } : {}),
122
123
  })), offset);
123
124
  const savedAgents = catalogPage([...catalog.savedAgents]
124
125
  .sort((left, right) => left.id.localeCompare(right.id))
@@ -36,6 +36,9 @@ export declare function readAutomationAuthoringPreparation(service: CatalogServi
36
36
  }[];
37
37
  models: {
38
38
  items: {
39
+ reasoningControls?: {
40
+ budgetTokens: boolean;
41
+ } | undefined;
39
42
  provider?: string | undefined;
40
43
  id: string;
41
44
  label: string;
@@ -1,3 +1,4 @@
1
+ import { modelReasoningControlProperties } from "../model-reasoning-controls.js";
1
2
  import { automationAuthoringCatalogOperations } from "./authoring-catalog-contract.js";
2
3
  import { automationAuthoringInputOperations } from "./authoring-input-contracts.js";
3
4
  const text = (maximum = 4_096) => ({
@@ -45,10 +46,10 @@ export const automationDraftToolContract = {
45
46
  operation("remove_folder_source", "Remove the optional folder source.", common, ["automationId", "expectedRevision"]),
46
47
  operation("set_run_inputs", "Set named static run inputs using a bounded JSON object, not a whole automation definition.", { ...common, inputsJson: text() }, ["automationId", "expectedRevision", "inputsJson"]),
47
48
  operation("set_limits", "Set only supplied positive run limits; omitted limits keep their current values.", { ...common, maxConcurrentNodes: revision, maxModelCallsPerRun: revision, maxToolCallsPerRun: revision, maxRunDurationMs: revision, maxRunsPerDay: revision, maxStoredArtifactBytes: revision, stopReportDeadlineMs: revision }, ["automationId", "expectedRevision"]),
48
- operation("add_agent", "Add an agent at the exact position. Placement does not pass earlier outputs; use the returned node ID with bind_step_result to connect each needed earlier result.", { ...common, parentSequenceId: id, index, title: optionalText(160), modelProfileId: optionalText(128), agentMode: choice("fast", "reasoning", "deep"), roleInstructions: optionalText(), prompt: optionalText(), onFailure: choice("stop", "skip") }, ["automationId", "expectedRevision", "parentSequenceId", "index", "title", "modelProfileId", "agentMode", "roleInstructions", "prompt", "onFailure"]),
49
+ operation("add_agent", "Add an agent at the exact position. Placement does not pass earlier outputs; use the returned node ID with bind_step_result to connect each needed earlier result.", { ...common, parentSequenceId: id, index, title: optionalText(160), modelProfileId: optionalText(128), agentMode: choice("fast", "reasoning", "deep"), ...modelReasoningControlProperties, roleInstructions: optionalText(), prompt: optionalText(), onFailure: choice("stop", "skip") }, ["automationId", "expectedRevision", "parentSequenceId", "index", "title", "modelProfileId", "agentMode", "roleInstructions", "prompt", "onFailure"]),
49
50
  operation("add_saved_agent", "Add an exact saved-agent revision as a draft step. It does not inherit an automation grant.", { ...common, parentSequenceId: id, index, agentId: id, agentRevision: revision }, ["automationId", "expectedRevision", "parentSequenceId", "index", "agentId", "agentRevision"]),
50
51
  operation("add_tool", "Add a tool step by exact catalog operation reference. Set each input with set_step_literal or bind_step_result; advanced bindings use set_tool_controls.", { ...common, parentSequenceId: id, index, title: optionalText(160), toolName: text(64), operationId: text(64), contractVersion: revision, onFailure: choice("stop", "skip") }, ["automationId", "expectedRevision", "parentSequenceId", "index", "title", "toolName", "operationId", "contractVersion", "onFailure"]),
51
- operation("edit_agent", "Edit selected agent fields without rewriting its other configuration.", { ...node, modelProfileId: optionalText(128), agentMode: choice("fast", "reasoning", "deep"), roleInstructions: optionalText(), prompt: optionalText() }, ["automationId", "expectedRevision", "nodeId"]),
52
+ operation("edit_agent", "Edit selected agent fields without rewriting its other configuration.", { ...node, modelProfileId: optionalText(128), agentMode: choice("fast", "reasoning", "deep"), ...modelReasoningControlProperties, roleInstructions: optionalText(), prompt: optionalText() }, ["automationId", "expectedRevision", "nodeId"]),
52
53
  operation("set_step_policy", "Set a step's title or failure behavior; skip continues after a failed step, stop ends the run.", { ...node, title: optionalText(160), onFailure: choice("stop", "skip") }, ["automationId", "expectedRevision", "nodeId"]),
53
54
  ...automationAuthoringInputOperations,
54
55
  operation("set_agent_inputs", "Advanced: replace all named agent inputs with canonical bindings JSON. Prefer bind_step_result for one earlier result. Example: {\"source\":{\"kind\":\"node_result\",\"nodeId\":\"<id>\",\"select\":\"text\"}}. Unbound outputs are not passed.", { ...node, bindingsJson: text() }, ["automationId", "expectedRevision", "nodeId", "bindingsJson"]),
@@ -1,3 +1,5 @@
1
+ import { readCreatedModelReasoningControls, readUpdatedModelReasoningControls } from "../model-reasoning-controls.js";
2
+ import { findAutomationStep } from "../../automations/step-evidence-effects.js";
1
3
  import { CORE_TOOL_CONTRACTS } from "../core-tool-contracts.js";
2
4
  import { Buffer } from "node:buffer";
3
5
  import { AUTOMATION_TOOL_EVENT_PRESENTATION } from "./event-presentation.js";
@@ -43,11 +45,12 @@ function jsonArray(params, key) {
43
45
  throw new Error("automation_graph_invalid");
44
46
  return value;
45
47
  }
46
- function supplied(params, keys) {
47
- const patch = Object.fromEntries(keys
48
- .filter((key) => params[key] !== undefined)
49
- .map((key) => [key, params[key]]));
50
- if (Object.keys(patch).length === 0)
48
+ function supplied(params, keys, parsedPatch = {}) {
49
+ const patch = { ...Object.fromEntries(keys
50
+ .filter((key) => params[key] !== undefined)
51
+ .map((key) => [key, params[key]])), ...parsedPatch };
52
+ const hasNoSuppliedFields = Object.keys(patch).length === 0;
53
+ if (hasNoSuppliedFields)
51
54
  throw new Error("automation_graph_invalid");
52
55
  return patch;
53
56
  }
@@ -188,6 +191,7 @@ async function execute(service, params) {
188
191
  index: requiredInteger(params, "index"), nodeWithoutId: {
189
192
  kind: "agent", title: params.title, onFailure: params.onFailure,
190
193
  modelProfileId: params.modelProfileId, agentMode: params.agentMode,
194
+ ...readCreatedModelReasoningControls(params, params.modelProfileId),
191
195
  roleInstructions: params.roleInstructions, prompt: params.prompt,
192
196
  inputs: {}, tools: [], result: { kind: "text" },
193
197
  } });
@@ -213,9 +217,14 @@ async function execute(service, params) {
213
217
  contractVersion: params.contractVersion }, controls: {},
214
218
  } });
215
219
  const nodeId = requiredText(params, "nodeId");
216
- if (action === "edit_agent")
220
+ if (action === "edit_agent") {
221
+ const draft = await service.getDraft(automationId);
222
+ const target = draft && findAutomationStep(draft.definition.body, nodeId);
223
+ const previousProfileId = target?.kind === "agent" ? target.modelProfileId : undefined;
224
+ const profileId = params.modelProfileId ?? previousProfileId;
217
225
  return mutate(service, params, { kind: "update_node", nodeId,
218
- patch: supplied(params, ["modelProfileId", "agentMode", "roleInstructions", "prompt"]) });
226
+ patch: supplied(params, ["modelProfileId", "agentMode", "roleInstructions", "prompt"], readUpdatedModelReasoningControls(params, previousProfileId, profileId)) });
227
+ }
219
228
  if (action === "set_step_policy")
220
229
  return mutate(service, params, { kind: "update_node", nodeId,
221
230
  patch: supplied(params, ["title", "onFailure"]) });
@@ -0,0 +1,23 @@
1
+ import { type ModelReasoningPreference } from "../../shared/model-reasoning.js";
2
+ /** Flat v1 tool inputs project to the canonical nested Runtime request contract. */
3
+ export declare const modelReasoningControlProperties: {
4
+ reasoningMode: {
5
+ type: "string";
6
+ enum: string[];
7
+ };
8
+ reasoningBudgetTokens: {
9
+ type: "integer";
10
+ minimum: number;
11
+ maximum: number;
12
+ };
13
+ };
14
+ export declare function readModelReasoningControlPatch(params: Readonly<Record<string, unknown>>, profileId: unknown): {
15
+ reasoningPreference?: ModelReasoningPreference | null;
16
+ };
17
+ /** Tool model switches inherit the new profile unless controls are explicit. */
18
+ export declare function readUpdatedModelReasoningControls(params: Readonly<Record<string, unknown>>, previousProfileId: unknown, nextProfileId: unknown): {
19
+ reasoningPreference?: ModelReasoningPreference | null;
20
+ };
21
+ export declare function readCreatedModelReasoningControls(params: Readonly<Record<string, unknown>>, profileId: unknown): {
22
+ reasoningPreference?: ModelReasoningPreference;
23
+ };
@@ -0,0 +1,56 @@
1
+ import { MAX_REASONING_BUDGET_TOKENS, ModelReasoningConfigurationError, parseModelReasoningPreference, } from "../../shared/model-reasoning.js";
2
+ /** Flat v1 tool inputs project to the canonical nested Runtime request contract. */
3
+ export const modelReasoningControlProperties = {
4
+ reasoningMode: {
5
+ type: "string",
6
+ enum: ["inherit", "off", "budget", "server-default"],
7
+ },
8
+ reasoningBudgetTokens: {
9
+ type: "integer",
10
+ minimum: 0,
11
+ maximum: MAX_REASONING_BUDGET_TOKENS,
12
+ },
13
+ };
14
+ function hasUnboundReasoningTokenControl(params) {
15
+ if (params.reasoningBudgetTokens === undefined)
16
+ return false;
17
+ return params.reasoningMode !== "budget";
18
+ }
19
+ export function readModelReasoningControlPatch(params, profileId) {
20
+ if (hasUnboundReasoningTokenControl(params))
21
+ throw new ModelReasoningConfigurationError("invalid_reasoning_preference", "reasoningBudgetTokens requires reasoningMode=budget");
22
+ if (params.reasoningMode === undefined)
23
+ return {};
24
+ if (params.reasoningMode === "inherit")
25
+ return { reasoningPreference: null };
26
+ const preference = parseModelReasoningPreference({
27
+ profileId,
28
+ mode: params.reasoningMode,
29
+ ...(params.reasoningBudgetTokens !== undefined
30
+ ? { budgetTokens: params.reasoningBudgetTokens }
31
+ : {}),
32
+ });
33
+ return { reasoningPreference: preference };
34
+ }
35
+ function hasChangedReasoningModelProfile(previousProfileId, nextProfileId) {
36
+ if (typeof previousProfileId !== "string")
37
+ return false;
38
+ if (typeof nextProfileId !== "string")
39
+ return false;
40
+ return previousProfileId !== nextProfileId;
41
+ }
42
+ /** Tool model switches inherit the new profile unless controls are explicit. */
43
+ export function readUpdatedModelReasoningControls(params, previousProfileId, nextProfileId) {
44
+ const patch = readModelReasoningControlPatch(params, nextProfileId);
45
+ if ("reasoningPreference" in patch)
46
+ return patch;
47
+ if (!hasChangedReasoningModelProfile(previousProfileId, nextProfileId))
48
+ return patch;
49
+ return { reasoningPreference: null };
50
+ }
51
+ export function readCreatedModelReasoningControls(params, profileId) {
52
+ const patch = readModelReasoningControlPatch(params, profileId);
53
+ if (!patch.reasoningPreference)
54
+ return {};
55
+ return { reasoningPreference: patch.reasoningPreference };
56
+ }
@@ -1,3 +1,4 @@
1
+ import { modelReasoningControlProperties } from "../model-reasoning-controls.js";
1
2
  import { scheduleDetailProperties, scheduleTimingProperties, } from "./tool-input-properties.js";
2
3
  function createScheduleOperation(kind, timingSummary, timingFields, requiredTiming = timingFields) {
3
4
  return {
@@ -11,6 +12,7 @@ function createScheduleOperation(kind, timingSummary, timingFields, requiredTimi
11
12
  additionalProperties: false,
12
13
  properties: {
13
14
  ...scheduleDetailProperties,
15
+ ...modelReasoningControlProperties,
14
16
  timeZone: scheduleTimingProperties.timeZone,
15
17
  ...Object.fromEntries(timingFields.map((field) => [field, scheduleTimingProperties[field]])),
16
18
  },
@@ -14,6 +14,7 @@ export declare function createSchedulerJobPage(jobs: readonly SchedulerJob[], pa
14
14
  title: string;
15
15
  modelProfileId: string;
16
16
  agentMode: import("../../../shared/types.js").AgentMode;
17
+ reasoningPreference?: import("../../../shared/model-reasoning.js").ModelReasoningPreference;
17
18
  toolPermissionMode: import("../../scheduler/tool-permission-mode.js").SchedulerToolPermissionMode;
18
19
  timeZone: string;
19
20
  schedule: import("../../scheduler/contracts.js").SchedulerTimedSchedule;
@@ -1,3 +1,4 @@
1
+ import { readCreatedModelReasoningControls, readUpdatedModelReasoningControls } from "../model-reasoning-controls.js";
1
2
  import { CORE_TOOL_CONTRACTS } from "../core-tool-contracts.js";
2
3
  import { resolveModelSelection } from "../../model/model-selection.js";
3
4
  import { requireCreateCalendarTimeZone } from "./create-time-zone.js";
@@ -42,11 +43,12 @@ function scheduleInput(params) {
42
43
  };
43
44
  throw new Error("schedule_kind_required");
44
45
  }
45
- function updateInput(params, config) {
46
+ function updateInput(params, config, modelProfileId) {
46
47
  if (params.modelProfileId !== undefined) {
47
48
  requireAvailableScheduleModel(config, params.modelProfileId);
48
49
  }
49
50
  return {
51
+ ...readUpdatedModelReasoningControls(params, modelProfileId, params.modelProfileId ?? modelProfileId),
50
52
  ...(params.title !== undefined
51
53
  ? { title: requireText(params.title, "title") }
52
54
  : {}),
@@ -91,6 +93,7 @@ export function createSchedulingToolModule(service, config, ready) {
91
93
  prompt: requireText(params.prompt, "prompt"),
92
94
  modelProfileId: requireText(selection.execution.primaryProfileId, "model"),
93
95
  agentMode: selection.agentMode,
96
+ ...readCreatedModelReasoningControls(params, selection.execution.primaryProfileId),
94
97
  timeZone: params.timeZone
95
98
  ? requireText(params.timeZone, "time_zone")
96
99
  : Intl.DateTimeFormat().resolvedOptions().timeZone,
@@ -109,7 +112,7 @@ export function createSchedulingToolModule(service, config, ready) {
109
112
  runs: [...(await service.listRuns(id, { limit: 20 }))].reverse(),
110
113
  };
111
114
  if (action === "update")
112
- return service.update(id, updateInput(params, config));
115
+ return service.update(id, updateInput(params, config, job.modelProfileId));
113
116
  if (action === "pause")
114
117
  return service.pause(id);
115
118
  if (action === "resume")
@@ -1,7 +1,9 @@
1
+ import { modelReasoningControlProperties } from "../model-reasoning-controls.js";
1
2
  import { scheduleDetailProperties, scheduleTextField, scheduleTimingProperties, } from "./tool-input-properties.js";
2
3
  const editableJobProperties = {
3
4
  jobId: scheduleTextField(200),
4
5
  ...scheduleDetailProperties,
6
+ ...modelReasoningControlProperties,
5
7
  modelProfileId: scheduleTextField(200),
6
8
  agentMode: { type: "string", enum: ["fast", "reasoning", "deep"] },
7
9
  timeZone: scheduleTimingProperties.timeZone,
@@ -1,3 +1,5 @@
1
+ import { parseModelReasoningBudgetByMode } from "../../shared/model-reasoning-modes.js";
2
+ import { parseModelReasoningBudget } from "../../shared/model-reasoning.js";
1
3
  import { readFileSync } from "node:fs";
2
4
  import { dirname, isAbsolute, resolve } from "node:path";
3
5
  import { DEFAULT_RUNTIME_LOGGING_ENABLED, DEFAULT_RUNTIME_LOG_ROTATION_CONFIG, } from "./constants.js";
@@ -316,6 +318,8 @@ export function buildModelGenerationConfig(value) {
316
318
  if (!isRecord(value)) {
317
319
  return undefined;
318
320
  }
321
+ const reasoningBudget = parseModelReasoningBudget(value.reasoningBudget);
322
+ const reasoningBudgetByMode = parseModelReasoningBudgetByMode(value.reasoningBudgetByMode);
319
323
  const temperature = readOptionalNumber(value, "temperature");
320
324
  const topP = readOptionalNumber(value, "topP");
321
325
  const reasoningEffort = value.reasoningEffort === "none" ||
@@ -330,6 +334,8 @@ export function buildModelGenerationConfig(value) {
330
334
  ...(temperature !== undefined ? { temperature } : {}),
331
335
  ...(topP !== undefined ? { topP } : {}),
332
336
  ...(reasoningEffort ? { reasoningEffort } : {}),
337
+ ...(reasoningBudget ? { reasoningBudget } : {}),
338
+ ...(reasoningBudgetByMode ? { reasoningBudgetByMode } : {}),
333
339
  };
334
340
  return Object.keys(config).length > 0 ? config : undefined;
335
341
  }
@@ -1,3 +1,5 @@
1
+ import { validateEffectiveReasoningBudgets } from "./model-reasoning-validation.js";
2
+ import { validateLlamaCppProfileCapabilities } from "./llamacpp-profile-validation.js";
1
3
  import { validateProfileContextCapacity, } from "./model-context-capacity.js";
2
4
  import { RuntimeConfigValidationError } from "./validation.js";
3
5
  function hasConfiguredProfile(profiles, profileId) {
@@ -41,6 +43,8 @@ function validateStepTarget(params) {
41
43
  export function validateEffectiveRuntimeModelConfig(params) {
42
44
  const issues = [];
43
45
  const capacityIssues = [];
46
+ validateEffectiveReasoningBudgets(issues, params.modelPolicy);
47
+ validateLlamaCppProfileCapabilities(issues, params.modelPolicy);
44
48
  const providers = params.modelPolicy?.providers ?? {};
45
49
  const profiles = params.modelPolicy?.profiles ?? {};
46
50
  const invocationProfiles = params.modelPolicy?.invocationProfiles ?? {};
@@ -0,0 +1,3 @@
1
+ import type { ModelGatewayPolicyConfig } from "../../model-gateway/types.js";
2
+ /** The current adapter is text-only even when the underlying server has a projector. */
3
+ export declare function validateLlamaCppProfileCapabilities(issues: string[], policy?: ModelGatewayPolicyConfig): void;
@@ -0,0 +1,15 @@
1
+ function requestsUnsupportedLlamaImageInput(profile, policy) {
2
+ if (policy.providers?.[profile.provider ?? ""]?.type !== "llamacpp")
3
+ return false;
4
+ return profile.capabilities?.inputModalities?.includes("image") === true;
5
+ }
6
+ /** The current adapter is text-only even when the underlying server has a projector. */
7
+ export function validateLlamaCppProfileCapabilities(issues, policy) {
8
+ if (!policy)
9
+ return;
10
+ for (const [id, profile] of Object.entries(policy.profiles ?? {})) {
11
+ if (!requestsUnsupportedLlamaImageInput(profile, policy))
12
+ continue;
13
+ issues.push(`models.profiles.${id}.capabilities.inputModalities: the llamacpp adapter supports text only`);
14
+ }
15
+ }
@@ -0,0 +1,40 @@
1
+ export declare const modelReasoningBudgetSchema: {
2
+ description: string;
3
+ oneOf: ({
4
+ type: string;
5
+ additionalProperties: boolean;
6
+ required: string[];
7
+ properties: {
8
+ mode: {
9
+ const: string;
10
+ };
11
+ tokens: {
12
+ type: string;
13
+ minimum: number;
14
+ maximum: number;
15
+ };
16
+ };
17
+ } | {
18
+ type: string;
19
+ additionalProperties: boolean;
20
+ required: string[];
21
+ properties: {
22
+ mode: {
23
+ const: string;
24
+ };
25
+ tokens?: undefined;
26
+ };
27
+ })[];
28
+ };
29
+ export declare const modelReasoningBudgetByModeSchema: {
30
+ type: string;
31
+ description: string;
32
+ additionalProperties: boolean;
33
+ properties: {
34
+ [k: string]: {
35
+ type: string;
36
+ minimum: number;
37
+ maximum: number;
38
+ };
39
+ };
40
+ };
@@ -0,0 +1,38 @@
1
+ import { MAX_REASONING_BUDGET_TOKENS } from "../../shared/model-reasoning.js";
2
+ export const modelReasoningBudgetSchema = {
3
+ description: "Reasoning-only budget for a declared budget-capable model. Zero disables thinking. Omit to inherit.",
4
+ oneOf: [
5
+ {
6
+ type: "object",
7
+ additionalProperties: false,
8
+ required: ["mode", "tokens"],
9
+ properties: {
10
+ mode: { const: "tokens" },
11
+ tokens: {
12
+ type: "integer",
13
+ minimum: 0,
14
+ maximum: MAX_REASONING_BUDGET_TOKENS,
15
+ },
16
+ },
17
+ },
18
+ {
19
+ type: "object",
20
+ additionalProperties: false,
21
+ required: ["mode"],
22
+ properties: { mode: { const: "server-default" } },
23
+ },
24
+ ],
25
+ };
26
+ export const modelReasoningBudgetByModeSchema = {
27
+ type: "object",
28
+ description: "Optional llama.cpp token budgets for main-step Low/Reasoning/Deep presets. Omit to inherit; {} clears the inherited map. A provided map replaces the whole parent map. Zero disables thinking; positive mode budgets enable it.",
29
+ additionalProperties: false,
30
+ properties: Object.fromEntries(["fast", "reasoning", "deep"].map((mode) => [
31
+ mode,
32
+ {
33
+ type: "integer",
34
+ minimum: 0,
35
+ maximum: MAX_REASONING_BUDGET_TOKENS,
36
+ },
37
+ ])),
38
+ };
@@ -0,0 +1,3 @@
1
+ import type { ModelGatewayPolicyConfig } from "../../model-gateway/types.js";
2
+ /** Run after configRef materialization, before accepting any Runtime request. */
3
+ export declare function validateEffectiveReasoningBudgets(issues: string[], policy: ModelGatewayPolicyConfig | undefined): void;
@@ -0,0 +1,37 @@
1
+ import { supportsModelReasoningBudget } from "../../shared/model-reasoning.js";
2
+ function validateBoundBudget(issues, policy, profile, budget, path) {
3
+ if (budget === undefined)
4
+ return;
5
+ if (!profile)
6
+ return; // The model-reference owner diagnoses missing targets.
7
+ const provider = policy.providers?.[profile.provider ?? ""];
8
+ if (supportsModelReasoningBudget({
9
+ provider: provider?.type ?? "",
10
+ supportsThinking: profile.supportsThinking,
11
+ }))
12
+ return;
13
+ issues.push(`${path} requires a llamacpp profile with supportsThinking: true`);
14
+ }
15
+ function validateGenerationBudgets(issues, policy, profile, generation, path) {
16
+ for (const key of ["reasoningBudget", "reasoningBudgetByMode"]) {
17
+ validateBoundBudget(issues, policy, profile, generation?.[key], `${path}.${key}`);
18
+ }
19
+ }
20
+ /** Run after configRef materialization, before accepting any Runtime request. */
21
+ export function validateEffectiveReasoningBudgets(issues, policy) {
22
+ if (!policy)
23
+ return;
24
+ const profiles = policy.profiles ?? {};
25
+ for (const [id, profile] of Object.entries(profiles)) {
26
+ validateGenerationBudgets(issues, policy, profile, profile.generation, `models.profiles.${id}.generation`);
27
+ for (const [slot, calibration] of Object.entries(profile.calibration ?? {})) {
28
+ const target = calibration.profileId
29
+ ? profiles[calibration.profileId]
30
+ : profile;
31
+ validateGenerationBudgets(issues, policy, target, calibration.generation, `models.profiles.${id}.calibration.${slot}.generation`);
32
+ }
33
+ }
34
+ for (const [id, invocation] of Object.entries(policy.invocationProfiles ?? {})) {
35
+ validateGenerationBudgets(issues, policy, profiles[invocation.profileId], invocation.generation, `models.invocationProfiles.${id}.generation`);
36
+ }
37
+ }
@@ -1,6 +1,7 @@
1
1
  import type { ChatMessage, ModelTokenEstimationConfig } from "../../../model-gateway/types.js";
2
2
  import type { ModelStep } from "../../../shared/model-steps.js";
3
3
  import type { RequestRunnerConfig } from "./contracts.js";
4
+ export type ConfiguredStepInstructionPolicy = "omit";
4
5
  export type ConfiguredStepInstructionMetadata = Readonly<{
5
6
  blockCount: number;
6
7
  characterCount: number;
@@ -13,11 +14,13 @@ export type ConfiguredStepInstructionMetadata = Readonly<{
13
14
  export declare function resolveConfiguredStepInstructionMetadata(params: {
14
15
  runnerConfig: RequestRunnerConfig;
15
16
  modelStep: ModelStep;
17
+ configuredInstructionPolicy?: ConfiguredStepInstructionPolicy;
16
18
  }): ConfiguredStepInstructionMetadata;
17
19
  /** Applies configured guidance exactly once at the shared invocation boundary. */
18
20
  export declare function projectConfiguredStepMessages(params: {
19
21
  runnerConfig: RequestRunnerConfig;
20
22
  modelStep: ModelStep;
23
+ configuredInstructionPolicy?: ConfiguredStepInstructionPolicy;
21
24
  messages: readonly ChatMessage[];
22
25
  }): Readonly<{
23
26
  messages: ChatMessage[];
@@ -30,5 +33,6 @@ export declare function projectConfiguredStepMessages(params: {
30
33
  export declare function estimateConfiguredStepInstructionReserveTokens(params: {
31
34
  runnerConfig: RequestRunnerConfig;
32
35
  modelStep: ModelStep;
36
+ configuredInstructionPolicy?: ConfiguredStepInstructionPolicy;
33
37
  tokenEstimation?: ModelTokenEstimationConfig;
34
38
  }): number;
@@ -1,5 +1,8 @@
1
1
  import { estimateTextTokens } from "../../context/token-estimator.js";
2
2
  const EMPTY_STRINGS = Object.freeze([]);
3
+ const EMPTY_CONFIGURED_INSTRUCTIONS = Object.freeze({
4
+ blockCount: 0, characterCount: 0, refs: EMPTY_STRINGS, contentHashes: EMPTY_STRINGS,
5
+ });
3
6
  const CONFIGURED_METHODOLOGY_HEADING = "## Configured operating methodology";
4
7
  const CONFIGURED_METHODOLOGY_CONTRACT = "The following Markdown is configured guidance for this model step. Apply the shared principles and the section for your active role. It supplements the runtime contract above; it does not change the available actions, roles, capabilities, or output schema.";
5
8
  /**
@@ -49,14 +52,12 @@ export function estimateConfiguredStepInstructionReserveTokens(params) {
49
52
  : 0;
50
53
  }
51
54
  function resolveConfiguredStepContent(params) {
55
+ if (shouldOmitConfiguredStepInstructions(params.configuredInstructionPolicy)) {
56
+ return EMPTY_CONFIGURED_INSTRUCTIONS;
57
+ }
52
58
  const blocks = params.runnerConfig.steps[params.modelStep]?.instructionBlocks ?? [];
53
59
  if (blocks.length === 0) {
54
- return Object.freeze({
55
- blockCount: 0,
56
- characterCount: 0,
57
- refs: EMPTY_STRINGS,
58
- contentHashes: EMPTY_STRINGS,
59
- });
60
+ return EMPTY_CONFIGURED_INSTRUCTIONS;
60
61
  }
61
62
  return Object.freeze({
62
63
  appendix: [
@@ -70,3 +71,6 @@ function resolveConfiguredStepContent(params) {
70
71
  contentHashes: Object.freeze(blocks.map((block) => block.contentHash)),
71
72
  });
72
73
  }
74
+ function shouldOmitConfiguredStepInstructions(policy) {
75
+ return policy === "omit";
76
+ }
@@ -1,3 +1,4 @@
1
+ import { modelReasoningBudgetByModeSchema, modelReasoningBudgetSchema } from "./model-reasoning-schema.js";
1
2
  import { modelPluginConfigSchema } from "./model-plugin-config.js";
2
3
  import { DEFAULT_MEMORY_RECALL_CALL_LIMIT } from "../long-term-memory/recall-policy.js";
3
4
  import { PATH_CONFIG_FIELDS, STRING_CONFIG_FIELDS, TIMEOUT_CONFIG_FIELDS, } from "./fields.js";
@@ -80,6 +81,8 @@ function modelGenerationSchema() {
80
81
  type: "number",
81
82
  description: "Nucleus sampling value forwarded to the model provider.",
82
83
  },
84
+ reasoningBudget: modelReasoningBudgetSchema,
85
+ reasoningBudgetByMode: modelReasoningBudgetByModeSchema,
83
86
  reasoningEffort: {
84
87
  type: "string",
85
88
  enum: ["none", "minimal", "low", "medium", "high", "xhigh"],
@@ -1,3 +1,5 @@
1
+ import { parseModelReasoningBudgetByMode } from "../../../shared/model-reasoning-modes.js";
2
+ import { parseModelReasoningBudget } from "../../../shared/model-reasoning.js";
1
3
  import { hasOwnValue } from "../utils.js";
2
4
  import { validateOptionalNonNegativeInteger, validateOptionalNumber, validateOptionalObject, validateOptionalPositiveNumber, } from "./runtime-config-field-validation.js";
3
5
  const SUPPORTED_MODEL_REASONING_EFFORTS = new Set([
@@ -53,6 +55,18 @@ export function validateModelContextConfig(issues, context, displayKey) {
53
55
  }
54
56
  }
55
57
  export function validateModelGenerationConfig(issues, generation, displayKey) {
58
+ try {
59
+ parseModelReasoningBudget(generation.reasoningBudget);
60
+ }
61
+ catch (error) {
62
+ issues.push(`${displayKey}.reasoningBudget: ${String(error)}`);
63
+ }
64
+ try {
65
+ parseModelReasoningBudgetByMode(generation.reasoningBudgetByMode);
66
+ }
67
+ catch (error) {
68
+ issues.push(`${displayKey}.reasoningBudgetByMode: ${String(error)}`);
69
+ }
56
70
  if (hasOwnValue(generation, "maxOutputTokens")) {
57
71
  issues.push(`${displayKey}.maxOutputTokens is not supported; remove it and let the provider enforce physical output capacity`);
58
72
  }
@@ -4,4 +4,6 @@ type CompactedResultContent = Pick<RequestToolResult, "adapterResult" | "referen
4
4
  export declare function projectCompactedCapabilityResultReceipt<Result extends CompactedResultContent>(result: Result): Readonly<Omit<Omit<Result, "adapterResult"> & {
5
5
  summary: string;
6
6
  }, "referenceData">>;
7
+ /** The caller must verify that the registered output belongs to the covered source. */
8
+ export declare function projectCompactedRegisteredOutputSummary(summary: string, registeredOutput: string | undefined): string;
7
9
  export {};
@@ -4,19 +4,20 @@ export function projectCompactedCapabilityResultReceipt(result) {
4
4
  const { adapterResult: _adapterResult, ...metadata } = result;
5
5
  const receipt = {
6
6
  ...metadata,
7
- summary: isSummaryCoveredByCompactedResult(result)
8
- ? "Result evidence is available in the verified compacted source."
9
- : result.summary,
7
+ summary: projectCompactedRegisteredOutputSummary(result.summary, result.adapterResult?.kind === "registered_tool_execution_result_v1"
8
+ ? result.adapterResult.result.output
9
+ : undefined),
10
10
  };
11
11
  if (!isReferenceDataCoveredByCompactedResult(result))
12
12
  return Object.freeze(receipt);
13
13
  const { referenceData: _referenceData, ...coveredReceipt } = receipt;
14
14
  return Object.freeze(coveredReceipt);
15
15
  }
16
- function isSummaryCoveredByCompactedResult(result) {
17
- if (result.adapterResult?.kind !== "registered_tool_execution_result_v1")
18
- return false;
19
- return result.summary === result.adapterResult.result.output;
16
+ /** The caller must verify that the registered output belongs to the covered source. */
17
+ export function projectCompactedRegisteredOutputSummary(summary, registeredOutput) {
18
+ return summary === registeredOutput
19
+ ? "Result evidence is available in the verified compacted source."
20
+ : summary;
20
21
  }
21
22
  function isReferenceDataCoveredByCompactedResult(result) {
22
23
  if (isReferenceDataRepresentedByAdapterResult(result))
@@ -21,6 +21,10 @@ type ExecutionEvidenceProjection = Readonly<{
21
21
  objective: string;
22
22
  callId: string;
23
23
  store?: RequestContextCompactionStore;
24
+ updates?: readonly Readonly<{
25
+ text: string;
26
+ }>[];
27
+ sourceRevision?: number;
24
28
  results: readonly ExecutionEvidenceIdentity[];
25
29
  }>;
26
30
  /** Resolve only source digests; never transfer the root's continuation authority. */
@@ -1,15 +1,11 @@
1
- import { executionCompactionScopeId } from "./execution-compaction-objective.js";
1
+ import { resolveExecutionEvidenceCheckpoint } from "./execution-compaction-checkpoint-selection.js";
2
2
  import { isDeepStrictEqual } from "node:util";
3
- import { MODEL_STEPS } from "../../shared/model-steps.js";
4
- import { createSemanticCompactionSha256Fingerprint, } from "./semantic-compaction/contracts.js";
5
3
  /** Resolve only source digests; never transfer the root's continuation authority. */
6
4
  export function resolveExecutionCompactedSources(params) {
7
5
  const store = params.store;
8
6
  if (!store)
9
7
  return undefined;
10
- const checkpoint = store
11
- .findByCallIds([params.callId])
12
- .find((candidate) => canReuseExecutionCheckpoint(candidate, params));
8
+ const checkpoint = resolveExecutionEvidenceCheckpoint(params);
13
9
  if (!checkpoint)
14
10
  return undefined;
15
11
  const digests = new Map(checkpoint.sourceDigests.map((digest) => [digest.sourceRef, digest]));
@@ -33,23 +29,6 @@ export function resolveExecutionCompactedSources(params) {
33
29
  sources: Object.freeze(sources),
34
30
  });
35
31
  }
36
- function canReuseExecutionCheckpoint(checkpoint, params) {
37
- if (checkpoint.requestId !== params.requestId)
38
- return false;
39
- if (checkpoint.callId !== params.callId)
40
- return false;
41
- if (checkpoint.roleId !== "supervisor")
42
- return false;
43
- if (checkpoint.scopeId !== executionCompactionScopeId(params))
44
- return false;
45
- if (checkpoint.currentRequestFingerprint !==
46
- createSemanticCompactionSha256Fingerprint(params.prompt))
47
- return false;
48
- if (checkpoint.objectiveFingerprint !==
49
- createSemanticCompactionSha256Fingerprint(params.objective))
50
- return false;
51
- return checkpoint.allowedConsumers.includes(MODEL_STEPS.EXECUTION_DECISION);
52
- }
53
32
  export function matchesCompactedExecutionResult(content, result) {
54
33
  const message = readCompactionRecord(content);
55
34
  if (message?.role !== "tool")