@abot-ai/runtime 1.7.0 → 1.8.1

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 (532) hide show
  1. package/README.md +216 -222
  2. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
  3. package/dist/src/capabilities/tool-request-resources.d.ts +3 -0
  4. package/dist/src/capabilities/tool-types.d.ts +4 -0
  5. package/dist/src/cli/abot.js +2 -0
  6. package/dist/src/cli/host-companion-bundle.mjs +751 -333
  7. package/dist/src/computer-access/collection-consent.d.ts +9 -0
  8. package/dist/src/computer-access/collection-consent.js +47 -0
  9. package/dist/src/computer-access/command-output-capture.d.ts +17 -6
  10. package/dist/src/computer-access/command-output-capture.js +134 -68
  11. package/dist/src/computer-access/command-output-protection.d.ts +17 -0
  12. package/dist/src/computer-access/command-output-protection.js +59 -0
  13. package/dist/src/computer-access/companion/command-output.d.ts +1 -0
  14. package/dist/src/computer-access/companion/command-output.js +23 -6
  15. package/dist/src/computer-access/companion/install-link-macos.js +2 -1
  16. package/dist/src/computer-access/companion/native-notifications.js +3 -2
  17. package/dist/src/computer-access/companion/native-session.js +6 -2
  18. package/dist/src/computer-access/companion/observation-filter.js +2 -26
  19. package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
  20. package/dist/src/computer-access/companion/observation-process.js +51 -25
  21. package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
  22. package/dist/src/computer-access/companion/observation-redaction.js +2 -111
  23. package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
  24. package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
  25. package/dist/src/computer-access/computer/companion-sessions.js +7 -6
  26. package/dist/src/computer-access/computer/unix-native-process.js +23 -11
  27. package/dist/src/computer-access/handlers.d.ts +2 -1
  28. package/dist/src/computer-access/handlers.js +79 -11
  29. package/dist/src/computer-access/host-observation.d.ts +3 -3
  30. package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
  31. package/dist/src/computer-access/native-observation-connection.js +78 -0
  32. package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
  33. package/dist/src/computer-access/native-observation-ownership.js +55 -0
  34. package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
  35. package/dist/src/computer-access/native-observation-shutdown.js +58 -0
  36. package/dist/src/computer-access/observation-source.d.ts +6 -0
  37. package/dist/src/computer-access/observation-source.js +10 -0
  38. package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
  39. package/dist/src/computer-access/security/desktop-result.js +146 -0
  40. package/dist/src/computer-access/security/observed-error.d.ts +2 -0
  41. package/dist/src/computer-access/security/observed-error.js +10 -0
  42. package/dist/src/computer-access/security/secret-text.d.ts +7 -0
  43. package/dist/src/computer-access/security/secret-text.js +111 -0
  44. package/dist/src/computer-access/security/system-results.d.ts +2 -0
  45. package/dist/src/computer-access/security/system-results.js +53 -0
  46. package/dist/src/computer-access/system-result-protection.d.ts +11 -0
  47. package/dist/src/computer-access/system-result-protection.js +1 -0
  48. package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
  49. package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
  50. package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
  51. package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
  52. package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
  53. package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
  54. package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
  55. package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
  56. package/dist/src/model-gateway/observability/provider-trace.js +30 -8
  57. package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
  58. package/dist/src/model-gateway/protocol/message-contract.js +1 -1
  59. package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
  60. package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
  61. package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
  62. package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
  63. package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
  64. package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
  65. package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
  66. package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
  67. package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
  68. package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
  69. package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
  70. package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
  71. package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
  72. package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
  73. package/dist/src/model-gateway/providers/openai/payload.js +6 -23
  74. package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
  75. package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
  76. package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
  77. package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
  78. package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
  79. package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
  80. package/dist/src/model-gateway/providers/openai/stream.js +13 -41
  81. package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
  82. package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
  83. package/dist/src/model-gateway/server/chat-handler.js +5 -7
  84. package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
  85. package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
  86. package/dist/src/model-gateway/server.js +5 -1
  87. package/dist/src/plugin-contract/index.d.ts +1 -0
  88. package/dist/src/plugin-contract/index.js +1 -0
  89. package/dist/src/plugin-contract/manifest.d.ts +2 -0
  90. package/dist/src/plugin-contract/manifest.js +1 -0
  91. package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
  92. package/dist/src/plugin-contract/platform-compatibility.js +3 -0
  93. package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
  94. package/dist/src/plugin-sdk/computer-access.js +1 -0
  95. package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
  96. package/dist/src/plugin-sdk/files-windows/process.js +93 -0
  97. package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
  98. package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
  99. package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
  100. package/dist/src/plugin-sdk/files-windows/read.js +56 -0
  101. package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
  102. package/dist/src/plugin-sdk/files-windows/result.js +67 -0
  103. package/dist/src/plugin-sdk/files.js +4 -0
  104. package/dist/src/plugin-sdk/index.d.ts +1 -0
  105. package/dist/src/plugin-sdk/index.js +1 -0
  106. package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
  107. package/dist/src/plugin-sdk/mutation-result.js +11 -0
  108. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
  109. package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
  110. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
  111. package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
  112. package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
  113. package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
  114. package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
  115. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
  116. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
  117. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
  118. package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
  119. package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
  120. package/dist/src/runtime/capabilities/tool-availability.js +6 -0
  121. package/dist/src/runtime/context/capability-brief.d.ts +2 -2
  122. package/dist/src/runtime/context/capability-brief.js +3 -3
  123. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
  124. package/dist/src/runtime/context/capability-descriptions.js +57 -20
  125. package/dist/src/runtime/local-host/windows-private-access.js +2 -0
  126. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +6 -1
  127. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
  128. package/dist/src/runtime/long-term-memory/initial-context.d.ts +17 -0
  129. package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
  130. package/dist/src/runtime/long-term-memory/projection.js +1 -1
  131. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +2 -1
  132. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
  133. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +5 -2
  134. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +2 -1
  135. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
  136. package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
  137. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
  138. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
  139. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
  140. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  141. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
  142. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +3 -1
  143. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +1 -1
  144. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +5 -1
  145. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
  146. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
  147. package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
  148. package/dist/src/runtime/passive-learning/collection-source.js +7 -0
  149. package/dist/src/runtime/passive-learning/service.js +2 -3
  150. package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
  151. package/dist/src/runtime/passive-learning/status-projection.js +9 -0
  152. package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
  153. package/dist/src/runtime/plugins/installation/package.js +2 -0
  154. package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
  155. package/dist/src/runtime/plugins/loader.js +24 -14
  156. package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
  157. package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
  158. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  159. package/dist/src/runtime/plugins/manifest-validator.js +9 -1
  160. package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
  161. package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
  162. package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
  163. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
  164. package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
  165. package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
  166. package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
  167. package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
  168. package/dist/src/runtime/request/prepared-execution.js +3 -0
  169. package/dist/src/runtime/request/root-contract.d.ts +2 -0
  170. package/dist/src/runtime/request/root-execution-kernel.js +1 -0
  171. package/dist/src/runtime/request/runner.js +9 -3
  172. package/dist/src/runtime/request/supervisor-root-execution.js +6 -0
  173. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
  174. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
  175. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
  176. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
  177. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
  178. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
  179. package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
  180. package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
  181. package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
  182. package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
  183. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
  184. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
  185. package/dist/src/runtime/steps/execution-agent/format.js +4 -3
  186. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
  187. package/dist/src/runtime/steps/execution-agent/input.js +22 -1
  188. package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
  189. package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
  190. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  191. package/dist/src/runtime/steps/execution-agent/prompt.js +7 -8
  192. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  193. package/dist/src/runtime/steps/execution-agent/response-run.js +5 -11
  194. package/dist/src/runtime/steps/execution-agent/run.js +4 -1
  195. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +3 -5
  196. package/dist/src/runtime/steps/execution-agent/state-context.js +5 -51
  197. package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
  198. package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
  199. package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
  200. package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
  201. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +2 -0
  202. package/dist/src/runtime/steps/planner-decision/prompt.js +26 -49
  203. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +1 -0
  204. package/dist/src/runtime/steps/supervisor-decision/input.js +5 -0
  205. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +1 -0
  206. package/dist/src/runtime/steps/supervisor-decision/prompt.js +6 -2
  207. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +1 -0
  208. package/dist/src/runtime/steps/supervisor-decision/run.js +4 -0
  209. package/dist/src/runtime/steps/supervisor-response/run.d.ts +2 -0
  210. package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
  211. package/dist/src/sessions/durable-session-commit.js +3 -3
  212. package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
  213. package/dist/src/sessions/prepared-session-replacement.js +46 -0
  214. package/dist/src/sessions/session-store.js +3 -3
  215. package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
  216. package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
  217. package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
  218. package/dist/src/shared/windows-file-io/authority-script.js +94 -0
  219. package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
  220. package/dist/src/shared/windows-file-io/native-script.js +120 -0
  221. package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
  222. package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
  223. package/dist/src/shared/windows-job-object.d.ts +2 -0
  224. package/dist/src/shared/windows-job-object.js +66 -0
  225. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  226. package/dist/src/web-ui/app/app-bootstrap.js +14 -1
  227. package/dist/src/web-ui/app/app-state.js +0 -7
  228. package/dist/src/web-ui/app/app.js +54 -156
  229. package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
  230. package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
  231. package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
  232. package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
  233. package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
  234. package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
  235. package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
  236. package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
  237. package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
  238. package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
  239. package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
  240. package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
  241. package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
  242. package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
  243. package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
  244. package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
  245. package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
  246. package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
  247. package/dist/src/web-ui/app/components/operations-summary.js +2 -1
  248. package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
  249. package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
  250. package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
  251. package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
  252. package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
  253. package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
  254. package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
  255. package/dist/src/web-ui/app/components/passive-learning/home.js +11 -3
  256. package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
  257. package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
  258. package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
  259. package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
  260. package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
  261. package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
  262. package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
  263. package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
  264. package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
  265. package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
  266. package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
  267. package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
  268. package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
  269. package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
  270. package/dist/src/web-ui/app/components/schedules/details.js +3 -2
  271. package/dist/src/web-ui/app/components/schedules/form.js +10 -8
  272. package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
  273. package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
  274. package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
  275. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
  276. package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
  277. package/dist/src/web-ui/app/components/spark-chat/settings.js +8 -4
  278. package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
  279. package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
  280. package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
  281. package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
  282. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
  283. package/dist/src/web-ui/app/components/system-host/rendering.js +6 -3
  284. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
  285. package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
  286. package/dist/src/web-ui/app/computer-access-feature.js +13 -1
  287. package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
  288. package/dist/src/web-ui/app/configuration-feature.js +11 -1
  289. package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
  290. package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
  291. package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
  292. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
  293. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
  294. package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
  295. package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
  296. package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
  297. package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
  298. package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
  299. package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
  300. package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
  301. package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
  302. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
  303. package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
  304. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
  305. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
  306. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
  307. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
  308. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
  309. package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
  310. package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
  311. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
  312. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
  313. package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
  314. package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
  315. package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
  316. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
  317. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
  318. package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
  319. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
  320. package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
  321. package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
  322. package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
  323. package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
  324. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
  325. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
  326. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
  327. package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
  328. package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
  329. package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
  330. package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
  331. package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
  332. package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
  333. package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
  334. package/dist/src/web-ui/app/dashboard-feature.js +12 -2
  335. package/dist/src/web-ui/app/lib/reasoning-controls.js +40 -0
  336. package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
  337. package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
  338. package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
  339. package/dist/src/web-ui/app/passive-learning-feature.js +18 -5
  340. package/dist/src/web-ui/app/schedules-feature.js +5 -3
  341. package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
  342. package/dist/src/web-ui/app/services/client-preferences.js +25 -16
  343. package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
  344. package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
  345. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  346. package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
  347. package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
  348. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
  349. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  350. package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
  351. package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
  352. package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
  353. package/dist/src/web-ui/app/services/workspace-state.js +27 -0
  354. package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
  355. package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
  356. package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
  357. package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
  358. package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
  359. package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
  360. package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
  361. package/dist/src/web-ui/app/styles/95-home-widgets.css +109 -0
  362. package/dist/src/web-ui/app/styles.css +3 -0
  363. package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
  364. package/dist/src/web-ui/client-state/contracts.js +13 -0
  365. package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
  366. package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
  367. package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
  368. package/dist/src/web-ui/client-state/preferences.js +84 -0
  369. package/dist/src/web-ui/client-state/queue.d.ts +3 -0
  370. package/dist/src/web-ui/client-state/queue.js +43 -0
  371. package/dist/src/web-ui/client-state/routes.d.ts +7 -0
  372. package/dist/src/web-ui/client-state/routes.js +58 -0
  373. package/dist/src/web-ui/client-state/store.d.ts +14 -0
  374. package/dist/src/web-ui/client-state/store.js +88 -0
  375. package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
  376. package/dist/src/web-ui/local-runtime/http.js +11 -2
  377. package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
  378. package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
  379. package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
  380. package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
  381. package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
  382. package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
  383. package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
  384. package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
  385. package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
  386. package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
  387. package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
  388. package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
  389. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
  390. package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
  391. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
  392. package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
  393. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
  394. package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
  395. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
  396. package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
  397. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
  398. package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
  399. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
  400. package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
  401. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
  402. package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
  403. package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
  404. package/dist/src/web-ui/local-runtime-backend.js +14 -0
  405. package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
  406. package/dist/src/web-ui/plugin-management-catalog.js +3 -1
  407. package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
  408. package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
  409. package/dist/src/web-ui/server-readiness.d.ts +3 -0
  410. package/dist/src/web-ui/server-readiness.js +36 -0
  411. package/dist/src/web-ui/server.d.ts +2 -0
  412. package/dist/src/web-ui/server.js +23 -1
  413. package/dist/src/web-ui/system-host-service.js +13 -2
  414. package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
  415. package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
  416. package/docs/installation.md +44 -5
  417. package/docs/plugins.md +174 -28
  418. package/docs/tool-execution-result-evidence-contract.md +57 -0
  419. package/docs/windows-companion-store.md +5 -0
  420. package/package.json +4 -2
  421. package/plugins/capability-brief/plugin.json +5 -1
  422. package/plugins/code-outline/README.md +20 -0
  423. package/plugins/code-outline/plugin.json +2 -1
  424. package/plugins/code-outline/source/index.ts +16 -20
  425. package/plugins/code-outline/source/read-failure.ts +40 -0
  426. package/plugins/code-outline/src/index.cjs +614 -29
  427. package/plugins/document-reader/README.md +33 -0
  428. package/plugins/document-reader/plugin.json +2 -1
  429. package/plugins/document-reader/source/pdf-contract.ts +57 -0
  430. package/plugins/document-reader/source/pdf-parser.ts +139 -0
  431. package/plugins/document-reader/source/pdf-process-main.ts +56 -0
  432. package/plugins/document-reader/source/pdf-process.ts +207 -0
  433. package/plugins/document-reader/source/pdf-result.ts +79 -0
  434. package/plugins/document-reader/source/pdf-worker.ts +39 -303
  435. package/plugins/document-reader/source/pdf.ts +4 -1
  436. package/plugins/document-reader/source/read-failure.ts +37 -0
  437. package/plugins/document-reader/source/reader.ts +3 -19
  438. package/plugins/document-reader/src/index.cjs +995 -211
  439. package/plugins/exec/README.md +19 -0
  440. package/plugins/exec/plugin.json +4 -3
  441. package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
  442. package/plugins/exec/source/filesystem-file-observer.ts +98 -0
  443. package/plugins/exec/source/filesystem-observer.ts +8 -79
  444. package/plugins/exec/source/output-files.ts +12 -6
  445. package/plugins/exec/source/paths.ts +3 -1
  446. package/plugins/exec/source/process-manager.ts +8 -24
  447. package/plugins/exec/source/shell-platform.ts +19 -3
  448. package/plugins/exec/source/shell-process.ts +55 -0
  449. package/plugins/exec/source/windows-job-source.ts +1 -0
  450. package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
  451. package/plugins/exec/src/index.cjs +252 -96
  452. package/plugins/filesystem/README.md +65 -0
  453. package/plugins/filesystem/plugin.json +7 -3
  454. package/plugins/filesystem/source/atomic-write.ts +2 -0
  455. package/plugins/filesystem/source/bounded-io.ts +80 -306
  456. package/plugins/filesystem/source/directory-sample.ts +2 -0
  457. package/plugins/filesystem/source/errors.ts +14 -0
  458. package/plugins/filesystem/source/file-observation.ts +151 -0
  459. package/plugins/filesystem/source/file-version.ts +41 -0
  460. package/plugins/filesystem/source/index.ts +6 -0
  461. package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
  462. package/plugins/filesystem/source/windows/authority-script.ts +1 -0
  463. package/plugins/filesystem/source/windows/native-script.ts +1 -0
  464. package/plugins/filesystem/source/windows/operations.ts +197 -0
  465. package/plugins/filesystem/source/windows/process.ts +214 -0
  466. package/plugins/filesystem/source/windows/publication-script.ts +29 -0
  467. package/plugins/filesystem/source/windows/read-script.ts +63 -0
  468. package/plugins/filesystem/source/windows/request-availability.ts +67 -0
  469. package/plugins/filesystem/source/windows/source.ts +42 -0
  470. package/plugins/filesystem/source/windows/storage-script.ts +11 -0
  471. package/plugins/filesystem/source/windows/streams-script.ts +24 -0
  472. package/plugins/filesystem/source/windows/write-script.ts +86 -0
  473. package/plugins/filesystem/src/index.cjs +1208 -322
  474. package/plugins/json-inspector/README.md +18 -0
  475. package/plugins/json-inspector/plugin.json +2 -1
  476. package/plugins/json-inspector/source/index.ts +16 -19
  477. package/plugins/json-inspector/source/read-failure.ts +42 -0
  478. package/plugins/json-inspector/src/index.cjs +612 -27
  479. package/plugins/local-search/README.md +29 -0
  480. package/plugins/local-search/plugin.json +2 -1
  481. package/plugins/local-search/source/errors.ts +2 -0
  482. package/plugins/local-search/source/paths.ts +3 -0
  483. package/plugins/local-search/source/ripgrep-process.ts +31 -5
  484. package/plugins/local-search/source/ripgrep.ts +3 -3
  485. package/plugins/local-search/source/windows-authority.ts +99 -0
  486. package/plugins/local-search/source/windows-search-lease.ts +49 -0
  487. package/plugins/local-search/source/windows-search-process.ts +91 -0
  488. package/plugins/local-search/source/windows-search-script.ts +52 -0
  489. package/plugins/local-search/src/index.cjs +595 -26
  490. package/plugins/memory/plugin.json +5 -1
  491. package/plugins/memory/source/lock-directory-claim.ts +56 -0
  492. package/plugins/memory/source/lock-owner-file.ts +71 -0
  493. package/plugins/memory/source/lock-path-observation.ts +26 -0
  494. package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
  495. package/plugins/memory/source/store-lock.ts +12 -7
  496. package/plugins/memory/source/store.ts +3 -2
  497. package/plugins/memory/src/index.cjs +174 -25
  498. package/plugins/project-orientation/README.md +23 -0
  499. package/plugins/project-orientation/plugin.json +2 -1
  500. package/plugins/project-orientation/source/index.ts +12 -9
  501. package/plugins/project-orientation/source/inspection-failure.ts +70 -0
  502. package/plugins/project-orientation/source/manifest-summary.ts +9 -2
  503. package/plugins/project-orientation/source/tree.ts +6 -0
  504. package/plugins/project-orientation/src/index.cjs +647 -31
  505. package/plugins/system/README.md +51 -15
  506. package/plugins/system/plugin.json +6 -2
  507. package/plugins/system/skills/system_actions/SKILL.md +1 -1
  508. package/plugins/system/source/command-working-directory.ts +47 -0
  509. package/plugins/system/source/computer/handlers.ts +13 -9
  510. package/plugins/system/source/computer/observation-result.ts +10 -5
  511. package/plugins/system/source/computer/request-computers.ts +10 -3
  512. package/plugins/system/source/computer/request-modules.ts +3 -6
  513. package/plugins/system/source/computer/runtime-platform.ts +18 -0
  514. package/plugins/system/source/host-dispatch.ts +18 -2
  515. package/plugins/system/source/index.ts +5 -3
  516. package/plugins/system/source/local-command-output-retention.ts +16 -0
  517. package/plugins/system/source/local-command-output.ts +16 -8
  518. package/plugins/system/source/request-system-modules.ts +12 -2
  519. package/plugins/system/source/request-target-snapshot.ts +2 -1
  520. package/plugins/system/source/security/desktop-result.ts +177 -0
  521. package/plugins/system/source/security/observed-error.ts +10 -0
  522. package/plugins/system/source/security/secret-text.ts +118 -0
  523. package/plugins/system/source/security/system-results.ts +62 -0
  524. package/plugins/system/source/security/windows-output-directory.ts +82 -0
  525. package/plugins/system/src/index.cjs +837 -151
  526. package/plugins/system-probe/plugin.json +9 -3
  527. package/plugins/system-probe/source/disk-path.ts +8 -0
  528. package/plugins/system-probe/source/index.ts +10 -5
  529. package/plugins/system-probe/source/machine-load.ts +33 -0
  530. package/plugins/system-probe/source/metrics.ts +6 -8
  531. package/plugins/system-probe/src/index.cjs +49 -16
  532. package/plugins/web/plugin.json +5 -1
@@ -0,0 +1,39 @@
1
+ import { ABOT_PLUGIN_COMPATIBILITY_EXTENSION, ABOT_PLUGIN_COMPATIBILITY_VERSION, PLUGIN_RUNTIME_PLATFORMS, } from "../../plugin-contract/platform-compatibility.js";
2
+ import { isRecord } from "../config/utils.js";
3
+ function hasUnknownCompatibilityField(value) {
4
+ return Object.keys(value).some((key) => key !== "version" && key !== "runtimePlatforms");
5
+ }
6
+ function isRuntimePlatformList(value) {
7
+ if (!Array.isArray(value))
8
+ return false;
9
+ if (value.length === 0)
10
+ return false;
11
+ return value.length <= PLUGIN_RUNTIME_PLATFORMS.length;
12
+ }
13
+ function isPluginRuntimePlatform(value) {
14
+ return PLUGIN_RUNTIME_PLATFORMS.some((platform) => platform === value);
15
+ }
16
+ function hasRepeatedRuntimePlatform(platforms) {
17
+ return new Set(platforms).size !== platforms.length;
18
+ }
19
+ export function parsePluginPlatformDeclaration(value) {
20
+ if (value === undefined)
21
+ return undefined;
22
+ const path = `extensions.${ABOT_PLUGIN_COMPATIBILITY_EXTENSION}`;
23
+ if (!isRecord(value))
24
+ throw new Error(`${path} must be an object`);
25
+ if (hasUnknownCompatibilityField(value))
26
+ throw new Error(`${path} contains an unknown field`);
27
+ if (value.version !== ABOT_PLUGIN_COMPATIBILITY_VERSION)
28
+ throw new Error(`${path}.version must be ${ABOT_PLUGIN_COMPATIBILITY_VERSION}`);
29
+ if (!isRuntimePlatformList(value.runtimePlatforms))
30
+ throw new Error(`${path}.runtimePlatforms must contain one to three platforms`);
31
+ if (!value.runtimePlatforms.every(isPluginRuntimePlatform))
32
+ throw new Error(`${path}.runtimePlatforms must use linux, darwin, or win32`);
33
+ if (hasRepeatedRuntimePlatform(value.runtimePlatforms))
34
+ throw new Error(`${path}.runtimePlatforms must not contain duplicates`);
35
+ return Object.freeze({
36
+ version: ABOT_PLUGIN_COMPATIBILITY_VERSION,
37
+ runtimePlatforms: Object.freeze([...value.runtimePlatforms]),
38
+ });
39
+ }
@@ -41,6 +41,9 @@ export function projectManifestRuntimeContract(discovered, selectedCapabilityIds
41
41
  definition: {
42
42
  name: capabilityId,
43
43
  pluginName: manifest.name,
44
+ ...(manifest.description !== undefined
45
+ ? { pluginDescription: manifest.description }
46
+ : {}),
44
47
  ...(capability.requiredPermissionMode
45
48
  ? { requiredPermissionMode: capability.requiredPermissionMode }
46
49
  : {}),
@@ -1,5 +1,7 @@
1
1
  import { parseOptionalToolOutputChannels } from "../../capabilities/normal-invocation/output-channels.js";
2
2
  import { parseRequiredToolPermissionMode } from "../../capabilities/tool-permission-mode.js";
3
+ import { ABOT_PLUGIN_COMPATIBILITY_EXTENSION } from "../../plugin-contract/platform-compatibility.js";
4
+ import { parsePluginPlatformDeclaration } from "./manifest-platform-compatibility.js";
3
5
  import { isToolCatalogGroupId } from "../../capabilities/tool-types.js";
4
6
  import { parseEventResultMetadata } from "../../capabilities/tool-definition-validator/event-result-metadata.js";
5
7
  import { parseEventInputTextOptions } from "../../capabilities/tool-definition-validator/event-input-text-options.js";
@@ -321,7 +323,9 @@ function parseOperation(value, path) {
321
323
  ? { payload: payload }
322
324
  : {}),
323
325
  ...(attachmentInput
324
- ? { attachmentInput: attachmentInput }
326
+ ? {
327
+ attachmentInput: attachmentInput,
328
+ }
325
329
  : {}),
326
330
  },
327
331
  ...(legacySkills ? { legacySkills } : {}),
@@ -481,6 +485,7 @@ export function parseAgentPluginManifest(raw, folderName) {
481
485
  }
482
486
  const extensions = expectRecord(manifest.extensions, "plugin.json.extensions");
483
487
  const runtimeExtension = parseRuntimeExtension(extensions[ABOT_RUNTIME_EXTENSION]);
488
+ const compatibility = parsePluginPlatformDeclaration(extensions[ABOT_PLUGIN_COMPATIBILITY_EXTENSION]);
484
489
  return {
485
490
  $schema: AGENT_PLUGIN_MANIFEST_SCHEMA,
486
491
  name: manifest.name,
@@ -493,6 +498,9 @@ export function parseAgentPluginManifest(raw, folderName) {
493
498
  extensions: {
494
499
  ...extensions,
495
500
  [ABOT_RUNTIME_EXTENSION]: runtimeExtension,
501
+ ...(compatibility
502
+ ? { [ABOT_PLUGIN_COMPATIBILITY_EXTENSION]: compatibility }
503
+ : {}),
496
504
  },
497
505
  };
498
506
  }
@@ -0,0 +1,4 @@
1
+ import type { AgentPluginManifest } from "../../plugin-contract/manifest.js";
2
+ import { type PluginPlatformCompatibility } from "../../plugin-contract/platform-compatibility.js";
3
+ /** Compatibility affects loading, never the user's saved plugin selection. */
4
+ export declare function resolvePluginPlatformCompatibility(manifest: AgentPluginManifest, runtimePlatform?: NodeJS.Platform): PluginPlatformCompatibility;
@@ -0,0 +1,44 @@
1
+ import { ABOT_PLUGIN_COMPATIBILITY_EXTENSION, } from "../../plugin-contract/platform-compatibility.js";
2
+ function runtimePlatformName(platform) {
3
+ if (platform === "win32")
4
+ return "Windows";
5
+ if (platform === "darwin")
6
+ return "macOS";
7
+ if (platform === "linux")
8
+ return "Linux";
9
+ return platform;
10
+ }
11
+ function supportsDeclaredRuntimePlatform(declaration, runtimePlatform) {
12
+ return declaration.runtimePlatforms.some((platform) => platform === runtimePlatform);
13
+ }
14
+ function undeclaredPlatformCompatibility(runtimePlatform) {
15
+ if (runtimePlatform === "win32")
16
+ return {
17
+ supported: false,
18
+ status: "undeclared",
19
+ runtimePlatform,
20
+ reason: "This plugin does not declare support for Windows Runtime.",
21
+ };
22
+ return { supported: true, status: "legacy", runtimePlatform };
23
+ }
24
+ /** Compatibility affects loading, never the user's saved plugin selection. */
25
+ export function resolvePluginPlatformCompatibility(manifest, runtimePlatform = process.platform) {
26
+ const declaration = manifest.extensions[ABOT_PLUGIN_COMPATIBILITY_EXTENSION];
27
+ if (!declaration)
28
+ return undeclaredPlatformCompatibility(runtimePlatform);
29
+ const runtimePlatforms = declaration.runtimePlatforms;
30
+ if (supportsDeclaredRuntimePlatform(declaration, runtimePlatform))
31
+ return {
32
+ supported: true,
33
+ status: "declared",
34
+ runtimePlatform,
35
+ runtimePlatforms,
36
+ };
37
+ return {
38
+ supported: false,
39
+ status: "unsupported",
40
+ runtimePlatform,
41
+ runtimePlatforms,
42
+ reason: `This plugin supports Runtime on ${runtimePlatforms.map(runtimePlatformName).join(", ")}; this Runtime is running on ${runtimePlatformName(runtimePlatform)}.`,
43
+ };
44
+ }
@@ -45,13 +45,22 @@ export class RequestActivationEvents {
45
45
  }
46
46
  async commit(operation) {
47
47
  await this.events.drain();
48
- const result = await operation(this.expectation());
49
- if (!result.accepted)
50
- throw new Error(`request_lifecycle_rejected:${result.reason}`);
51
- this.current = result.current;
52
- this.sealed = result.current.status !== "streaming";
53
- this.publishCommitted(result.events);
54
- return result;
48
+ // Draining is an observation, not a queue reservation: steering can emit
49
+ // another event before this continuation runs. Claim this same queue before
50
+ // reading the revision so no event can race the lifecycle commit.
51
+ const committed = this.tail.then(async () => {
52
+ if (this.persistenceError)
53
+ throw this.persistenceError;
54
+ const result = await operation(this.expectation());
55
+ if (!result.accepted)
56
+ throw new Error(`request_lifecycle_rejected:${result.reason}`);
57
+ this.current = result.current;
58
+ this.sealed = result.current.status !== "streaming";
59
+ this.publishCommitted(result.events);
60
+ return result;
61
+ });
62
+ this.tail = committed.then(() => undefined, () => undefined);
63
+ return committed;
55
64
  }
56
65
  /** A failed event write cannot turn a committed wait into an execution failure. */
57
66
  async finalizeFailure(input) {
@@ -115,6 +124,9 @@ export class RequestActivationEvents {
115
124
  return;
116
125
  this.tail = this.tail
117
126
  .then(async () => {
127
+ const hasStreamingActivation = this.current.status === "streaming";
128
+ if (!hasStreamingActivation)
129
+ return;
118
130
  if (this.persistenceError)
119
131
  return;
120
132
  const result = await this.store.appendActivationEvent(this.current.sessionId, {
@@ -0,0 +1,20 @@
1
+ import type { RequestContextCompactionSnapshot } from "../../context/semantic-compaction/snapshot.js";
2
+ import type { SemanticCompactionSource } from "../../context/semantic-compaction/contracts.js";
3
+ import type { RoleCallLedgerCheckpoint } from "../../orchestration/role-calls/checkpoint.js";
4
+ import type { CompiledRequestExecutionPolicy } from "../execution-scope.js";
5
+ /** Invalidate only proven legacy EA projections; the ledger retains the original evidence. */
6
+ export declare function restoreExecutionApprovalCompaction(params: {
7
+ snapshot: RequestContextCompactionSnapshot;
8
+ ledgerCheckpoint: RoleCallLedgerCheckpoint;
9
+ requestId: string;
10
+ executionPolicy: CompiledRequestExecutionPolicy;
11
+ }): Readonly<{
12
+ snapshot?(): RequestContextCompactionSnapshot;
13
+ get(scopeId: string): import("../../context/semantic-compaction/contracts.js").SemanticCompactionCheckpoint | undefined;
14
+ findByCallIds(callIds: readonly string[]): readonly import("../../context/semantic-compaction/contracts.js").SemanticCompactionCheckpoint[];
15
+ registerSources(sources: readonly SemanticCompactionSource[]): void;
16
+ registerSourcesAtomically?(sources: readonly SemanticCompactionSource[]): void;
17
+ quarantineScope?(record: import("../../context/semantic-compaction/scope-quarantine.js").InvalidatedCompactionScope): void;
18
+ materializeSource(sourceRef: string, sourceFingerprint: string): SemanticCompactionSource | undefined;
19
+ commit(checkpoint: import("../../context/semantic-compaction/contracts.js").SemanticCompactionCheckpoint): void;
20
+ }>;
@@ -0,0 +1,118 @@
1
+ import { restoreRequestContextCompaction } from "../../context/semantic-compaction/snapshot.js";
2
+ import { createRoleCallLedger, } from "../../orchestration/role-calls/index.js";
3
+ import { traceDebug } from "../../observability/debug-logger.js";
4
+ import { createRequestRoleCallPolicy } from "../role-call-policy.js";
5
+ import { buildExecutionCapabilityResultMessage, EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND, EXECUTION_CAPABILITY_TOOL_NAME, } from "../../steps/execution-agent/capability-result-context.js";
6
+ /** Invalidate only proven legacy EA projections; the ledger retains the original evidence. */
7
+ export function restoreExecutionApprovalCompaction(params) {
8
+ // Validate original hashes and complete checkpoint coverage before filtering anything.
9
+ const restored = restoreRequestContextCompaction(params.snapshot);
10
+ if (!usesExecutionAgentNativeResults(params.executionPolicy))
11
+ return restored;
12
+ if (!params.snapshot.sources.some(isNativeResultCompatibilityCandidate))
13
+ return restored;
14
+ const ledger = createRoleCallLedger({
15
+ requestId: params.requestId,
16
+ policy: createRequestRoleCallPolicy(params.executionPolicy),
17
+ checkpoint: params.ledgerCheckpoint,
18
+ });
19
+ const head = ledger.current();
20
+ const executions = new Map(head.state.capabilityExecutions
21
+ .filter((execution) => execution.callId === head.state.rootCallId)
22
+ .map((execution) => [`tool-result:${execution.executionId}`, execution]));
23
+ const legacySourceRefs = new Set();
24
+ for (const source of params.snapshot.sources) {
25
+ const execution = executions.get(source.sourceRef);
26
+ if (!isExecutionResultSource(source, execution))
27
+ continue;
28
+ if (!isSettledRootExecution(execution, head.state.rootCallId))
29
+ throw new Error("context_compaction_snapshot_source_incompatible");
30
+ const current = buildExecutionCapabilityResultMessage(head, execution);
31
+ const matchesCurrentProjection = source.content === JSON.stringify(current);
32
+ if (matchesCurrentProjection)
33
+ continue;
34
+ const matchesLegacyProjection = source.content === serializeLegacyExecutionResult(execution);
35
+ if (!matchesLegacyProjection)
36
+ throw new Error("context_compaction_snapshot_source_incompatible");
37
+ legacySourceRefs.add(source.sourceRef);
38
+ }
39
+ if (legacySourceRefs.size === 0)
40
+ return restored;
41
+ const invalidatedCheckpoints = params.snapshot.checkpoints.filter((checkpoint) => checkpoint.sourceDigests.some((source) => legacySourceRefs.has(source.sourceRef)));
42
+ const ownsInvalidatedCheckpoints = invalidatedCheckpoints.every((checkpoint) => checkpoint.requestId === params.requestId);
43
+ if (!ownsInvalidatedCheckpoints)
44
+ throw new Error("context_compaction_snapshot_source_incompatible");
45
+ const compatible = {
46
+ ...params.snapshot,
47
+ sources: params.snapshot.sources.filter((source) => !legacySourceRefs.has(source.sourceRef)),
48
+ checkpoints: params.snapshot.checkpoints.filter((checkpoint) => !invalidatedCheckpoints.includes(checkpoint)),
49
+ };
50
+ const store = restoreRequestContextCompaction(compatible);
51
+ traceDebug("runtime.approvals", "compaction.legacy_execution_sources_invalidated", {
52
+ requestId: params.requestId,
53
+ sourceCount: legacySourceRefs.size,
54
+ checkpointCount: invalidatedCheckpoints.length,
55
+ scopeIds: invalidatedCheckpoints
56
+ .slice(0, 8)
57
+ .map(({ scopeId }) => scopeId),
58
+ omittedScopeCount: Math.max(0, invalidatedCheckpoints.length - 8),
59
+ });
60
+ return store;
61
+ }
62
+ function usesExecutionAgentNativeResults(policy) {
63
+ if (policy.authority.id !== "execution-agent-v1")
64
+ return false;
65
+ return policy.authority.rootContractId === "execution_agent";
66
+ }
67
+ function isSettledRootExecution(execution, rootCallId) {
68
+ if (!execution)
69
+ return false;
70
+ if (execution.callId !== rootCallId)
71
+ return false;
72
+ return execution.status === "settled";
73
+ }
74
+ function isNativeResultCompatibilityCandidate(source) {
75
+ if (source.sourceRef.startsWith("tool-result:"))
76
+ return true;
77
+ return hasExecutionResultEnvelope(source);
78
+ }
79
+ function isExecutionResultSource(source, execution) {
80
+ if (execution)
81
+ return true;
82
+ return hasExecutionResultEnvelope(source);
83
+ }
84
+ function hasExecutionResultEnvelope(source) {
85
+ try {
86
+ const message = JSON.parse(source.content);
87
+ if (message?.role !== "tool")
88
+ return false;
89
+ if (message.toolName !== EXECUTION_CAPABILITY_TOOL_NAME)
90
+ return false;
91
+ if (typeof message.content !== "string")
92
+ return false;
93
+ const envelope = JSON.parse(message.content);
94
+ return envelope?.kind === EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /** Exact pre-canonical-outcome wire bytes, recognized only against the same ledger execution. */
101
+ function serializeLegacyExecutionResult(execution) {
102
+ return JSON.stringify({
103
+ role: "tool",
104
+ content: JSON.stringify({
105
+ kind: EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND,
106
+ authority: "capability_adapter_result",
107
+ presenceEffect: "runtime_result_only_not_user_intent",
108
+ invocationAttempt: execution.invocationAttempt,
109
+ result: {
110
+ executionId: execution.executionId,
111
+ capabilityId: execution.capabilityId,
112
+ adapterResult: execution.exactResult,
113
+ },
114
+ }),
115
+ toolCallId: execution.executionId,
116
+ toolName: EXECUTION_CAPABILITY_TOOL_NAME,
117
+ });
118
+ }
@@ -1,3 +1,4 @@
1
+ import { restoreExecutionApprovalCompaction } from "./execution-compaction-restore.js";
1
2
  import { createRoleCallLedger } from "../../orchestration/role-calls/index.js";
2
3
  import { hasSuperContextContract } from "../../context/super-context-policy.js";
3
4
  import { createOwnedSuperContextFailure } from "../../context/super-context-failure.js";
@@ -8,7 +9,7 @@ import { createRequestRoleCallPolicy } from "../role-call-policy.js";
8
9
  export function restoreApprovalCompaction(params) {
9
10
  const { snapshot, executionPolicy } = params;
10
11
  if (!hasSuperContextContract(executionPolicy.authority, "supervisor"))
11
- return restoreRequestContextCompaction(snapshot);
12
+ return restoreExecutionApprovalCompaction(params);
12
13
  const ledger = createRoleCallLedger({
13
14
  requestId: params.requestId,
14
15
  policy: createRequestRoleCallPolicy(executionPolicy),
@@ -22,7 +22,12 @@ export function restoreApprovalExecutionFreshness(token, requestSteering) {
22
22
  });
23
23
  if (!isDeepStrictEqual(current.token, token))
24
24
  throw new Error("request_approval_steering_mismatch");
25
- if (!current.isCurrent())
25
+ // A newer accepted prefix invalidates execution, not the saved approval.
26
+ // A closed inbox has no current version and must remain terminal.
27
+ if (!hasLiveSteeringInbox(inbox))
26
28
  throw new Error("request_approval_steering_superseded");
27
29
  return Object.freeze({ token, isCurrent: current.isCurrent });
28
30
  }
31
+ function hasLiveSteeringInbox(inbox) {
32
+ return inbox.isCurrent(inbox.snapshot().version);
33
+ }
@@ -37,6 +37,8 @@ export const EXECUTION_AGENT_ROOT_CONTRACT = Object.freeze({
37
37
  });
38
38
  },
39
39
  async authorResponse(request, options) {
40
+ if (options.directResponse !== undefined)
41
+ return options.directResponse;
40
42
  const requestSteering = resolveRequestSteeringInbox(request.requestSteering);
41
43
  return runExecutionAgentAuthoredResponse(request, {
42
44
  head: options.head,
@@ -115,7 +117,15 @@ function projectKernelDecision(decision, steeringVersion) {
115
117
  ...presentation,
116
118
  });
117
119
  case "respond":
118
- return Object.freeze({ action: "respond", ...presentation });
120
+ return Object.freeze({
121
+ action: "respond", ...presentation,
122
+ ...(decision.response !== undefined ? {
123
+ directResponse: Object.freeze({
124
+ finalResponse: decision.response,
125
+ memoryCandidates: decision.memoryCandidates ?? Object.freeze([]),
126
+ }),
127
+ } : {}),
128
+ });
119
129
  case "blocked":
120
130
  return Object.freeze({
121
131
  action: "blocked",
@@ -1,3 +1,5 @@
1
+ import { bindRequestWorkingDirectory } from "../capabilities/request-working-directory.js";
2
+ import { createRuntimeToolPathResolver } from "../capabilities/runtime-target-path.js";
1
3
  import { isSparkSession } from "../../sessions/spark-session.js";
2
4
  import { createSuperFailureFinalization, } from "./super-failure-explanation.js";
3
5
  import { resolveSessionWorkingDirectory } from "../projects/session-paths.js";
@@ -200,6 +202,7 @@ export async function prepareRequestExecution(params) {
200
202
  : preparedSeed;
201
203
  const toolRegistry = options.toolRegistry?.prepareRequest
202
204
  ? await options.toolRegistry.prepareRequest({
205
+ runtimePathResolver: createRuntimeToolPathResolver(bindRequestWorkingDirectory(options.toolRegistry.prepareSharedState?.() ?? {}, requestWorkingDirectory).runtimePaths),
203
206
  requestState: resources.state,
204
207
  onRequestDispose: resources.onRequestDispose,
205
208
  })
@@ -19,6 +19,7 @@ export type RootContractCallIdentity = Readonly<{
19
19
  type RootContractAction = MemoryRecallDecision | Readonly<{
20
20
  action: "respond";
21
21
  responseRecommendation?: string;
22
+ directResponse?: RootAuthoredResponse;
22
23
  acknowledgement?: string;
23
24
  title?: string;
24
25
  }> | Readonly<{
@@ -99,6 +100,7 @@ export type RootContractAdapter<TRequest> = Readonly<{
99
100
  callFrame: RoleCallFrame;
100
101
  steeringVersion: number;
101
102
  responseRecommendation?: string;
103
+ directResponse?: RootAuthoredResponse;
102
104
  call: RootContractCallIdentity;
103
105
  toolResults: RequestToolResultsView;
104
106
  resume?: RoleChildReturnContext;
@@ -492,6 +492,7 @@ class RootExecutionSession {
492
492
  ? createPlainRootAuthoredResponse(decision.response)
493
493
  : await this.policy.rootContract.authorResponse(this.request, {
494
494
  responseRecommendation: decision.responseRecommendation,
495
+ directResponse: decision.directResponse,
495
496
  memoryRecallMessage: projectRootMemoryRecallMessage({
496
497
  head: activation.head,
497
498
  callId: activation.call.callId,
@@ -1,8 +1,9 @@
1
+ import { prepareInitialMemory } from "../long-term-memory/initial-context.js";
1
2
  import { createRequestRoleCallPolicy } from "./role-call-policy.js";
2
3
  import { restoreApprovalExecutionFreshness } from "./capability-execution-freshness.js";
3
4
  import { captureRoleCallLedgerCheckpoint } from "../orchestration/role-calls/checkpoint.js";
4
5
  import { isRoleApprovalWait } from "../orchestration/role-executors/approval-continuation.js";
5
- import { resumeCapabilityApprovalGroup } from "../orchestration/worker-capabilities/execution/approval-group.js";
6
+ import { restoreCapabilityApprovalGroup } from "../orchestration/worker-capabilities/execution/approval-group.js";
6
7
  import { createRoleApprovalContinuation, validateRequestApprovalContinuation, } from "./approval-continuation.js";
7
8
  import { createRoleCallLedger, resolveRoleCallTransactions, } from "../orchestration/role-calls/index.js";
8
9
  import { traceDebug } from "../observability/debug-logger.js";
@@ -26,8 +27,10 @@ export async function runRequestRunner(request, options = {}) {
26
27
  }
27
28
  : {}),
28
29
  });
30
+ const initialMemory = await prepareInitialMemory(request, options.continuation?.ledger.state.initialMemory);
29
31
  const ledger = createRoleCallLedger({
30
32
  requestId: request.requestId,
33
+ ...(initialMemory !== undefined ? { initialMemory } : {}),
31
34
  ...(options.continuation
32
35
  ? { checkpoint: options.continuation.ledger }
33
36
  : {}),
@@ -42,15 +45,18 @@ export async function runRequestRunner(request, options = {}) {
42
45
  let continuation;
43
46
  if (options.continuation) {
44
47
  validateRequestApprovalContinuation(options.continuation, ledger, request.workerCapabilities.provider.getDescriptors());
48
+ request.abortSignal.throwIfAborted();
45
49
  const executionFreshness = restoreApprovalExecutionFreshness(options.continuation.preparedGroup.executionFreshnessToken, request.requestSteering);
46
- const settled = await resumeCapabilityApprovalGroup({
50
+ const prepared = await restoreCapabilityApprovalGroup({
47
51
  ...(executionFreshness ? { executionFreshness } : {}),
48
52
  ledger,
49
53
  context: request.workerCapabilities.executionContext,
50
54
  adapters: request.workerCapabilities.provider.getAdapters(),
51
55
  group: options.continuation.preparedGroup,
52
- decisions: options.decisions ?? [],
53
56
  });
57
+ request.abortSignal.throwIfAborted();
58
+ restoreApprovalExecutionFreshness(options.continuation.preparedGroup.executionFreshnessToken, request.requestSteering);
59
+ const settled = await prepared.execute(options.decisions ?? []);
54
60
  continuation = createRoleApprovalContinuation(options.continuation, settled.executionIds);
55
61
  }
56
62
  else {
@@ -17,6 +17,9 @@ export const SUPERVISOR_ROOT_CONTRACT = Object.freeze({
17
17
  includeTitle: options.includeTitle,
18
18
  allowedRoleIds: options.allowedRoleIds,
19
19
  availableWorkerCapabilityCatalog: options.availableWorkerCapabilityCatalog,
20
+ ...(options.head.state.initialMemory?.message
21
+ ? { initialMemoryMessage: options.head.state.initialMemory.message }
22
+ : {}),
20
23
  ...(options.memoryRecallMessage
21
24
  ? { memoryRecallMessage: options.memoryRecallMessage }
22
25
  : {}),
@@ -28,6 +31,9 @@ export const SUPERVISOR_ROOT_CONTRACT = Object.freeze({
28
31
  responseRecommendation: options.responseRecommendation,
29
32
  call: options.call,
30
33
  toolResults: options.toolResults,
34
+ ...(options.head.state.initialMemory?.message
35
+ ? { initialMemoryMessage: options.head.state.initialMemory.message }
36
+ : {}),
31
37
  ...(options.memoryRecallMessage
32
38
  ? { memoryRecallMessage: options.memoryRecallMessage }
33
39
  : {}),
@@ -0,0 +1,6 @@
1
+ import type { ChatMessage } from "../../../model-gateway/types.js";
2
+ import type { RoleCallLedgerHead, RoleCapabilityExecution } from "../../orchestration/role-calls/index.js";
3
+ export declare const EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND: "runtime_execution_capability_result_v1";
4
+ export declare const EXECUTION_CAPABILITY_TOOL_NAME: "runtime_capability";
5
+ /** One exact native result representation for active input and saved-source compatibility. */
6
+ export declare function buildExecutionCapabilityResultMessage(head: RoleCallLedgerHead, execution: RoleCapabilityExecution): ChatMessage;
@@ -0,0 +1,29 @@
1
+ import { projectCanonicalRequestToolResult } from "../../context/canonical-capability-result.js";
2
+ export const EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND = "runtime_execution_capability_result_v1";
3
+ export const EXECUTION_CAPABILITY_TOOL_NAME = "runtime_capability";
4
+ /** One exact native result representation for active input and saved-source compatibility. */
5
+ export function buildExecutionCapabilityResultMessage(head, execution) {
6
+ if (execution.status !== "settled" || execution.exactResult === undefined) {
7
+ throw new Error("execution_agent_continuation_result_invalid");
8
+ }
9
+ const canonical = projectCanonicalRequestToolResult(head, execution);
10
+ return Object.freeze({
11
+ role: "tool",
12
+ content: JSON.stringify({
13
+ kind: EXECUTION_CAPABILITY_RESULT_MESSAGE_KIND,
14
+ authority: "canonical_role_call_ledger",
15
+ presenceEffect: "runtime_result_only_not_user_intent",
16
+ invocationAttempt: execution.invocationAttempt,
17
+ result: {
18
+ executionId: execution.executionId,
19
+ capabilityId: execution.capabilityId,
20
+ outcome: canonical.outcome,
21
+ observedEffect: canonical.observedEffect,
22
+ summary: canonical.summary,
23
+ adapterResult: execution.exactResult,
24
+ },
25
+ }),
26
+ toolCallId: execution.executionId,
27
+ toolName: EXECUTION_CAPABILITY_TOOL_NAME,
28
+ });
29
+ }
@@ -1,4 +1,6 @@
1
1
  import type { MemoryRecallDecision } from "../memory-recall-decision.js";
2
+ import type { MemoryCandidate } from "../../long-term-memory/contracts.js";
3
+ import type { ConversationMemoryAuthoringContext } from "../../long-term-memory/conversation-authoring/context.js";
2
4
  import type { ExecutionWorkPlanOptions, ExecutionWorkPlanReport } from "./work-plan-contract.js";
3
5
  import type { RoleCapabilitySelectionProjection, RoleCapabilitySelectionReconsiderationCause } from "../../orchestration/role-calls/index.js";
4
6
  import { type CapabilityControls, type CapabilityDescriptor } from "../../orchestration/capability-adapters/index.js";
@@ -21,6 +23,10 @@ export type ExecutionAgentDecisionPresentation = Readonly<{
21
23
  }>;
22
24
  export type ExecutionAgentRespondDecision = Readonly<ExecutionAgentDecisionPresentation & {
23
25
  action: "respond";
26
+ /** Exact prevalidated short answer; absent keeps separate presentation. */
27
+ response?: string;
28
+ /** Assessed proposals bound to the same accepted direct response. */
29
+ memoryCandidates?: readonly MemoryCandidate[];
24
30
  }>;
25
31
  export type ExecutionAgentOpenCapabilityScopeDecision = Readonly<ExecutionAgentDecisionPresentation & {
26
32
  action: "open_capability_scope";
@@ -113,6 +119,10 @@ export type ExecutionAgentDecisionContractOptions = Readonly<{
113
119
  includeAcknowledgement?: boolean;
114
120
  includeTitle?: boolean;
115
121
  allowRespond?: boolean;
122
+ directResponseMaxLength?: number;
123
+ directResponseMemoryAuthoring?: Readonly<{
124
+ context?: ConversationMemoryAuthoringContext;
125
+ }>;
116
126
  allowMemoryRecall?: boolean;
117
127
  allowPlanner?: boolean;
118
128
  allowAuditor?: boolean;
@@ -1,3 +1,4 @@
1
+ import { parseDirectResponse, parseDirectResponseMemoryCandidates, } from "./direct-response-contract.js";
1
2
  import { readStructuredDecisionEnvelope } from "../../model/structured-decision-envelope.js";
2
3
  import { parseDecisionWithWorkPlan } from "./work-plan-decision-parsing.js";
3
4
  import { isMemoryRecallDecisionRecord, parseMemoryRecallDecision, } from "../memory-recall-decision.js";
@@ -62,12 +63,23 @@ function parseExecutionAgentActionOutput(text, options) {
62
63
  }
63
64
  }
64
65
  else if (selectedAction === "respond") {
65
- exactKeys(record, ["action", ...presentationKeys(contract)], issues, "decision");
66
+ const response = parseDirectResponse(record, options.directResponseMaxLength, issues);
67
+ const memoryCandidates = response !== undefined
68
+ ? parseDirectResponseMemoryCandidates(record, options.directResponseMemoryAuthoring)
69
+ : undefined;
70
+ exactKeys(record, [
71
+ "action",
72
+ ...(response !== undefined ? ["response"] : []),
73
+ ...(memoryCandidates !== undefined ? ["memoryCandidates"] : []),
74
+ ...presentationKeys(contract),
75
+ ], issues, "decision");
66
76
  if (!contract.allowRespond) {
67
77
  issues.push(issue("execution_agent_response_not_allowed", "decision.action", "respond is not available until the canonical completion gate is open."));
68
78
  }
69
79
  decision = {
70
80
  action: "respond",
81
+ ...(response !== undefined ? { response } : {}),
82
+ ...(memoryCandidates !== undefined ? { memoryCandidates } : {}),
71
83
  ...presentation,
72
84
  };
73
85
  }
@@ -0,0 +1,3 @@
1
+ import type { RequestExecutionScope } from "../../request/execution-scope.js";
2
+ /** Preserve a separately configured response model/calibration instead of silently bypassing it. */
3
+ export declare function hasCompatibleDirectResponseConfiguration(request: RequestExecutionScope): boolean;
@@ -0,0 +1,64 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ import { resolveModelInvocation } from "../../../model-gateway/invocation-policy.js";
3
+ import { resolveModelStepTimeout } from "../../model/model-step-timeout-policy.js";
4
+ import { EXECUTION_AGENT_DECISION_MODEL_STEP, EXECUTION_AGENT_RESPONSE_MODEL_STEP, } from "./contracts.js";
5
+ /** Preserve a separately configured response model/calibration instead of silently bypassing it. */
6
+ export function hasCompatibleDirectResponseConfiguration(request) {
7
+ try {
8
+ const decision = effectiveConfiguration(request, EXECUTION_AGENT_DECISION_MODEL_STEP);
9
+ const response = effectiveConfiguration(request, EXECUTION_AGENT_RESPONSE_MODEL_STEP);
10
+ if (!decision || !response)
11
+ return false;
12
+ return isDeepStrictEqual(decision, response);
13
+ }
14
+ catch {
15
+ // Resolution failures keep the existing deferred path and its diagnostics.
16
+ return false;
17
+ }
18
+ }
19
+ function effectiveConfiguration(request, modelStep) {
20
+ const step = request.runnerConfig.steps[modelStep];
21
+ if (!step)
22
+ return undefined;
23
+ const invocation = resolveModelInvocation({
24
+ modelStep,
25
+ agentMode: request.agentMode,
26
+ ...(request.modelPreference
27
+ ? { modelPreference: request.modelPreference }
28
+ : {}),
29
+ ...(request.modelPolicy ? { modelPolicy: request.modelPolicy } : {}),
30
+ });
31
+ if (hasSpecialResponseFormat(modelStep, invocation.format))
32
+ return undefined;
33
+ const { profile } = invocation;
34
+ return {
35
+ profileId: profile.id,
36
+ providerId: profile.providerId,
37
+ provider: profile.provider,
38
+ model: profile.model,
39
+ contextWindowTokens: profile.contextWindowTokens,
40
+ capabilities: profile.capabilities,
41
+ options: profile.options,
42
+ generation: profile.generation,
43
+ context: profile.context,
44
+ think: invocation.think,
45
+ instructions: invocation.instructions ?? [],
46
+ timeoutMs: resolveModelStepTimeout({
47
+ modelStep,
48
+ fallbackTimeoutMs: step.timeoutMs,
49
+ ...(request.modelPreference
50
+ ? { modelPreference: request.modelPreference }
51
+ : {}),
52
+ ...(request.modelPolicy ? { modelPolicy: request.modelPolicy } : {}),
53
+ }).timeoutMs,
54
+ };
55
+ }
56
+ function hasSpecialResponseFormat(modelStep, format) {
57
+ if (modelStep !== EXECUTION_AGENT_RESPONSE_MODEL_STEP)
58
+ return false;
59
+ if (format === undefined)
60
+ return false;
61
+ if (format && typeof format === "object" && "type" in format)
62
+ return format.type !== "text";
63
+ return true;
64
+ }