@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
@@ -0,0 +1,13 @@
1
+ /** Decision-only policy; source evidence remains in its canonical context lane. */
2
+ export const EXECUTION_EVIDENCE_REUSE_INSTRUCTIONS = [
3
+ "Use the latest supplied continuation checkpoint and settled evidence as your working memory. First establish what they already tell you about the next requested outcome. When that evidence is sufficient, continue the work; do not reread just to restore the original wording or the complete file after compaction.",
4
+ "A read has real latency and token cost and can cause another compaction. Before selecting a repeated observation, identify the concrete fact still missing from the supplied evidence, or the relevant change that makes the evidence stale. Choose the smallest lookup or range that resolves that gap rather than collecting the same file again.",
5
+ "For an existing-file edit, the selected editor loads the current target itself. Reuse the collected interface and dependency facts to specify the change; do not reread the target solely to supply its full body to that editor. Related files still require evidence when their relevant contract is not already supplied.",
6
+ "Conserve reads without weakening grounding: never invent missing values, treat omissions as absence, ignore a relevant change, or skip required verification merely to save a call. If a necessary fact is genuinely missing, obtain it with a focused observation.",
7
+ "",
8
+ ].join("\n");
9
+ export function appendExecutionEvidenceReuseInstructions(params) {
10
+ if (!params.hasCapabilities)
11
+ return params.instructions;
12
+ return [params.instructions, EXECUTION_EVIDENCE_REUSE_INSTRUCTIONS].join("\n\n");
13
+ }
@@ -2,8 +2,9 @@ import { directResponseVariants } from "./direct-response-contract.js";
2
2
  import { createMemoryRecallDecisionSchema } from "../memory-recall-decision.js";
3
3
  import { createExecutionWorkPlanDecisionSchema } from "./work-plan-schema.js";
4
4
  import { isToolCatalogGroupId } from "../../../capabilities/tool-types.js";
5
- import { CAPABILITY_COUNT_MAX, EXECUTION_WORKING_DIRECTORY_MAX_LENGTH, EXECUTION_WORKING_DIRECTORY_PATTERN, canOfferCapabilityBatchSelection, normalizeCapabilityDescriptor, normalizeCapabilityControlsSchema, partitionCapabilityControlsSchema, } from "../../orchestration/capability-adapters/index.js";
5
+ import { CAPABILITY_COUNT_MAX, EXECUTION_WORKING_DIRECTORY_MAX_LENGTH, EXECUTION_WORKING_DIRECTORY_PATTERN, canOfferCapabilityBatchSelection, normalizeCapabilityDescriptor, } from "../../orchestration/capability-adapters/index.js";
6
6
  import { EXECUTION_AGENT_ACKNOWLEDGEMENT_MAX_LENGTH, EXECUTION_AGENT_AUDIT_CRITERION_COUNT_MAX, EXECUTION_AGENT_AUDIT_CRITERION_ID_MAX_LENGTH, EXECUTION_AGENT_CAPABILITY_SCOPE_GROUP_COUNT_MAX, EXECUTION_AGENT_CAPABILITY_BATCH_COUNT_MAX, EXECUTION_AGENT_OBJECTIVE_MAX_LENGTH, EXECUTION_AGENT_RESPONSE_MAX_LENGTH, EXECUTION_AGENT_TITLE_MAX_LENGTH, } from "./contracts.js";
7
+ import { partitionExecutionCapabilityControls } from "./capability-controls-partition.js";
7
8
  import { projectCapabilitySelectionProperties } from "./capability-selection-schema.js";
8
9
  import { freezeControlsEvidenceEligibility } from "./controls-evidence-contract.js";
9
10
  export function createExecutionAgentDecisionFormat(options = {}) {
@@ -183,11 +184,7 @@ export function prepareExecutionAgentDecisionContract(options) {
183
184
  if (!normalized.ok) {
184
185
  throw new Error("execution_agent_capabilities_invalid");
185
186
  }
186
- const controls = normalizeCapabilityControlsSchema(normalized.value.controls);
187
- if (!controls.ok) {
188
- throw new Error("execution_agent_capabilities_invalid");
189
- }
190
- const partition = partitionCapabilityControlsSchema(controls.value, normalized.value.selectionControlIds);
187
+ const partition = partitionExecutionCapabilityControls(normalized.value);
191
188
  if (!partition.ok) {
192
189
  throw new Error("execution_agent_capabilities_invalid");
193
190
  }
@@ -2,11 +2,13 @@ import type { ChatMessage, ModelGatewayJsonSchemaFormat } from "../../../model-g
2
2
  import type { RequestContextProjection } from "../../context/request-context-contracts.js";
3
3
  import type { ExecutionMemoryProjection } from "../../long-term-memory/initial-context.js";
4
4
  import type { RoleCallFrame, RoleCallLedgerHead } from "../../orchestration/role-calls/index.js";
5
- import { type CapabilityCatalogGroup, type CapabilityDescriptor } from "../../orchestration/capability-adapters/index.js";
5
+ import type { CapabilityCatalogGroup, CapabilityDescriptor } from "../../orchestration/capability-adapters/index.js";
6
6
  import { type RequestExecutionScope } from "../../request/execution-scope.js";
7
7
  import { appendRequestSteeringContext } from "../../request/request-steering-context.js";
8
8
  import type { RequestSteeringSnapshot } from "../../request/request-steering.js";
9
9
  import { EXECUTION_AGENT_DECISION_MODEL_STEP, type ExecutionAgentDecisionContractOptions } from "./contracts.js";
10
+ import { type ExecutionCapabilityScope } from "./capability-scope.js";
11
+ import { type ExecutionObservationGuidance } from "./observation-guidance.js";
10
12
  export type ExecutionAgentInput = Readonly<{
11
13
  context: RequestContextProjection;
12
14
  messages: ReturnType<typeof appendRequestSteeringContext>;
@@ -27,6 +29,8 @@ type BuildExecutionAgentInputOptions = Readonly<{
27
29
  allowAuditor: boolean;
28
30
  memoryRecallMessage?: ChatMessage;
29
31
  memoryContext?: ExecutionMemoryProjection;
32
+ capabilityScope?: ExecutionCapabilityScope;
33
+ observationGuidance?: readonly ExecutionObservationGuidance[];
30
34
  }>;
31
35
  export declare function buildExecutionAgentInput(request: RequestExecutionScope, options: BuildExecutionAgentInputOptions): ExecutionAgentInput;
32
36
  export {};
@@ -14,7 +14,6 @@ import { buildRequestTemporalContextMessage } from "../../context/request-tempor
14
14
  import { projectScheduledExecutionContext } from "../../context/scheduled-execution-context.js";
15
15
  import { buildImmediateOperationSupervisionEvidenceMessage } from "../../context/operation-supervision-evidence.js";
16
16
  import { resolveModelContextBudget } from "../../model/model-context-budget.js";
17
- import { projectCapabilityCatalogGroups, projectCapabilityScope, } from "../../orchestration/capability-adapters/index.js";
18
17
  import { resolveRequestWorkerCapabilities, } from "../../request/execution-scope.js";
19
18
  import { resolveRequestCapabilityBriefEntries } from "../../request/capability-brief.js";
20
19
  import { appendRequestSteeringContext } from "../../request/request-steering-context.js";
@@ -24,34 +23,15 @@ import { projectEligibleControlsEvidenceExecutionIds, requiresControlsEvidenceSe
24
23
  import { createExecutionAgentDecisionFormat, prepareExecutionAgentDecisionContract, } from "./format.js";
25
24
  import { projectExecutionWorkPlanOptions } from "./work-plan-sources.js";
26
25
  import { buildExecutionAgentInstructions } from "./prompt.js";
26
+ import { appendExecutionEvidenceReuseInstructions } from "./evidence-reuse-instructions.js";
27
+ import { assertExecutionAgentCanonicalSource, resolveExecutionCapabilityScope, } from "./capability-scope.js";
28
+ import { buildExecutionObservationGuidanceInstructions, } from "./observation-guidance.js";
27
29
  import { buildExecutionCapabilityCatalogMessage, buildExecutionCapabilityGroupCatalogMessage, buildExecutionContinuationMessages, buildExecutionDecisionStateMessage, } from "./state-context.js";
28
30
  export function buildExecutionAgentInput(request, options) {
29
- assertCanonicalSource(request, options.head, options.call);
31
+ assertExecutionAgentCanonicalSource(request, options.head, options.call);
30
32
  const directResponse = resolveDirectResponseOffer(request, options.head, options.call);
31
- const allCapabilities = resolveRequestWorkerCapabilities(request).provider.getDescriptors();
32
- const capabilityCatalogGroups = projectCapabilityCatalogGroups(allCapabilities);
33
- const activeCapabilityCatalogGroupIds = options.call.workerCapabilityScope?.catalogGroupIds ?? null;
33
+ const { capabilities, capabilityCatalogGroups, activeCapabilityCatalogGroupIds, knownGroupIds, remainingExecutions, capabilityScopeAction, } = options.capabilityScope ?? resolveExecutionCapabilityScope(request, options);
34
34
  const eligibleSessionArtifactPaths = projectEligibleSessionArtifactPaths(request.sessionArtifactPaths, options.head, options.call);
35
- const remainingExecutions = options.head.policy.limits.maxCapabilityExecutions -
36
- options.head.state.capabilityExecutions.length;
37
- const scopedCapabilities = activeCapabilityCatalogGroupIds !== null && remainingExecutions > 0
38
- ? projectCapabilityScope({
39
- entries: allCapabilities,
40
- scope: options.call.workerCapabilityScope,
41
- descriptorOf: (entry) => entry,
42
- }).entries
43
- : Object.freeze([]);
44
- const capabilities = scopedCapabilities;
45
- const knownGroupIds = Object.freeze(capabilityCatalogGroups.map(({ groupId }) => groupId));
46
- const hasInactiveGroup = activeCapabilityCatalogGroupIds !== null &&
47
- knownGroupIds.some((groupId) => !activeCapabilityCatalogGroupIds.includes(groupId));
48
- const capabilityScopeAction = remainingExecutions <= 0 || knownGroupIds.length === 0
49
- ? null
50
- : activeCapabilityCatalogGroupIds === null
51
- ? "open"
52
- : hasInactiveGroup
53
- ? "extend"
54
- : null;
55
35
  const auditInput = projectAuditorInputState(options.head, options.call.callId, options.steeringSnapshot.version);
56
36
  const availableAuditCriterionIds = options.allowAuditor && auditInput.available
57
37
  ? Object.freeze([EXECUTION_AGENT_ROOT_AUDIT_CRITERION_ID])
@@ -114,6 +94,7 @@ export function buildExecutionAgentInput(request, options) {
114
94
  includeTitle: options.includeTitle,
115
95
  includeWorkingDirectory: options.call.workingDirectory === undefined,
116
96
  }),
97
+ ...buildExecutionObservationGuidanceInstructions(capabilities, options.observationGuidance ?? []),
117
98
  ...buildDirectResponseInstructions(directResponse.maxLength, request.runnerConfig, directMemoryAuthoring !== undefined),
118
99
  ...buildConversationMemoryAvailabilityInstructions(request.longTermMemory?.enabled === true),
119
100
  ...buildSparkConversationInstructions(request.sessionKind),
@@ -156,7 +137,10 @@ export function buildExecutionAgentInput(request, options) {
156
137
  maxLength: directResponse.maxLength ?? null,
157
138
  });
158
139
  const contextInput = {
159
- instructions: scheduledExecution.instructions,
140
+ instructions: appendExecutionEvidenceReuseInstructions({
141
+ instructions: scheduledExecution.instructions,
142
+ hasCapabilities: capabilities.length > 0,
143
+ }),
160
144
  format,
161
145
  ...sessionMemory,
162
146
  prompt: request.prompt,
@@ -205,13 +189,3 @@ function projectEligibleSessionArtifactPaths(sessionArtifactPaths, head, call) {
205
189
  .slice(0, 8)
206
190
  .filter((target) => !currentRequestTargets.has(target)));
207
191
  }
208
- function assertCanonicalSource(request, head, call) {
209
- if (head.state.requestId !== request.requestId ||
210
- head.state.phase !== "running" ||
211
- head.state.rootCallId !== call.callId ||
212
- head.state.activeCallId !== call.callId ||
213
- call.parentCallId !== null ||
214
- call.status !== "active") {
215
- throw new Error("execution_agent_head_invalid");
216
- }
217
- }
@@ -0,0 +1,11 @@
1
+ import type { CapabilityDescriptor } from "../../orchestration/capability-adapters/index.js";
2
+ import { type RequestExecutionScope } from "../../request/execution-scope.js";
3
+ import type { ExecutionCapabilityScope } from "./capability-scope.js";
4
+ export type ExecutionObservationGuidance = Readonly<{
5
+ capabilityId: string;
6
+ guidance: string;
7
+ }>;
8
+ /** Load only the contracts whose operational values this decision will own. */
9
+ export declare function loadExecutionObservationGuidance(request: RequestExecutionScope, scope: ExecutionCapabilityScope): Promise<readonly ExecutionObservationGuidance[]>;
10
+ /** Preserve complete rules, deduplicate shared bodies, and bind applicability. */
11
+ export declare function buildExecutionObservationGuidanceInstructions(capabilities: readonly CapabilityDescriptor[], guidance: readonly ExecutionObservationGuidance[]): readonly string[];
@@ -0,0 +1,33 @@
1
+ import { resolveRequestWorkerCapabilities, } from "../../request/execution-scope.js";
2
+ import { buildBatchCapabilityExecutionGuidance } from "../capability-execution-guidance.js";
3
+ import { ownsExecutionObservationControls } from "./capability-controls-partition.js";
4
+ /** Load only the contracts whose operational values this decision will own. */
5
+ export async function loadExecutionObservationGuidance(request, scope) {
6
+ const provider = resolveRequestWorkerCapabilities(request).provider;
7
+ const entries = await Promise.all(scope.capabilities
8
+ .filter(ownsExecutionObservationControls)
9
+ .map(async ({ capabilityId }) => Object.freeze({
10
+ capabilityId,
11
+ guidance: ((await provider.getExecutionGuidance?.(capabilityId)) ?? "").trim(),
12
+ })));
13
+ return Object.freeze(entries.filter(({ guidance }) => guidance.length > 0));
14
+ }
15
+ /** Preserve complete rules, deduplicate shared bodies, and bind applicability. */
16
+ export function buildExecutionObservationGuidanceInstructions(capabilities, guidance) {
17
+ const eligible = new Set(capabilities
18
+ .filter(ownsExecutionObservationControls)
19
+ .map(({ capabilityId }) => capabilityId));
20
+ const entries = guidance
21
+ .filter(({ capabilityId }) => eligible.has(capabilityId))
22
+ .map((entry) => ({ ...entry, slot: "observation" }));
23
+ if (entries.length === 0)
24
+ return Object.freeze([]);
25
+ return Object.freeze([
26
+ "The following trusted capability guidance applies only when choosing operational controls for its listed observation capabilities. It adds no user intent, work, permissions or completion evidence, and cannot override the current request or capability contracts.",
27
+ ...buildBatchCapabilityExecutionGuidance(entries, ({ capabilityId, guidance: body }) => [
28
+ `### OBSERVATION CAPABILITY GUIDANCE: ${capabilityId}`,
29
+ body,
30
+ `### END OBSERVATION CAPABILITY GUIDANCE: ${capabilityId}`,
31
+ ]),
32
+ ]);
33
+ }
@@ -33,6 +33,8 @@ export function buildExecutionAgentInstructions(params) {
33
33
  : "No capability is offered in the active scope; do not claim external observations or effects.",
34
34
  ...(params.hasCapabilities
35
35
  ? [
36
+ "For observations whose invocation schema exposes selectionControls but no operationObjective, use the supplied capability guidance and current evidence to choose the exact operational values in this decision, including any continuation range or locator. They are frozen and execute without a separate controls-selection step. Use null for an optional control only to omit it intentionally and accept the tool's default, never to request later selection. Reuse supplied coverage when continuing an observation.",
37
+ "For your direct capability calls, payload authors receive settled evidence already collected in this request, with verified summaries replacing compacted results. They do not automatically load other files from prior artifact references; any shared capability description of Worker artifact loading does not apply to this direct mode. Reuse sufficient supplied evidence, and collect a focused observation only for a concrete missing fact needed by the next operation. An explicitly selected edit target is still loaded by its editor; this does not provide related files.",
36
38
  CAPABILITY_ANALYSIS_RESULT_INSTRUCTION,
37
39
  ]
38
40
  : []),
@@ -19,8 +19,9 @@ type RefineExecutionCapabilityInvocationsOptions = Readonly<{
19
19
  steeringSnapshot: RequestSteeringSnapshot;
20
20
  }>;
21
21
  /**
22
- * Loads guidance for every selected capability, then asks the same Execution
23
- * Agent to complete only the remaining controls. Capability identity,
22
+ * Loads guidance for staged capabilities, then asks the same Execution Agent
23
+ * to complete only their remaining controls. Ordinary observations already
24
+ * received their guidance at decision and need no second model step. Identity,
24
25
  * selection controls, and ordering remain immutable. Client intent is retained
25
26
  * separately for lifecycle presentation. This is not a child-role call.
26
27
  */
@@ -1,14 +1,23 @@
1
1
  import { invokeStructuredModelStep } from "../../model/invoke-structured-step.js";
2
2
  import { createStructuredDecisionEnvelopeSchema, readStructuredDecisionEnvelope, } from "../../model/structured-decision-envelope.js";
3
- import { CAPABILITY_CONTROLS_MODEL_STEP, materializeCapabilityControlsIfComplete, mergeCapabilityControls, partitionCapabilityControlsSchema, } from "../../orchestration/capability-adapters/index.js";
3
+ import { CAPABILITY_CONTROLS_MODEL_STEP, materializeCapabilityControlsIfComplete, mergeCapabilityControls, } from "../../orchestration/capability-adapters/index.js";
4
4
  import { resolveRequestWorkerCapabilities, } from "../../request/execution-scope.js";
5
+ import { ownsExecutionObservationControls, partitionExecutionCapabilityControls, } from "./capability-controls-partition.js";
5
6
  import { requiresExecutionOperationObjective } from "./capability-invocation-contract.js";
6
7
  import { buildExecutionControlsRefinementInstructions } from "./refinement-prompt.js";
7
8
  import { buildExecutionControlsRefinementInput, executionRefinementSlotId as slotId, } from "./refinement-input.js";
8
9
  import { requiresControlsEvidenceSelection } from "./controls-evidence-contract.js";
10
+ function canExecuteWithSelectedControls(descriptor, controls, guidance) {
11
+ if (controls === undefined)
12
+ return false;
13
+ if (ownsExecutionObservationControls(descriptor))
14
+ return true;
15
+ return guidance.length === 0;
16
+ }
9
17
  /**
10
- * Loads guidance for every selected capability, then asks the same Execution
11
- * Agent to complete only the remaining controls. Capability identity,
18
+ * Loads guidance for staged capabilities, then asks the same Execution Agent
19
+ * to complete only their remaining controls. Ordinary observations already
20
+ * received their guidance at decision and need no second model step. Identity,
12
21
  * selection controls, and ordering remain immutable. Client intent is retained
13
22
  * separately for lifecycle presentation. This is not a child-role call.
14
23
  */
@@ -21,7 +30,7 @@ export async function refineExecutionCapabilityInvocations(request, options) {
21
30
  if (!descriptor) {
22
31
  throw new Error("execution_capability_refinement_descriptor_missing");
23
32
  }
24
- const partition = partitionCapabilityControlsSchema(descriptor.controls, descriptor.selectionControlIds);
33
+ const partition = partitionExecutionCapabilityControls(descriptor);
25
34
  if (!partition.ok) {
26
35
  throw new Error("execution_capability_refinement_schema_invalid");
27
36
  }
@@ -47,14 +56,16 @@ export async function refineExecutionCapabilityInvocations(request, options) {
47
56
  });
48
57
  });
49
58
  const guidanceByCapabilityId = new Map(await Promise.all([
50
- ...new Set(prepared.map(({ descriptor }) => descriptor.capabilityId)),
59
+ ...new Set(prepared
60
+ .filter(({ descriptor }) => !ownsExecutionObservationControls(descriptor))
61
+ .map(({ descriptor }) => descriptor.capabilityId)),
51
62
  ].map(async (capabilityId) => [
52
63
  capabilityId,
53
64
  ((await resolveRequestWorkerCapabilities(request).provider.getExecutionGuidance?.(capabilityId)) ?? "").trim(),
54
65
  ])));
55
66
  const pending = Object.freeze(prepared.flatMap((entry) => {
56
67
  const guidance = guidanceByCapabilityId.get(entry.descriptor.capabilityId) ?? "";
57
- if (entry.controls !== undefined && guidance.length === 0)
68
+ if (canExecuteWithSelectedControls(entry.descriptor, entry.controls, guidance))
58
69
  return [];
59
70
  return [
60
71
  Object.freeze({
@@ -8,6 +8,8 @@ import { EXECUTION_AGENT_DECISION_MODEL_STEP, EXECUTION_AGENT_RESPONSE_MODEL_STE
8
8
  import { createExecutionAgentCompactionController } from "./compaction.js";
9
9
  import { createSessionMemoryAwareCompactionController } from "../../context/session-memory/index.js";
10
10
  import { buildExecutionAgentInput } from "./input.js";
11
+ import { resolveExecutionCapabilityScope } from "./capability-scope.js";
12
+ import { loadExecutionObservationGuidance } from "./observation-guidance.js";
11
13
  import { parseExecutionAgentDecisionOutput } from "./parser.js";
12
14
  import { refineExecutionCapabilityInvocations } from "./refinement.js";
13
15
  import { createRefinementInvalidOutputCause } from "./refinement-reconsideration.js";
@@ -15,7 +17,11 @@ export async function runExecutionAgentDecision(request, options) {
15
17
  assertBoundModelStepSteeringCurrent(resolveRequestSteeringInbox(request.requestSteering), resolveMemoryRecallSteeringVersion(options.memoryRecallMessage, request.requestId, options.call.callId));
16
18
  assertBoundModelStepSteeringCurrent(resolveRequestSteeringInbox(request.requestSteering), options.steeringSnapshot.version);
17
19
  const memoryContext = projectExecutionAgentMemory(request, options.head.state.initialMemory, options.steeringSnapshot);
18
- const input = buildExecutionAgentInput(request, { ...options, memoryContext });
20
+ const capabilityScope = resolveExecutionCapabilityScope(request, options);
21
+ const observationGuidance = await loadExecutionObservationGuidance(request, capabilityScope);
22
+ const input = buildExecutionAgentInput(request, {
23
+ ...options, memoryContext, capabilityScope, observationGuidance,
24
+ });
19
25
  const accepted = await invokeStructuredModelStep({
20
26
  request,
21
27
  boundSteeringVersion: options.steeringSnapshot.version,
@@ -31,4 +31,5 @@ export declare function parseSkillReadDecision(record: Readonly<Record<string, u
31
31
  stage: "domain_parser";
32
32
  issues: readonly SkillReadValidationIssue[];
33
33
  }>;
34
+ export declare function classifySkillReadReferences(value: unknown): "valid" | "invalid" | "duplicate";
34
35
  export {};
@@ -67,13 +67,18 @@ export function parseSkillReadDecision(record, options) {
67
67
  };
68
68
  }
69
69
  function hasValidSkillReadReferences(value) {
70
+ return classifySkillReadReferences(value) === "valid";
71
+ }
72
+ export function classifySkillReadReferences(value) {
70
73
  if (!Array.isArray(value))
71
- return false;
74
+ return "invalid";
72
75
  if (value.length === 0 || value.length > KNOWLEDGE_SKILL_READ_MAX_ITEMS)
73
- return false;
76
+ return "invalid";
74
77
  if (!value.every(isKnowledgeSkillReadReference))
75
- return false;
76
- return new Set(value).size === value.length;
78
+ return "invalid";
79
+ if (new Set(value).size !== value.length)
80
+ return "duplicate";
81
+ return "valid";
77
82
  }
78
83
  function hasBoundedSkillPresentation(value, maximum) {
79
84
  if (typeof value !== "string")
@@ -1,6 +1,6 @@
1
1
  import type { ChatMessage, ModelGatewayJsonSchemaFormat } from "../../../model-gateway/types.js";
2
2
  import type { projectRequestContext } from "../../context/request-context.js";
3
- import type { ModelStepContextCompactionController } from "../../model/model-step-port.js";
3
+ import type { ModelStepContextCompactionController, ModelStepOptionalContextProjection } from "../../model/model-step-port.js";
4
4
  import type { RequestExecutionScope } from "../../request/execution-scope.js";
5
5
  export type SupervisorArtifactPathsProjection = Readonly<{
6
6
  instructions: string;
@@ -13,6 +13,11 @@ export declare function projectSupervisorArtifactPaths(params: Readonly<{
13
13
  context: Parameters<typeof projectRequestContext>[0];
14
14
  additionalBudgetMessages?: readonly ChatMessage[];
15
15
  }>): SupervisorArtifactPathsProjection | undefined;
16
+ /** Exact phases may omit this bound optional reference without invoking compaction. */
17
+ export declare function createSupervisorArtifactPathsOptionalProjection(options: Readonly<{
18
+ projection?: SupervisorArtifactPathsProjection;
19
+ includeInstructions: boolean;
20
+ }>): ModelStepOptionalContextProjection | undefined;
16
21
  /** Optional paths yield to the current attempt's mandatory context and catalog. */
17
22
  export declare function createSupervisorArtifactPathsReadmissionController(request: RequestExecutionScope, options: Readonly<{
18
23
  controller: ModelStepContextCompactionController;
@@ -34,6 +34,21 @@ export function projectSupervisorArtifactPaths(params) {
34
34
  message: artifactPaths.message,
35
35
  };
36
36
  }
37
+ /** Exact phases may omit this bound optional reference without invoking compaction. */
38
+ export function createSupervisorArtifactPathsOptionalProjection(options) {
39
+ const { projection } = options;
40
+ if (!projection)
41
+ return undefined;
42
+ return (messages) => {
43
+ const index = messages.findIndex((message) => matchesBoundArtifactMessage(message, projection.message));
44
+ if (index < 0)
45
+ return messages;
46
+ const withoutArtifact = messages.filter((_, candidate) => candidate !== index);
47
+ return options.includeInstructions
48
+ ? replaceBoundInstructionPrefix(withoutArtifact, projection.instructions, projection.baseInstructions)
49
+ : withoutArtifact;
50
+ };
51
+ }
37
52
  /** Optional paths yield to the current attempt's mandatory context and catalog. */
38
53
  export function createSupervisorArtifactPathsReadmissionController(request, options) {
39
54
  const { controller, projection } = options;
@@ -10,7 +10,7 @@ export declare const SUPERVISOR_DECISION_ACTIONS: readonly ["respond", "invoke_r
10
10
  export declare const SUPERVISOR_ACKNOWLEDGEMENT_MAX_LENGTH = 220;
11
11
  export declare const SUPERVISOR_TITLE_MAX_LENGTH = 80;
12
12
  export declare const SUPERVISOR_OBJECTIVE_MAX_LENGTH = 8192;
13
- export declare const SUPERVISOR_DECISION_PHASES: readonly ["presentation", "skill_selection", "skill_authoring", "routing", "working_directory"];
13
+ export declare const SUPERVISOR_DECISION_PHASES: readonly ["presentation", "skill_selection", "skill_authoring", "procedure_gate", "delegation", "routing", "working_directory"];
14
14
  export type SupervisorDelegateRoleId = RuntimeDelegateRoleId;
15
15
  export type SupervisorWorkerCapabilityAffordance = Readonly<{
16
16
  purpose: string;
@@ -14,6 +14,8 @@ export const SUPERVISOR_DECISION_PHASES = Object.freeze([
14
14
  "presentation",
15
15
  "skill_selection",
16
16
  "skill_authoring",
17
+ "procedure_gate",
18
+ "delegation",
17
19
  "routing",
18
20
  "working_directory",
19
21
  ]);
@@ -3,6 +3,7 @@ import type { RequestExecutionScope } from "../../request/execution-scope.js";
3
3
  import type { RequestSteeringInbox } from "../../request/request-steering.js";
4
4
  import type { SupervisorDecision, SupervisorDecisionOutcome, SupervisorDecisionDiagnosticContext, SupervisorRoutingDecision, SupervisorWorkingDirectoryDecision, SupervisorWorkingDirectoryRoutingDecision } from "./contracts.js";
5
5
  import { buildSupervisorDecisionInput } from "./input.js";
6
+ import { type SupervisorArtifactPathsProjection } from "./artifact-paths.js";
6
7
  import { buildSupervisorWorkingDirectoryInput } from "./working-directory.js";
7
8
  type AcceptedSupervisorPhase<T> = Readonly<{
8
9
  decision: T;
@@ -25,6 +26,8 @@ export declare function runWorkingDirectoryPhase(params: {
25
26
  frozenDecision: SupervisorWorkingDirectoryRoutingDecision;
26
27
  diagnostic: SupervisorDecisionDiagnosticContext;
27
28
  contextCompaction: ModelStepContextCompactionController;
29
+ exactContext?: boolean;
30
+ artifactPathsProjection?: SupervisorArtifactPathsProjection;
28
31
  }): Promise<AcceptedSupervisorPhase<SupervisorWorkingDirectoryDecision>>;
29
32
  export declare function requiresWorkingDirectory(decision: SupervisorRoutingDecision): decision is SupervisorWorkingDirectoryRoutingDecision;
30
33
  export declare function tracePhaseSuperseded(params: {
@@ -1,6 +1,8 @@
1
1
  import { invokeStructuredModelStep, StructuredModelInvalidOutputError } from "../../model/invoke-structured-step.js";
2
2
  import { traceSupervisorDecisionPhaseSuperseded, traceSupervisorModelCompleted, traceSupervisorModelFailed, traceSupervisorModelStarted, traceSupervisorWorkingDirectoryModelStarted } from "./diagnostics.js";
3
3
  import { parseSupervisorDecisionOutput } from "./parser.js";
4
+ import { parseSupervisorDelegationOutput } from "./delegation-contract.js";
5
+ import { createSupervisorArtifactPathsOptionalProjection } from "./artifact-paths.js";
4
6
  import { mergeSupervisorWorkingDirectory, parseSupervisorWorkingDirectoryOutput } from "./working-directory.js";
5
7
  export function createDecisionOutcome(decision, steeringVersion) {
6
8
  return Object.freeze({ decision: Object.freeze(decision), steeringVersion });
@@ -19,16 +21,26 @@ export async function runRoutingPhase(params) {
19
21
  availableWorkerCapabilityCatalog: params.input.availableWorkerCapabilityCatalog,
20
22
  });
21
23
  try {
24
+ const parseRoutingOutput = params.input.delegationOnly
25
+ ? parseSupervisorDelegationOutput
26
+ : parseSupervisorDecisionOutput;
22
27
  const accepted = await invokeStructuredModelStep({
23
28
  request: params.request,
24
29
  boundSteeringVersion: params.boundSteeringVersion,
25
30
  modelStep: params.input.modelStep,
26
31
  format: params.input.format,
27
32
  messages: params.input.context.messages,
28
- contextCompaction: params.contextCompaction,
33
+ ...(params.input.delegationOnly
34
+ ? {
35
+ contextRetention: "exact",
36
+ optionalContextProjection: createSupervisorArtifactPathsOptionalProjection({
37
+ projection: params.input.artifactPathsProjection, includeInstructions: true,
38
+ }),
39
+ }
40
+ : { contextCompaction: params.contextCompaction }),
29
41
  timeoutReason: "supervisor_decision_timeout",
30
42
  invalidOutputReason: "invalid_supervisor_decision",
31
- parse: (text) => captureAcceptedPhase(parseSupervisorDecisionOutput(text, {
43
+ parse: (text) => captureAcceptedPhase(parseRoutingOutput(text, {
32
44
  includeAcknowledgement: params.input.includeAcknowledgement,
33
45
  includeTitle: params.input.includeTitle,
34
46
  includeResponseRecommendation: params.input.includeResponseRecommendation,
@@ -66,7 +78,14 @@ export async function runWorkingDirectoryPhase(params) {
66
78
  modelStep: params.input.modelStep,
67
79
  format: params.input.format,
68
80
  messages: params.input.messages,
69
- contextCompaction: params.contextCompaction,
81
+ ...(params.exactContext
82
+ ? {
83
+ contextRetention: "exact",
84
+ optionalContextProjection: createSupervisorArtifactPathsOptionalProjection({
85
+ projection: params.artifactPathsProjection, includeInstructions: false,
86
+ }),
87
+ }
88
+ : { contextCompaction: params.contextCompaction }),
70
89
  timeoutReason: "supervisor_decision_timeout",
71
90
  invalidOutputReason: "invalid_supervisor_decision",
72
91
  parse: (text) => captureAcceptedPhase(parseSupervisorWorkingDirectoryOutput(text, {
@@ -0,0 +1,9 @@
1
+ import type { ModelGatewayJsonSchemaFormat } from "../../../model-gateway/types.js";
2
+ import { type SupervisorRoutingDecisionParseResult } from "./contracts.js";
3
+ import { parseSupervisorDecisionOutput } from "./parser.js";
4
+ type CanonicalParserOptions = NonNullable<Parameters<typeof parseSupervisorDecisionOutput>[1]>;
5
+ export type SupervisorDelegationOptions = Pick<CanonicalParserOptions, "allowedRoleIds" | "allowMemoryRecall">;
6
+ /** Initial delegation offers Worker/Planner and eligible root recall, never tools or response. */
7
+ export declare function createSupervisorDelegationFormat(options?: SupervisorDelegationOptions): ModelGatewayJsonSchemaFormat;
8
+ export declare function parseSupervisorDelegationOutput(text: string, options?: CanonicalParserOptions): SupervisorRoutingDecisionParseResult;
9
+ export {};
@@ -0,0 +1,82 @@
1
+ import { createStructuredDecisionEnvelopeSchema, readStructuredDecisionEnvelope, structuredDecisionVariantSchemaPath, } from "../../model/structured-decision-envelope.js";
2
+ import { SUPERVISOR_DELEGATE_ROLE_IDS, } from "./contracts.js";
3
+ import { traceSupervisorDecisionRejected, traceSupervisorEnvelopeAccepted } from "./diagnostics.js";
4
+ import { createSupervisorDecisionFormat } from "./format.js";
5
+ import { parseSupervisorDecisionOutput } from "./parser.js";
6
+ /** Initial delegation offers Worker/Planner and eligible root recall, never tools or response. */
7
+ export function createSupervisorDelegationFormat(options = {}) {
8
+ const canonical = createSupervisorDecisionFormat(canonicalDelegationOptions(options));
9
+ const decision = canonical.schema.properties.decision;
10
+ const canonicalVariants = decision.anyOf ?? [decision];
11
+ const variants = canonicalVariants.slice(1);
12
+ if (!hasDelegationActions(variants))
13
+ throw new Error("supervisor_delegation_actions_unavailable");
14
+ return {
15
+ ...canonical,
16
+ name: "supervisor_delegation",
17
+ schema: createStructuredDecisionEnvelopeSchema(variants),
18
+ postValidatedSchemaConstraints: rebaseDelegationConstraints(canonical, canonicalVariants.length),
19
+ };
20
+ }
21
+ export function parseSupervisorDelegationOutput(text, options = {}) {
22
+ const response = readForbiddenDelegationResponse(text);
23
+ if (response) {
24
+ const issues = [{
25
+ code: "supervisor_delegation_action_invalid", path: "decision.action",
26
+ message: "Choose an offered delegation action; respond belongs to the preceding gate.",
27
+ }];
28
+ if (options.diagnostic) {
29
+ traceSupervisorEnvelopeAccepted({
30
+ diagnostic: options.diagnostic, outputLength: text.length, keyCount: Object.keys(response).length,
31
+ });
32
+ traceSupervisorDecisionRejected({ diagnostic: options.diagnostic, selectedAction: "respond", issues });
33
+ }
34
+ return { ok: false, stage: "domain_parser", issues };
35
+ }
36
+ return parseSupervisorDecisionOutput(text, {
37
+ ...canonicalDelegationOptions(options),
38
+ ...(options.diagnostic ? { diagnostic: options.diagnostic } : {}),
39
+ });
40
+ }
41
+ function canonicalDelegationOptions(options) {
42
+ const allowedRoleIds = (options.allowedRoleIds ?? SUPERVISOR_DELEGATE_ROLE_IDS).filter(isDelegationRole);
43
+ const canRecallBeforeDelegation = options.allowMemoryRecall === true && allowedRoleIds.length > 0;
44
+ return {
45
+ allowMemoryRecall: canRecallBeforeDelegation,
46
+ allowSkillAuthoring: false,
47
+ allowedRoleIds,
48
+ availableWorkerCapabilityCatalog: [],
49
+ includeAcknowledgement: false,
50
+ includeTitle: false,
51
+ includeResponseRecommendation: false,
52
+ };
53
+ }
54
+ function isDelegationRole(roleId) {
55
+ return roleId === "worker" || roleId === "planner";
56
+ }
57
+ function hasDelegationActions(variants) {
58
+ return variants.length > 0;
59
+ }
60
+ function readForbiddenDelegationResponse(text) {
61
+ try {
62
+ const record = readStructuredDecisionEnvelope(JSON.parse(text));
63
+ return record?.action === "respond" ? record : undefined;
64
+ }
65
+ catch {
66
+ return undefined;
67
+ }
68
+ }
69
+ function rebaseDelegationConstraints(canonical, canonicalVariantCount) {
70
+ return (canonical.postValidatedSchemaConstraints ?? []).map((constraint) => {
71
+ const originalIndex = Array.from({ length: canonicalVariantCount }, (_, index) => index)
72
+ .find((index) => constraint.path.startsWith(`${structuredDecisionVariantSchemaPath(index, canonicalVariantCount)}/`));
73
+ if (!isDelegationConstraintIndex(originalIndex))
74
+ throw new Error("supervisor_delegation_constraint_invalid");
75
+ const originalPrefix = structuredDecisionVariantSchemaPath(originalIndex, canonicalVariantCount);
76
+ const delegationPrefix = structuredDecisionVariantSchemaPath(originalIndex - 1, canonicalVariantCount - 1);
77
+ return { ...constraint, path: delegationPrefix + constraint.path.slice(originalPrefix.length) };
78
+ });
79
+ }
80
+ function isDelegationConstraintIndex(index) {
81
+ return index !== undefined && index > 0;
82
+ }
@@ -0,0 +1,7 @@
1
+ import type { buildSupervisorDecisionInput, SupervisorDecisionInputRequest } from "./input.js";
2
+ /**
3
+ * Initial delegation uses one exact settled conversation turn, not the full routing
4
+ * history or captured Skill bodies. Those remain available to their execution
5
+ * owners. This projection is phase-local and never changes session checkpoints.
6
+ */
7
+ export declare function buildSupervisorDelegationInput(request: SupervisorDecisionInputRequest, options: Parameters<typeof buildSupervisorDecisionInput>[1]): ReturnType<typeof buildSupervisorDecisionInput>;