@abot-ai/runtime 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/README.md +216 -222
  2. package/dist/scripts/runtime-setup-files.js +46 -2
  3. package/dist/src/capabilities/tool-definition-validator/definition-parser.js +8 -0
  4. package/dist/src/capabilities/tool-types.d.ts +4 -0
  5. package/dist/src/model-gateway/client/chat.js +9 -5
  6. package/dist/src/model-gateway/client/invocation-error.d.ts +9 -0
  7. package/dist/src/model-gateway/client/invocation-error.js +30 -0
  8. package/dist/src/model-gateway/client/stream-consumer.js +9 -2
  9. package/dist/src/model-gateway/client/stream-parser.js +2 -1
  10. package/dist/src/model-gateway/protocol/message-contract.d.ts +1 -0
  11. package/dist/src/model-gateway/protocol/message-contract.js +1 -1
  12. package/dist/src/model-gateway/server/chat-handler.js +5 -7
  13. package/dist/src/model-gateway/server/chat-stream-response.d.ts +7 -0
  14. package/dist/src/model-gateway/server/chat-stream-response.js +25 -0
  15. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +5 -1
  16. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +15 -1
  17. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-execution.js +7 -5
  18. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/prepared-snapshot.js +9 -2
  19. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.d.ts +2 -2
  20. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-rejection.js +2 -2
  21. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/prepared-execution.js +17 -11
  22. package/dist/src/runtime/automations/service.d.ts +1 -1
  23. package/dist/src/runtime/capabilities/automation-builder/tool-module.js +4 -4
  24. package/dist/src/runtime/capabilities/automations/draft-index.d.ts +1 -1
  25. package/dist/src/runtime/capabilities/automations/tool-module.js +4 -4
  26. package/dist/src/runtime/capabilities/core-tool-contracts.d.ts +29 -0
  27. package/dist/src/runtime/capabilities/core-tool-contracts.js +38 -0
  28. package/dist/src/runtime/capabilities/knowledge-skills/read-many.d.ts +4 -0
  29. package/dist/src/runtime/capabilities/knowledge-skills/read-many.js +21 -0
  30. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.d.ts +13 -0
  31. package/dist/src/runtime/capabilities/knowledge-skills/read-targets.js +44 -0
  32. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.d.ts +141 -0
  33. package/dist/src/runtime/capabilities/knowledge-skills/tool-contract.js +58 -0
  34. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.d.ts +4 -0
  35. package/dist/src/runtime/capabilities/knowledge-skills/tool-module.js +78 -0
  36. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.d.ts +12 -0
  37. package/dist/src/runtime/capabilities/knowledge-skills/tool-output.js +21 -0
  38. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.d.ts +77 -0
  39. package/dist/src/runtime/capabilities/knowledge-skills/write-contract.js +28 -0
  40. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.d.ts +3 -0
  41. package/dist/src/runtime/capabilities/knowledge-skills/write-operations.js +34 -0
  42. package/dist/src/runtime/capabilities/scheduling/tool-module.js +3 -3
  43. package/dist/src/runtime/capabilities/tool-availability.js +6 -0
  44. package/dist/src/runtime/composition.d.ts +5 -0
  45. package/dist/src/runtime/context/capability-brief.d.ts +2 -2
  46. package/dist/src/runtime/context/capability-brief.js +3 -3
  47. package/dist/src/runtime/context/capability-descriptions.d.ts +3 -2
  48. package/dist/src/runtime/context/capability-descriptions.js +57 -20
  49. package/dist/src/runtime/context/capability-result-compaction-source.d.ts +3 -1
  50. package/dist/src/runtime/context/capability-result-compaction-source.js +13 -1
  51. package/dist/src/runtime/context/core-skill-read-context.d.ts +16 -0
  52. package/dist/src/runtime/context/core-skill-read-context.js +76 -0
  53. package/dist/src/runtime/context/exact-evidence-match.d.ts +3 -0
  54. package/dist/src/runtime/context/exact-evidence-match.js +34 -0
  55. package/dist/src/runtime/context/model-step-compaction.js +20 -6
  56. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.d.ts +9 -0
  57. package/dist/src/runtime/context/semantic-compaction/core-skill-read-source.js +38 -0
  58. package/dist/src/runtime/context/semantic-compaction/generation-contracts.d.ts +2 -0
  59. package/dist/src/runtime/context/semantic-compaction/prompt.js +7 -7
  60. package/dist/src/runtime/context/semantic-compaction/run.js +10 -3
  61. package/dist/src/runtime/context/semantic-compaction/super-source-integrity.js +33 -3
  62. package/dist/src/runtime/context/session-artifact-paths.d.ts +2 -1
  63. package/dist/src/runtime/context/session-artifact-paths.js +2 -1
  64. package/dist/src/runtime/context/session-memory/model-step-controller.d.ts +2 -2
  65. package/dist/src/runtime/context/super-worker-compaction-failure.d.ts +1 -1
  66. package/dist/src/runtime/context/super-worker-compaction-failure.js +2 -1
  67. package/dist/src/runtime/context/super-worker-compaction-sidecar.d.ts +2 -1
  68. package/dist/src/runtime/context/super-worker-compaction-sidecar.js +9 -3
  69. package/dist/src/runtime/default-environment-adapters.d.ts +2 -1
  70. package/dist/src/runtime/default-environment-adapters.js +5 -1
  71. package/dist/src/runtime/knowledge-skills/available-skills-projection.d.ts +17 -0
  72. package/dist/src/runtime/knowledge-skills/available-skills-projection.js +66 -0
  73. package/dist/src/runtime/knowledge-skills/available-skills.d.ts +7 -0
  74. package/dist/src/runtime/knowledge-skills/available-skills.js +17 -0
  75. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.d.ts +2 -0
  76. package/dist/src/runtime/knowledge-skills/builtins/abot-studio.js +27 -0
  77. package/dist/src/runtime/knowledge-skills/builtins/computer-use.d.ts +2 -0
  78. package/dist/src/runtime/knowledge-skills/builtins/computer-use.js +34 -0
  79. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.d.ts +2 -0
  80. package/dist/src/runtime/knowledge-skills/builtins/skill-creator.js +29 -0
  81. package/dist/src/runtime/knowledge-skills/builtins/technical-work.d.ts +2 -0
  82. package/dist/src/runtime/knowledge-skills/builtins/technical-work.js +27 -0
  83. package/dist/src/runtime/knowledge-skills/catalog.d.ts +2 -0
  84. package/dist/src/runtime/knowledge-skills/catalog.js +12 -0
  85. package/dist/src/runtime/knowledge-skills/personal-contracts.d.ts +48 -0
  86. package/dist/src/runtime/knowledge-skills/personal-contracts.js +29 -0
  87. package/dist/src/runtime/knowledge-skills/personal-documents.d.ts +6 -0
  88. package/dist/src/runtime/knowledge-skills/personal-documents.js +56 -0
  89. package/dist/src/runtime/knowledge-skills/personal-management.d.ts +9 -0
  90. package/dist/src/runtime/knowledge-skills/personal-management.js +64 -0
  91. package/dist/src/runtime/knowledge-skills/personal-repository.d.ts +6 -0
  92. package/dist/src/runtime/knowledge-skills/personal-repository.js +76 -0
  93. package/dist/src/runtime/knowledge-skills/personal-store.d.ts +4 -0
  94. package/dist/src/runtime/knowledge-skills/personal-store.js +33 -0
  95. package/dist/src/runtime/knowledge-skills/read-evidence.d.ts +3 -0
  96. package/dist/src/runtime/knowledge-skills/read-evidence.js +13 -0
  97. package/dist/src/runtime/knowledge-skills/store.d.ts +19 -0
  98. package/dist/src/runtime/knowledge-skills/store.js +41 -0
  99. package/dist/src/runtime/local-application.d.ts +2 -1
  100. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +1 -0
  101. package/dist/src/runtime/local-host/app-service-dispatch.js +5 -0
  102. package/dist/src/runtime/local-host/client-services.d.ts +3 -1
  103. package/dist/src/runtime/local-host/client-services.js +3 -2
  104. package/dist/src/runtime/long-term-memory/conversation-authoring/context.d.ts +7 -1
  105. package/dist/src/runtime/long-term-memory/conversation-authoring/context.js +51 -25
  106. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.d.ts +5 -0
  107. package/dist/src/runtime/long-term-memory/conversation-authoring/plain-text-context.js +28 -0
  108. package/dist/src/runtime/long-term-memory/initial-context.d.ts +18 -0
  109. package/dist/src/runtime/long-term-memory/initial-context.js +57 -0
  110. package/dist/src/runtime/long-term-memory/projection.js +1 -1
  111. package/dist/src/runtime/model/context-compaction-admission.d.ts +1 -0
  112. package/dist/src/runtime/model/context-compaction-admission.js +35 -1
  113. package/dist/src/runtime/model/context-compaction-contracts.d.ts +9 -1
  114. package/dist/src/runtime/model/invoke-step.js +6 -2
  115. package/dist/src/runtime/model/provider-failure.d.ts +13 -0
  116. package/dist/src/runtime/model/provider-failure.js +37 -0
  117. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  118. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +4 -1
  119. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.d.ts +1 -1
  120. package/dist/src/runtime/orchestration/role-calls/checkpoint-state.js +7 -3
  121. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +3 -0
  122. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.d.ts +4 -0
  123. package/dist/src/runtime/orchestration/role-calls/command-dispatch/skill-read-transition.js +48 -0
  124. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +3 -0
  125. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +8 -4
  126. package/dist/src/runtime/orchestration/role-calls/contracts.js +3 -3
  127. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +2 -1
  128. package/dist/src/runtime/orchestration/role-calls/ledger.js +2 -2
  129. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +7 -0
  130. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +2 -0
  131. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +88 -0
  132. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  133. package/dist/src/runtime/orchestration/role-calls/reducer.js +2 -1
  134. package/dist/src/runtime/orchestration/role-calls/skill-read.d.ts +47 -0
  135. package/dist/src/runtime/orchestration/role-calls/skill-read.js +196 -0
  136. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.d.ts +1 -1
  137. package/dist/src/runtime/orchestration/role-executors/activation/model-output-failure.js +4 -2
  138. package/dist/src/runtime/orchestration/worker-capabilities/binding/create-binding.js +4 -1
  139. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +4 -2
  140. package/dist/src/runtime/orchestration/worker-capabilities/contracts.js +2 -2
  141. package/dist/src/runtime/orchestration/worker-capabilities/execution/approval-group.js +10 -4
  142. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.d.ts +5 -0
  143. package/dist/src/runtime/orchestration/worker-capabilities/execution/execution-freshness.js +31 -0
  144. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.d.ts +2 -0
  145. package/dist/src/runtime/orchestration/worker-capabilities/payload-compaction-transport.js +7 -2
  146. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.d.ts +19 -0
  147. package/dist/src/runtime/orchestration/worker-capabilities/supervisor-skill-authority.js +43 -0
  148. package/dist/src/runtime/plugins/loader.js +7 -6
  149. package/dist/src/runtime/plugins/manifest-projection.js +3 -0
  150. package/dist/src/runtime/request/approval-wait/preflight.js +1 -0
  151. package/dist/src/runtime/request/bound-runtime-handler.js +1 -0
  152. package/dist/src/runtime/request/capability-execution-freshness.js +6 -1
  153. package/dist/src/runtime/request/contracts.d.ts +2 -0
  154. package/dist/src/runtime/request/execution-agent-root-execution.js +11 -1
  155. package/dist/src/runtime/request/execution-payload-compacted-evidence.d.ts +2 -2
  156. package/dist/src/runtime/request/execution-scope-surfaces.d.ts +2 -0
  157. package/dist/src/runtime/request/execution-scope-surfaces.js +7 -0
  158. package/dist/src/runtime/request/execution-scope.d.ts +6 -2
  159. package/dist/src/runtime/request/execution-scope.js +11 -0
  160. package/dist/src/runtime/request/payload-settled-evidence.d.ts +11 -0
  161. package/dist/src/runtime/request/payload-settled-evidence.js +29 -0
  162. package/dist/src/runtime/request/prepared-execution.js +2 -0
  163. package/dist/src/runtime/request/role-call-delegation-events.d.ts +19 -0
  164. package/dist/src/runtime/request/role-call-delegation-events.js +52 -0
  165. package/dist/src/runtime/request/role-call-return-events.d.ts +19 -0
  166. package/dist/src/runtime/request/role-call-return-events.js +63 -0
  167. package/dist/src/runtime/request/role-executor-composition.js +2 -2
  168. package/dist/src/runtime/request/root-capability-binding.d.ts +24 -0
  169. package/dist/src/runtime/request/root-capability-binding.js +57 -0
  170. package/dist/src/runtime/request/root-capability-catalog.d.ts +16 -0
  171. package/dist/src/runtime/request/root-capability-catalog.js +20 -0
  172. package/dist/src/runtime/request/root-contract.d.ts +13 -1
  173. package/dist/src/runtime/request/root-execution-kernel.js +36 -68
  174. package/dist/src/runtime/request/root-reference-action.d.ts +15 -0
  175. package/dist/src/runtime/request/root-reference-action.js +48 -0
  176. package/dist/src/runtime/request/root-skill-read.d.ts +13 -0
  177. package/dist/src/runtime/request/root-skill-read.js +102 -0
  178. package/dist/src/runtime/request/runner.js +19 -3
  179. package/dist/src/runtime/request/super-payload-context-failure.js +13 -4
  180. package/dist/src/runtime/request/supervisor-root-execution.js +54 -1
  181. package/dist/src/runtime/request/supervisor-skill-edit-target.d.ts +9 -0
  182. package/dist/src/runtime/request/supervisor-skill-edit-target.js +25 -0
  183. package/dist/src/runtime/request/supervisor-skill-payload-context.d.ts +21 -0
  184. package/dist/src/runtime/request/supervisor-skill-payload-context.js +91 -0
  185. package/dist/src/runtime/request/supervisor-skill-write-preparation.d.ts +25 -0
  186. package/dist/src/runtime/request/supervisor-skill-write-preparation.js +71 -0
  187. package/dist/src/runtime/request/worker-capability-composition.d.ts +4 -1
  188. package/dist/src/runtime/request/worker-capability-composition.js +4 -1
  189. package/dist/src/runtime/request/worker-capability-payload.d.ts +1 -1
  190. package/dist/src/runtime/request/worker-capability-payload.js +44 -37
  191. package/dist/src/runtime/runtime-environment.d.ts +2 -0
  192. package/dist/src/runtime/runtime-environment.js +12 -1
  193. package/dist/src/runtime/scheduler/contracts.d.ts +4 -0
  194. package/dist/src/runtime/scheduler/run-list-filter.d.ts +11 -0
  195. package/dist/src/runtime/scheduler/run-list-filter.js +56 -0
  196. package/dist/src/runtime/scheduler/run-list-query.d.ts +2 -2
  197. package/dist/src/runtime/scheduler/run-list-query.js +4 -1
  198. package/dist/src/runtime/steps/auditor-decision/contracts.d.ts +2 -0
  199. package/dist/src/runtime/steps/auditor-decision/evidence-representation.d.ts +2 -2
  200. package/dist/src/runtime/steps/auditor-decision/evidence-representation.js +2 -34
  201. package/dist/src/runtime/steps/auditor-decision/input.js +21 -3
  202. package/dist/src/runtime/steps/auditor-decision/projection.js +5 -0
  203. package/dist/src/runtime/steps/auditor-decision/prompt.d.ts +1 -1
  204. package/dist/src/runtime/steps/auditor-decision/prompt.js +14 -3
  205. package/dist/src/runtime/steps/capability-execution-guidance.d.ts +7 -0
  206. package/dist/src/runtime/steps/capability-execution-guidance.js +28 -0
  207. package/dist/src/runtime/steps/capability-execution-instructions.d.ts +0 -2
  208. package/dist/src/runtime/steps/capability-execution-instructions.js +0 -2
  209. package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +5 -2
  210. package/dist/src/runtime/steps/execution-agent/capability-result-context.js +22 -3
  211. package/dist/src/runtime/steps/execution-agent/compaction.d.ts +3 -2
  212. package/dist/src/runtime/steps/execution-agent/compaction.js +9 -1
  213. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +10 -0
  214. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +13 -1
  215. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.d.ts +3 -0
  216. package/dist/src/runtime/steps/execution-agent/direct-response-configuration.js +64 -0
  217. package/dist/src/runtime/steps/execution-agent/direct-response-contract.d.ts +7 -0
  218. package/dist/src/runtime/steps/execution-agent/direct-response-contract.js +56 -0
  219. package/dist/src/runtime/steps/execution-agent/direct-response-policy.d.ts +9 -0
  220. package/dist/src/runtime/steps/execution-agent/direct-response-policy.js +30 -0
  221. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.d.ts +7 -0
  222. package/dist/src/runtime/steps/execution-agent/direct-response-prompt.js +43 -0
  223. package/dist/src/runtime/steps/execution-agent/format.js +2 -0
  224. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -0
  225. package/dist/src/runtime/steps/execution-agent/input.js +35 -2
  226. package/dist/src/runtime/steps/execution-agent/plugin-catalog.d.ts +4 -0
  227. package/dist/src/runtime/steps/execution-agent/plugin-catalog.js +8 -0
  228. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +1 -0
  229. package/dist/src/runtime/steps/execution-agent/prompt.js +42 -41
  230. package/dist/src/runtime/steps/execution-agent/refinement-input.d.ts +1 -0
  231. package/dist/src/runtime/steps/execution-agent/refinement-prompt.js +4 -1
  232. package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
  233. package/dist/src/runtime/steps/execution-agent/response-run.js +6 -12
  234. package/dist/src/runtime/steps/execution-agent/run.js +5 -2
  235. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
  236. package/dist/src/runtime/steps/execution-agent/state-context.js +3 -40
  237. package/dist/src/runtime/steps/knowledge-skill-instructions.d.ts +3 -0
  238. package/dist/src/runtime/steps/knowledge-skill-instructions.js +3 -0
  239. package/dist/src/runtime/steps/planner-decision/capability-brief.d.ts +4 -2
  240. package/dist/src/runtime/steps/planner-decision/capability-brief.js +5 -1
  241. package/dist/src/runtime/steps/planner-decision/input.d.ts +2 -2
  242. package/dist/src/runtime/steps/planner-decision/input.js +7 -1
  243. package/dist/src/runtime/steps/planner-decision/prompt.js +29 -49
  244. package/dist/src/runtime/steps/planner-graph/input.d.ts +2 -2
  245. package/dist/src/runtime/steps/planner-graph/input.js +9 -8
  246. package/dist/src/runtime/steps/planner-graph/prompt.js +2 -2
  247. package/dist/src/runtime/steps/planner-graph/run.d.ts +2 -2
  248. package/dist/src/runtime/steps/planner-graph/run.js +5 -5
  249. package/dist/src/runtime/steps/planner-graph/skill-guidance.d.ts +5 -0
  250. package/dist/src/runtime/steps/planner-graph/skill-guidance.js +62 -0
  251. package/dist/src/runtime/steps/reviewer-decision/final-evidence.d.ts +1 -0
  252. package/dist/src/runtime/steps/reviewer-decision/final-evidence.js +3 -1
  253. package/dist/src/runtime/steps/reviewer-decision/input.d.ts +3 -1
  254. package/dist/src/runtime/steps/reviewer-decision/input.js +2 -22
  255. package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +21 -0
  256. package/dist/src/runtime/steps/reviewer-decision/model-context.js +32 -1
  257. package/dist/src/runtime/steps/reviewer-decision/projection.js +4 -0
  258. package/dist/src/runtime/steps/reviewer-decision/prompt.d.ts +1 -1
  259. package/dist/src/runtime/steps/reviewer-decision/prompt.js +15 -4
  260. package/dist/src/runtime/steps/reviewer-decision/run.d.ts +2 -0
  261. package/dist/src/runtime/steps/reviewer-decision/run.js +6 -0
  262. package/dist/src/runtime/steps/skill-read-decision.d.ts +34 -0
  263. package/dist/src/runtime/steps/skill-read-decision.js +91 -0
  264. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.d.ts +22 -0
  265. package/dist/src/runtime/steps/supervisor-decision/artifact-paths.js +132 -0
  266. package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +2 -0
  267. package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +9 -2
  268. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +12 -3
  269. package/dist/src/runtime/steps/supervisor-decision/contracts.js +3 -0
  270. package/dist/src/runtime/steps/supervisor-decision/decision-phases.d.ts +37 -0
  271. package/dist/src/runtime/steps/supervisor-decision/decision-phases.js +124 -0
  272. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +5 -1
  273. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +4 -0
  274. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +1 -0
  275. package/dist/src/runtime/steps/supervisor-decision/format.js +2 -0
  276. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +8 -1
  277. package/dist/src/runtime/steps/supervisor-decision/input.js +35 -11
  278. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +1 -0
  279. package/dist/src/runtime/steps/supervisor-decision/parser.js +11 -0
  280. package/dist/src/runtime/steps/supervisor-decision/preparation-input.d.ts +26 -0
  281. package/dist/src/runtime/steps/supervisor-decision/preparation-input.js +39 -0
  282. package/dist/src/runtime/steps/supervisor-decision/preparation.d.ts +17 -0
  283. package/dist/src/runtime/steps/supervisor-decision/preparation.js +65 -0
  284. package/dist/src/runtime/steps/supervisor-decision/presentation.d.ts +13 -0
  285. package/dist/src/runtime/steps/supervisor-decision/presentation.js +47 -0
  286. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +5 -0
  287. package/dist/src/runtime/steps/supervisor-decision/prompt.js +97 -106
  288. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +2 -0
  289. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +2 -0
  290. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +3 -0
  291. package/dist/src/runtime/steps/supervisor-decision/resume.js +20 -0
  292. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +7 -0
  293. package/dist/src/runtime/steps/supervisor-decision/run.js +76 -158
  294. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.d.ts +21 -0
  295. package/dist/src/runtime/steps/supervisor-decision/skill-selection-input.js +29 -0
  296. package/dist/src/runtime/steps/supervisor-decision/skill-selection.d.ts +16 -0
  297. package/dist/src/runtime/steps/supervisor-decision/skill-selection.js +44 -0
  298. package/dist/src/runtime/steps/supervisor-response/input.d.ts +3 -0
  299. package/dist/src/runtime/steps/supervisor-response/input.js +5 -0
  300. package/dist/src/runtime/steps/supervisor-response/prompt.js +2 -0
  301. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +3 -0
  302. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +24 -4
  303. package/dist/src/runtime/steps/supervisor-response/run.d.ts +7 -0
  304. package/dist/src/runtime/steps/supervisor-response/run.js +3 -6
  305. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.d.ts +43 -0
  306. package/dist/src/runtime/steps/supervisor-skill-authoring/contract.js +85 -0
  307. package/dist/src/runtime/steps/supervisor-skill-authoring/input.d.ts +35 -0
  308. package/dist/src/runtime/steps/supervisor-skill-authoring/input.js +87 -0
  309. package/dist/src/runtime/steps/supervisor-skill-authoring/run.d.ts +10 -0
  310. package/dist/src/runtime/steps/supervisor-skill-authoring/run.js +35 -0
  311. package/dist/src/runtime/steps/supervisor-skill-instructions.d.ts +4 -0
  312. package/dist/src/runtime/steps/supervisor-skill-instructions.js +4 -0
  313. package/dist/src/runtime/steps/worker-capability-scope-decision.js +14 -1
  314. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +1 -0
  315. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.d.ts +5 -0
  316. package/dist/src/runtime/steps/worker-decision/input/execution-guidance.js +31 -0
  317. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +2 -25
  318. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +4 -0
  319. package/dist/src/runtime/steps/worker-decision/prompt.js +6 -2
  320. package/dist/src/runtime/steps/worker-decision/result-author.js +6 -0
  321. package/dist/src/web-ui/app/ARCHITECTURE.md +1 -1
  322. package/dist/src/web-ui/app/app-bootstrap.js +3 -0
  323. package/dist/src/web-ui/app/app.js +7 -1
  324. package/dist/src/web-ui/app/components/automations/run-history-controls.js +77 -0
  325. package/dist/src/web-ui/app/components/automations/run-history.js +55 -0
  326. package/dist/src/web-ui/app/components/automations/run.js +3 -8
  327. package/dist/src/web-ui/app/components/automations/timeline.js +3 -2
  328. package/dist/src/web-ui/app/components/automations/workspace.js +11 -2
  329. package/dist/src/web-ui/app/components/conversation-role-cards.js +27 -0
  330. package/dist/src/web-ui/app/components/conversation-role-delegations.d.ts +12 -0
  331. package/dist/src/web-ui/app/components/conversation-role-delegations.js +24 -0
  332. package/dist/src/web-ui/app/components/conversation-role-history.d.ts +13 -0
  333. package/dist/src/web-ui/app/components/conversation-role-history.js +81 -0
  334. package/dist/src/web-ui/app/components/conversation-role-returns.d.ts +12 -0
  335. package/dist/src/web-ui/app/components/conversation-role-returns.js +23 -0
  336. package/dist/src/web-ui/app/components/dashboard/compact-layout.js +137 -0
  337. package/dist/src/web-ui/app/components/dashboard/icons.js +5 -0
  338. package/dist/src/web-ui/app/components/dashboard/widget-card.js +85 -0
  339. package/dist/src/web-ui/app/components/dashboard/widget-dialog.js +83 -0
  340. package/dist/src/web-ui/app/components/dashboard/widget-summaries.js +155 -0
  341. package/dist/src/web-ui/app/components/dashboard/workspace.js +28 -4
  342. package/dist/src/web-ui/app/components/onboarding-workspace-access.js +1 -1
  343. package/dist/src/web-ui/app/components/operations-summary.js +2 -1
  344. package/dist/src/web-ui/app/components/passive-learning/home-widget-preview.js +32 -0
  345. package/dist/src/web-ui/app/components/passive-learning/home.js +4 -1
  346. package/dist/src/web-ui/app/components/schedules/details.js +3 -2
  347. package/dist/src/web-ui/app/components/skills/workspace.js +119 -0
  348. package/dist/src/web-ui/app/components/spark-chat/panel.js +1 -1
  349. package/dist/src/web-ui/app/components/spark-chat/settings.js +1 -1
  350. package/dist/src/web-ui/app/components/system-host/home-widget-permission-preview.js +75 -0
  351. package/dist/src/web-ui/app/components/system-host/home-widget-summary.js +93 -0
  352. package/dist/src/web-ui/app/components/system-host/macos-permission-rendering.js +2 -2
  353. package/dist/src/web-ui/app/components/system-host/native-windows-access.js +1 -1
  354. package/dist/src/web-ui/app/components/system-host/rendering.js +3 -3
  355. package/dist/src/web-ui/app/components/system-host/windows-store-setup.js +2 -2
  356. package/dist/src/web-ui/app/components/workspace-shell.js +11 -1
  357. package/dist/src/web-ui/app/computer-access-feature.js +13 -1
  358. package/dist/src/web-ui/app/configuration-feature.js +2 -0
  359. package/dist/src/web-ui/app/controllers/automation-read-projection.js +8 -4
  360. package/dist/src/web-ui/app/controllers/automation-run-actions.js +3 -1
  361. package/dist/src/web-ui/app/controllers/automation-run-history.js +159 -0
  362. package/dist/src/web-ui/app/controllers/automations-controller.js +27 -11
  363. package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +6 -2
  364. package/dist/src/web-ui/app/controllers/operations-controller.js +2 -1
  365. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +22 -1
  366. package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +1 -1
  367. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +7 -1
  368. package/dist/src/web-ui/app/controllers/skills-controller.js +237 -0
  369. package/dist/src/web-ui/app/dashboard-feature.js +9 -0
  370. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +5 -0
  371. package/dist/src/web-ui/app/lib/conversation-role-model.js +63 -5
  372. package/dist/src/web-ui/app/lib/event-presentation.js +34 -0
  373. package/dist/src/web-ui/app/lib/reasoning-controls.js +6 -1
  374. package/dist/src/web-ui/app/lib/role-delegation-event.d.ts +18 -0
  375. package/dist/src/web-ui/app/lib/role-delegation-event.js +47 -0
  376. package/dist/src/web-ui/app/lib/role-return-event.d.ts +19 -0
  377. package/dist/src/web-ui/app/lib/role-return-event.js +36 -0
  378. package/dist/src/web-ui/app/lib/tool-activity-event.js +8 -6
  379. package/dist/src/web-ui/app/lib/tool-skill-activity-fields.js +50 -0
  380. package/dist/src/web-ui/app/lib/workspace-route.js +1 -0
  381. package/dist/src/web-ui/app/passive-learning-feature.js +2 -2
  382. package/dist/src/web-ui/app/services/runtime-web-client/automations.d.ts +9 -1
  383. package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
  384. package/dist/src/web-ui/app/services/runtime-web-client/skills.js +23 -0
  385. package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
  386. package/dist/src/web-ui/app/skills-feature.js +36 -0
  387. package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +58 -0
  388. package/dist/src/web-ui/app/styles/40-skills.css +34 -0
  389. package/dist/src/web-ui/app/styles/50-automations.css +24 -3
  390. package/dist/src/web-ui/app/styles/95-home-widgets.css +110 -0
  391. package/dist/src/web-ui/app/styles.css +2 -0
  392. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  393. package/dist/src/web-ui/app/ui-behavior.js +1 -0
  394. package/dist/src/web-ui/client-state/store.js +3 -2
  395. package/dist/src/web-ui/client-state/transaction-order.d.ts +2 -0
  396. package/dist/src/web-ui/client-state/transaction-order.js +18 -0
  397. package/dist/src/web-ui/local-runtime/api-router.d.ts +1 -0
  398. package/dist/src/web-ui/local-runtime/api-router.js +7 -0
  399. package/dist/src/web-ui/local-runtime/automation-routes.js +2 -1
  400. package/dist/src/web-ui/local-runtime/automation-run-page.d.ts +5 -0
  401. package/dist/src/web-ui/local-runtime/automation-run-page.js +26 -0
  402. package/dist/src/web-ui/local-runtime/skill-management-routes.d.ts +18 -0
  403. package/dist/src/web-ui/local-runtime/skill-management-routes.js +118 -0
  404. package/docs/configuration.md +8 -0
  405. package/docs/plugins.md +37 -32
  406. package/docs/runtime-public-contracts.md +37 -0
  407. package/examples/request-runner.config.example.json +3 -0
  408. package/package.json +1 -1
  409. package/plugins/capability-brief/plugin.json +1 -1
  410. package/plugins/code-outline/plugin.json +1 -1
  411. package/plugins/document-reader/plugin.json +1 -1
  412. package/plugins/exec/plugin.json +1 -1
  413. package/plugins/filesystem/plugin.json +1 -1
  414. package/plugins/json-inspector/plugin.json +1 -1
  415. package/plugins/local-search/plugin.json +1 -1
  416. package/plugins/memory/plugin.json +1 -1
  417. package/plugins/project-orientation/plugin.json +1 -1
  418. package/plugins/system/plugin.json +1 -1
  419. package/plugins/system-probe/plugin.json +1 -1
  420. package/plugins/web/plugin.json +1 -1
  421. package/plugins/web/skills/web_fetch_skill/SKILL.md +1 -2
  422. package/plugins/web/skills/web_search_skill/SKILL.md +3 -7
  423. package/src/runtime/README.md +96 -1
@@ -1,6 +1,7 @@
1
1
  import { traceDebug } from "../../runtime/observability/debug-logger.js";
2
2
  import { permitsModelContentTrace } from "../observability/content-trace-policy.js";
3
3
  import { buildModelInvocationMetrics } from "./invocation-metrics.js";
4
+ import { fetchModelGatewayResponse, ModelGatewayInvocationError, } from "./invocation-error.js";
4
5
  import { buildChatGatewayRequestBody, resolveMetricMessages, resolveRequestMessages, } from "./message-projection.js";
5
6
  import { resolveClientOptions } from "./options.js";
6
7
  import { ChatStreamAccumulator, classifyEmptyResponse, InactivityBoundStreamReader, } from "./stream-consumer.js";
@@ -24,14 +25,16 @@ export async function invokeModelGatewayWithOptions(params, options = {}) {
24
25
  textLength: typeof params.text === "string" ? params.text.length : 0,
25
26
  messageCount: requestMessages.length,
26
27
  });
27
- const response = await fetch(url + "/chat", {
28
+ const serializedRequestBody = JSON.stringify(requestBody);
29
+ const response = await fetchModelGatewayResponse(url + "/chat", {
28
30
  method: "POST",
29
31
  headers: {
30
32
  "Content-Type": "application/json",
31
33
  },
32
34
  signal: params.abortSignal,
33
- body: JSON.stringify(requestBody),
34
- });
35
+ body: serializedRequestBody,
36
+ }, params.abortSignal);
37
+ params.abortSignal.throwIfAborted();
35
38
  traceDebug("model-gateway.client", "chat.response.received", {
36
39
  requestId,
37
40
  status: response.status,
@@ -39,6 +42,7 @@ export async function invokeModelGatewayWithOptions(params, options = {}) {
39
42
  });
40
43
  if (!response.ok) {
41
44
  const errorText = await response.text().catch(() => "");
45
+ params.abortSignal.throwIfAborted();
42
46
  traceDebug("model-gateway.client", "chat.response.error", {
43
47
  requestId,
44
48
  status: response.status,
@@ -47,13 +51,13 @@ export async function invokeModelGatewayWithOptions(params, options = {}) {
47
51
  ? { bodyPreview: errorText.slice(0, 400) }
48
52
  : { contentOmitted: true }),
49
53
  });
50
- throw new Error(`bridge_request_failed:${response.status}:${permitsModelContentTrace(params.modelStep, params.messages) ? errorText || "empty error body" : "content omitted"}`);
54
+ throw new ModelGatewayInvocationError("http", `bridge_request_failed:${response.status}:${permitsModelContentTrace(params.modelStep, params.messages) ? errorText || "empty error body" : "content omitted"}`);
51
55
  }
52
56
  if (!response.body) {
53
57
  traceDebug("model-gateway.client", "chat.response.no_body", {
54
58
  requestId,
55
59
  });
56
- throw new Error("no stream");
60
+ throw new ModelGatewayInvocationError("missing_stream", "no stream");
57
61
  }
58
62
  const streamReader = new InactivityBoundStreamReader(response.body.getReader(), params.abortSignal, clientOptions.getStreamInactivityTimeoutMs);
59
63
  const stream = new ChatStreamAccumulator(params);
@@ -0,0 +1,9 @@
1
+ export type ModelGatewayInvocationFailureKind = "network" | "http" | "stream" | "inactivity" | "missing_stream";
2
+ /** A failed transport attempt, distinct from local validation or callbacks. */
3
+ export declare class ModelGatewayInvocationError extends Error {
4
+ readonly kind: ModelGatewayInvocationFailureKind;
5
+ constructor(kind: ModelGatewayInvocationFailureKind, message: string, options?: ErrorOptions);
6
+ }
7
+ export declare function wrapModelGatewayTransportError(kind: "network" | "stream", cause: unknown): ModelGatewayInvocationError;
8
+ /** Only fetch rejection is classified; request construction stays with callers. */
9
+ export declare function fetchModelGatewayResponse(url: string, init: RequestInit, abortSignal: AbortSignal): Promise<Response>;
@@ -0,0 +1,30 @@
1
+ /** A failed transport attempt, distinct from local validation or callbacks. */
2
+ export class ModelGatewayInvocationError extends Error {
3
+ kind;
4
+ constructor(kind, message, options) {
5
+ super(message, options);
6
+ this.kind = kind;
7
+ this.name = "ModelGatewayInvocationError";
8
+ }
9
+ }
10
+ export function wrapModelGatewayTransportError(kind, cause) {
11
+ return new ModelGatewayInvocationError(kind, readTransportFailureMessage(kind, cause), { cause });
12
+ }
13
+ function readTransportFailureMessage(kind, cause) {
14
+ if (cause instanceof Error)
15
+ return cause.message;
16
+ if (typeof cause === "string")
17
+ return cause;
18
+ return `model_gateway_${kind}_failed`;
19
+ }
20
+ /** Only fetch rejection is classified; request construction stays with callers. */
21
+ export async function fetchModelGatewayResponse(url, init, abortSignal) {
22
+ try {
23
+ return await fetch(url, init);
24
+ }
25
+ catch (error) {
26
+ if (abortSignal.aborted)
27
+ throw error;
28
+ throw wrapModelGatewayTransportError("network", error);
29
+ }
30
+ }
@@ -1,4 +1,5 @@
1
1
  import { applyStreamLine, } from "../client-stream-parser.js";
2
+ import { ModelGatewayInvocationError, wrapModelGatewayTransportError, } from "./invocation-error.js";
2
3
  function resolveAbortMessage(reason) {
3
4
  if (reason instanceof Error) {
4
5
  return reason.message;
@@ -53,9 +54,15 @@ export class InactivityBoundStreamReader {
53
54
  void this.reader
54
55
  .cancel("llm_stream_inactivity_timeout")
55
56
  .catch(() => { });
56
- settle(reject, createAbortError("llm_stream_inactivity_timeout"));
57
+ settle(reject, new ModelGatewayInvocationError("inactivity", "llm_stream_inactivity_timeout"));
57
58
  }, inactivityTimeoutMs);
58
- void this.reader.read().then((result) => settle(resolve, result), (error) => settle(reject, error));
59
+ void this.reader.read().then((result) => settle(resolve, result), (error) => {
60
+ if (this.abortSignal.aborted) {
61
+ settle(reject, createAbortError(this.abortSignal.reason));
62
+ return;
63
+ }
64
+ settle(reject, wrapModelGatewayTransportError("stream", error));
65
+ });
59
66
  });
60
67
  }
61
68
  }
@@ -1,4 +1,5 @@
1
1
  import { normalizeModelTokenUsage } from "../protocol/usage.js";
2
+ import { ModelGatewayInvocationError } from "./invocation-error.js";
2
3
  function readText(value) {
3
4
  return typeof value === "string" ? value : "";
4
5
  }
@@ -51,7 +52,7 @@ function throwStreamError(message, data, callbacks) {
51
52
  kind: "error",
52
53
  text: errorText,
53
54
  });
54
- throw new Error(`model_stream_error: ${errorText}`);
55
+ throw new ModelGatewayInvocationError("stream", `model_stream_error: ${errorText}`);
55
56
  }
56
57
  function readContentText(message, data) {
57
58
  return (readText(message.text) ||
@@ -6,6 +6,7 @@ export declare function isModelGatewayToolCall(value: unknown): value is ModelGa
6
6
  export declare function isAssistantToolCallMessage(value: unknown): value is ChatAssistantToolCallMessage;
7
7
  export declare function isToolResultMessage(value: unknown): value is ChatToolResultMessage;
8
8
  export declare function isTextChatMessage(value: unknown): value is ChatTextMessage;
9
+ export declare function isStrictTextChatMessage(value: unknown): value is ChatTextMessage;
9
10
  export declare function hasModelGatewayToolInteractionLane(value: unknown): boolean;
10
11
  /**
11
12
  * Enforces the native tool-call continuation protocol whenever any tool-lane
@@ -115,7 +115,7 @@ export function isTextChatMessage(value) {
115
115
  typeof value.content === "string" &&
116
116
  !Object.prototype.hasOwnProperty.call(value, "toolCalls"));
117
117
  }
118
- function isStrictTextChatMessage(value) {
118
+ export function isStrictTextChatMessage(value) {
119
119
  if (!isRecord(value) ||
120
120
  !hasOnlyKeys(value, TEXT_MESSAGE_KEYS) ||
121
121
  !isTextChatMessage(value)) {
@@ -1,5 +1,6 @@
1
1
  import { resolveModelInvocation } from "../policy/invocation-policy.js";
2
2
  import { respondToGatewayHandlerError } from "./errors.js";
3
+ import { writeChatStreamResponse } from "./chat-stream-response.js";
3
4
  import { sendText } from "./http-response.js";
4
5
  import { applyConfiguredModelPolicy, emitResolvedModelInvocation, validateImageInvocationSupport, validateMessageInteractionRequest, } from "./invocation-validation.js";
5
6
  import { createContextGuardedProviderFetch } from "./provider-fetch.js";
@@ -62,14 +63,11 @@ export function createChatHandler(options = {}, inputTokenMeasurements) {
62
63
  if (result.kind !== "chat") {
63
64
  throw new Error("model_provider_adapter_chat_result_invalid");
64
65
  }
65
- response.setHeader("Content-Type", "application/x-ndjson; charset=utf-8");
66
- response.setHeader("Cache-Control", "no-cache");
67
- await result.stream({
68
- emit(event) {
69
- response.write(`${JSON.stringify(event)}\n`);
70
- },
66
+ await writeChatStreamResponse({
67
+ invocation: result,
68
+ response,
69
+ abortSignal,
71
70
  });
72
- response.end();
73
71
  }
74
72
  catch (error) {
75
73
  respondToGatewayHandlerError({
@@ -0,0 +1,7 @@
1
+ import type { ModelProviderChatInvocation } from "../providers/contracts.js";
2
+ import type { GatewayResponse } from "./contracts.js";
3
+ export declare function writeChatStreamResponse(params: {
4
+ invocation: ModelProviderChatInvocation;
5
+ response: GatewayResponse;
6
+ abortSignal: AbortSignal;
7
+ }): Promise<void>;
@@ -0,0 +1,25 @@
1
+ export async function writeChatStreamResponse(params) {
2
+ const { invocation, response, abortSignal } = params;
3
+ let hasEmittedEvent = false;
4
+ response.setHeader("Content-Type", "application/x-ndjson; charset=utf-8");
5
+ response.setHeader("Cache-Control", "no-cache");
6
+ try {
7
+ await invocation.stream({
8
+ emit(event) {
9
+ response.write(`${JSON.stringify(event)}\n`);
10
+ hasEmittedEvent = true;
11
+ },
12
+ });
13
+ }
14
+ catch (error) {
15
+ if (abortSignal.aborted)
16
+ return;
17
+ // Before the first write, the handler can still send its normal HTTP error.
18
+ if (!hasEmittedEvent)
19
+ throw error;
20
+ console.error(error);
21
+ response.end(`${JSON.stringify({ type: "error", error: "server error" })}\n`);
22
+ return;
23
+ }
24
+ response.end();
25
+ }
@@ -1,7 +1,9 @@
1
1
  import type { ToolCall } from "../../../../capabilities/tool-types.js";
2
2
  import { type ToolEventExecutorIdentity } from "../shared/event-metadata.js";
3
3
  import type { ToolApprovalController, ToolApprovalRequest, ToolApprovalDecision, ToolPermissionMode } from "../../../ports.js";
4
- import type { RegisteredToolNormalInvocationRejection } from "../shared/contracts.js";
4
+ import type { BoundOperation, RegisteredToolNormalInvocationRejection } from "../shared/contracts.js";
5
+ /** Both accepted source and normalized target must share the core read exemption. */
6
+ export declare function requiresRegisteredToolActionApproval(mode: ToolPermissionMode, source: BoundOperation, target: BoundOperation): boolean;
5
7
  export declare function requestNormalInvocationApproval(params: {
6
8
  preparedRequest?: ToolApprovalRequest;
7
9
  decision?: ToolApprovalDecision;
@@ -17,6 +19,8 @@ export declare function requestNormalInvocationApproval(params: {
17
19
  call: ToolCall;
18
20
  eventMeta?: Record<string, unknown>;
19
21
  force: boolean;
22
+ /** Captured operation policy; omitted for ordinary direct approval callers. */
23
+ requiredByOperationPolicy?: boolean;
20
24
  }): Promise<Readonly<{
21
25
  ok: true;
22
26
  }> | Readonly<{
@@ -1,13 +1,27 @@
1
1
  import { requiresToolActionApproval } from "../../../../capabilities/tool-permission-mode.js";
2
+ import { isCoreToolAutomaticRead } from "../../../capabilities/core-tool-contracts.js";
2
3
  import { buildToolExecutorEventMetadata, } from "../shared/event-metadata.js";
3
4
  import { rejectNormalInvocation } from "../shared/rejection.js";
5
+ /** Both accepted source and normalized target must share the core read exemption. */
6
+ export function requiresRegisteredToolActionApproval(mode, source, target) {
7
+ const force = source.operation.approval === "always" || target.operation.approval === "always";
8
+ if (!requiresToolActionApproval(mode, force))
9
+ return false;
10
+ if (force)
11
+ return true;
12
+ if (!isCoreToolAutomaticRead(source.registration.toolName, source.operation))
13
+ return true;
14
+ return !isCoreToolAutomaticRead(target.registration.toolName, target.operation);
15
+ }
4
16
  function recommendsFullPlusForForcedAction(mode, force) {
5
17
  if (mode !== "full_access")
6
18
  return false;
7
19
  return force;
8
20
  }
9
21
  export async function requestNormalInvocationApproval(params) {
10
- if (!requiresToolActionApproval(params.toolPermissionMode, params.force)) {
22
+ const required = params.requiredByOperationPolicy ??
23
+ requiresToolActionApproval(params.toolPermissionMode, params.force);
24
+ if (!required) {
11
25
  return Object.freeze({ ok: true });
12
26
  }
13
27
  const approvalId = params.preparedRequest?.approvalId ?? params.nextApprovalId();
@@ -1,17 +1,17 @@
1
1
  import { createRegisteredToolResultBudget, assertRegisteredToolResultMetadataFits, } from "./result-budget.js";
2
2
  import { randomUUID } from "node:crypto";
3
- import { requiresToolActionApproval } from "../../../../capabilities/tool-permission-mode.js";
4
3
  import { buildToolCompletedEventActions, buildToolCompletedEventMetadata, buildToolLifecycleEventCopy, } from "../../../../capabilities/tool-event-metadata.js";
5
4
  import { buildToolExecutorEventMetadata, } from "../shared/event-metadata.js";
6
5
  import { rejectNormalInvocation } from "../shared/rejection.js";
7
- import { requestNormalInvocationApproval } from "./approval.js";
6
+ import { requestNormalInvocationApproval, requiresRegisteredToolActionApproval } from "./approval.js";
8
7
  import { createPreparedInvocationRejectionEmitter } from "./rejection-event.js";
9
8
  import { createFileOutputPresentation } from "./file-output-presentation.js";
10
9
  import { executeWithToolResources } from "./tool-media-execution.js";
11
10
  export function createPreparedNormalInvocation(params) {
12
- const force = params.source.operation.approval === "always" ||
13
- params.target.operation.approval === "always";
14
- const approvalRequest = requiresToolActionApproval(params.executor.toolPermissionMode, force)
11
+ // Keep an already-recorded approval pending across upgrades; new core reads skip it.
12
+ const requiresApproval = params.restoredApprovalRequest !== undefined ||
13
+ requiresRegisteredToolActionApproval(params.executor.toolPermissionMode, params.source, params.target);
14
+ const approvalRequest = requiresApproval
15
15
  ? Object.freeze({
16
16
  ...(params.restoredApprovalRequest ?? {
17
17
  requestId: params.executor.requestId,
@@ -82,6 +82,8 @@ async function executePreparedNormalInvocation(params) {
82
82
  });
83
83
  assertRegisteredToolResultMetadataFits(resultBudget);
84
84
  const approval = await requestNormalInvocationApproval({
85
+ requiredByOperationPolicy: params.approvalRequest !== undefined ||
86
+ requiresRegisteredToolActionApproval(params.executor.toolPermissionMode, params.source, params.target),
85
87
  ...(params.approvalRequest
86
88
  ? { preparedRequest: params.approvalRequest }
87
89
  : {}),
@@ -3,6 +3,7 @@ import { createRegisteredToolActionFingerprint } from "../shared/action-fingerpr
3
3
  import { captureToolCall, resolveExactTargetOperation, validateCompleteCall, } from "./call-binding.js";
4
4
  import { captureExecutionBinding } from "./execution-binding.js";
5
5
  import { createPreparedNormalInvocation } from "./prepared-execution.js";
6
+ import { requiresRegisteredToolActionApproval } from "./approval.js";
6
7
  /** Validate a saved exact call; restoration never invokes normalization or payload authoring. */
7
8
  export function restoreNormalInvocation(params) {
8
9
  const value = params.snapshot;
@@ -48,8 +49,14 @@ export function restoreNormalInvocation(params) {
48
49
  throw invalid();
49
50
  const force = source.operation.approval === "always" ||
50
51
  target.operation.approval === "always";
51
- const required = requiresToolActionApproval(params.executor.toolPermissionMode, force);
52
- if (required !== Boolean(value.approvalRequest))
52
+ const required = requiresRegisteredToolActionApproval(params.executor.toolPermissionMode, source, target);
53
+ const missingRequiredApproval = required && !value.approvalRequest;
54
+ if (missingRequiredApproval)
55
+ throw invalid();
56
+ // Existing ASK approvals remain valid even when core reads no longer need new ones.
57
+ const unexpectedRecordedApproval = value.approvalRequest &&
58
+ !requiresToolActionApproval(params.executor.toolPermissionMode, force);
59
+ if (unexpectedRecordedApproval)
53
60
  throw invalid();
54
61
  if (value.approvalRequest) {
55
62
  if (!isRequestApproval(value.approvalRequest, params.executor.requestId))
@@ -1,8 +1,8 @@
1
1
  import type { CapabilityAdapterResult } from "../../orchestration/capability-adapters/index.js";
2
2
  import type { WorkerCapabilityAdapterResult, WorkerCapabilityExecutionFreshness } from "../../orchestration/worker-capabilities/index.js";
3
3
  import type { PayloadLifecycleEmitter } from "./payload-observability.js";
4
- export declare const STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION: "steering_superseded_before_external_execution";
5
- 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
+ import { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY } from "../../orchestration/worker-capabilities/execution/execution-freshness.js";
5
+ export { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, };
6
6
  export type PayloadLifecycleContext = Readonly<Omit<Parameters<PayloadLifecycleEmitter["emitPayloadLifecycle"]>[0], "phase" | "errorCode">>;
7
7
  export declare function rejectPayloadLifecycle(params: {
8
8
  executor: PayloadLifecycleEmitter;
@@ -1,7 +1,7 @@
1
1
  import { boundedSummary, requireCapabilityAdapterResult, } from "./result-observer.js";
2
2
  import { createRegisteredToolWorkerFailureOutcomeFingerprint } from "./failure-outcome-fingerprint.js";
3
- export const STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION = "steering_superseded_before_external_execution";
4
- 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
+ import { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, } from "../../orchestration/worker-capabilities/execution/execution-freshness.js";
4
+ export { STEERING_SUPERSEDED_BEFORE_EXTERNAL_EXECUTION, STEERING_SUPERSEDED_SUMMARY, };
5
5
  export function rejectPayloadLifecycle(params) {
6
6
  const failed = params.executor.emitPayloadLifecycle({
7
7
  ...params.lifecycle,
@@ -1,9 +1,23 @@
1
1
  import { traceRegisteredToolWorkerCapabilityExecutionStarted, traceRegisteredToolWorkerCapabilityExecutionCompleted, traceRegisteredToolWorkerCapabilityExecutionFailed, } from "../registered-tool-worker-capability-diagnostics.js";
2
2
  import { executionFreshnessRejection } from "./payload-lifecycle.js";
3
+ import { payloadRejection } from "./payload-rejection.js";
3
4
  import { RegisteredToolWorkerCapabilityExecutionError } from "./errors.js";
4
5
  import { observeExternalResult, attachTargetReferences, } from "./result-observer.js";
5
6
  export function createPreparedWorkerInvocation(params, input, normalPreparation, selectedTargetReferences, payloadObservability) {
6
7
  const operationId = params.projection.operation.operationId;
8
+ const rejectBeforeExecution = (executionId, code, message) => {
9
+ payloadObservability.release(executionId);
10
+ const rejectedExecution = payloadRejection(code, message);
11
+ normalPreparation.emitRejection({
12
+ executionId,
13
+ executorIdentity: input.call,
14
+ errorCode: code,
15
+ });
16
+ return attachTargetReferences({
17
+ ...rejectedExecution.result,
18
+ exactResult: rejectedExecution.exactResult,
19
+ }, selectedTargetReferences);
20
+ };
7
21
  return Object.freeze({
8
22
  actionFingerprint: normalPreparation.actionFingerprint,
9
23
  acceptedControls: normalPreparation.acceptedControls,
@@ -18,22 +32,14 @@ export function createPreparedWorkerInvocation(params, input, normalPreparation,
18
32
  : {}),
19
33
  applyApprovalDecision: normalPreparation.applyApprovalDecision,
20
34
  onAdmitted: payloadObservability.release,
35
+ rejectBeforeExecution,
21
36
  execute: async (executionId) => {
22
37
  try {
23
38
  payloadObservability.release(executionId);
24
39
  traceRegisteredToolWorkerCapabilityExecutionStarted(params.diagnostic, operationId, input.call, executionId, input.intent.length, Object.keys(input.controls).length);
25
40
  const rejectedExecution = executionFreshnessRejection(input.executionFreshness);
26
- if (rejectedExecution) {
27
- normalPreparation.emitRejection({
28
- executionId,
29
- executorIdentity: input.call,
30
- errorCode: rejectedExecution.sourceIssueCode,
31
- });
32
- return attachTargetReferences({
33
- ...rejectedExecution.result,
34
- exactResult: rejectedExecution.exactResult,
35
- }, selectedTargetReferences);
36
- }
41
+ if (rejectedExecution)
42
+ return rejectBeforeExecution(executionId, rejectedExecution.sourceIssueCode, rejectedExecution.result.summary);
37
43
  const externalResult = await normalPreparation.execute(executionId, input.call, selectedTargetReferences);
38
44
  const observed = observeExternalResult(externalResult, params.projection.operation.effect, input.call.parentCallId === null, selectedTargetReferences);
39
45
  const observedResult = observed.result;
@@ -15,7 +15,7 @@ export declare function createAutomationService(options: {
15
15
  latestRunId?: string | undefined;
16
16
  latestRunStatus?: import("../scheduler/contracts.js").SchedulerRunStatus | "stopping" | "completed_with_skips" | undefined;
17
17
  publishedRevision?: number;
18
- status: "active" | "paused" | "draft" | "archived";
18
+ status: "archived" | "active" | "paused" | "draft";
19
19
  id: string;
20
20
  title: string;
21
21
  draftRevision: number;
@@ -1,9 +1,9 @@
1
+ import { CORE_TOOL_CONTRACTS } from "../core-tool-contracts.js";
1
2
  import { Buffer } from "node:buffer";
2
3
  import { AUTOMATION_TOOL_EVENT_PRESENTATION } from "../automations/event-presentation.js";
3
4
  import { automationDraftPreparationReceipt } from "../automations/draft-operation-refs.js";
4
5
  import { AutomationDraftReceiptCapacityError, prepareAutomationDraftReceipt } from "../automations/draft-receipt-admission.js";
5
6
  import { AUTOMATION_DRAFT_BATCH_LIMITS, AutomationDraftBatchError, AutomationDraftBatchGraphError } from "../../automations/draft-batch.js";
6
- import { automationBuilderToolContract } from "./tool-contract.js";
7
7
  import { AUTOMATION_BUILDER_PAYLOAD_FORMAT } from "./payload-schema.js";
8
8
  import { compileAutomationCreationRecipe, hasAutomationCreationRecipe } from "./creation-recipe.js";
9
9
  function requiredText(params, key) {
@@ -41,7 +41,7 @@ function requireAcceptedDraftReceipt(output) {
41
41
  async function execute(service, params) {
42
42
  const action = requiredText(params, "action");
43
43
  const plan = parsePlanPayload(params);
44
- const operation = automationBuilderToolContract.operations.find(({ operationId }) => operationId === action);
44
+ const operation = CORE_TOOL_CONTRACTS.automationBuilder.normalInvocation.operations.find(({ operationId }) => operationId === action);
45
45
  if (!operation)
46
46
  throw new Error("automation_action_unknown");
47
47
  let acceptedOutput;
@@ -76,7 +76,7 @@ function failureDetails(error) {
76
76
  export function createAutomationBuilderToolModule(getService, ready) {
77
77
  return {
78
78
  definition: {
79
- name: "automation_builder",
79
+ name: CORE_TOOL_CONTRACTS.automationBuilder.name,
80
80
  eventPresentation: {
81
81
  ...AUTOMATION_TOOL_EVENT_PRESENTATION,
82
82
  metadata: {
@@ -91,7 +91,7 @@ export function createAutomationBuilderToolModule(getService, ready) {
91
91
  payloadChannelSpec: { params: ["planJson"], outputParam: "planJson", generationMode: "raw_text",
92
92
  stages: [{ outputParam: "planJson", responseFormat: AUTOMATION_BUILDER_PAYLOAD_FORMAT }] },
93
93
  },
94
- normalInvocation: automationBuilderToolContract,
94
+ normalInvocation: CORE_TOOL_CONTRACTS.automationBuilder.normalInvocation,
95
95
  async implementation(params, context) {
96
96
  try {
97
97
  await ready();
@@ -7,7 +7,7 @@ export declare function readAutomationDraftIndex(service: AutomationService, off
7
7
  automationId: string;
8
8
  title: string;
9
9
  revision: number;
10
- status: "active" | "paused" | "draft" | "archived";
10
+ status: "archived" | "active" | "paused" | "draft";
11
11
  }[];
12
12
  nextOffset: number | null;
13
13
  omittedCount: number;
@@ -1,9 +1,9 @@
1
+ import { CORE_TOOL_CONTRACTS } from "../core-tool-contracts.js";
1
2
  import { Buffer } from "node:buffer";
2
3
  import { AUTOMATION_TOOL_EVENT_PRESENTATION } from "./event-presentation.js";
3
4
  import { automationDraftPreparationReceipt } from "./draft-operation-refs.js";
4
5
  import { AutomationDraftReceiptCapacityError, prepareAutomationDraftReceipt } from "./draft-receipt-admission.js";
5
6
  import { readAutomationDraftIndex } from "./draft-index.js";
6
- import { automationModelToolContract } from "./model-tool-contract.js";
7
7
  import { readAutomationAuthoringPreparation } from "./authoring-preparation.js";
8
8
  import { automationAuthoringCatalogScope, readAutomationAuthoringCatalog, readAutomationAuthoringCatalogIndex } from "./authoring-catalog.js";
9
9
  import { AUTOMATION_AUTHORING_REFERENCE } from "../automation-builder/authoring-reference.js";
@@ -254,7 +254,7 @@ async function execute(service, params) {
254
254
  export function createAutomationDraftToolModule(getService, ready) {
255
255
  return {
256
256
  definition: {
257
- name: "automations",
257
+ name: CORE_TOOL_CONTRACTS.automations.name,
258
258
  eventPresentation: AUTOMATION_TOOL_EVENT_PRESENTATION,
259
259
  description: "Inspect and make targeted edits to ABot Studio drafts. For a complete connected workflow or several related edits, prefer automation_builder create_automation_draft or apply_automation_draft_changes. Catalog discovery lists tools for the FUTURE workflow, not Studio editing commands; fetch operation detail only when needed. Successful edits return exact revision and newNodeIds for reuse; read_draft when state is unknown or after a revision conflict. Draft authoring only: the user grants permissions, publishes and runs automations.",
260
260
  routingCapability: "semantic_mutation",
@@ -262,14 +262,14 @@ export function createAutomationDraftToolModule(getService, ready) {
262
262
  developmentRoles: ["auxiliary"],
263
263
  controlsRefinement: "mechanical_when_complete",
264
264
  },
265
- normalInvocation: automationModelToolContract,
265
+ normalInvocation: CORE_TOOL_CONTRACTS.automations.normalInvocation,
266
266
  async implementation(params, context) {
267
267
  try {
268
268
  await ready();
269
269
  context?.abortSignal?.throwIfAborted();
270
270
  const result = await execute(getService(), params);
271
271
  if (params.action === "read_draft") {
272
- const operation = automationModelToolContract.operations.find(({ operationId }) => operationId === "read_draft");
272
+ const operation = CORE_TOOL_CONTRACTS.automations.normalInvocation.operations.find(({ operationId }) => operationId === "read_draft");
273
273
  return prepareAutomationDraftReceipt(result, { tool: "automations", operation, params, mutationEvidence: false });
274
274
  }
275
275
  const isDraftMutation = !["list_drafts", "read_draft", "catalog", "browse_catalog", "prepare_draft", "validate_draft"].includes(String(params.action));
@@ -0,0 +1,29 @@
1
+ import type { ToolNormalInvocationContract, ToolNormalInvocationOperation } from "../../capabilities/tool-types.js";
2
+ /** One source for native definitions and their reserved plugin identities. */
3
+ export declare const CORE_TOOL_CONTRACTS: Readonly<{
4
+ skills: Readonly<{
5
+ name: string;
6
+ normalInvocation: ToolNormalInvocationContract;
7
+ readApproval: "request_policy" | "automatic";
8
+ }>;
9
+ scheduling: Readonly<{
10
+ name: string;
11
+ normalInvocation: ToolNormalInvocationContract;
12
+ readApproval: "request_policy" | "automatic";
13
+ }>;
14
+ automations: Readonly<{
15
+ name: string;
16
+ normalInvocation: ToolNormalInvocationContract;
17
+ readApproval: "request_policy" | "automatic";
18
+ }>;
19
+ automationBuilder: Readonly<{
20
+ name: string;
21
+ normalInvocation: ToolNormalInvocationContract;
22
+ readApproval: "request_policy" | "automatic";
23
+ }>;
24
+ }>;
25
+ /** Core policy only; public plugins cannot opt out of request approval. */
26
+ export declare function isCoreToolAutomaticRead(toolName: string, operation: Pick<ToolNormalInvocationOperation, "operationId" | "effect">): boolean;
27
+ export declare function hasCoreToolContractCollision(capabilities: Readonly<Record<string, {
28
+ operations: Readonly<Record<string, unknown>>;
29
+ }>>): boolean;
@@ -0,0 +1,38 @@
1
+ import { schedulingToolContract } from "./scheduling/tool-contract.js";
2
+ import { automationModelToolContract } from "./automations/model-tool-contract.js";
3
+ import { automationBuilderToolContract } from "./automation-builder/tool-contract.js";
4
+ import { knowledgeSkillsToolContract } from "./knowledge-skills/tool-contract.js";
5
+ function coreToolContract(name, normalInvocation, readApproval = "request_policy") {
6
+ return Object.freeze({ name, normalInvocation, readApproval });
7
+ }
8
+ /** One source for native definitions and their reserved plugin identities. */
9
+ export const CORE_TOOL_CONTRACTS = Object.freeze({
10
+ skills: coreToolContract("abot_skills", knowledgeSkillsToolContract, "automatic"),
11
+ scheduling: coreToolContract("schedules", schedulingToolContract),
12
+ automations: coreToolContract("automations", automationModelToolContract),
13
+ automationBuilder: coreToolContract("automation_builder", automationBuilderToolContract),
14
+ });
15
+ const coreTools = Object.values(CORE_TOOL_CONTRACTS);
16
+ const coreToolNames = new Set(coreTools.map(({ name }) => name));
17
+ const coreOperationIds = new Set(coreTools.flatMap(({ normalInvocation }) => normalInvocation.operations.map(({ operationId }) => operationId)));
18
+ /** Core policy only; public plugins cannot opt out of request approval. */
19
+ export function isCoreToolAutomaticRead(toolName, operation) {
20
+ const core = coreTools.find(({ name }) => name === toolName);
21
+ if (core?.readApproval !== "automatic")
22
+ return false;
23
+ if (operation.effect !== "read_only")
24
+ return false;
25
+ return core.normalInvocation.operations.some((candidate) => candidate.operationId === operation.operationId && candidate.effect === "read_only");
26
+ }
27
+ export function hasCoreToolContractCollision(capabilities) {
28
+ for (const [name, capability] of Object.entries(capabilities)) {
29
+ const hasReservedToolName = coreToolNames.has(name);
30
+ if (hasReservedToolName)
31
+ return true;
32
+ const hasReservedOperationId = Object.keys(capability.operations)
33
+ .some((operationId) => coreOperationIds.has(operationId));
34
+ if (hasReservedOperationId)
35
+ return true;
36
+ }
37
+ return false;
38
+ }
@@ -0,0 +1,4 @@
1
+ import type { ToolImplementationOutput } from "../../../capabilities/tool-types.js";
2
+ import { type KnowledgeSkillStore } from "../../knowledge-skills/store.js";
3
+ /** One ordinary read result; never report a partial document set as success. */
4
+ export declare function executeKnowledgeSkillsReadMany(store: KnowledgeSkillStore, skillIds: unknown): ToolImplementationOutput;
@@ -0,0 +1,21 @@
1
+ import { KNOWLEDGE_SKILL_READ_MAX_ITEMS, } from "../../knowledge-skills/store.js";
2
+ import { knowledgeSkillDocumentsReadOutput, knowledgeSkillFailure } from "./tool-output.js";
3
+ import { isKnowledgeSkillReadReference, resolveKnowledgeSkillReadTargets } from "./read-targets.js";
4
+ function hasValidSkillIds(value) {
5
+ if (!Array.isArray(value))
6
+ return false;
7
+ if (value.length === 0 || value.length > KNOWLEDGE_SKILL_READ_MAX_ITEMS)
8
+ return false;
9
+ if (!value.every(isKnowledgeSkillReadReference))
10
+ return false;
11
+ return new Set(value).size === value.length;
12
+ }
13
+ /** One ordinary read result; never report a partial document set as success. */
14
+ export function executeKnowledgeSkillsReadMany(store, skillIds) {
15
+ if (!hasValidSkillIds(skillIds))
16
+ return knowledgeSkillFailure("knowledge_skill_ids_invalid");
17
+ const resolved = resolveKnowledgeSkillReadTargets(store, skillIds);
18
+ if (!resolved.ok)
19
+ return knowledgeSkillFailure(resolved.errorCode);
20
+ return knowledgeSkillDocumentsReadOutput(resolved.skills);
21
+ }
@@ -0,0 +1,13 @@
1
+ import { type KnowledgeSkillDocument, type KnowledgeSkillStore } from "../../knowledge-skills/store.js";
2
+ export declare const KNOWLEDGE_SKILL_READ_REFERENCE_MAX_LENGTH: number;
3
+ export declare function isKnowledgeSkillReadReference(value: unknown): value is string;
4
+ type ResolvedSkillRead = Readonly<{
5
+ ok: true;
6
+ skills: readonly KnowledgeSkillDocument[];
7
+ }> | Readonly<{
8
+ ok: false;
9
+ errorCode: string;
10
+ }>;
11
+ /** Resolve exact IDs first, then full names, against the same Store used for discovery. */
12
+ export declare function resolveKnowledgeSkillReadTargets(store: KnowledgeSkillStore, references: readonly string[]): ResolvedSkillRead;
13
+ export {};