@abot-ai/runtime 1.9.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/README.md +5 -1
  2. package/dist/scripts/add-runtime-model.js +11 -5
  3. package/dist/scripts/init-runtime.js +15 -10
  4. package/dist/scripts/runtime-model-addition.js +6 -1
  5. package/dist/scripts/runtime-setup-command-options.d.ts +11 -0
  6. package/dist/scripts/runtime-setup-command-options.js +41 -0
  7. package/dist/scripts/runtime-setup-files.d.ts +3 -2
  8. package/dist/scripts/runtime-setup-files.js +19 -4
  9. package/dist/scripts/runtime-setup-model-options.d.ts +8 -0
  10. package/dist/scripts/runtime-setup-model-options.js +40 -0
  11. package/dist/scripts/runtime-setup-presentation.js +2 -2
  12. package/dist/scripts/runtime-setup-provider-options.d.ts +4 -0
  13. package/dist/scripts/runtime-setup-provider-options.js +20 -0
  14. package/dist/src/model-gateway/client/contracts.d.ts +3 -0
  15. package/dist/src/model-gateway/client/input-token-count.js +36 -16
  16. package/dist/src/model-gateway/client/message-projection.d.ts +2 -0
  17. package/dist/src/model-gateway/client/message-projection.js +1 -0
  18. package/dist/src/model-gateway/client/options.js +1 -1
  19. package/dist/src/model-gateway/client/raw.js +1 -0
  20. package/dist/src/model-gateway/index.d.ts +1 -1
  21. package/dist/src/model-gateway/observability/input-token-count-diagnostics.d.ts +26 -0
  22. package/dist/src/model-gateway/observability/input-token-count-diagnostics.js +178 -0
  23. package/dist/src/model-gateway/policy/invocation-policy.d.ts +1 -3
  24. package/dist/src/model-gateway/policy/invocation-policy.js +3 -30
  25. package/dist/src/model-gateway/policy/reasoning-mode-budget.d.ts +5 -0
  26. package/dist/src/model-gateway/policy/reasoning-mode-budget.js +13 -0
  27. package/dist/src/model-gateway/policy/reasoning-policy.d.ts +10 -0
  28. package/dist/src/model-gateway/policy/reasoning-policy.js +124 -0
  29. package/dist/src/model-gateway/protocol/openai-embedding-response.d.ts +1 -0
  30. package/dist/src/model-gateway/protocol/openai-embedding-response.js +28 -0
  31. package/dist/src/model-gateway/protocol/sse-data.d.ts +9 -0
  32. package/dist/src/model-gateway/protocol/sse-data.js +67 -0
  33. package/dist/src/model-gateway/providers/envelope-budget.js +10 -1
  34. package/dist/src/model-gateway/providers/llamacpp/adapter.d.ts +2 -0
  35. package/dist/src/model-gateway/providers/llamacpp/adapter.js +79 -0
  36. package/dist/src/model-gateway/providers/llamacpp/connection.d.ts +9 -0
  37. package/dist/src/model-gateway/providers/llamacpp/connection.js +73 -0
  38. package/dist/src/model-gateway/providers/llamacpp/diagnostics.d.ts +2 -0
  39. package/dist/src/model-gateway/providers/llamacpp/diagnostics.js +17 -0
  40. package/dist/src/model-gateway/providers/llamacpp/embeddings.d.ts +2 -0
  41. package/dist/src/model-gateway/providers/llamacpp/embeddings.js +56 -0
  42. package/dist/src/model-gateway/providers/llamacpp/input-token-count.d.ts +3 -0
  43. package/dist/src/model-gateway/providers/llamacpp/input-token-count.js +59 -0
  44. package/dist/src/model-gateway/providers/llamacpp/message-projection.d.ts +2 -0
  45. package/dist/src/model-gateway/providers/llamacpp/message-projection.js +33 -0
  46. package/dist/src/model-gateway/providers/llamacpp/payload.d.ts +2 -0
  47. package/dist/src/model-gateway/providers/llamacpp/payload.js +44 -0
  48. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.d.ts +1 -0
  49. package/dist/src/model-gateway/providers/llamacpp/response-lifetime.js +56 -0
  50. package/dist/src/model-gateway/providers/llamacpp/schema-format.d.ts +2 -0
  51. package/dist/src/model-gateway/providers/llamacpp/schema-format.js +29 -0
  52. package/dist/src/model-gateway/providers/llamacpp/settings.d.ts +9 -0
  53. package/dist/src/model-gateway/providers/llamacpp/settings.js +25 -0
  54. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.d.ts +10 -0
  55. package/dist/src/model-gateway/providers/llamacpp/stream-normalizer.js +85 -0
  56. package/dist/src/model-gateway/providers/llamacpp/stream.d.ts +9 -0
  57. package/dist/src/model-gateway/providers/llamacpp/stream.js +33 -0
  58. package/dist/src/model-gateway/providers/openai/embeddings.js +2 -29
  59. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +1 -9
  60. package/dist/src/model-gateway/providers/openai/sse-data.js +1 -67
  61. package/dist/src/model-gateway/providers/registry.js +2 -0
  62. package/dist/src/model-gateway/server/input-token-count-handler.js +10 -1
  63. package/dist/src/model-gateway/types.d.ts +11 -1
  64. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.d.ts +4 -0
  65. package/dist/src/runtime/adapters/long-term-memory/onboarding-provider-availability.js +11 -0
  66. package/dist/src/runtime/adapters/long-term-memory/onboarding-service.js +28 -1
  67. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +1 -0
  68. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +6 -1
  69. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/contracts.d.ts +1 -0
  70. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.d.ts +1 -0
  71. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +2 -0
  72. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
  73. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +2 -0
  74. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
  75. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +1 -0
  76. package/dist/src/runtime/adapters/registered-tool-worker-capabilities.js +1 -0
  77. package/dist/src/runtime/adapters/scheduler-runtime.js +2 -0
  78. package/dist/src/runtime/automations/agent-step-executor.js +1 -0
  79. package/dist/src/runtime/automations/catalog.d.ts +3 -0
  80. package/dist/src/runtime/automations/catalog.js +2 -0
  81. package/dist/src/runtime/automations/definition-contracts.d.ts +2 -0
  82. package/dist/src/runtime/automations/definition-input.js +3 -1
  83. package/dist/src/runtime/automations/draft-mutations.js +5 -1
  84. package/dist/src/runtime/automations/model-dependency-projection.d.ts +3 -1
  85. package/dist/src/runtime/automations/model-dependency-projection.js +4 -2
  86. package/dist/src/runtime/automations/publication-validation.js +7 -0
  87. package/dist/src/runtime/automations/saved-agent-management.js +1 -0
  88. package/dist/src/runtime/automations/service.d.ts +3 -0
  89. package/dist/src/runtime/capabilities/automation-builder/payload-schema.js +7 -5
  90. package/dist/src/runtime/capabilities/automations/authoring-catalog.d.ts +9 -0
  91. package/dist/src/runtime/capabilities/automations/authoring-catalog.js +1 -0
  92. package/dist/src/runtime/capabilities/automations/authoring-preparation.d.ts +3 -0
  93. package/dist/src/runtime/capabilities/automations/tool-contract.js +3 -2
  94. package/dist/src/runtime/capabilities/automations/tool-module.js +16 -7
  95. package/dist/src/runtime/capabilities/model-reasoning-controls.d.ts +23 -0
  96. package/dist/src/runtime/capabilities/model-reasoning-controls.js +56 -0
  97. package/dist/src/runtime/capabilities/scheduling/create-operations.js +2 -0
  98. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +1 -0
  99. package/dist/src/runtime/capabilities/scheduling/tool-module.js +5 -2
  100. package/dist/src/runtime/capabilities/scheduling/update-operations.js +2 -0
  101. package/dist/src/runtime/config/builders.js +6 -0
  102. package/dist/src/runtime/config/effective-model-config-validation.js +4 -0
  103. package/dist/src/runtime/config/llamacpp-profile-validation.d.ts +3 -0
  104. package/dist/src/runtime/config/llamacpp-profile-validation.js +15 -0
  105. package/dist/src/runtime/config/model-reasoning-schema.d.ts +40 -0
  106. package/dist/src/runtime/config/model-reasoning-schema.js +38 -0
  107. package/dist/src/runtime/config/model-reasoning-validation.d.ts +3 -0
  108. package/dist/src/runtime/config/model-reasoning-validation.js +37 -0
  109. package/dist/src/runtime/config/runner/step-instructions.d.ts +4 -0
  110. package/dist/src/runtime/config/runner/step-instructions.js +10 -6
  111. package/dist/src/runtime/config/schema.js +3 -0
  112. package/dist/src/runtime/config/validation/model-invocation-config-validation.js +14 -0
  113. package/dist/src/runtime/context/compacted-capability-result-receipt.d.ts +2 -0
  114. package/dist/src/runtime/context/compacted-capability-result-receipt.js +8 -7
  115. package/dist/src/runtime/context/execution-compacted-evidence.d.ts +4 -0
  116. package/dist/src/runtime/context/execution-compacted-evidence.js +2 -23
  117. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.d.ts +19 -0
  118. package/dist/src/runtime/context/execution-compaction-checkpoint-selection.js +104 -0
  119. package/dist/src/runtime/context/model-step-compaction-inheritance.d.ts +12 -0
  120. package/dist/src/runtime/context/model-step-compaction-inheritance.js +28 -0
  121. package/dist/src/runtime/context/model-step-compaction-projection.d.ts +12 -0
  122. package/dist/src/runtime/context/model-step-compaction-projection.js +322 -0
  123. package/dist/src/runtime/context/model-step-compaction.d.ts +2 -1
  124. package/dist/src/runtime/context/model-step-compaction.js +25 -316
  125. package/dist/src/runtime/context/operation-supervision-compacted-evidence.js +7 -1
  126. package/dist/src/runtime/context/request-context.d.ts +2 -0
  127. package/dist/src/runtime/context/request-context.js +16 -0
  128. package/dist/src/runtime/context/request-tool-results-checkpoint.d.ts +2 -1
  129. package/dist/src/runtime/context/request-tool-results-checkpoint.js +35 -6
  130. package/dist/src/runtime/context/request-tool-results.js +3 -1
  131. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.d.ts +5 -1
  132. package/dist/src/runtime/context/semantic-compaction/checkpoint-message.js +10 -4
  133. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.d.ts +4 -0
  134. package/dist/src/runtime/context/semantic-compaction/execution-evidence-instructions.js +38 -0
  135. package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +3 -1
  136. package/dist/src/runtime/context/semantic-compaction/generation-input.js +15 -10
  137. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.d.ts +8 -0
  138. package/dist/src/runtime/context/semantic-compaction/inherited-source-digests.js +76 -0
  139. package/dist/src/runtime/context/semantic-compaction/replacement-budget.js +3 -1
  140. package/dist/src/runtime/context/semantic-compaction/run.js +6 -12
  141. package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +1 -1
  142. package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +20 -2
  143. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.d.ts +2 -0
  144. package/dist/src/runtime/knowledge-skills/builtins/what-can-i-do.js +27 -0
  145. package/dist/src/runtime/knowledge-skills/catalog.js +2 -0
  146. package/dist/src/runtime/local-application.d.ts +5 -0
  147. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -1
  148. package/dist/src/runtime/local-host/app-service-dispatch.js +2 -0
  149. package/dist/src/runtime/local-host/client-services.d.ts +5 -0
  150. package/dist/src/runtime/local-host/saved-approvals.js +1 -0
  151. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +5 -7
  152. package/dist/src/runtime/long-term-memory/onboarding/contracts.d.ts +26 -0
  153. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.d.ts +1 -0
  154. package/dist/src/runtime/long-term-memory/onboarding/embedding-profile-id.js +8 -0
  155. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.d.ts +17 -0
  156. package/dist/src/runtime/long-term-memory/onboarding/saved-profiles.js +77 -0
  157. package/dist/src/runtime/long-term-memory/onboarding/service.js +40 -10
  158. package/dist/src/runtime/model/input-token-count.js +1 -0
  159. package/dist/src/runtime/model/invoke-step.js +12 -0
  160. package/dist/src/runtime/model/invoke-structured-step.d.ts +4 -1
  161. package/dist/src/runtime/model/invoke-structured-step.js +4 -0
  162. package/dist/src/runtime/model/model-catalog.d.ts +3 -0
  163. package/dist/src/runtime/model/model-catalog.js +2 -0
  164. package/dist/src/runtime/model/model-context-budget.d.ts +5 -0
  165. package/dist/src/runtime/model/model-context-budget.js +2 -0
  166. package/dist/src/runtime/model/model-step-port.d.ts +7 -0
  167. package/dist/src/runtime/model/optional-context-admission.d.ts +18 -0
  168. package/dist/src/runtime/model/optional-context-admission.js +23 -0
  169. package/dist/src/runtime/ports.d.ts +3 -1
  170. package/dist/src/runtime/projects/contracts.d.ts +6 -0
  171. package/dist/src/runtime/projects/registry-format.d.ts +3 -0
  172. package/dist/src/runtime/projects/registry-format.js +50 -0
  173. package/dist/src/runtime/projects/repository.d.ts +6 -3
  174. package/dist/src/runtime/projects/repository.js +26 -19
  175. package/dist/src/runtime/projects/service.js +11 -0
  176. package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
  177. package/dist/src/runtime/request/approval-wait/snapshot.d.ts +1 -1
  178. package/dist/src/runtime/request/approval-wait/snapshot.js +1 -0
  179. package/dist/src/runtime/request/contracts.d.ts +5 -1
  180. package/dist/src/runtime/request/execution-facets.js +2 -0
  181. package/dist/src/runtime/request/execution-payload-artifact-policy.d.ts +3 -0
  182. package/dist/src/runtime/request/execution-payload-artifact-policy.js +6 -0
  183. package/dist/src/runtime/request/execution-payload-compacted-evidence.js +1 -0
  184. package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
  185. package/dist/src/runtime/request/execution-scope-surfaces.js +3 -0
  186. package/dist/src/runtime/request/execution-scope.d.ts +2 -0
  187. package/dist/src/runtime/request/execution-scope.js +2 -0
  188. package/dist/src/runtime/request/input.d.ts +1 -0
  189. package/dist/src/runtime/request/input.js +1 -0
  190. package/dist/src/runtime/request/prepared-execution.d.ts +1 -0
  191. package/dist/src/runtime/request/prepared-execution.js +3 -0
  192. package/dist/src/runtime/request/reasoning-preference.d.ts +10 -0
  193. package/dist/src/runtime/request/reasoning-preference.js +29 -0
  194. package/dist/src/runtime/request/root-reference-action.js +3 -3
  195. package/dist/src/runtime/request/root-skill-read-admission.d.ts +4 -0
  196. package/dist/src/runtime/request/root-skill-read-admission.js +14 -0
  197. package/dist/src/runtime/request/root-skill-read.js +13 -5
  198. package/dist/src/runtime/request/supervisor-skill-selection-window.d.ts +16 -0
  199. package/dist/src/runtime/request/supervisor-skill-selection-window.js +17 -0
  200. package/dist/src/runtime/request/worker-capability-composition.js +2 -0
  201. package/dist/src/runtime/scheduler/contracts.d.ts +7 -1
  202. package/dist/src/runtime/scheduler/job-management.js +7 -1
  203. package/dist/src/runtime/scheduler/run-records.js +2 -0
  204. package/dist/src/runtime/scheduler/schedule-validation.js +2 -0
  205. package/dist/src/runtime/scheduler/scheduler-engine.js +1 -0
  206. package/dist/src/runtime/scheduler/snapshot-validation.js +2 -0
  207. package/dist/src/runtime/steps/auditor-decision/projection.js +2 -0
  208. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.d.ts +9 -0
  209. package/dist/src/runtime/steps/execution-agent/capability-controls-partition.js +29 -0
  210. package/dist/src/runtime/steps/execution-agent/capability-scope.d.ts +17 -0
  211. package/dist/src/runtime/steps/execution-agent/capability-scope.js +54 -0
  212. package/dist/src/runtime/steps/execution-agent/compaction.js +22 -6
  213. package/dist/src/runtime/steps/execution-agent/controls-compacted-evidence.js +2 -0
  214. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.d.ts +6 -0
  215. package/dist/src/runtime/steps/execution-agent/evidence-reuse-instructions.js +13 -0
  216. package/dist/src/runtime/steps/execution-agent/format.js +3 -6
  217. package/dist/src/runtime/steps/execution-agent/input.d.ts +5 -1
  218. package/dist/src/runtime/steps/execution-agent/input.js +10 -36
  219. package/dist/src/runtime/steps/execution-agent/observation-guidance.d.ts +11 -0
  220. package/dist/src/runtime/steps/execution-agent/observation-guidance.js +33 -0
  221. package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
  222. package/dist/src/runtime/steps/execution-agent/refinement.d.ts +3 -2
  223. package/dist/src/runtime/steps/execution-agent/refinement.js +17 -6
  224. package/dist/src/runtime/steps/execution-agent/run.js +7 -1
  225. package/dist/src/runtime/steps/skill-read-decision.d.ts +1 -0
  226. package/dist/src/runtime/steps/skill-read-decision.js +9 -4
  227. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +6 -1
  228. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +15 -0
  229. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +1 -1
  230. package/dist/src/runtime/steps/supervisor-decision/contracts.js +2 -0
  231. package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +3 -0
  232. package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +22 -3
  233. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.d.ts +9 -0
  234. package/dist/src/runtime/steps/supervisor-decision/delegation-contract.js +82 -0
  235. package/dist/src/runtime/steps/supervisor-decision/delegation-input.d.ts +7 -0
  236. package/dist/src/runtime/steps/supervisor-decision/delegation-input.js +105 -0
  237. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.d.ts +7 -0
  238. package/dist/src/runtime/steps/supervisor-decision/delegation-prompt.js +13 -0
  239. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
  240. package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +3 -5
  241. package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +5 -21
  242. package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +4 -1
  243. package/dist/src/runtime/steps/supervisor-decision/preparation.js +58 -6
  244. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.d.ts +22 -0
  245. package/dist/src/runtime/steps/supervisor-decision/procedure-entry.js +61 -0
  246. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.d.ts +39 -0
  247. package/dist/src/runtime/steps/supervisor-decision/procedure-gate.js +146 -0
  248. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.d.ts +9 -0
  249. package/dist/src/runtime/steps/supervisor-decision/procedure-memory.js +100 -0
  250. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.d.ts +10 -0
  251. package/dist/src/runtime/steps/supervisor-decision/procedure-recall.js +52 -0
  252. package/dist/src/runtime/steps/supervisor-decision/prompt.js +3 -16
  253. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -2
  254. package/dist/src/runtime/steps/supervisor-decision/role-guidance.d.ts +3 -0
  255. package/dist/src/runtime/steps/supervisor-decision/role-guidance.js +20 -0
  256. package/dist/src/runtime/steps/supervisor-decision/run.js +50 -7
  257. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.d.ts +10 -0
  258. package/dist/src/runtime/steps/supervisor-decision/skill-read-state.js +45 -0
  259. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.d.ts +15 -0
  260. package/dist/src/runtime/steps/supervisor-decision/skill-selection-candidates.js +25 -0
  261. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.d.ts +3 -0
  262. package/dist/src/runtime/steps/supervisor-decision/skill-selection-catalog.js +15 -0
  263. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.d.ts +10 -0
  264. package/dist/src/runtime/steps/supervisor-decision/skill-selection-continuation.js +65 -0
  265. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +3 -1
  266. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +20 -22
  267. package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +3 -2
  268. package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +62 -15
  269. package/dist/src/runtime/steps/supervisor-response/prompt.js +18 -4
  270. package/dist/src/shared/model-reasoning-modes.d.ts +5 -0
  271. package/dist/src/shared/model-reasoning-modes.js +20 -0
  272. package/dist/src/shared/model-reasoning-schema.d.ts +38 -0
  273. package/dist/src/shared/model-reasoning-schema.js +29 -0
  274. package/dist/src/shared/model-reasoning.d.ts +35 -0
  275. package/dist/src/shared/model-reasoning.js +100 -0
  276. package/dist/src/web-ui/app/ARCHITECTURE.md +13 -0
  277. package/dist/src/web-ui/app/app-bootstrap.js +9 -12
  278. package/dist/src/web-ui/app/app-dom.js +6 -1
  279. package/dist/src/web-ui/app/app-state.js +1 -0
  280. package/dist/src/web-ui/app/app.js +8 -3
  281. package/dist/src/web-ui/app/appearance-feature.js +28 -0
  282. package/dist/src/web-ui/app/automations-feature.js +20 -11
  283. package/dist/src/web-ui/app/components/appearance-dialog.js +79 -0
  284. package/dist/src/web-ui/app/components/automations/archive-actions.js +5 -3
  285. package/dist/src/web-ui/app/components/automations/authoring-entry.js +26 -7
  286. package/dist/src/web-ui/app/components/automations/confirmation-actions.js +78 -0
  287. package/dist/src/web-ui/app/components/automations/draft-recovery-actions.js +1 -0
  288. package/dist/src/web-ui/app/components/automations/node-inspector.js +5 -1
  289. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +4 -2
  290. package/dist/src/web-ui/app/components/automations/timeline.js +2 -2
  291. package/dist/src/web-ui/app/components/automations/workspace-navigation.js +37 -0
  292. package/dist/src/web-ui/app/components/automations/workspace.js +31 -46
  293. package/dist/src/web-ui/app/components/config-workspace/config-model.js +6 -0
  294. package/dist/src/web-ui/app/components/config-workspace/model-removal.js +4 -2
  295. package/dist/src/web-ui/app/components/config-workspace/model-rendering.js +8 -16
  296. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget-edit.js +113 -0
  297. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.d.ts +16 -0
  298. package/dist/src/web-ui/app/components/config-workspace/reasoning-budget.js +67 -0
  299. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.d.ts +7 -0
  300. package/dist/src/web-ui/app/components/config-workspace/reasoning-mode-budgets.js +25 -0
  301. package/dist/src/web-ui/app/components/config-workspace/workspace-events.js +15 -7
  302. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +32 -12
  303. package/dist/src/web-ui/app/components/config-workspace/workspace-persistence.js +1 -1
  304. package/dist/src/web-ui/app/components/config-workspace.js +2 -1
  305. package/dist/src/web-ui/app/components/confirmation-dialog.js +88 -0
  306. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  307. package/dist/src/web-ui/app/components/conversation-activity.js +32 -3
  308. package/dist/src/web-ui/app/components/conversation-memory-activity.js +31 -0
  309. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +2 -0
  310. package/dist/src/web-ui/app/components/conversation-role-cards.js +14 -11
  311. package/dist/src/web-ui/app/components/conversation-skill-activity.js +67 -0
  312. package/dist/src/web-ui/app/components/conversation-tools.js +5 -5
  313. package/dist/src/web-ui/app/components/conversation-view.js +6 -0
  314. package/dist/src/web-ui/app/components/dashboard/approvals.js +13 -1
  315. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.d.ts +38 -0
  316. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-dialog.js +289 -0
  317. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-feature.js +75 -0
  318. package/dist/src/web-ui/app/components/long-term-memory/embedding-connection-rendering.js +31 -0
  319. package/dist/src/web-ui/app/components/long-term-memory/manager.js +15 -5
  320. package/dist/src/web-ui/app/components/long-term-memory/saved-embedding-profiles.js +114 -0
  321. package/dist/src/web-ui/app/components/long-term-memory/setup-rendering.js +55 -0
  322. package/dist/src/web-ui/app/components/long-term-memory-setup.js +141 -76
  323. package/dist/src/web-ui/app/components/model-setup/rendering.js +3 -2
  324. package/dist/src/web-ui/app/components/model-setup/validation.js +6 -2
  325. package/dist/src/web-ui/app/components/model-setup/wizard.d.ts +1 -0
  326. package/dist/src/web-ui/app/components/model-setup/wizard.js +28 -5
  327. package/dist/src/web-ui/app/components/passive-learning/memory.js +12 -5
  328. package/dist/src/web-ui/app/components/plugins/manager.js +14 -0
  329. package/dist/src/web-ui/app/components/plugins/removal.js +10 -2
  330. package/dist/src/web-ui/app/components/project-group-actions.js +35 -0
  331. package/dist/src/web-ui/app/components/project-session-groups.js +17 -31
  332. package/dist/src/web-ui/app/components/runtime-setup/commands.js +1 -1
  333. package/dist/src/web-ui/app/components/runtime-setup/connection-form.d.ts +15 -0
  334. package/dist/src/web-ui/app/components/runtime-setup/connection-form.js +32 -9
  335. package/dist/src/web-ui/app/components/runtime-setup/connection-input.js +23 -0
  336. package/dist/src/web-ui/app/components/runtime-setup/connection-inspection.js +57 -0
  337. package/dist/src/web-ui/app/components/runtime-setup/connection-state.js +18 -4
  338. package/dist/src/web-ui/app/components/runtime-setup/embedding-credential-status.js +3 -0
  339. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-options.js +54 -0
  340. package/dist/src/web-ui/app/components/runtime-setup/embedding-provider-receipt.js +3 -0
  341. package/dist/src/web-ui/app/components/runtime-setup/embedding-rendering.js +22 -22
  342. package/dist/src/web-ui/app/components/runtime-setup/embedding.js +60 -16
  343. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.d.ts +17 -0
  344. package/dist/src/web-ui/app/components/runtime-setup/reasoning-fields.js +54 -0
  345. package/dist/src/web-ui/app/components/runtime-setup/validation.js +5 -1
  346. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +9 -3
  347. package/dist/src/web-ui/app/components/runtime-setup-guide.js +20 -29
  348. package/dist/src/web-ui/app/components/schedules/details.js +2 -2
  349. package/dist/src/web-ui/app/components/schedules/form.js +12 -5
  350. package/dist/src/web-ui/app/components/schedules/workspace.js +30 -18
  351. package/dist/src/web-ui/app/components/session-list-viewport.js +49 -0
  352. package/dist/src/web-ui/app/components/session-search-disclosure.js +27 -0
  353. package/dist/src/web-ui/app/components/skills/workspace.js +7 -3
  354. package/dist/src/web-ui/app/components/spark-chat/panel.js +7 -3
  355. package/dist/src/web-ui/app/components/spark-chat/settings.js +57 -15
  356. package/dist/src/web-ui/app/components/tool-approval-card.d.ts +2 -1
  357. package/dist/src/web-ui/app/components/tool-approval-card.js +10 -2
  358. package/dist/src/web-ui/app/components/tool-approval-rejection-input.js +116 -0
  359. package/dist/src/web-ui/app/components/workspace-shell.js +30 -38
  360. package/dist/src/web-ui/app/components/workspace-transitions.js +42 -0
  361. package/dist/src/web-ui/app/configuration-feature.js +34 -4
  362. package/dist/src/web-ui/app/controllers/app-event-bindings.js +45 -29
  363. package/dist/src/web-ui/app/controllers/appearance-controller.js +105 -0
  364. package/dist/src/web-ui/app/controllers/automations-controller.js +9 -1
  365. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +1 -1
  366. package/dist/src/web-ui/app/controllers/composer-feature.js +10 -3
  367. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +1 -1
  368. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +9 -3
  369. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +1 -1
  370. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +8 -2
  371. package/dist/src/web-ui/app/controllers/dashboard-approvals-controller.js +10 -9
  372. package/dist/src/web-ui/app/controllers/environment-transition.js +2 -2
  373. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +9 -7
  374. package/dist/src/web-ui/app/controllers/preference-view-sync.js +35 -0
  375. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +4 -0
  376. package/dist/src/web-ui/app/controllers/projects-controller.js +64 -3
  377. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.d.ts +17 -0
  378. package/dist/src/web-ui/app/controllers/reasoning-budget-controller.js +80 -0
  379. package/dist/src/web-ui/app/controllers/reasoning-budget-menu-events.js +45 -0
  380. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +35 -40
  381. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +6 -1
  382. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +16 -3
  383. package/dist/src/web-ui/app/controllers/session-controller.js +34 -9
  384. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +4 -3
  385. package/dist/src/web-ui/app/controllers/skills-controller.js +33 -16
  386. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +1 -1
  387. package/dist/src/web-ui/app/controllers/spark-handoff-navigation.js +7 -1
  388. package/dist/src/web-ui/app/controllers/tool-approval-controller.d.ts +2 -1
  389. package/dist/src/web-ui/app/controllers/tool-approval-controller.js +36 -3
  390. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +8 -2
  391. package/dist/src/web-ui/app/controllers/workspace-route-controller.js +41 -10
  392. package/dist/src/web-ui/app/index.html +38 -32
  393. package/dist/src/web-ui/app/lib/color-palettes.d.ts +17 -0
  394. package/dist/src/web-ui/app/lib/color-palettes.js +20 -0
  395. package/dist/src/web-ui/app/lib/memory-activity-model.d.ts +12 -0
  396. package/dist/src/web-ui/app/lib/memory-activity-model.js +61 -0
  397. package/dist/src/web-ui/app/lib/navigation-display.d.ts +8 -0
  398. package/dist/src/web-ui/app/lib/navigation-display.js +12 -0
  399. package/dist/src/web-ui/app/lib/reasoning-controls.js +47 -6
  400. package/dist/src/web-ui/app/lib/reasoning-preference.d.ts +9 -0
  401. package/dist/src/web-ui/app/lib/reasoning-preference.js +75 -0
  402. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +4 -0
  403. package/dist/src/web-ui/app/lib/session-composer-queue.js +4 -0
  404. package/dist/src/web-ui/app/lib/session-project-groups.js +28 -0
  405. package/dist/src/web-ui/app/lib/session-sidebar-order.js +7 -5
  406. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +1 -0
  407. package/dist/src/web-ui/app/lib/tool-activity-event.js +1 -0
  408. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +1 -0
  409. package/dist/src/web-ui/app/lib/tool-activity-model.js +1 -0
  410. package/dist/src/web-ui/app/lib/tool-approval-rejection-drafts.js +45 -0
  411. package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +1 -1
  412. package/dist/src/web-ui/app/notifications-feature.js +10 -2
  413. package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
  414. package/dist/src/web-ui/app/projects-feature.js +40 -10
  415. package/dist/src/web-ui/app/runtime-onboarding-feature.js +1 -0
  416. package/dist/src/web-ui/app/schedules-feature.js +28 -5
  417. package/dist/src/web-ui/app/services/client-preferences.d.ts +4 -1
  418. package/dist/src/web-ui/app/services/client-preferences.js +2 -0
  419. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.d.ts +11 -0
  420. package/dist/src/web-ui/app/services/conversation-reasoning-preferences.js +30 -0
  421. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +6 -4
  422. package/dist/src/web-ui/app/services/runtime-web-client/configuration.js +5 -0
  423. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +21 -0
  424. package/dist/src/web-ui/app/services/runtime-web-client/projects.d.ts +2 -1
  425. package/dist/src/web-ui/app/services/runtime-web-client/projects.js +4 -0
  426. package/dist/src/web-ui/app/services/runtime-web-client/tool-approvals.js +2 -0
  427. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +16 -0
  428. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  429. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +33 -13
  430. package/dist/src/web-ui/app/skills-feature.js +2 -3
  431. package/dist/src/web-ui/app/spark-chat-conversation.js +29 -3
  432. package/dist/src/web-ui/app/spark-chat-feature.js +13 -7
  433. package/dist/src/web-ui/app/styles/01-color-palettes.css +90 -0
  434. package/dist/src/web-ui/app/styles/11-product-links.css +6 -2
  435. package/dist/src/web-ui/app/styles/11-workspace-header-width.css +37 -25
  436. package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +56 -22
  437. package/dist/src/web-ui/app/styles/13-projects.css +56 -19
  438. package/dist/src/web-ui/app/styles/19-runtime-setup.css +16 -0
  439. package/dist/src/web-ui/app/styles/22-reasoning-budget.css +39 -0
  440. package/dist/src/web-ui/app/styles/27-conversation-memory.css +45 -0
  441. package/dist/src/web-ui/app/styles/27-conversation-skills.css +96 -0
  442. package/dist/src/web-ui/app/styles/28-tool-approval-card.css +38 -1
  443. package/dist/src/web-ui/app/styles/35-embedding-profiles.css +159 -0
  444. package/dist/src/web-ui/app/styles/54-spark-chat.css +62 -46
  445. package/dist/src/web-ui/app/styles/65-appearance.css +60 -0
  446. package/dist/src/web-ui/app/styles/66-navigation-display.css +30 -0
  447. package/dist/src/web-ui/app/styles/67-confirmation-dialog.css +32 -0
  448. package/dist/src/web-ui/app/styles.css +8 -0
  449. package/dist/src/web-ui/client-state/preference-shapes.js +6 -1
  450. package/dist/src/web-ui/client-state/preferences.js +8 -2
  451. package/dist/src/web-ui/client-state/reasoning-preference-shape.d.ts +1 -0
  452. package/dist/src/web-ui/client-state/reasoning-preference-shape.js +18 -0
  453. package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
  454. package/dist/src/web-ui/local-runtime/api-router.js +11 -0
  455. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.d.ts +7 -0
  456. package/dist/src/web-ui/local-runtime/memory-embedding-connection-input.js +22 -0
  457. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.d.ts +20 -0
  458. package/dist/src/web-ui/local-runtime/memory-embedding-connection-service.js +47 -0
  459. package/dist/src/web-ui/local-runtime/memory-onboarding-routes.js +32 -0
  460. package/dist/src/web-ui/local-runtime/model-connection-inspection.d.ts +7 -0
  461. package/dist/src/web-ui/local-runtime/model-connection-inspection.js +48 -0
  462. package/dist/src/web-ui/local-runtime/model-setup-catalog.d.ts +2 -1
  463. package/dist/src/web-ui/local-runtime/model-setup-catalog.js +3 -1
  464. package/dist/src/web-ui/local-runtime/model-setup-identity.js +1 -1
  465. package/dist/src/web-ui/local-runtime/model-setup-input.d.ts +5 -2
  466. package/dist/src/web-ui/local-runtime/model-setup-input.js +29 -6
  467. package/dist/src/web-ui/local-runtime/model-setup-provider.d.ts +1 -1
  468. package/dist/src/web-ui/local-runtime/model-setup-provider.js +9 -6
  469. package/dist/src/web-ui/local-runtime/model-setup-retry.js +4 -1
  470. package/dist/src/web-ui/local-runtime/model-setup-service.d.ts +2 -1
  471. package/dist/src/web-ui/local-runtime/pending-tool-approvals.js +4 -1
  472. package/dist/src/web-ui/local-runtime/project-routes.js +10 -2
  473. package/dist/src/web-ui/local-runtime/request-execution.js +1 -0
  474. package/dist/src/web-ui/local-runtime/runtime-setup-auth.d.ts +2 -0
  475. package/dist/src/web-ui/local-runtime/runtime-setup-auth.js +20 -0
  476. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +3 -2
  477. package/dist/src/web-ui/local-runtime/runtime-setup-credential-completion.js +6 -1
  478. package/dist/src/web-ui/local-runtime/runtime-setup-input.d.ts +3 -2
  479. package/dist/src/web-ui/local-runtime/runtime-setup-input.js +17 -5
  480. package/dist/src/web-ui/local-runtime/runtime-setup-provider.d.ts +4 -1
  481. package/dist/src/web-ui/local-runtime/runtime-setup-provider.js +6 -2
  482. package/dist/src/web-ui/local-runtime/runtime-setup-routes.d.ts +11 -2
  483. package/dist/src/web-ui/local-runtime/runtime-setup-routes.js +11 -2
  484. package/dist/src/web-ui/local-runtime/runtime-setup-scaffold.js +3 -2
  485. package/dist/src/web-ui/local-runtime/runtime-setup-service.d.ts +25 -4
  486. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +19 -9
  487. package/dist/src/web-ui/local-runtime/setup-embedding-input.d.ts +3 -1
  488. package/dist/src/web-ui/local-runtime/setup-embedding-input.js +38 -6
  489. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.d.ts +11 -0
  490. package/dist/src/web-ui/local-runtime/setup-embedding-llamacpp.js +53 -0
  491. package/dist/src/web-ui/local-runtime/setup-embedding-provider.js +23 -9
  492. package/dist/src/web-ui/local-runtime/setup-embedding-routes.d.ts +7 -2
  493. package/dist/src/web-ui/local-runtime/setup-embedding-routes.js +5 -3
  494. package/dist/src/web-ui/local-runtime/setup-embedding-service.d.ts +1 -0
  495. package/docs/configuration.md +10 -8
  496. package/docs/installation.md +11 -5
  497. package/docs/llamacpp.md +248 -0
  498. package/docs/long-term-memory.md +12 -0
  499. package/docs/running-locally.md +7 -1
  500. package/package.json +2 -1
  501. package/plugins/project-orientation/source/index.ts +2 -3
  502. package/plugins/project-orientation/source/inspection-failure.ts +1 -1
  503. package/plugins/project-orientation/source/project-target.ts +29 -0
  504. package/plugins/project-orientation/src/index.cjs +21 -2
  505. package/runtime.config.schema.json +140 -0
  506. package/src/runtime/README.md +50 -4
@@ -1,17 +1,13 @@
1
- import { buildCheckpointMessage } from "./semantic-compaction/checkpoint-message.js";
1
+ import { readInheritedCompactionCheckpoint } from "./model-step-compaction-inheritance.js";
2
+ import { projectCheckpointMessages, scanCompactionSources, createResultSourceOverrideMap } from "./model-step-compaction-projection.js";
2
3
  import { createVerifiedCompactionProjection } from "./verified-compaction-projection.js";
3
- import { SEMANTIC_COMPACTION_EVIDENCE_SCOPE } from "./semantic-compaction/evidence-scope.js";
4
4
  import { readOperationSupervisionEvidenceBinding } from "./operation-supervision-evidence-binding.js";
5
5
  import { projectOperationSupervisionEvidenceClosure } from "./operation-supervision-evidence-projection.js";
6
6
  import { superWorkerCompactionFailureOwner } from "./super-worker-compaction-failure.js";
7
7
  import { withSuperCompactionFailure, } from "./super-compaction-failure-owner.js";
8
8
  import { resolveSuperWorkerCompactionProjection } from "./super-worker-compaction-projection.js";
9
9
  import { CompactionSourceInvariantError } from "./compaction-source-invariant.js";
10
- import { CORE_SKILL_READ_MESSAGE_KIND, coreSkillReadSourceRef } from "./core-skill-read-context.js";
11
- import { projectRequestToolResultsCheckpointMessage } from "./request-tool-results-checkpoint.js";
12
- import { OPERATION_SUPERVISION_EVIDENCE_MESSAGE_KIND } from "./operation-supervision-evidence.js";
13
10
  import { SEMANTIC_COMPACTION_CONTEXT_LANE, assertValidSemanticCompactionCheckpoint, createSemanticCompactionSha256Fingerprint, generateSemanticCompactionCandidateBatched, sameSemanticCompactionCheckpointBinding, } from "./semantic-compaction/index.js";
14
- const PAYLOAD_CONTEXT_PREFIX = "Canonical runtime context:\n";
15
11
  export function createModelStepCompactionController(request, options) {
16
12
  if (!options.call.objective) {
17
13
  throw new Error("context_compaction_active_objective_required");
@@ -36,6 +32,13 @@ export function createModelStepCompactionController(request, options) {
36
32
  if (!store) {
37
33
  throw new Error("context_compaction_store_required");
38
34
  }
35
+ const inherited = readInheritedCompactionCheckpoint({
36
+ checkpoint: options.inheritedCheckpoint,
37
+ store,
38
+ binding,
39
+ scopeId,
40
+ sourceRevision: options.sourceRevision,
41
+ });
39
42
  const verifiedProjection = createVerifiedCompactionProjection();
40
43
  let projectedCheckpoint;
41
44
  const reconcileEvidence = (messages, checkpoint) => projectOperationSupervisionEvidenceClosure(messages, {
@@ -80,8 +83,9 @@ export function createModelStepCompactionController(request, options) {
80
83
  async prepare(messages, context) {
81
84
  const { sidecar, failureOwner, overrides: resultSourceOverrides, } = sourceProjection(messages);
82
85
  const previous = withSuperCompactionFailure(failureOwner, () => readPrevious(messages));
86
+ const evidence = previous ?? inherited;
83
87
  const scanned = scanCompactionSources(messages, scopeId, resultSourceOverrides, sidecar);
84
- const covered = new Map(previous?.sourceDigests.map((source) => [source.sourceRef, source]) ??
88
+ const covered = new Map(evidence?.sourceDigests.map((source) => [source.sourceRef, source]) ??
85
89
  []);
86
90
  const newSources = withSuperCompactionFailure(failureOwner, () => scanned
87
91
  .map(({ source }) => source)
@@ -101,7 +105,7 @@ export function createModelStepCompactionController(request, options) {
101
105
  if (!hasNewCompactionSources) {
102
106
  return Object.freeze({
103
107
  kind: "unavailable",
104
- reason: previous ? "no_new_sources" : "no_eligible_sources",
108
+ reason: evidence ? "no_new_sources" : "no_eligible_sources",
105
109
  });
106
110
  }
107
111
  const candidate = await generateSemanticCompactionCandidateBatched({
@@ -113,13 +117,16 @@ export function createModelStepCompactionController(request, options) {
113
117
  boundSteeringVersion: context?.boundSteeringVersion,
114
118
  consumer: options.consumer,
115
119
  ...(previous ? { previous } : {}),
120
+ ...(!previous && inherited
121
+ ? { inheritedSourceDigests: inherited.sourceDigests }
122
+ : {}),
116
123
  sources: newSources,
117
124
  ...(sidecar || failureOwner
118
125
  ? { registrationMode: "atomic" }
119
126
  : {}),
120
127
  ...(failureOwner ? { failureOwner } : {}),
121
128
  });
122
- const preparedMessages = withSuperCompactionFailure(failureOwner, () => reconcileEvidence(projectCheckpointMessages(messages, scopeId, candidate, resultSourceOverrides, failureOwner !== undefined), candidate));
129
+ const preparedMessages = withSuperCompactionFailure(failureOwner, () => reconcileEvidence(projectCheckpointMessages(messages, scopeId, candidate, resultSourceOverrides, failureOwner !== undefined, undefined, { replacesScopeId: inherited?.scopeId }), candidate));
123
130
  return Object.freeze({
124
131
  kind: "prepared",
125
132
  preparation: Object.freeze({
@@ -140,14 +147,18 @@ export function createModelStepCompactionController(request, options) {
140
147
  verifiedProjection.clear();
141
148
  const { failureOwner, overrides: resultSourceOverrides } = sourceProjection(messages);
142
149
  const previous = withSuperCompactionFailure(failureOwner, () => readPrevious(messages));
143
- projectedCheckpoint = previous;
144
- return withSuperCompactionFailure(failureOwner, () => reconcileEvidence(previous
145
- ? projectCheckpointMessages(messages, scopeId, previous, resultSourceOverrides, failureOwner !== undefined, verifiedProjection.record)
146
- : [...messages], previous));
150
+ const evidence = previous ?? inherited;
151
+ projectedCheckpoint = evidence;
152
+ return withSuperCompactionFailure(failureOwner, () => reconcileEvidence(evidence
153
+ ? projectCheckpointMessages(messages, scopeId, evidence, resultSourceOverrides, failureOwner !== undefined, verifiedProjection.record, {
154
+ includeContinuation: previous !== undefined,
155
+ replacesScopeId: inherited?.scopeId,
156
+ })
157
+ : [...messages], evidence));
147
158
  },
148
159
  hasExhaustedVerifiedCompactionSources(messages) {
149
160
  const ownProjection = projectedCheckpoint !== undefined &&
150
- store.get(scopeId) === projectedCheckpoint &&
161
+ store.get(projectedCheckpoint.scopeId) === projectedCheckpoint &&
151
162
  verifiedProjection.contains(messages);
152
163
  if (!ownProjection && !options.hasVerifiedCompactedEvidence?.(messages))
153
164
  return false;
@@ -159,305 +170,3 @@ export function createModelStepCompactionController(request, options) {
159
170
  },
160
171
  });
161
172
  }
162
- function projectCheckpointMessages(messages, scopeId, checkpoint, resultSourceOverrides, superOwned = false, recordVerifiedProjection) {
163
- const scanned = scanCompactionSources(messages, scopeId, resultSourceOverrides);
164
- const covered = new Map(checkpoint.sourceDigests.map((source) => [source.sourceRef, source]));
165
- const removable = new Set();
166
- let insertionIndex = messages.length;
167
- const checkpointEmbedded = messages.some(isCheckpointCarrierMessage);
168
- for (const { index, source } of scanned) {
169
- const exact = covered.get(source.sourceRef);
170
- if (exact?.sourceFingerprint === source.sourceFingerprint) {
171
- if (!isCheckpointCarrierMessage(messages[index])) {
172
- removable.add(index);
173
- insertionIndex = Math.min(insertionIndex, index);
174
- }
175
- }
176
- }
177
- messages.forEach((message, index) => {
178
- if (isCheckpointMessage(message, scopeId)) {
179
- removable.add(index);
180
- insertionIndex = Math.min(insertionIndex, index);
181
- }
182
- });
183
- const checkpointMessage = buildCheckpointMessage(checkpoint);
184
- if (checkpoint.sourceDigests.length > 0 && !checkpointEmbedded)
185
- recordVerifiedProjection?.(checkpointMessage);
186
- const projected = [];
187
- let inserted = false;
188
- messages.forEach((message, index) => {
189
- const requestToolResults = projectRequestToolResultsCheckpointMessage(message, checkpoint, resultSourceOverrides);
190
- const payloadContext = projectPayloadContextCheckpointMessage(message, checkpoint, resultSourceOverrides, superOwned);
191
- if (!checkpointEmbedded && !inserted && index === insertionIndex) {
192
- projected.push(checkpointMessage);
193
- inserted = true;
194
- }
195
- if (!removable.has(index)) {
196
- const carrier = requestToolResults ?? payloadContext;
197
- if (checkpoint.sourceDigests.length > 0 && carrier)
198
- recordVerifiedProjection?.(carrier);
199
- projected.push(requestToolResults ?? payloadContext ?? message);
200
- }
201
- });
202
- if (!checkpointEmbedded && !inserted)
203
- projected.push(checkpointMessage);
204
- return projected;
205
- }
206
- function scanCompactionSources(messages, scopeId, resultSourceOverrides, sidecar) {
207
- const sources = [];
208
- messages.forEach((message, index) => {
209
- if (isCheckpointMessage(message, scopeId) ||
210
- readOperationSupervisionEvidenceBinding(message))
211
- return;
212
- for (const source of resolveMessageSources(message, resultSourceOverrides, sidecar)) {
213
- sources.push(Object.freeze({ index, source }));
214
- }
215
- });
216
- return Object.freeze(sources);
217
- }
218
- function resolveMessageSources(message, resultSourceOverrides, sidecar) {
219
- if (message.role === "tool") {
220
- return Object.freeze([
221
- resultSourceOverrides.get(`tool-result:${message.toolCallId}`) ??
222
- createMessageSource(`tool-result:${message.toolCallId}`, message),
223
- ]);
224
- }
225
- if (message.role === "assistant" && message.toolCalls) {
226
- return Object.freeze([
227
- createMessageSource(`tool-action:${createSemanticCompactionSha256Fingerprint(message.toolCalls.map(({ callId }) => callId).join("\n")).slice("sha256:".length)}`, message),
228
- ]);
229
- }
230
- if (!message.content)
231
- return Object.freeze([]);
232
- const payloadContext = parsePayloadContextRecord(message.content);
233
- if (payloadContext) {
234
- return Object.freeze(readRecordArray(payloadContext.settledCapabilityResults).flatMap((result) => {
235
- const source = resolveScannableResultSource(result, "payload-result", resultSourceOverrides, sidecar);
236
- return source ? [source] : [];
237
- }));
238
- }
239
- const record = parseJsonRecord(message.content);
240
- if (record?.kind === CORE_SKILL_READ_MESSAGE_KIND) {
241
- const read = record.read;
242
- const document = record.document;
243
- const readId = readNonEmptyString(read?.readId);
244
- return readId ? Object.freeze([createMessageSource(coreSkillReadSourceRef(readId, readNonEmptyString(document?.skillId)), message)]) : Object.freeze([]);
245
- }
246
- if (record?.kind === OPERATION_SUPERVISION_EVIDENCE_MESSAGE_KIND) {
247
- return Object.freeze([
248
- createMessageSource(hashedMessageSourceRef("operation-supervision-evidence", message.content), message),
249
- ]);
250
- }
251
- if (record?.kind === "runtime_request_tool_results_v1") {
252
- return Object.freeze(readRecordArray(record.results).flatMap((result) => {
253
- const source = resolveScannableResultSource(result, undefined, resultSourceOverrides, sidecar);
254
- return source ? [source] : [];
255
- }));
256
- }
257
- if (record?.kind === "runtime_child_result") {
258
- const resultRef = readNonEmptyString(record.resultRef);
259
- return resultRef
260
- ? Object.freeze([
261
- createMessageSource(`child-result:${resultRef}`, message),
262
- ])
263
- : Object.freeze([]);
264
- }
265
- if (record?.kind === "runtime_execution_agent_auditor_evidence_v1") {
266
- return Object.freeze([
267
- createMessageSource(hashedMessageSourceRef("role-evidence", message.content), message),
268
- ]);
269
- }
270
- const header = parseJsonRecord(message.content.split("\n", 1)[0] ?? "");
271
- if (header?.kind === "runtime_reviewer_evidence_v1") {
272
- const evidenceRef = readNonEmptyString(header.evidenceRef);
273
- return Object.freeze([
274
- createMessageSource(evidenceRef
275
- ? `reviewer-evidence:${evidenceRef}`
276
- : hashedMessageSourceRef("reviewer-evidence", message.content), message),
277
- ]);
278
- }
279
- return Object.freeze([]);
280
- }
281
- function createMessageSource(sourceRef, message) {
282
- const content = JSON.stringify(message);
283
- return Object.freeze({
284
- sourceRef,
285
- sourceFingerprint: createSemanticCompactionSha256Fingerprint(content),
286
- content,
287
- });
288
- }
289
- function hashedMessageSourceRef(prefix, content) {
290
- return `${prefix}:${createSemanticCompactionSha256Fingerprint(content).slice("sha256:".length)}`;
291
- }
292
- function isCheckpointMessage(message, scopeId) {
293
- if (!message.content)
294
- return false;
295
- const record = parseJsonRecord(message.content);
296
- return (record?.kind === "runtime_semantic_compaction_checkpoint_v2" &&
297
- record.scopeId === scopeId);
298
- }
299
- function isCheckpointCarrierMessage(message) {
300
- return (parseJsonRecord(message.content)?.kind ===
301
- "runtime_request_tool_results_v1" ||
302
- parsePayloadContextRecord(message.content) !== undefined);
303
- }
304
- function projectPayloadContextCheckpointMessage(message, checkpoint, resultSourceOverrides, superOwned) {
305
- const context = parsePayloadContextRecord(message.content);
306
- if (!context)
307
- return undefined;
308
- if (message.role !== "user" || message.attachments?.length) {
309
- throw new Error("context_compaction_payload_context_invalid");
310
- }
311
- const previousProjection = parseRecord(context.semanticCheckpoint);
312
- const previousScopeId = readNonEmptyString(previousProjection?.scopeId);
313
- if (previousScopeId && previousScopeId !== checkpoint.scopeId) {
314
- throw new Error("context_compaction_checkpoint_scope_conflict");
315
- }
316
- const covered = new Map(checkpoint.sourceDigests.map((source) => [source.sourceRef, source]));
317
- const coveredResults = new Map();
318
- for (const receipt of readRecordArray(previousProjection?.coveredResults)) {
319
- const executionId = readNonEmptyString(receipt.executionId);
320
- const fingerprint = readNonEmptyString(receipt.sourceFingerprint);
321
- const source = executionId
322
- ? resolveResultSource(receipt, "payload-result", resultSourceOverrides)
323
- : undefined;
324
- const exact = source ? covered.get(source.sourceRef) : undefined;
325
- if (!executionId ||
326
- !fingerprint ||
327
- exact?.sourceFingerprint !== fingerprint) {
328
- throw new Error("context_compaction_checkpoint_receipt_invalid");
329
- }
330
- coveredResults.set(executionId, receipt);
331
- }
332
- const remainingResults = [];
333
- for (const result of readRecordArray(context.settledCapabilityResults)) {
334
- const executionId = readNonEmptyString(result.executionId);
335
- const source = resolveResultSource(result, "payload-result", resultSourceOverrides);
336
- const exact = source ? covered.get(source.sourceRef) : undefined;
337
- if (!executionId || !source || !exact) {
338
- remainingResults.push(result);
339
- continue;
340
- }
341
- if (source.sourceFingerprint !== exact.sourceFingerprint) {
342
- if (superOwned) {
343
- throw new CompactionSourceInvariantError("context_compaction_source_identity_conflict", source.sourceRef);
344
- }
345
- throw new Error("context_compaction_source_identity_conflict");
346
- }
347
- const { referenceData: _referenceData, adapterResult: _adapterResult, ...receipt } = result;
348
- coveredResults.set(executionId, Object.freeze({
349
- ...receipt,
350
- sourceFingerprint: exact.sourceFingerprint,
351
- }));
352
- }
353
- return Object.freeze({
354
- role: "user",
355
- content: `${PAYLOAD_CONTEXT_PREFIX}${JSON.stringify({
356
- ...context,
357
- semanticCheckpoint: {
358
- kind: checkpoint.kind,
359
- evidenceScope: SEMANTIC_COMPACTION_EVIDENCE_SCOPE,
360
- scopeId: checkpoint.scopeId,
361
- roleId: checkpoint.roleId,
362
- callId: checkpoint.callId,
363
- checkpointSourceRevision: checkpoint.sourceRevision,
364
- presenceEffect: "passive_role_continuation_not_user_intent_or_completion",
365
- coveredSources: checkpoint.sourceDigests.map(({ sourceRef, sourceFingerprint, digest }) => ({
366
- sourceRef,
367
- sourceFingerprint,
368
- digest,
369
- })),
370
- continuation: checkpoint.continuation,
371
- coveredResults: [...coveredResults.values()],
372
- },
373
- settledCapabilityResults: remainingResults,
374
- })}`,
375
- });
376
- }
377
- function parseJsonRecord(value) {
378
- try {
379
- const decoded = JSON.parse(value);
380
- return decoded && typeof decoded === "object" && !Array.isArray(decoded)
381
- ? decoded
382
- : undefined;
383
- }
384
- catch {
385
- return undefined;
386
- }
387
- }
388
- function createResultSourceOverrideMap(sources) {
389
- const overrides = new Map();
390
- for (const source of sources) {
391
- if (!source.sourceRef.trim() ||
392
- !source.content ||
393
- createSemanticCompactionSha256Fingerprint(source.content) !==
394
- source.sourceFingerprint ||
395
- overrides.has(source.sourceRef)) {
396
- throw new Error("context_compaction_source_override_invalid");
397
- }
398
- overrides.set(source.sourceRef, source);
399
- }
400
- return overrides;
401
- }
402
- function resolveResultSource(result, sourceRefPrefix, overrides) {
403
- const executionId = readNonEmptyString(result.executionId);
404
- if (!executionId)
405
- return undefined;
406
- const sourceRef = sourceRefPrefix
407
- ? `${sourceRefPrefix}:${executionId}`
408
- : executionId;
409
- const override = overrides.get(executionId) ?? overrides.get(sourceRef);
410
- if (override)
411
- return override;
412
- const content = JSON.stringify(result);
413
- return Object.freeze({
414
- sourceRef,
415
- sourceFingerprint: createSemanticCompactionSha256Fingerprint(content),
416
- content,
417
- });
418
- }
419
- /**
420
- * A summary-only receipt is a passive index entry, not a second representation
421
- * of the exact evidence body. Only exact evidence (or a canonical override)
422
- * can become a semantic-compaction source.
423
- */
424
- function resolveScannableResultSource(result, sourceRefPrefix, overrides, sidecar) {
425
- const executionId = readNonEmptyString(result.executionId);
426
- if (!executionId)
427
- return undefined;
428
- if (sidecar && !sidecar.eligibleExecutionIds.includes(executionId))
429
- return undefined;
430
- const sourceRef = sourceRefPrefix
431
- ? `${sourceRefPrefix}:${executionId}`
432
- : executionId;
433
- if (!overrides.has(executionId) &&
434
- !overrides.has(sourceRef) &&
435
- !readNonEmptyString(result.referenceData) &&
436
- !parseRecord(result.adapterResult)) {
437
- return undefined;
438
- }
439
- return resolveResultSource(result, sourceRefPrefix, overrides);
440
- }
441
- function parseRecord(value) {
442
- return value && typeof value === "object" && !Array.isArray(value)
443
- ? value
444
- : undefined;
445
- }
446
- function parsePayloadContextRecord(value) {
447
- return value.startsWith(PAYLOAD_CONTEXT_PREFIX)
448
- ? parseJsonRecord(value.slice(PAYLOAD_CONTEXT_PREFIX.length))
449
- : undefined;
450
- }
451
- function readRecordArray(value) {
452
- return Array.isArray(value)
453
- ? value.flatMap((entry) => {
454
- const record = parseRecord(entry);
455
- return record ? [record] : [];
456
- })
457
- : [];
458
- }
459
- function readNonEmptyString(value) {
460
- return typeof value === "string" && value.trim().length > 0
461
- ? value.trim()
462
- : undefined;
463
- }
@@ -1,3 +1,4 @@
1
+ import { projectCompactedCapabilityResultReceipt } from "./compacted-capability-result-receipt.js";
1
2
  import { createCapabilityResultCompactionSource } from "./capability-result-compaction-source.js";
2
3
  import { matchesCompactedExecutionResult } from "./execution-compacted-evidence.js";
3
4
  import { traceDebug } from "../observability/debug-logger.js";
@@ -28,6 +29,11 @@ export function resolveCompactedOperationSupervisionEvidence(executionId, eviden
28
29
  return undefined;
29
30
  if (!matchesRegisteredSupervisionResult(source, executionId, evidence))
30
31
  return undefined;
32
+ // Only verified output aliases can be replaced; independent summary facts stay.
33
+ const compactedReceipt = projectCompactedCapabilityResultReceipt({
34
+ ...receipt,
35
+ adapterResult: evidence.adapterResult,
36
+ });
31
37
  traceDebug("runtime.context.compaction", "supervision.evidence_reused", {
32
38
  requestId: context.requestId,
33
39
  modelStep: context.consumer,
@@ -51,7 +57,7 @@ export function resolveCompactedOperationSupervisionEvidence(executionId, eviden
51
57
  declaredEffect: receipt.declaredEffect,
52
58
  outcome: receipt.outcome,
53
59
  observedEffect: receipt.observedEffect,
54
- summary: receipt.summary,
60
+ summary: compactedReceipt.summary,
55
61
  }),
56
62
  });
57
63
  }
@@ -28,3 +28,5 @@ export declare function projectRequestContext(params: {
28
28
  }): RequestContextProjection;
29
29
  /** Returns the latest complete visible user-to-assistant turn, if one exists. */
30
30
  export declare function projectLatestCompleteConversationTurn(historyMessages: readonly RequestHistoryMessage[]): readonly [RequestHistoryMessage, RequestHistoryMessage] | undefined;
31
+ /** Returns one latest settled turn: a complete pair or a trusted assistant initiative. */
32
+ export declare function projectLatestSettledConversationTurn(historyMessages: readonly RequestHistoryMessage[]): readonly RequestHistoryMessage[] | undefined;
@@ -188,6 +188,22 @@ export function projectLatestCompleteConversationTurn(historyMessages) {
188
188
  }
189
189
  return undefined;
190
190
  }
191
+ /** Returns one latest settled turn: a complete pair or a trusted assistant initiative. */
192
+ export function projectLatestSettledConversationTurn(historyMessages) {
193
+ const turns = collectConversationTurns(historyMessages);
194
+ for (let index = turns.length - 1; index >= 0; index -= 1) {
195
+ const turn = turns[index];
196
+ if (!isSettledConversationTurn(turn))
197
+ continue;
198
+ return Object.freeze([...turn.source]);
199
+ }
200
+ return undefined;
201
+ }
202
+ function isSettledConversationTurn(turn) {
203
+ // The canonical collector emits only a pending user, a completed pair, or
204
+ // a singleton trusted assistant initiative; only the pending user is unsettled.
205
+ return turn.source.at(-1)?.role === "assistant";
206
+ }
191
207
  function collectConversationTurns(historyMessages) {
192
208
  const visibleMessages = historyMessages.filter((message) => message.grounding !== "tool_observation" &&
193
209
  message.content.trim().length > 0);
@@ -1,3 +1,4 @@
1
+ import type { CheckpointProjectionOptions } from "./semantic-compaction/checkpoint-message.js";
1
2
  import type { ChatMessage } from "../../model-gateway/types.js";
2
3
  import { type SemanticCompactionCheckpoint, type SemanticCompactionSource } from "./semantic-compaction/contracts.js";
3
- export declare function projectRequestToolResultsCheckpointMessage(message: ChatMessage, checkpoint: SemanticCompactionCheckpoint, resultSourceOverrides: ReadonlyMap<string, SemanticCompactionSource>): ChatMessage | undefined;
4
+ export declare function projectRequestToolResultsCheckpointMessage(message: ChatMessage, checkpoint: SemanticCompactionCheckpoint, resultSourceOverrides: ReadonlyMap<string, SemanticCompactionSource>, options?: CheckpointProjectionOptions): ChatMessage | undefined;
@@ -1,9 +1,10 @@
1
+ import { projectCompactedRegisteredOutputSummary } from "./compacted-capability-result-receipt.js";
1
2
  import { CompactionSourceInvariantError } from "./compaction-source-invariant.js";
2
3
  import { readSuperWorkerCompactionSidecar } from "./super-worker-compaction-sidecar.js";
3
4
  import { bindRequestToolResultsMessage, readBoundRequestToolResultsView, } from "./request-tool-results-message-binding.js";
4
5
  import { SEMANTIC_COMPACTION_EVIDENCE_SCOPE } from "./semantic-compaction/evidence-scope.js";
5
6
  import { createSemanticCompactionSha256Fingerprint, } from "./semantic-compaction/contracts.js";
6
- export function projectRequestToolResultsCheckpointMessage(message, checkpoint, resultSourceOverrides) {
7
+ export function projectRequestToolResultsCheckpointMessage(message, checkpoint, resultSourceOverrides, options = {}) {
7
8
  const record = parseJsonRecord(message.content);
8
9
  if (record?.kind !== "runtime_request_tool_results_v1")
9
10
  return undefined;
@@ -12,7 +13,9 @@ export function projectRequestToolResultsCheckpointMessage(message, checkpoint,
12
13
  }
13
14
  const previousProjection = parseRecord(record.semanticCheckpoint);
14
15
  const previousScopeId = readNonEmptyString(previousProjection?.scopeId);
15
- if (previousScopeId && previousScopeId !== checkpoint.scopeId) {
16
+ if (previousScopeId &&
17
+ previousScopeId !== checkpoint.scopeId &&
18
+ previousScopeId !== options.replacesScopeId) {
16
19
  throw new Error("context_compaction_checkpoint_scope_conflict");
17
20
  }
18
21
  const view = readBoundRequestToolResultsView(message);
@@ -35,7 +38,7 @@ export function projectRequestToolResultsCheckpointMessage(message, checkpoint,
35
38
  throw new CompactionSourceInvariantError("context_compaction_checkpoint_receipt_invalid", executionId);
36
39
  throw new Error("context_compaction_checkpoint_receipt_invalid");
37
40
  }
38
- coveredResults.set(executionId, receipt);
41
+ coveredResults.set(executionId, projectCoveredResultSummary(receipt, source, fingerprint));
39
42
  }
40
43
  const remainingResults = [];
41
44
  for (const result of readRecordArray(record.results)) {
@@ -53,7 +56,7 @@ export function projectRequestToolResultsCheckpointMessage(message, checkpoint,
53
56
  }
54
57
  const { referenceData: _referenceData, adapterResult: _adapterResult, ...receipt } = result;
55
58
  coveredResults.set(executionId, Object.freeze({
56
- ...receipt,
59
+ ...projectCoveredResultSummary(receipt, source, exact.sourceFingerprint),
57
60
  sourceFingerprint: exact.sourceFingerprint,
58
61
  }));
59
62
  }
@@ -68,13 +71,20 @@ export function projectRequestToolResultsCheckpointMessage(message, checkpoint,
68
71
  roleId: checkpoint.roleId,
69
72
  callId: checkpoint.callId,
70
73
  checkpointSourceRevision: checkpoint.sourceRevision,
71
- presenceEffect: "passive_role_continuation_not_user_intent_or_completion",
74
+ ...(options.includeContinuation === false
75
+ ? { authority: "passive_source_evidence" }
76
+ : {}),
77
+ presenceEffect: options.includeContinuation === false
78
+ ? "passive_source_evidence_not_current_intent_or_completion"
79
+ : "passive_role_continuation_not_user_intent_or_completion",
72
80
  coveredSources: checkpoint.sourceDigests.map(({ sourceRef, sourceFingerprint, digest }) => ({
73
81
  sourceRef,
74
82
  sourceFingerprint,
75
83
  digest,
76
84
  })),
77
- continuation: checkpoint.continuation,
85
+ ...(options.includeContinuation === false
86
+ ? {}
87
+ : { continuation: checkpoint.continuation }),
78
88
  coveredResults: [...coveredResults.values()],
79
89
  },
80
90
  results: remainingResults,
@@ -124,3 +134,22 @@ function resolveResultSource(result, _prefix, overrides) {
124
134
  content,
125
135
  };
126
136
  }
137
+ /** Read aliases only from exact source bytes, including previously covered receipts. */
138
+ function projectCoveredResultSummary(receipt, source, fingerprint) {
139
+ if (!source || source.sourceFingerprint !== fingerprint)
140
+ return receipt;
141
+ const canonical = parseJsonRecord(source.content);
142
+ if (!canonical || canonical.executionId !== receipt.executionId)
143
+ return receipt;
144
+ if (typeof receipt.summary !== "string")
145
+ return receipt;
146
+ const adapter = parseRecord(canonical.adapterResult);
147
+ const result = adapter?.kind === "registered_tool_execution_result_v1"
148
+ ? parseRecord(adapter.result)
149
+ : undefined;
150
+ const output = typeof result?.output === "string" ? result.output : undefined;
151
+ return {
152
+ ...receipt,
153
+ summary: projectCompactedRegisteredOutputSummary(receipt.summary, output),
154
+ };
155
+ }
@@ -1,3 +1,4 @@
1
+ import { projectCompactedCapabilityResultReceipt } from "./compacted-capability-result-receipt.js";
1
2
  import { projectCurrentRequestToolResults } from "./request-tool-results-supersession.js";
2
3
  export { projectCurrentRequestToolResults } from "./request-tool-results-supersession.js";
3
4
  import { bindSuperWorkerCompactionSources } from "./super-worker-compaction-sidecar.js";
@@ -92,7 +93,8 @@ export function buildCompactedRequestToolResultsMessage(view, checkpoint, integr
92
93
  const coveredResults = modelVisibleResults
93
94
  .filter(({ executionId }) => coveredExecutionIds.has(executionId))
94
95
  .map((result) => {
95
- const { referenceData: _referenceData, adapterResult: _adapterResult, ...receipt } = result;
96
+ const { referenceData: _referenceData, ...sourceReceipt } = result;
97
+ const receipt = projectCompactedCapabilityResultReceipt(sourceReceipt);
96
98
  return Object.freeze({
97
99
  ...receipt,
98
100
  sourceFingerprint: digestByExecutionId.get(result.executionId)
@@ -1,3 +1,7 @@
1
1
  import type { ChatMessage } from "../../../model-gateway/types.js";
2
2
  import type { SemanticCompactionCheckpoint } from "./contracts.js";
3
- export declare function buildCheckpointMessage(checkpoint: SemanticCompactionCheckpoint): ChatMessage;
3
+ export type CheckpointProjectionOptions = Readonly<{
4
+ includeContinuation?: boolean;
5
+ replacesScopeId?: string;
6
+ }>;
7
+ export declare function buildCheckpointMessage(checkpoint: SemanticCompactionCheckpoint, options?: CheckpointProjectionOptions): ChatMessage;
@@ -1,12 +1,16 @@
1
1
  import { SEMANTIC_COMPACTION_EVIDENCE_SCOPE } from "./evidence-scope.js";
2
- export function buildCheckpointMessage(checkpoint) {
2
+ export function buildCheckpointMessage(checkpoint, options = {}) {
3
3
  return Object.freeze({
4
4
  role: "user",
5
5
  content: JSON.stringify({
6
6
  kind: checkpoint.kind,
7
7
  evidenceScope: SEMANTIC_COMPACTION_EVIDENCE_SCOPE,
8
- authority: "runtime_role_continuation",
9
- presenceEffect: "passive_continuity_not_user_intent_routing_or_completion",
8
+ authority: options.includeContinuation === false
9
+ ? "passive_source_evidence"
10
+ : "runtime_role_continuation",
11
+ presenceEffect: options.includeContinuation === false
12
+ ? "passive_source_evidence_not_current_intent_or_completion"
13
+ : "passive_continuity_not_user_intent_routing_or_completion",
10
14
  scopeId: checkpoint.scopeId,
11
15
  roleId: checkpoint.roleId,
12
16
  callId: checkpoint.callId,
@@ -16,7 +20,9 @@ export function buildCheckpointMessage(checkpoint) {
16
20
  sourceFingerprint,
17
21
  digest,
18
22
  })),
19
- continuation: checkpoint.continuation,
23
+ ...(options.includeContinuation === false
24
+ ? {}
25
+ : { continuation: checkpoint.continuation }),
20
26
  }),
21
27
  });
22
28
  }
@@ -0,0 +1,4 @@
1
+ import type { ModelStep } from "../../../shared/model-steps.js";
2
+ export declare const EXECUTION_AGENT_COMPACTION_REQUIREMENTS: string;
3
+ /** Extend only checkpoints bound exclusively to Execution Agent consumers. */
4
+ export declare function resolveSemanticCompactionInstructions(allowedConsumers: readonly ModelStep[]): string;
@@ -0,0 +1,38 @@
1
+ import { SEMANTIC_COMPACTION_INSTRUCTIONS } from "./prompt.js";
2
+ export const EXECUTION_AGENT_COMPACTION_REQUIREMENTS = [
3
+ "Compress the record; do not advance the task. Preserve source-established facts, decisions, failures, and progress. Update pending work only from supplied outcomes. Do not review correctness, perform unfinished analysis, infer new defects or requirements, or propose actions. Compression omissions are information limits, not new work. The execution agent alone decides what happens next.",
4
+ "Distinguish successful retrieval or a completed source change from completion of the analysis, implementation or transformation that depends on it. Preserve supplied results and exact task-relevant identifiers, interfaces and relationships needed for that unfinished work, including names, keys, selectors, signatures and their associations. A read/write receipt or description of what a source contains cannot replace those concrete facts.",
5
+ "If task-relevant detail still cannot fit after removing repetition and using compact records, identify exactly which task-relevant facts, identifiers or relationships were omitted and their sourceRef or supplied location in findings. Distinguish detail omitted by compaction from detail absent in the original source. A sourceRef names provenance; it does not mean the original content remains visible to the owner. Do not claim that a summary preserves full contents or completes unfinished work.",
6
+ "",
7
+ "Identifier preservation is a hard requirement of this compaction. Never omit or rename any explicit identifier supplied in a source or a previous digest.",
8
+ "Identifiers include paths and resource names, declared symbols and function names, object fields and schema keys, DOM IDs, CSS classes and selectors, data attributes, storage keys, and exact enum or sentinel values that participate in an interface.",
9
+ "Deduplicate repeated occurrences into concise rows or grouped dictionaries: source/location | exact identifiers | role or binding | associated value or condition. Preserve exact spelling and keep each identifier bound to its own source and meaning. A list of disconnected names is insufficient.",
10
+ "Preserve the supplied relationships between identifiers, including keys used to join or select records, DOM-to-code bindings, selector-to-markup associations, and literal values that cross file or interface boundaries. Do not invent a relationship that the source does not establish.",
11
+ "Remove narrative, repeated receipts, examples and duplicated explanations before shortening identifier records. Carry these records forward on subsequent compactions; an earlier compact representation is not permission to drop its identifiers or relationships.",
12
+ "Use the unchanged response schema and shared checkpoint token budget. Missing or renamed identifiers, lost bindings, or an over-budget checkpoint are failures of this preservation requirement; do not claim complete preservation when any of these occurs.",
13
+ "",
14
+ "",
15
+ "The purpose of this checkpoint is to enable the owner to continue the current request efficiently, not to produce the shortest possible account. Omitting a fact needed for the unfinished work can force another read and another compaction, increasing total runtime and token use.",
16
+ "Preserve a compact working representation of the supplied implementation and data contracts. Alongside exact identifiers, retain top-level data shape, field meanings and types, required or empty values, normalization rules, function inputs and outputs, identifier-to-value bindings, and the relationships by which one part uses another. Names without these associations are not a usable substitute.",
17
+ "Use concise source-bound rows, maps or compact pseudocode to retain those contracts. Prefer precise interface and behavior facts over appearance descriptions, repeated receipts or narrative about what was inspected. Keep existing identifier-preservation requirements and the same shared token budget; repeated occurrences can share a compact representation without losing their source associations.",
18
+ "Before returning, check the facts needed to continue the current request against the supplied sources. Do not unnecessarily discard facts that would require recovering those same sources merely because of your summary. Distinguish truly unavailable information from information supplied here.",
19
+ "",
20
+ ].join("\n");
21
+ /** Extend only checkpoints bound exclusively to Execution Agent consumers. */
22
+ export function resolveSemanticCompactionInstructions(allowedConsumers) {
23
+ if (!hasExclusiveExecutionAgentConsumers(allowedConsumers)) {
24
+ return SEMANTIC_COMPACTION_INSTRUCTIONS;
25
+ }
26
+ return [
27
+ SEMANTIC_COMPACTION_INSTRUCTIONS,
28
+ EXECUTION_AGENT_COMPACTION_REQUIREMENTS,
29
+ ].join("\n");
30
+ }
31
+ function hasExclusiveExecutionAgentConsumers(allowedConsumers) {
32
+ if (allowedConsumers.length === 0)
33
+ return false;
34
+ return allowedConsumers.every(isExecutionAgentConsumer);
35
+ }
36
+ function isExecutionAgentConsumer(consumer) {
37
+ return consumer === "execution.decision" || consumer === "execution.response";
38
+ }