@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,57 @@
1
+ import { resolveRequestSteeringInbox } from "../request/request-steering.js";
2
+ import { retrieveResponseLongTermMemory } from "./response-context.js";
3
+ import { prepareConversationMemoryKnowledge, buildConversationMemoryAuthoringContext, canAuthorConversationMemory, projectConversationMemoryKnowledge, } from "./conversation-authoring/context.js";
4
+ /** Prepared once as part of the existing request ledger initialization. */
5
+ export async function prepareInitialMemory(request, restored) {
6
+ if (!usesInitialMemory(request))
7
+ return undefined;
8
+ if (restored !== undefined)
9
+ return restored;
10
+ request.abortSignal.throwIfAborted();
11
+ const steering = resolveRequestSteeringInbox(request.requestSteering).snapshot();
12
+ const message = await retrieveResponseLongTermMemory(request, steering);
13
+ request.abortSignal.throwIfAborted();
14
+ // EA prepares authoring targets at startup; Supervisor keeps its terminal step.
15
+ const knowledge = usesInitialExecutionMemory(request)
16
+ ? await prepareConversationMemoryKnowledge(request, steering)
17
+ : undefined;
18
+ request.abortSignal.throwIfAborted();
19
+ return Object.freeze({
20
+ ...(message ? { message: projectPersistentMemoryMessage(message) } : {}),
21
+ ...(knowledge ? { knowledge: projectConversationMemoryKnowledge(knowledge) } : {}),
22
+ });
23
+ }
24
+ function projectPersistentMemoryMessage(message) {
25
+ if (!message.attachments)
26
+ return message;
27
+ return { ...message, attachments: message.attachments.filter(isPersistentMemoryAttachment) };
28
+ }
29
+ function isPersistentMemoryAttachment(attachment) {
30
+ return attachment.toolEvidence === undefined;
31
+ }
32
+ function usesInitialMemory(request) {
33
+ if (!request.longTermMemory?.enabled)
34
+ return false;
35
+ if (request.executionPolicy.authority.id === "execution-agent-v1")
36
+ return true;
37
+ return request.executionPolicy.authority.id === "supervisor-worker-v1";
38
+ }
39
+ export function projectExecutionAgentMemory(request, initial, steering) {
40
+ if (!usesInitialExecutionMemory(request))
41
+ return { memoryMessage: undefined, authoringContext: undefined, authoringEnabled: false };
42
+ const authoringContext = initial?.knowledge
43
+ ? buildConversationMemoryAuthoringContext(request, steering, {
44
+ ...initial.knowledge, referenceTime: new Date().toISOString(),
45
+ })
46
+ : undefined;
47
+ return Object.freeze({
48
+ memoryMessage: initial?.message,
49
+ authoringContext,
50
+ authoringEnabled: canAuthorConversationMemory(request, authoringContext),
51
+ });
52
+ }
53
+ function usesInitialExecutionMemory(request) {
54
+ if (!request.longTermMemory?.enabled)
55
+ return false;
56
+ return request.executionPolicy.authority.id === "execution-agent-v1";
57
+ }
@@ -32,7 +32,7 @@ function serializeProjection(records) {
32
32
  return JSON.stringify({
33
33
  kind: LONG_TERM_MEMORY_MESSAGE_KIND,
34
34
  authority: "passive_reference",
35
- purpose: "support_personalized_terminal_response_authoring",
35
+ purpose: "support_root_decisions_and_response_authoring",
36
36
  memories: records.map((record) => ({
37
37
  content: record.content,
38
38
  tags: record.tags,
@@ -2,7 +2,7 @@ import { isRuntimeDelegateRoleId, RUNTIME_ROOT_ROLE_ID, RUNTIME_ROLE_IDS, } from
2
2
  import { createRoleCapabilitySelectionFingerprint, normalizeRoleCapabilitySelectionProjection, } from "./capability-selection-reconsideration.js";
3
3
  import { isRoleCapabilitySelectionSupervisionState, } from "./capability-selection-supervision.js";
4
4
  import { isValidRoleCapabilitySelectionSupervision } from "./capability-selection-supervision-validation.js";
5
- import { validateRoleMemoryRecalls } from "./memory-recall-state-validation.js";
5
+ import { hasInitialMemoryContext, validateRoleMemoryRecalls } from "./memory-recall-state-validation.js";
6
6
  import { isValidAdoptedModelWorkPlan } from "./work-plan-validation.js";
7
7
  import { isRoleOperationFingerprint, isRoleOperationOutcomeFingerprintForOutcome, isSameRoleOperationIdentity, replayRoleOperationSupervisionEvidence, } from "./operation-supervision.js";
8
8
  import { isIssuedRoleOperationSupervisionInterventionForRequest } from "./operation-supervision-issuance.js";
@@ -48,6 +48,7 @@ export function validateRoleCallState(state, policy) {
48
48
  !Array.isArray(state?.plans) ||
49
49
  !Array.isArray(state?.capabilityExecutions) ||
50
50
  !Array.isArray(state?.memoryRecalls) ||
51
+ !hasInitialMemoryContext(state?.initialMemory, policy.authority.id) ||
51
52
  !isRoleOperationSupervisionState(state?.operationSupervision) ||
52
53
  !isRoleCapabilitySelectionSupervisionState(state?.capabilitySelectionSupervision) ||
53
54
  !Number.isInteger(state?.callSequence) ||
@@ -1,4 +1,4 @@
1
1
  import type { RoleCallLedgerCheckpoint } from "./checkpoint-contract.js";
2
2
  import type { RoleCallPolicy, RoleCallState } from "./contracts.js";
3
3
  /** Hydrate only an admitted, parked capability; no model or reducer command replay. */
4
- export declare function restoreCheckpointState(checkpoint: RoleCallLedgerCheckpoint, requestId: string, policy: RoleCallPolicy): RoleCallState;
4
+ export declare function restoreCheckpointState(checkpoint: RoleCallLedgerCheckpoint, requestId: string, policy: RoleCallPolicy, initialMemory?: RoleCallState["initialMemory"]): RoleCallState;
@@ -4,14 +4,17 @@ import { validateRoleCallCandidate } from "./reducer.js";
4
4
  import { issueInitialRoleCapabilitySelectionSupervisionState } from "./capability-selection-supervision-issuance.js";
5
5
  import { restoreRoleOperationSupervisionIssuance } from "./operation-supervision-issuance.js";
6
6
  /** Hydrate only an admitted, parked capability; no model or reducer command replay. */
7
- export function restoreCheckpointState(checkpoint, requestId, policy) {
7
+ export function restoreCheckpointState(checkpoint, requestId, policy, initialMemory) {
8
8
  if (!isCheckpointEnvelope(checkpoint))
9
9
  throw new Error("role_call_checkpoint_invalid");
10
10
  if (!hasCheckpointRequestIdentity(checkpoint, requestId))
11
11
  throw new Error("role_call_checkpoint_request_mismatch");
12
12
  if (!hasCheckpointPolicy(checkpoint, policy))
13
13
  throw new Error("role_call_checkpoint_policy_mismatch");
14
- const state = seal(structuredClone(checkpoint.state));
14
+ const state = seal(structuredClone({ ...checkpoint.state,
15
+ ...(checkpoint.state.initialMemory === undefined && initialMemory !== undefined
16
+ ? { initialMemory } : {}),
17
+ }));
15
18
  if (!isParkedCapabilityState(state))
16
19
  throw new Error("role_call_checkpoint_not_parked");
17
20
  if (!issueInitialRoleCapabilitySelectionSupervisionState(state))
@@ -5,7 +5,7 @@ import type { RoleOperationFingerprint, RoleOperationOutcomeFingerprint, RoleOpe
5
5
  import type { RoleCapabilitySelectionSupervisionStage, RoleCapabilitySelectionSupervisionState, RoleCapabilitySelectionSupervisionTrigger } from "./capability-selection-supervision.js";
6
6
  import type { RoleCapabilitySelectionReconsiderationCause } from "./reconsideration-cause.js";
7
7
  import type { RoleCallResultReceipt } from "./result-receipt.js";
8
- import type { RoleMemoryRecall, RoleMemoryRecallCommand, RoleMemoryRecallCommitEffect, RoleMemoryRecallTransactions } from "./memory-recall-contract.js";
8
+ import type { RoleInitialMemory, RoleMemoryRecall, RoleMemoryRecallCommand, RoleMemoryRecallCommitEffect, RoleMemoryRecallTransactions } from "./memory-recall-contract.js";
9
9
  import type { AdoptedModelWorkPlan, UpdateModelWorkPlanCommand, ModelWorkPlanCommitEffect, ModelWorkPlanTransactions } from "./work-plan-contracts.js";
10
10
  export declare const ROLE_CALL_LEDGER_CONTRACT_VERSION = 18;
11
11
  export declare const ROLE_CALL_LEDGER_HEAD_KIND: "runtime_role_call_ledger_v18";
@@ -191,6 +191,7 @@ export type RoleCallState = Readonly<{
191
191
  plans: readonly RoleCallPlanState[];
192
192
  capabilityExecutions: readonly RoleCapabilityExecution[];
193
193
  memoryRecalls: readonly RoleMemoryRecall[];
194
+ initialMemory?: RoleInitialMemory;
194
195
  operationSupervision: RoleOperationSupervisionState;
195
196
  capabilitySelectionSupervision: RoleCapabilitySelectionSupervisionState;
196
197
  rootResponse: string | null;
@@ -1,9 +1,10 @@
1
1
  import type { RoleCallLedgerCheckpoint } from "./checkpoint-contract.js";
2
- import { type RoleCallLedger, type RoleCallLedgerHead, type RoleCallPolicyInput } from "./contracts.js";
2
+ import { type RoleCallLedger, type RoleCallLedgerHead, type RoleCallPolicyInput, type RoleCallState } from "./contracts.js";
3
3
  export declare function createRoleCallLedger(params: {
4
4
  requestId: string;
5
5
  policy: RoleCallPolicyInput;
6
6
  checkpoint?: RoleCallLedgerCheckpoint;
7
+ initialMemory?: RoleCallState["initialMemory"];
7
8
  }): RoleCallLedger;
8
9
  /** Confirms exact current-head ownership without trusting structural ledgers. */
9
10
  export declare function isCurrentRoleCallLedgerHead(ledger: RoleCallLedger, head: RoleCallLedgerHead): boolean;
@@ -15,8 +15,8 @@ const issuedRoleCallLedgerHeads = new WeakMap();
15
15
  export function createRoleCallLedger(params) {
16
16
  const policy = sealRoleCallPolicy(params.policy);
17
17
  const initialState = params.checkpoint
18
- ? restoreCheckpointState(params.checkpoint, params.requestId, policy)
19
- : createInitialRoleCallState(params.requestId);
18
+ ? restoreCheckpointState(params.checkpoint, params.requestId, policy, params.initialMemory)
19
+ : createInitialRoleCallState(params.requestId, params.initialMemory);
20
20
  const capabilitySelectionSupervisionIssuanceAuthority = resolveRoleCapabilitySelectionSupervisionIssuanceAuthority(initialState);
21
21
  if (!capabilitySelectionSupervisionIssuanceAuthority) {
22
22
  throw new Error("role_call_capability_selection_supervision_issuance_authority_missing");
@@ -1,3 +1,5 @@
1
+ import type { ChatMessage } from "../../../model-gateway/types.js";
2
+ import type { LearningKnowledgeContext } from "../../long-term-memory/maturation/contracts.js";
1
3
  import type { LongTermMemoryRecord } from "../../long-term-memory/contracts.js";
2
4
  import type { RoleCallTransactionInput, RoleCallTransactionResult } from "./contracts.js";
3
5
  export declare const ROLE_MEMORY_RECALL_QUERY_MAX_LENGTH = 1024;
@@ -49,3 +51,8 @@ export type RoleMemoryRecallTransactions = Readonly<{
49
51
  beginMemoryRecall(input: RoleCallTransactionInput<BeginRoleMemoryRecallCommand>): Promise<RoleCallTransactionResult<"memory_recall_begun", "memory_recall_transition_invalid">>;
50
52
  settleMemoryRecall(input: RoleCallTransactionInput<SettleRoleMemoryRecallCommand>): Promise<RoleCallTransactionResult<"memory_recall_settled", "memory_recall_transition_invalid">>;
51
53
  }>;
54
+ /** Initial automatic reference; never a model recall or an activation. */
55
+ export type RoleInitialMemory = Readonly<{
56
+ message?: ChatMessage;
57
+ knowledge?: LearningKnowledgeContext;
58
+ }>;
@@ -1,3 +1,5 @@
1
1
  import type { RoleCallState, RoleCallValidationIssue } from "./contracts.js";
2
2
  export declare function validateRoleMemoryRecalls(state: RoleCallState): RoleCallValidationIssue[];
3
3
  export declare function hasSettledMemoryRecallActivationRange(state: RoleCallState, callId: string, fromActivation: number, toActivation: number): boolean;
4
+ /** The existing checkpoint carries this passive startup field, never a model action. */
5
+ export declare function hasInitialMemoryContext(value: unknown, policyId: string): boolean;
@@ -1,3 +1,4 @@
1
+ import { isAssistantToolCallMessage, isStrictTextChatMessage, isToolResultMessage, } from "../../../model-gateway/message-contract.js";
1
2
  import { RUNTIME_ROOT_ROLE_ID } from "../roles.js";
2
3
  import { hasMemoryRecallIdentity, isBoundedMemoryRecallQuery, normalizeRoleMemoryRecallResult, } from "./memory-recall-decoder.js";
3
4
  import { exactKeys, isRecord } from "../../validation/strict-record.js";
@@ -119,3 +120,90 @@ function hasUnboundMemoryWait(state, pendingCount) {
119
120
  return true;
120
121
  return waitingCalls.some((call) => call.callId !== state.rootCallId);
121
122
  }
123
+ /** The existing checkpoint carries this passive startup field, never a model action. */
124
+ export function hasInitialMemoryContext(value, policyId) {
125
+ if (value === undefined)
126
+ return true;
127
+ if (policyId !== "execution-agent-v1" && policyId !== "supervisor-worker-v1")
128
+ return false;
129
+ if (!isRecord(value) || !exactKeys(value, [], ["message", "knowledge"]))
130
+ return false;
131
+ if (value.message !== undefined && !isInitialMemoryMessage(value.message))
132
+ return false;
133
+ if (value.knowledge === undefined)
134
+ return true;
135
+ return isInitialMemoryKnowledge(value.knowledge);
136
+ }
137
+ function isInitialMemoryMessage(value) {
138
+ if (isStrictTextChatMessage(value))
139
+ return true;
140
+ if (isAssistantToolCallMessage(value))
141
+ return true;
142
+ return isToolResultMessage(value);
143
+ }
144
+ function isInitialMemoryKnowledge(value) {
145
+ if (!isRecord(value))
146
+ return false;
147
+ if (value.kind !== "learning_knowledge_reference_v1")
148
+ return false;
149
+ if (value.authority !== "passive_reference")
150
+ return false;
151
+ if (value.presenceEffect !== "does_not_authorize_actions_or_add_user_intent")
152
+ return false;
153
+ if (!isMemoryRevision(value.repositoryRevision))
154
+ return false;
155
+ if (!isMemoryRevision(value.knowledgeRevision))
156
+ return false;
157
+ if (!isMemoryRevision(value.omitted))
158
+ return false;
159
+ if (typeof value.referenceTime !== "string" || !Number.isFinite(Date.parse(value.referenceTime)))
160
+ return false;
161
+ if (!Array.isArray(value.entries) || value.entries.length > 12)
162
+ return false;
163
+ if (!value.entries.every(isInitialMemoryKnowledgeEntry))
164
+ return false;
165
+ const identities = value.entries.map(entry => JSON.stringify([entry.kind, entry.id]));
166
+ return new Set(identities).size === identities.length;
167
+ }
168
+ function isMemoryRevision(value) {
169
+ if (typeof value !== "number" || !Number.isSafeInteger(value))
170
+ return false;
171
+ return value >= 0;
172
+ }
173
+ function isInitialMemoryKnowledgeEntry(value) {
174
+ if (!isRecord(value))
175
+ return false;
176
+ if (value.kind !== "candidate" && value.kind !== "memory")
177
+ return false;
178
+ if (typeof value.id !== "string" || value.id.length === 0)
179
+ return false;
180
+ if (typeof value.version !== "string" || value.version.length === 0)
181
+ return false;
182
+ if (typeof value.content !== "string")
183
+ return false;
184
+ if (!Array.isArray(value.tags) || !value.tags.every(tag => typeof tag === "string"))
185
+ return false;
186
+ if (typeof value.mutable !== "boolean")
187
+ return false;
188
+ if (value.score !== null && !isMemoryScore(value.score))
189
+ return false;
190
+ if (value.reason !== null && typeof value.reason !== "string")
191
+ return false;
192
+ if (!["observed", "inferred", "unspecified"].includes(value.certainty))
193
+ return false;
194
+ if (!isOptionalMemoryTime(value.lastReinforcedAt))
195
+ return false;
196
+ return isOptionalMemoryTime(value.reconsiderAt);
197
+ }
198
+ function isMemoryScore(value) {
199
+ if (typeof value !== "number" || !Number.isFinite(value))
200
+ return false;
201
+ return value >= 0 && value <= 100;
202
+ }
203
+ function isOptionalMemoryTime(value) {
204
+ if (value === null)
205
+ return true;
206
+ if (typeof value !== "string")
207
+ return false;
208
+ return Number.isFinite(Date.parse(value));
209
+ }
@@ -1,6 +1,6 @@
1
1
  import { type RoleCallPolicy, type RoleCallPolicyInput, type RoleCallState, type RoleCallTransitionResult, type RoleCallValidationIssue } from "./contracts.js";
2
2
  export { hasRoleCallCapabilityAuthority } from "./candidate-validation.js";
3
- export declare function createInitialRoleCallState(requestId: string): RoleCallState;
3
+ export declare function createInitialRoleCallState(requestId: string, initialMemory?: RoleCallState["initialMemory"]): RoleCallState;
4
4
  export declare function applyRoleCallCommand(state: RoleCallState, commandInput: unknown, policy: RoleCallPolicy, admittedHeadRevision?: number): RoleCallTransitionResult;
5
5
  export declare function validateRoleCallCandidate(params: {
6
6
  state: RoleCallState;
@@ -8,7 +8,7 @@ import { issueInitialRoleCapabilitySelectionSupervisionState } from "./capabilit
8
8
  import { createInitialRoleOperationSupervisionState } from "./operation-supervision.js";
9
9
  import { reject, seal } from "./reducer-primitives.js";
10
10
  export { hasRoleCallCapabilityAuthority } from "./candidate-validation.js";
11
- export function createInitialRoleCallState(requestId) {
11
+ export function createInitialRoleCallState(requestId, initialMemory) {
12
12
  const state = seal({
13
13
  contractVersion: ROLE_CALL_LEDGER_CONTRACT_VERSION,
14
14
  requestId,
@@ -23,6 +23,7 @@ export function createInitialRoleCallState(requestId) {
23
23
  plans: [],
24
24
  capabilityExecutions: [],
25
25
  memoryRecalls: [],
26
+ ...(initialMemory !== undefined ? { initialMemory } : {}),
26
27
  operationSupervision: createInitialRoleOperationSupervisionState(),
27
28
  capabilitySelectionSupervision: createInitialRoleCapabilitySelectionSupervisionState(),
28
29
  rootResponse: null,
@@ -12,7 +12,7 @@ export declare const WORKER_CAPABILITY_SUMMARY_MAX_LENGTH = 512;
12
12
  export declare const WORKER_CAPABILITY_COUNT_MAX = 128;
13
13
  export declare const WORKER_CAPABILITY_CONTROL_COUNT_MAX = 16;
14
14
  export declare const WORKER_CAPABILITY_CONTROL_ID_MAX_LENGTH = 64;
15
- export { TOOL_NORMAL_INVOCATION_STRING_MAX_LENGTH as WORKER_CAPABILITY_CONTROL_STRING_MAX_LENGTH, } from "../../../capabilities/normal-invocation/contracts.js";
15
+ export { TOOL_NORMAL_INVOCATION_STRING_MAX_LENGTH as WORKER_CAPABILITY_CONTROL_STRING_MAX_LENGTH } from "../../../capabilities/normal-invocation/contracts.js";
16
16
  export declare const WORKER_CAPABILITY_CONTROL_ENUM_MAX_VALUES = 64;
17
17
  export declare const WORKER_CAPABILITY_CONTROL_ENUM_VALUE_MAX_LENGTH = 256;
18
18
  export declare const WORKER_CAPABILITY_CONTROL_ARRAY_MAX_ITEMS = 64;
@@ -165,6 +165,8 @@ export type WorkerCapabilityPreparedExecution = Readonly<{
165
165
  onAdmitted?(executionId: string): void;
166
166
  approvalRequest?: ToolApprovalRequest;
167
167
  applyApprovalDecision?(decision: BoundApprovalDecision): void;
168
+ /** Project a fenced rejection with adapter-owned lifecycle and evidence; never execute. */
169
+ rejectBeforeExecution?(executionId: string, code: string, message: string): WorkerCapabilityAdapterResult;
168
170
  execute(executionId: string): Promise<WorkerCapabilityAdapterResult>;
169
171
  }>;
170
172
  export type WorkerCapabilityAdapterPreparationInput<TContext> = Readonly<Omit<WorkerCapabilityAdapterExecutionInput<TContext>, "executionId"> & {
@@ -8,7 +8,7 @@ export const WORKER_CAPABILITY_SUMMARY_MAX_LENGTH = 512;
8
8
  export const WORKER_CAPABILITY_COUNT_MAX = 128;
9
9
  export const WORKER_CAPABILITY_CONTROL_COUNT_MAX = 16;
10
10
  export const WORKER_CAPABILITY_CONTROL_ID_MAX_LENGTH = 64;
11
- export { TOOL_NORMAL_INVOCATION_STRING_MAX_LENGTH as WORKER_CAPABILITY_CONTROL_STRING_MAX_LENGTH, } from "../../../capabilities/normal-invocation/contracts.js";
11
+ export { TOOL_NORMAL_INVOCATION_STRING_MAX_LENGTH as WORKER_CAPABILITY_CONTROL_STRING_MAX_LENGTH } from "../../../capabilities/normal-invocation/contracts.js";
12
12
  export const WORKER_CAPABILITY_CONTROL_ENUM_MAX_VALUES = 64;
13
13
  export const WORKER_CAPABILITY_CONTROL_ENUM_VALUE_MAX_LENGTH = 256;
14
14
  export const WORKER_CAPABILITY_CONTROL_ARRAY_MAX_ITEMS = 64;
@@ -1,3 +1,4 @@
1
+ import { fenceRestoredApprovalExecution } from "./execution-freshness.js";
1
2
  import { restorePreparationRejection } from "./preparation-rejection.js";
2
3
  import { isDeepStrictEqual } from "node:util";
3
4
  import { settleAdmittedPreparedGroup } from "./settle-prepared.js";
@@ -132,7 +133,10 @@ export async function restoreCapabilityApprovalGroup(params) {
132
133
  ledger: params.ledger,
133
134
  expectedHead: head,
134
135
  call,
135
- invocations,
136
+ invocations: invocations.map((invocation) => ({
137
+ ...invocation,
138
+ prepared: fenceRestoredApprovalExecution(invocation.prepared, params.executionFreshness),
139
+ })),
136
140
  executionIds: group.entries.map((entry) => entry.executionId),
137
141
  batch: group.batch,
138
142
  diagnostic,
@@ -0,0 +1,5 @@
1
+ import type { WorkerCapabilityExecutionFreshness, WorkerCapabilityPreparedExecution } from "../contracts.js";
2
+ export declare const STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION: "steering_superseded_before_external_execution";
3
+ export declare const STEERING_SUPERSEDED_SUMMARY = "steering_superseded_before_external_execution: No external execution occurred because a newer active-request update superseded this capability invocation.";
4
+ /** Preserve the admitted identity and decision binding; only fence its dispatch. */
5
+ export declare function fenceRestoredApprovalExecution(prepared: WorkerCapabilityPreparedExecution, freshness: WorkerCapabilityExecutionFreshness | undefined): WorkerCapabilityPreparedExecution;
@@ -0,0 +1,31 @@
1
+ export const STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION = "steering_superseded_before_external_execution";
2
+ export const STEERING_SUPERSEDED_SUMMARY = "steering_superseded_before_external_execution: No external execution occurred because a newer active-request update superseded this capability invocation.";
3
+ /** Preserve the admitted identity and decision binding; only fence its dispatch. */
4
+ export function fenceRestoredApprovalExecution(prepared, freshness) {
5
+ if (!freshness)
6
+ return prepared;
7
+ return Object.freeze({
8
+ ...prepared,
9
+ async execute(executionId) {
10
+ if (freshness.isCurrent())
11
+ return prepared.execute(executionId);
12
+ if (prepared.rejectBeforeExecution)
13
+ return prepared.rejectBeforeExecution(executionId, STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY);
14
+ return Object.freeze({
15
+ outcome: "failed",
16
+ observedEffect: "none",
17
+ summary: STEERING_SUPERSEDED_SUMMARY,
18
+ // This is request control, not evidence of a repeatable tool failure.
19
+ failureOutcomeFingerprint: null,
20
+ exactResult: Object.freeze({
21
+ kind: "runtime_capability_rejection_v1",
22
+ authority: "runtime",
23
+ status: "rejected",
24
+ stage: "before_external_execution",
25
+ code: STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION,
26
+ message: STEERING_SUPERSEDED_SUMMARY,
27
+ }),
28
+ });
29
+ },
30
+ });
31
+ }
@@ -1,4 +1,5 @@
1
1
  import { isLearningApplicationExcluded, learningApplicationKey } from "./application-policy.js";
2
+ import { isOwnObservationApplication } from "../../shared/passive-observation-self-exclusion.js";
2
3
  /** Derived metadata only; counts cover retained observations, never lifetime usage. */
3
4
  export function learningApplicationCatalog(queued, history, preferences) {
4
5
  const rows = new Map();
@@ -18,7 +19,8 @@ export function learningApplicationCatalog(queued, history, preferences) {
18
19
  row.lastObservedAt = observation.timestamp;
19
20
  rows.set(key, row);
20
21
  }
21
- const summaries = [...rows.values()].map((row) => ({ ...row,
22
+ const configurable = [...rows.values()].filter((row) => !isOwnObservationApplication(learningApplicationKey(row.app)));
23
+ const summaries = configurable.map((row) => ({ ...row,
22
24
  collectionExcluded: isLearningApplicationExcluded(row.app, preferences.excludedApplications),
23
25
  processingExcluded: isLearningApplicationExcluded(row.app, preferences.processingExcludedApplications),
24
26
  }));
@@ -12,6 +12,11 @@ function shouldReconnectCollectionSource(event) {
12
12
  return true;
13
13
  return event.reason === "collector_start_failed";
14
14
  }
15
+ function requiresCollectionConsent(error) {
16
+ if (!(error instanceof Error))
17
+ return false;
18
+ return error.message === "collection_consent_required";
19
+ }
15
20
  function hasHealthyCollectionEvent(event) {
16
21
  if (event.type === "observation")
17
22
  return true;
@@ -66,6 +71,8 @@ export class LearningCollectionSource {
66
71
  if (abort.signal.aborted)
67
72
  return;
68
73
  this.options.failed(error);
74
+ if (requiresCollectionConsent(error))
75
+ return;
69
76
  this.reconnect();
70
77
  }
71
78
  }
@@ -16,7 +16,7 @@ import { LearningJournal } from "./journal.js";
16
16
  import { ObservationQueue } from "./queue.js";
17
17
  import { canProcessLearningObservation, isLearningApplicationExcluded } from "./application-policy.js";
18
18
  import { commitLearningApplicationPreferences } from "./application-controls.js";
19
- import { learningFailureReason, summarizeBatch, } from "./status-projection.js";
19
+ import { learningFailureReason, learningCollectionFailureState, summarizeBatch, } from "./status-projection.js";
20
20
  import { DEFAULT_LEARNING_PREFERENCES, normalizeLearningPreferences, } from "./store.js";
21
21
  export function createPassiveLearningService(options) {
22
22
  const service = new LearningService(options);
@@ -447,8 +447,7 @@ class LearningService {
447
447
  }
448
448
  failFeature(error) {
449
449
  this.reason = learningFailureReason(error);
450
- this.state =
451
- this.reason === "learning_host_unavailable" ? "unavailable" : "failed";
450
+ this.state = learningCollectionFailureState(this.reason);
452
451
  this.changed();
453
452
  }
454
453
  failProcessing(error) {
@@ -1,3 +1,4 @@
1
+ import type { PassiveCollectionState } from "../../shared/passive-observation.js";
1
2
  import type { LongTermMemoryService } from "../long-term-memory/contracts.js";
2
3
  import type { LearningBatch, LearningBatchSummary } from "./contracts.js";
3
4
  export declare function summarizeBatch({ observations, reviewProgress: _reviewProgress, ...summary }: LearningBatch): LearningBatchSummary;
@@ -7,4 +8,5 @@ export declare function recentLearningMemories(memory: LongTermMemoryService, hi
7
8
  content: string;
8
9
  createdAt: string;
9
10
  }>[]>;
11
+ export declare function learningCollectionFailureState(reason: string): PassiveCollectionState;
10
12
  export declare function learningFailureReason(error: unknown): string;
@@ -36,6 +36,13 @@ export async function recentLearningMemories(memory, history) {
36
36
  return [];
37
37
  }
38
38
  }
39
+ export function learningCollectionFailureState(reason) {
40
+ if (reason === "collection_consent_required")
41
+ return "permission_required";
42
+ if (reason === "learning_host_unavailable")
43
+ return "unavailable";
44
+ return "failed";
45
+ }
39
46
  export function learningFailureReason(error) {
40
47
  if (!(error instanceof Error))
41
48
  return "learning_failed";
@@ -48,6 +55,8 @@ export function learningFailureReason(error) {
48
55
  "learning_model_profile_overridden",
49
56
  "learning_memory_unavailable",
50
57
  "learning_host_unavailable",
58
+ "collection_consent_required",
59
+ "native_observation_identity_invalid",
51
60
  "learning_storage_unavailable",
52
61
  "learning_batch_timeout",
53
62
  "learning_disabled",
@@ -10,6 +10,7 @@ export declare function preparePluginPackage(rootDir: string, source: PluginInst
10
10
  description?: string;
11
11
  extensions: Readonly<{
12
12
  [ABOT_RUNTIME_EXTENSION]: import("../../../plugin-contract/manifest.js").AbotRuntimePluginExtension;
13
+ ["ai.abot.compatibility"]?: import("../../../plugin-contract/platform-compatibility.js").PluginPlatformDeclaration;
13
14
  [namespace: string]: unknown;
14
15
  }>;
15
16
  }>;
@@ -23,6 +24,13 @@ export declare function preparePluginPackage(rootDir: string, source: PluginInst
23
24
  };
24
25
  digest: string;
25
26
  id: string;
27
+ compatibility: Readonly<{
28
+ supported: boolean;
29
+ status: "declared" | "legacy" | "unsupported" | "undeclared";
30
+ runtimePlatform: NodeJS.Platform;
31
+ runtimePlatforms?: readonly import("../../../plugin-contract/platform-compatibility.js").PluginRuntimePlatform[];
32
+ reason?: string;
33
+ }>;
26
34
  version: string;
27
35
  description: string;
28
36
  capabilities: {
@@ -2,6 +2,7 @@ import { mkdtemp, readFile, readdir, rm } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
3
  import { PluginInstallError, } from "../../../plugin-contract/install-source.js";
4
4
  import { ABOT_RUNTIME_EXTENSION } from "../../../plugin-contract/manifest.js";
5
+ import { resolvePluginPlatformCompatibility } from "../platform-compatibility.js";
5
6
  import { parseAgentPluginManifest } from "../manifest-validator.js";
6
7
  import { projectManifestRuntimeContract } from "../manifest-projection.js";
7
8
  import { discoverConfiguredRuntimePluginManifests } from "../configured-manifests.js";
@@ -42,6 +43,7 @@ export async function preparePluginPackage(rootDir, source, download = downloadG
42
43
  source: downloaded.source,
43
44
  digest,
44
45
  id: manifest.name,
46
+ compatibility: resolvePluginPlatformCompatibility(manifest),
45
47
  version: manifest.version ?? "",
46
48
  description: manifest.description ?? "",
47
49
  capabilities: capabilities.map((id) => ({
@@ -10,6 +10,13 @@ export declare function inspectPluginPackage(rootDir: string, input: unknown, do
10
10
  };
11
11
  digest: string;
12
12
  id: string;
13
+ compatibility: Readonly<{
14
+ supported: boolean;
15
+ status: "declared" | "legacy" | "unsupported" | "undeclared";
16
+ runtimePlatform: NodeJS.Platform;
17
+ runtimePlatforms?: readonly import("../../../plugin-contract/platform-compatibility.js").PluginRuntimePlatform[];
18
+ reason?: string;
19
+ }>;
13
20
  version: string;
14
21
  description: string;
15
22
  capabilities: {
@@ -11,6 +11,7 @@ import { discoverAgentPluginManifests } from "./manifest-discovery.js";
11
11
  import { resolveBundledRuntimeRoot } from "./bundled-root.js";
12
12
  import { projectManifestRuntimeContract } from "./manifest-projection.js";
13
13
  import { discoverConfiguredRuntimePluginManifests } from "./configured-manifests.js";
14
+ import { resolvePluginPlatformCompatibility } from "./platform-compatibility.js";
14
15
  import { isPluginCatalogDisabled, isPluginToolSelected, normalizePluginSelection, pluginSelectionCacheKey, } from "./selection.js";
15
16
  const require = createRequire(import.meta.url);
16
17
  const compiledCatalogCache = new WeakMap();
@@ -110,20 +111,15 @@ export function loadConfiguredRuntimePlugins(config) {
110
111
  if (cached) {
111
112
  return cached;
112
113
  }
113
- const host = {
114
- rootDir: config.paths.rootDir,
115
- pluginConfiguration: readPluginConfigurationStore(config.paths.rootDir)
116
- .plugins,
117
- runtimeId: config.runtimeId,
118
- agentBridgeUrl: config.agentBridgeUrl,
119
- runtimePaths: config.paths,
120
- };
121
- const manifestPlugins = discoverConfiguredRuntimePluginManifests(config.paths.rootDir, {
114
+ const discoveredPlugins = discoverConfiguredRuntimePluginManifests(config.paths.rootDir, {
122
115
  excludedPluginIds: new Set([
123
116
  ...selection.deny,
124
117
  ...selection.disabledPluginIds,
125
118
  ]),
126
- })
119
+ });
120
+ const compatiblePlugins = discoveredPlugins.filter((plugin) => resolvePluginPlatformCompatibility(plugin.manifest).supported);
121
+ const allPluginsIncompatible = discoveredPlugins.length > 0 && compatiblePlugins.length === 0;
122
+ const selectedPlugins = compatiblePlugins
127
123
  .map((plugin) => ({
128
124
  plugin,
129
125
  selectedCapabilityIds: Object.keys(plugin.manifest.extensions[ABOT_RUNTIME_EXTENSION].capabilities).filter((capabilityId) => isPluginToolSelected({
@@ -132,8 +128,17 @@ export function loadConfiguredRuntimePlugins(config) {
132
128
  selection,
133
129
  })),
134
130
  }))
135
- .filter(({ selectedCapabilityIds }) => selectedCapabilityIds.length > 0)
136
- .map(({ plugin, selectedCapabilityIds }) => loadManifestRuntimePlugin(host, plugin, selectedCapabilityIds));
131
+ .filter(({ selectedCapabilityIds }) => selectedCapabilityIds.length > 0);
132
+ const host = {
133
+ rootDir: config.paths.rootDir,
134
+ pluginConfiguration: allPluginsIncompatible
135
+ ? {}
136
+ : readPluginConfigurationStore(config.paths.rootDir).plugins,
137
+ runtimeId: config.runtimeId,
138
+ agentBridgeUrl: config.agentBridgeUrl,
139
+ runtimePaths: config.paths,
140
+ };
141
+ const manifestPlugins = selectedPlugins.map(({ plugin, selectedCapabilityIds }) => loadManifestRuntimePlugin(host, plugin, selectedCapabilityIds));
137
142
  const pluginIds = new Set();
138
143
  for (const plugin of manifestPlugins) {
139
144
  if (pluginIds.has(plugin.id)) {
@@ -175,14 +180,19 @@ export function loadBundledRuntimePlugins() {
175
180
  if (cached) {
176
181
  return cached;
177
182
  }
183
+ const discoveredPlugins = discoverAgentPluginManifests(packageRoot);
184
+ const selectedPlugins = discoveredPlugins.filter((plugin) => resolvePluginPlatformCompatibility(plugin.manifest).supported);
185
+ const allPluginsIncompatible = discoveredPlugins.length > 0 && selectedPlugins.length === 0;
178
186
  const host = {
179
187
  rootDir,
180
- pluginConfiguration: readPluginConfigurationStore(rootDir).plugins,
188
+ pluginConfiguration: allPluginsIncompatible
189
+ ? {}
190
+ : readPluginConfigurationStore(rootDir).plugins,
181
191
  runtimeId: "default",
182
192
  agentBridgeUrl: "",
183
193
  runtimePaths: createUnconfiguredRuntimePaths(rootDir),
184
194
  };
185
- const catalog = Object.freeze(discoverAgentPluginManifests(packageRoot).map((plugin) => freezeRuntimePlugin(loadManifestRuntimePlugin(host, plugin, Object.keys(plugin.manifest.extensions[ABOT_RUNTIME_EXTENSION].capabilities)))));
195
+ const catalog = Object.freeze(selectedPlugins.map((plugin) => freezeRuntimePlugin(loadManifestRuntimePlugin(host, plugin, Object.keys(plugin.manifest.extensions[ABOT_RUNTIME_EXTENSION].capabilities)))));
186
196
  bundledCatalogCache.set(cacheKey, catalog);
187
197
  return catalog;
188
198
  }
@@ -0,0 +1,2 @@
1
+ import { type PluginPlatformDeclaration } from "../../plugin-contract/platform-compatibility.js";
2
+ export declare function parsePluginPlatformDeclaration(value: unknown): PluginPlatformDeclaration | undefined;