@abot-ai/runtime 1.2.0 → 1.3.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 (550) hide show
  1. package/README.md +14 -0
  2. package/dist/scripts/init-runtime.js +4 -13
  3. package/dist/scripts/runtime-setup-directories.d.ts +2 -0
  4. package/dist/scripts/runtime-setup-directories.js +38 -0
  5. package/dist/src/bridge/request-steering.d.ts +2 -1
  6. package/dist/src/bridge/request-steering.js +4 -2
  7. package/dist/src/bridge/runtime-replay.js +2 -19
  8. package/dist/src/bridge/start-agent-bridge.js +1 -1
  9. package/dist/src/capabilities/normal-invocation/validator.js +1 -1
  10. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
  11. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.d.ts +2 -0
  12. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.js +74 -0
  13. package/dist/src/capabilities/tool-event-metadata.js +3 -0
  14. package/dist/src/capabilities/tool-result-event-projection.d.ts +3 -0
  15. package/dist/src/capabilities/tool-result-event-projection.js +82 -0
  16. package/dist/src/capabilities/tool-types.d.ts +5 -0
  17. package/dist/src/cli/abot.js +2 -11
  18. package/dist/src/runtime/adapters/in-memory-session-store.js +1 -0
  19. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +11 -2
  20. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +2 -0
  21. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.d.ts +2 -0
  22. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.js +40 -0
  23. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +3 -0
  24. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +9 -0
  25. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts +13 -0
  26. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.js +25 -0
  27. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +18 -2
  28. package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +8 -0
  29. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +7 -3
  30. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +17 -2
  31. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.d.ts +9 -0
  32. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.js +8 -0
  33. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +16 -1
  34. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +2 -2
  35. package/dist/src/runtime/adapters/scheduled-request-outcome.d.ts +11 -0
  36. package/dist/src/runtime/adapters/scheduled-request-outcome.js +41 -0
  37. package/dist/src/runtime/adapters/scheduler-runtime.d.ts +19 -0
  38. package/dist/src/runtime/adapters/scheduler-runtime.js +138 -0
  39. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +55 -0
  40. package/dist/src/runtime/capabilities/scheduling/create-operations.js +30 -0
  41. package/dist/src/runtime/capabilities/scheduling/create-time-zone.d.ts +1 -0
  42. package/dist/src/runtime/capabilities/scheduling/create-time-zone.js +11 -0
  43. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +25 -0
  44. package/dist/src/runtime/capabilities/scheduling/job-list-page.js +40 -0
  45. package/dist/src/runtime/capabilities/scheduling/model-validation.d.ts +2 -0
  46. package/dist/src/runtime/capabilities/scheduling/model-validation.js +15 -0
  47. package/dist/src/runtime/capabilities/scheduling/tool-contract.d.ts +2 -0
  48. package/dist/src/runtime/capabilities/scheduling/tool-contract.js +35 -0
  49. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.d.ts +43 -0
  50. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.js +27 -0
  51. package/dist/src/runtime/capabilities/scheduling/tool-module.d.ts +4 -0
  52. package/dist/src/runtime/capabilities/scheduling/tool-module.js +158 -0
  53. package/dist/src/runtime/capabilities/scheduling/update-operations.d.ts +2 -0
  54. package/dist/src/runtime/capabilities/scheduling/update-operations.js +49 -0
  55. package/dist/src/runtime/composition.d.ts +23 -3
  56. package/dist/src/runtime/composition.js +12 -17
  57. package/dist/src/runtime/config/environment-paths.d.ts +10 -0
  58. package/dist/src/runtime/config/environment-paths.js +31 -0
  59. package/dist/src/runtime/config/environment-storage.d.ts +9 -0
  60. package/dist/src/runtime/config/environment-storage.js +65 -0
  61. package/dist/src/runtime/config/fields.js +7 -0
  62. package/dist/src/runtime/config/long-term-memory.js +15 -0
  63. package/dist/src/runtime/config/schema.js +8 -0
  64. package/dist/src/runtime/config.js +9 -5
  65. package/dist/src/runtime/context/scheduled-execution-context.d.ts +10 -0
  66. package/dist/src/runtime/context/scheduled-execution-context.js +52 -0
  67. package/dist/src/runtime/default-adapters.d.ts +3 -32
  68. package/dist/src/runtime/default-adapters.js +3 -270
  69. package/dist/src/runtime/default-environment-adapters.d.ts +19 -0
  70. package/dist/src/runtime/default-environment-adapters.js +144 -0
  71. package/dist/src/runtime/index.d.ts +5 -0
  72. package/dist/src/runtime/index.js +4 -0
  73. package/dist/src/runtime/local-application.d.ts +22 -0
  74. package/dist/src/runtime/local-application.js +81 -0
  75. package/dist/src/runtime/local-host/app-memory-dispatch.d.ts +11 -0
  76. package/dist/src/runtime/local-host/app-memory-dispatch.js +103 -0
  77. package/dist/src/runtime/local-host/app-owner.d.ts +4 -0
  78. package/dist/src/runtime/local-host/app-owner.js +119 -0
  79. package/dist/src/runtime/local-host/app-request-control.d.ts +24 -0
  80. package/dist/src/runtime/local-host/app-request-control.js +135 -0
  81. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +5 -0
  82. package/dist/src/runtime/local-host/app-service-dispatch.js +64 -0
  83. package/dist/src/runtime/local-host/client-identity.d.ts +3 -0
  84. package/dist/src/runtime/local-host/client-identity.js +17 -0
  85. package/dist/src/runtime/local-host/client-memory.d.ts +7 -0
  86. package/dist/src/runtime/local-host/client-memory.js +54 -0
  87. package/dist/src/runtime/local-host/client-requests.d.ts +19 -0
  88. package/dist/src/runtime/local-host/client-requests.js +145 -0
  89. package/dist/src/runtime/local-host/client-services.d.ts +10 -0
  90. package/dist/src/runtime/local-host/client-services.js +14 -0
  91. package/dist/src/runtime/local-host/contracts.d.ts +36 -0
  92. package/dist/src/runtime/local-host/contracts.js +1 -0
  93. package/dist/src/runtime/local-host/endpoint.d.ts +7 -0
  94. package/dist/src/runtime/local-host/endpoint.js +79 -0
  95. package/dist/src/runtime/local-host/owner-activity.d.ts +10 -0
  96. package/dist/src/runtime/local-host/owner-activity.js +30 -0
  97. package/dist/src/runtime/local-host/owner-retirement.d.ts +3 -0
  98. package/dist/src/runtime/local-host/owner-retirement.js +15 -0
  99. package/dist/src/runtime/local-host/owner-server.d.ts +6 -0
  100. package/dist/src/runtime/local-host/owner-server.js +88 -0
  101. package/dist/src/runtime/local-host/private-access.d.ts +2 -0
  102. package/dist/src/runtime/local-host/private-access.js +16 -0
  103. package/dist/src/runtime/local-host/private-directory.d.ts +1 -0
  104. package/dist/src/runtime/local-host/private-directory.js +57 -0
  105. package/dist/src/runtime/local-host/rpc-peer.d.ts +22 -0
  106. package/dist/src/runtime/local-host/rpc-peer.js +168 -0
  107. package/dist/src/runtime/local-host/rpc-protocol.d.ts +21 -0
  108. package/dist/src/runtime/local-host/rpc-protocol.js +46 -0
  109. package/dist/src/runtime/local-host/startup-connection.d.ts +5 -0
  110. package/dist/src/runtime/local-host/startup-connection.js +72 -0
  111. package/dist/src/runtime/local-host/transport.d.ts +3 -0
  112. package/dist/src/runtime/local-host/transport.js +88 -0
  113. package/dist/src/runtime/local-host/windows-private-access.d.ts +1 -0
  114. package/dist/src/runtime/local-host/windows-private-access.js +51 -0
  115. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +6 -0
  116. package/dist/src/runtime/long-term-memory/recall-binding.d.ts +3 -0
  117. package/dist/src/runtime/long-term-memory/recall-binding.js +27 -0
  118. package/dist/src/runtime/long-term-memory/recall-context.d.ts +20 -0
  119. package/dist/src/runtime/long-term-memory/recall-context.js +101 -0
  120. package/dist/src/runtime/long-term-memory/recall-continuation.d.ts +8 -0
  121. package/dist/src/runtime/long-term-memory/recall-continuation.js +36 -0
  122. package/dist/src/runtime/long-term-memory/recall-policy.d.ts +7 -0
  123. package/dist/src/runtime/long-term-memory/recall-policy.js +14 -0
  124. package/dist/src/runtime/long-term-memory/recall-result.d.ts +5 -0
  125. package/dist/src/runtime/long-term-memory/recall-result.js +54 -0
  126. package/dist/src/runtime/long-term-memory/repository-state.d.ts +2 -1
  127. package/dist/src/runtime/long-term-memory/repository-state.js +2 -2
  128. package/dist/src/runtime/model/invoke-raw-step.d.ts +1 -0
  129. package/dist/src/runtime/model/invoke-raw-step.js +1 -0
  130. package/dist/src/runtime/model/invoke-step.js +6 -0
  131. package/dist/src/runtime/model/invoke-structured-step.d.ts +1 -0
  132. package/dist/src/runtime/model/invoke-structured-step.js +1 -0
  133. package/dist/src/runtime/model/model-step-port.d.ts +2 -0
  134. package/dist/src/runtime/model/model-step-steering.d.ts +8 -0
  135. package/dist/src/runtime/model/model-step-steering.js +19 -0
  136. package/dist/src/runtime/orchestration/final-response/authoring-contract.js +1 -1
  137. package/dist/src/runtime/orchestration/final-response/invoke.d.ts +1 -0
  138. package/dist/src/runtime/orchestration/final-response/invoke.js +1 -0
  139. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  140. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +9 -49
  141. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.d.ts +9 -0
  142. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +17 -8
  143. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.d.ts +2 -0
  144. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.js +62 -0
  145. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +4 -0
  146. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.d.ts +4 -0
  147. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.js +89 -0
  148. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +5 -0
  149. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +9 -7
  150. package/dist/src/runtime/orchestration/role-calls/contracts.js +2 -2
  151. package/dist/src/runtime/orchestration/role-calls/diagnostics.js +3 -0
  152. package/dist/src/runtime/orchestration/role-calls/index.d.ts +1 -0
  153. package/dist/src/runtime/orchestration/role-calls/index.js +1 -0
  154. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +51 -0
  155. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.js +4 -0
  156. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.d.ts +6 -0
  157. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.js +147 -0
  158. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.d.ts +5 -0
  159. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.js +27 -0
  160. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +3 -0
  161. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +121 -0
  162. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.d.ts +3 -0
  163. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.js +44 -0
  164. package/dist/src/runtime/orchestration/role-calls/reducer.js +1 -0
  165. package/dist/src/runtime/orchestration/role-calls/transaction-effect.d.ts +5 -0
  166. package/dist/src/runtime/orchestration/role-calls/transaction-effect.js +14 -0
  167. package/dist/src/runtime/orchestration/role-calls/transactions.js +3 -24
  168. package/dist/src/runtime/plugins/manifest-validator.js +4 -1
  169. package/dist/src/runtime/ports.d.ts +4 -0
  170. package/dist/src/runtime/request/bound-runtime-handler.d.ts +2 -0
  171. package/dist/src/runtime/request/bound-runtime-handler.js +25 -0
  172. package/dist/src/runtime/request/contracts.d.ts +6 -0
  173. package/dist/src/runtime/request/execution-agent-root-execution.js +12 -0
  174. package/dist/src/runtime/request/execution-facets.js +6 -0
  175. package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
  176. package/dist/src/runtime/request/execution-scope.d.ts +1 -1
  177. package/dist/src/runtime/request/handler.js +6 -0
  178. package/dist/src/runtime/request/root-contract.d.ts +7 -1
  179. package/dist/src/runtime/request/root-execution-kernel.js +33 -37
  180. package/dist/src/runtime/request/root-memory-recall.d.ts +11 -0
  181. package/dist/src/runtime/request/root-memory-recall.js +71 -0
  182. package/dist/src/runtime/request/root-observation-handoff.d.ts +17 -0
  183. package/dist/src/runtime/request/root-observation-handoff.js +44 -0
  184. package/dist/src/runtime/request/scheduled-execution.d.ts +9 -0
  185. package/dist/src/runtime/request/scheduled-execution.js +32 -0
  186. package/dist/src/runtime/request/session-admission.d.ts +17 -0
  187. package/dist/src/runtime/request/session-admission.js +88 -0
  188. package/dist/src/runtime/request/supervisor-root-execution-diagnostics.d.ts +1 -1
  189. package/dist/src/runtime/request/supervisor-root-execution.js +8 -0
  190. package/dist/src/runtime/runtime-environment.d.ts +31 -0
  191. package/dist/src/runtime/runtime-environment.js +102 -0
  192. package/dist/src/runtime/runtime-host-environment.d.ts +8 -0
  193. package/dist/src/runtime/runtime-host-environment.js +57 -0
  194. package/dist/src/runtime/runtime-host-lifecycle.d.ts +4 -0
  195. package/dist/src/runtime/runtime-host-lifecycle.js +64 -0
  196. package/dist/src/runtime/runtime-host-scheduler-ownership.d.ts +5 -0
  197. package/dist/src/runtime/runtime-host-scheduler-ownership.js +67 -0
  198. package/dist/src/runtime/runtime-host.d.ts +19 -0
  199. package/dist/src/runtime/runtime-host.js +63 -0
  200. package/dist/src/runtime/scheduler/calendar-time.d.ts +10 -0
  201. package/dist/src/runtime/scheduler/calendar-time.js +58 -0
  202. package/dist/src/runtime/scheduler/contracts.d.ts +143 -0
  203. package/dist/src/runtime/scheduler/contracts.js +1 -0
  204. package/dist/src/runtime/scheduler/file-store.d.ts +2 -0
  205. package/dist/src/runtime/scheduler/file-store.js +76 -0
  206. package/dist/src/runtime/scheduler/instant-validation.d.ts +4 -0
  207. package/dist/src/runtime/scheduler/instant-validation.js +69 -0
  208. package/dist/src/runtime/scheduler/interval-range.d.ts +8 -0
  209. package/dist/src/runtime/scheduler/interval-range.js +24 -0
  210. package/dist/src/runtime/scheduler/job-management.d.ts +8 -0
  211. package/dist/src/runtime/scheduler/job-management.js +212 -0
  212. package/dist/src/runtime/scheduler/journal-checkpoint.d.ts +9 -0
  213. package/dist/src/runtime/scheduler/journal-checkpoint.js +45 -0
  214. package/dist/src/runtime/scheduler/journal-durability.d.ts +8 -0
  215. package/dist/src/runtime/scheduler/journal-durability.js +59 -0
  216. package/dist/src/runtime/scheduler/journal-files.d.ts +14 -0
  217. package/dist/src/runtime/scheduler/journal-files.js +59 -0
  218. package/dist/src/runtime/scheduler/journal-head.d.ts +21 -0
  219. package/dist/src/runtime/scheduler/journal-head.js +81 -0
  220. package/dist/src/runtime/scheduler/journal-index-state.d.ts +31 -0
  221. package/dist/src/runtime/scheduler/journal-index-state.js +137 -0
  222. package/dist/src/runtime/scheduler/journal-index.d.ts +22 -0
  223. package/dist/src/runtime/scheduler/journal-index.js +195 -0
  224. package/dist/src/runtime/scheduler/journal-store.d.ts +21 -0
  225. package/dist/src/runtime/scheduler/journal-store.js +184 -0
  226. package/dist/src/runtime/scheduler/journal-transaction.d.ts +14 -0
  227. package/dist/src/runtime/scheduler/journal-transaction.js +104 -0
  228. package/dist/src/runtime/scheduler/next-occurrence.d.ts +3 -0
  229. package/dist/src/runtime/scheduler/next-occurrence.js +39 -0
  230. package/dist/src/runtime/scheduler/run-completion.d.ts +12 -0
  231. package/dist/src/runtime/scheduler/run-completion.js +77 -0
  232. package/dist/src/runtime/scheduler/run-list-query.d.ts +5 -0
  233. package/dist/src/runtime/scheduler/run-list-query.js +38 -0
  234. package/dist/src/runtime/scheduler/run-records.d.ts +6 -0
  235. package/dist/src/runtime/scheduler/run-records.js +41 -0
  236. package/dist/src/runtime/scheduler/schedule-update.d.ts +3 -0
  237. package/dist/src/runtime/scheduler/schedule-update.js +22 -0
  238. package/dist/src/runtime/scheduler/schedule-validation.d.ts +10 -0
  239. package/dist/src/runtime/scheduler/schedule-validation.js +132 -0
  240. package/dist/src/runtime/scheduler/scheduler-engine.d.ts +2 -0
  241. package/dist/src/runtime/scheduler/scheduler-engine.js +174 -0
  242. package/dist/src/runtime/scheduler/scheduler-service.d.ts +10 -0
  243. package/dist/src/runtime/scheduler/scheduler-service.js +115 -0
  244. package/dist/src/runtime/scheduler/service-context.d.ts +21 -0
  245. package/dist/src/runtime/scheduler/service-context.js +26 -0
  246. package/dist/src/runtime/scheduler/session-deletion-state.d.ts +9 -0
  247. package/dist/src/runtime/scheduler/session-deletion-state.js +30 -0
  248. package/dist/src/runtime/scheduler/snapshot-validation.d.ts +4 -0
  249. package/dist/src/runtime/scheduler/snapshot-validation.js +112 -0
  250. package/dist/src/runtime/scheduler/startup-recovery.d.ts +2 -0
  251. package/dist/src/runtime/scheduler/startup-recovery.js +38 -0
  252. package/dist/src/runtime/scheduler/validation-error.d.ts +4 -0
  253. package/dist/src/runtime/scheduler/validation-error.js +8 -0
  254. package/dist/src/runtime/scheduler/working-store.d.ts +3 -0
  255. package/dist/src/runtime/scheduler/working-store.js +8 -0
  256. package/dist/src/runtime/session/request-session.d.ts +1 -0
  257. package/dist/src/runtime/session/request-session.js +14 -1
  258. package/dist/src/runtime/session/session-attachment-deletion.d.ts +8 -0
  259. package/dist/src/runtime/session/session-attachment-deletion.js +87 -0
  260. package/dist/src/runtime/session/session-deletion-boundary.d.ts +10 -0
  261. package/dist/src/runtime/session/session-deletion-boundary.js +39 -0
  262. package/dist/src/runtime/session/session-deletion-cleanup.d.ts +7 -0
  263. package/dist/src/runtime/session/session-deletion-cleanup.js +62 -0
  264. package/dist/src/runtime/session/session-deletion-finalization.d.ts +7 -0
  265. package/dist/src/runtime/session/session-deletion-finalization.js +34 -0
  266. package/dist/src/runtime/session/session-deletion-receipts.d.ts +7 -0
  267. package/dist/src/runtime/session/session-deletion-receipts.js +18 -0
  268. package/dist/src/runtime/session/session-lifecycle-store.d.ts +21 -0
  269. package/dist/src/runtime/session/session-lifecycle-store.js +72 -0
  270. package/dist/src/runtime/session/session-mutation-queue.d.ts +3 -0
  271. package/dist/src/runtime/session/session-mutation-queue.js +15 -0
  272. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.d.ts +16 -0
  273. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.js +165 -0
  274. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +3 -1
  275. package/dist/src/runtime/steps/execution-agent/decision-parsing.d.ts +2 -0
  276. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +195 -0
  277. package/dist/src/runtime/steps/execution-agent/decision-validation.d.ts +30 -0
  278. package/dist/src/runtime/steps/execution-agent/decision-validation.js +127 -0
  279. package/dist/src/runtime/steps/execution-agent/format.d.ts +1 -0
  280. package/dist/src/runtime/steps/execution-agent/format.js +12 -0
  281. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -1
  282. package/dist/src/runtime/steps/execution-agent/input.js +17 -2
  283. package/dist/src/runtime/steps/execution-agent/parser.d.ts +1 -2
  284. package/dist/src/runtime/steps/execution-agent/parser.js +1 -472
  285. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +2 -0
  286. package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
  287. package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +4 -3
  288. package/dist/src/runtime/steps/execution-agent/response-input.js +5 -4
  289. package/dist/src/runtime/steps/execution-agent/response-run.d.ts +3 -0
  290. package/dist/src/runtime/steps/execution-agent/response-run.js +7 -3
  291. package/dist/src/runtime/steps/execution-agent/run.d.ts +2 -0
  292. package/dist/src/runtime/steps/execution-agent/run.js +2 -0
  293. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -1
  294. package/dist/src/runtime/steps/execution-agent/state-context.js +13 -5
  295. package/dist/src/runtime/steps/memory-recall-decision.d.ts +30 -0
  296. package/dist/src/runtime/steps/memory-recall-decision.js +101 -0
  297. package/dist/src/runtime/steps/memory-recall-prompt.d.ts +1 -0
  298. package/dist/src/runtime/steps/memory-recall-prompt.js +15 -0
  299. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +4 -2
  300. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +2 -0
  301. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +13 -6
  302. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +2 -0
  303. package/dist/src/runtime/steps/supervisor-decision/format.js +41 -2
  304. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +5 -1
  305. package/dist/src/runtime/steps/supervisor-decision/input.js +25 -5
  306. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.d.ts +10 -0
  307. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.js +32 -0
  308. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +2 -0
  309. package/dist/src/runtime/steps/supervisor-decision/parser.js +36 -1
  310. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +3 -0
  311. package/dist/src/runtime/steps/supervisor-decision/prompt.js +16 -8
  312. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +13 -0
  313. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +32 -0
  314. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +2 -0
  315. package/dist/src/runtime/steps/supervisor-decision/resume.js +13 -0
  316. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +3 -0
  317. package/dist/src/runtime/steps/supervisor-decision/run.js +19 -0
  318. package/dist/src/runtime/steps/supervisor-decision/working-directory.js +7 -1
  319. package/dist/src/runtime/steps/supervisor-response/diagnostics.d.ts +1 -0
  320. package/dist/src/runtime/steps/supervisor-response/diagnostics.js +1 -0
  321. package/dist/src/runtime/steps/supervisor-response/input.d.ts +2 -1
  322. package/dist/src/runtime/steps/supervisor-response/input.js +17 -4
  323. package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +1 -0
  324. package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +4 -0
  325. package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +1 -0
  326. package/dist/src/runtime/steps/supervisor-response/prompt.js +8 -2
  327. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +10 -0
  328. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +25 -0
  329. package/dist/src/runtime/steps/supervisor-response/run.d.ts +6 -1
  330. package/dist/src/runtime/steps/supervisor-response/run.js +26 -7
  331. package/dist/src/sessions/record/projection.js +1 -0
  332. package/dist/src/sessions/schedule-metadata.d.ts +8 -0
  333. package/dist/src/sessions/schedule-metadata.js +1 -0
  334. package/dist/src/sessions/session-service.d.ts +1 -0
  335. package/dist/src/sessions/session-service.js +1 -0
  336. package/dist/src/sessions/types.d.ts +2 -0
  337. package/dist/src/shared/directory-authority/bootstrap.d.ts +1 -0
  338. package/dist/src/shared/directory-authority/bootstrap.js +118 -0
  339. package/dist/src/shared/directory-authority/command.d.ts +8 -0
  340. package/dist/src/shared/directory-authority/command.js +27 -0
  341. package/dist/src/shared/directory-authority/errors.d.ts +5 -0
  342. package/dist/src/shared/directory-authority/errors.js +10 -0
  343. package/dist/src/shared/directory-authority/index.d.ts +3 -0
  344. package/dist/src/shared/directory-authority/index.js +3 -0
  345. package/dist/src/shared/directory-authority/protocol.d.ts +11 -0
  346. package/dist/src/shared/directory-authority/protocol.js +62 -0
  347. package/dist/src/shared/directory-authority/task.d.ts +7 -0
  348. package/dist/src/shared/directory-authority/task.js +97 -0
  349. package/dist/src/shared/http-server-shutdown.d.ts +4 -0
  350. package/dist/src/shared/http-server-shutdown.js +17 -0
  351. package/dist/src/shared/public-http/aggregate-gate.d.ts +3 -0
  352. package/dist/src/shared/public-http/aggregate-gate.js +87 -0
  353. package/dist/src/shared/public-http/deadline.d.ts +2 -0
  354. package/dist/src/shared/public-http/deadline.js +29 -0
  355. package/dist/src/shared/public-http/errors.d.ts +6 -0
  356. package/dist/src/shared/public-http/errors.js +11 -0
  357. package/dist/src/shared/public-http/limits.d.ts +8 -0
  358. package/dist/src/shared/public-http/limits.js +8 -0
  359. package/dist/src/shared/public-http/network-policy.d.ts +11 -0
  360. package/dist/src/shared/public-http/network-policy.js +178 -0
  361. package/dist/src/shared/public-http/public-http.d.ts +24 -0
  362. package/dist/src/shared/public-http/public-http.js +85 -0
  363. package/dist/src/shared/public-http/request-hop.d.ts +18 -0
  364. package/dist/src/shared/public-http/request-hop.js +140 -0
  365. package/dist/src/web-ui/app/ARCHITECTURE.md +66 -4
  366. package/dist/src/web-ui/app/app-bootstrap.js +53 -0
  367. package/dist/src/web-ui/app/app-dom.js +80 -0
  368. package/dist/src/web-ui/app/app.js +195 -212
  369. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  370. package/dist/src/web-ui/app/components/conversation-activity.js +34 -7
  371. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +1 -0
  372. package/dist/src/web-ui/app/components/conversation-role-cards.js +61 -5
  373. package/dist/src/web-ui/app/components/conversation-schedule.js +71 -0
  374. package/dist/src/web-ui/app/components/conversation-status.js +65 -0
  375. package/dist/src/web-ui/app/components/conversation-tools.d.ts +13 -0
  376. package/dist/src/web-ui/app/components/conversation-tools.js +284 -0
  377. package/dist/src/web-ui/app/components/conversation-view.js +39 -11
  378. package/dist/src/web-ui/app/components/dashboard/activity.js +61 -0
  379. package/dist/src/web-ui/app/components/dashboard/icons.js +23 -0
  380. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +64 -0
  381. package/dist/src/web-ui/app/components/dashboard/workspace.js +107 -0
  382. package/dist/src/web-ui/app/components/message-link-previews.d.ts +16 -0
  383. package/dist/src/web-ui/app/components/message-link-previews.js +179 -0
  384. package/dist/src/web-ui/app/components/schedules/details.js +101 -0
  385. package/dist/src/web-ui/app/components/schedules/form.d.ts +13 -0
  386. package/dist/src/web-ui/app/components/schedules/form.js +246 -0
  387. package/dist/src/web-ui/app/components/schedules/workspace-state.js +59 -0
  388. package/dist/src/web-ui/app/components/schedules/workspace.js +165 -0
  389. package/dist/src/web-ui/app/components/workspace-shell.js +48 -2
  390. package/dist/src/web-ui/app/configuration-feature.js +72 -0
  391. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +1 -0
  392. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +17 -6
  393. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +2 -0
  394. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +15 -1
  395. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +58 -0
  396. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +53 -0
  397. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +180 -0
  398. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +23 -0
  399. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +82 -0
  400. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +8 -0
  401. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +28 -39
  402. package/dist/src/web-ui/app/controllers/dashboard-controller.js +127 -0
  403. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +40 -0
  404. package/dist/src/web-ui/app/controllers/home-composer-feature.js +119 -0
  405. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +37 -0
  406. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +1 -0
  407. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +74 -3
  408. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +2 -1
  409. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +15 -14
  410. package/dist/src/web-ui/app/controllers/schedule-realtime.js +118 -0
  411. package/dist/src/web-ui/app/controllers/schedules-controller.js +421 -0
  412. package/dist/src/web-ui/app/controllers/session-controller.js +30 -3
  413. package/dist/src/web-ui/app/dashboard-feature.js +44 -0
  414. package/dist/src/web-ui/app/index.html +53 -1
  415. package/dist/src/web-ui/app/lib/composer-submission-scope.d.ts +21 -0
  416. package/dist/src/web-ui/app/lib/composer-submission-scope.js +13 -0
  417. package/dist/src/web-ui/app/lib/context-window-snapshot-order.d.ts +15 -0
  418. package/dist/src/web-ui/app/lib/context-window-snapshot-order.js +31 -0
  419. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +10 -1
  420. package/dist/src/web-ui/app/lib/conversation-role-model.js +97 -15
  421. package/dist/src/web-ui/app/lib/conversation-status-model.d.ts +12 -0
  422. package/dist/src/web-ui/app/lib/conversation-status-model.js +116 -0
  423. package/dist/src/web-ui/app/lib/dashboard-job-templates.js +41 -0
  424. package/dist/src/web-ui/app/lib/dashboard-presentation.js +126 -0
  425. package/dist/src/web-ui/app/lib/message-markdown.d.ts +5 -0
  426. package/dist/src/web-ui/app/lib/message-markdown.js +99 -0
  427. package/dist/src/web-ui/app/lib/message-url-policy.d.ts +1 -0
  428. package/dist/src/web-ui/app/lib/message-url-policy.js +13 -0
  429. package/dist/src/web-ui/app/lib/schedule-errors.js +29 -0
  430. package/dist/src/web-ui/app/lib/schedule-message.js +30 -0
  431. package/dist/src/web-ui/app/lib/schedule-presentation.js +81 -0
  432. package/dist/src/web-ui/app/lib/session-read-state.d.ts +22 -0
  433. package/dist/src/web-ui/app/lib/session-read-state.js +63 -0
  434. package/dist/src/web-ui/app/lib/text-format.js +2 -143
  435. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +26 -0
  436. package/dist/src/web-ui/app/lib/tool-activity-event.js +228 -0
  437. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +41 -0
  438. package/dist/src/web-ui/app/lib/tool-activity-model.js +255 -0
  439. package/dist/src/web-ui/app/lib/tool-timeline.d.ts +3 -0
  440. package/dist/src/web-ui/app/lib/tool-timeline.js +18 -0
  441. package/dist/src/web-ui/app/schedules-feature.js +87 -0
  442. package/dist/src/web-ui/app/services/message-link-preview-client.d.ts +14 -0
  443. package/dist/src/web-ui/app/services/message-link-preview-client.js +96 -0
  444. package/dist/src/web-ui/app/services/runtime-web-client/schedules.js +51 -0
  445. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +37 -0
  446. package/dist/src/web-ui/app/services/runtime-web-client.js +13 -8
  447. package/dist/src/web-ui/app/styles/00-tokens-base.css +11 -11
  448. package/dist/src/web-ui/app/styles/18-dashboard.css +384 -0
  449. package/dist/src/web-ui/app/styles/20-chat-composer.css +1 -130
  450. package/dist/src/web-ui/app/styles/26-message-content.css +295 -0
  451. package/dist/src/web-ui/app/styles/27-conversation-tools.css +266 -0
  452. package/dist/src/web-ui/app/styles/28-conversation-status.css +52 -0
  453. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +263 -0
  454. package/dist/src/web-ui/app/styles/38-schedules.css +352 -0
  455. package/dist/src/web-ui/app/styles/90-responsive.css +14 -0
  456. package/dist/src/web-ui/app/styles/91-schedules-responsive.css +72 -0
  457. package/dist/src/web-ui/app/styles/92-dashboard-responsive.css +88 -0
  458. package/dist/src/web-ui/app/styles.css +8 -0
  459. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  460. package/dist/src/web-ui/app/ui-behavior.js +3 -1
  461. package/dist/src/web-ui/app/vendor/README.md +15 -0
  462. package/dist/src/web-ui/app/vendor/markdown-it.LICENSE +22 -0
  463. package/dist/src/web-ui/app/vendor/markdown-it.js +3003 -0
  464. package/dist/src/web-ui/link-preview/metadata.d.ts +9 -0
  465. package/dist/src/web-ui/link-preview/metadata.js +97 -0
  466. package/dist/src/web-ui/link-preview/preview-cache.d.ts +4 -0
  467. package/dist/src/web-ui/link-preview/preview-cache.js +23 -0
  468. package/dist/src/web-ui/link-preview/raster-response.d.ts +9 -0
  469. package/dist/src/web-ui/link-preview/raster-response.js +49 -0
  470. package/dist/src/web-ui/link-preview/routes.d.ts +3 -0
  471. package/dist/src/web-ui/link-preview/routes.js +97 -0
  472. package/dist/src/web-ui/link-preview/service.d.ts +11 -0
  473. package/dist/src/web-ui/link-preview/service.js +117 -0
  474. package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -1
  475. package/dist/src/web-ui/local-runtime/api-router.js +42 -73
  476. package/dist/src/web-ui/local-runtime/contracts.d.ts +2 -2
  477. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +12 -1
  478. package/dist/src/web-ui/local-runtime/environment-registry.js +38 -3
  479. package/dist/src/web-ui/local-runtime/realtime-controller.js +3 -1
  480. package/dist/src/web-ui/local-runtime/request-execution.d.ts +5 -1
  481. package/dist/src/web-ui/local-runtime/request-execution.js +38 -2
  482. package/dist/src/web-ui/local-runtime/schedule-job-creation.d.ts +7 -0
  483. package/dist/src/web-ui/local-runtime/schedule-job-creation.js +62 -0
  484. package/dist/src/web-ui/local-runtime/schedule-management-routes.d.ts +30 -0
  485. package/dist/src/web-ui/local-runtime/schedule-management-routes.js +134 -0
  486. package/dist/src/web-ui/local-runtime/schedule-run-page.d.ts +5 -0
  487. package/dist/src/web-ui/local-runtime/schedule-run-page.js +23 -0
  488. package/dist/src/web-ui/local-runtime/session-routes.d.ts +17 -0
  489. package/dist/src/web-ui/local-runtime/session-routes.js +74 -0
  490. package/dist/src/web-ui/local-runtime-backend.d.ts +2 -0
  491. package/dist/src/web-ui/local-runtime-backend.js +11 -1
  492. package/dist/src/web-ui/schedule-creation-contract.d.ts +7 -0
  493. package/dist/src/web-ui/schedule-creation-contract.js +1 -0
  494. package/dist/src/web-ui/server-shutdown.d.ts +4 -0
  495. package/dist/src/web-ui/server-shutdown.js +32 -0
  496. package/dist/src/web-ui/server.js +13 -10
  497. package/dist/src/web-ui/session-read-state/availability.d.ts +16 -0
  498. package/dist/src/web-ui/session-read-state/availability.js +20 -0
  499. package/dist/src/web-ui/session-read-state/projection.d.ts +17 -0
  500. package/dist/src/web-ui/session-read-state/projection.js +71 -0
  501. package/dist/src/web-ui/session-read-state/service.d.ts +86 -0
  502. package/dist/src/web-ui/session-read-state/service.js +89 -0
  503. package/dist/src/web-ui/session-read-state/store.d.ts +22 -0
  504. package/dist/src/web-ui/session-read-state/store.js +110 -0
  505. package/docs/configuration.md +41 -1
  506. package/docs/long-term-memory.md +46 -5
  507. package/docs/plugins.md +15 -9
  508. package/docs/runtime-invariant-coverage.md +1 -1
  509. package/docs/runtime-library.md +23 -0
  510. package/docs/runtime-public-contracts.md +32 -1
  511. package/package.json +3 -1
  512. package/plugins/code-outline/plugin.json +15 -0
  513. package/plugins/document-reader/plugin.json +17 -0
  514. package/plugins/exec/plugin.json +3 -3
  515. package/plugins/exec/skills/exec_skill/SKILL.md +1 -1
  516. package/plugins/exec/source/process-manager.ts +1 -20
  517. package/plugins/exec/source/shell-platform.ts +29 -0
  518. package/plugins/exec/src/index.cjs +25 -18
  519. package/plugins/filesystem/plugin.json +17 -2
  520. package/plugins/filesystem/source/atomic-write.ts +9 -0
  521. package/plugins/filesystem/source/bounded-io.ts +5 -99
  522. package/plugins/filesystem/source/directory-authority-write.ts +64 -0
  523. package/plugins/filesystem/source/directory-sample-task.ts +23 -0
  524. package/plugins/filesystem/source/directory-sample.ts +132 -0
  525. package/plugins/filesystem/source/directory-write-task.ts +160 -0
  526. package/plugins/filesystem/source/mutation-parent.ts +11 -0
  527. package/plugins/filesystem/src/index.cjs +693 -118
  528. package/plugins/json-inspector/plugin.json +12 -0
  529. package/plugins/local-search/plugin.json +12 -0
  530. package/plugins/local-search/source/index.ts +2 -0
  531. package/plugins/local-search/source/paths.ts +30 -7
  532. package/plugins/local-search/source/ripgrep-process.ts +69 -0
  533. package/plugins/local-search/source/ripgrep.ts +19 -23
  534. package/plugins/local-search/src/index.cjs +295 -32
  535. package/plugins/memory/plugin.json +26 -1
  536. package/plugins/memory/source/index.ts +10 -6
  537. package/plugins/memory/src/index.cjs +11 -7
  538. package/plugins/project-orientation/plugin.json +14 -0
  539. package/plugins/web/source/aggregate-gate.ts +8 -130
  540. package/plugins/web/source/deadline.ts +14 -50
  541. package/plugins/web/source/errors.ts +17 -11
  542. package/plugins/web/source/limits.ts +3 -6
  543. package/plugins/web/source/network-policy.ts +28 -226
  544. package/plugins/web/source/public-http.ts +17 -142
  545. package/plugins/web/source/request-hop.ts +11 -191
  546. package/plugins/web/src/index.cjs +119 -59
  547. package/runtime.config.schema.json +7 -0
  548. package/src/runtime/README.md +105 -1
  549. package/src/runtime/local-host/README.md +86 -0
  550. package/src/runtime/scheduler/README.md +166 -0
package/README.md CHANGED
@@ -13,6 +13,7 @@ hardcoded defaults.
13
13
  - Configurable local and hosted model providers
14
14
  - Persistent conversations, request events, and replay
15
15
  - Optional passive long-term memory across sessions
16
+ - Local scheduled requests bound to their conversations
16
17
  - Planning, execution, and review workflows
17
18
  - Manifest-based tools and plugins with explicit runtime boundaries
18
19
  - Workspace, file, skill, and memory capabilities
@@ -34,11 +35,24 @@ The Web UI supports:
34
35
  - steering an active request or queuing the next message
35
36
  - editing runtime configuration
36
37
  - configuring passive long-term memory with a consumer-selected embedding model
38
+ - managing schedules, their saved models, and run history in the Schedules workspace
37
39
  - inspecting runtime status, logs, and health
38
40
 
39
41
  The UI is a client of the runtime; persisted sessions, events, and request state
40
42
  remain owned by the runtime.
41
43
 
44
+ Schedules can also be managed through the model's built-in `schedules` capability.
45
+ Every Job belongs to a conversation and runs there with its saved model and FULL
46
+ tool permissions. The chat shows a compact run card; expand it to read the exact
47
+ historical prompt. ABot must be running at the scheduled time. Missed offline
48
+ occurrences and failed runs are not retried. Cancelling a Job or deleting its
49
+ conversation prevents pending starts; an already-started run continues.
50
+
51
+ Timers, one-time requests, intervals, and daily/weekly/monthly schedules are
52
+ supported. Calendar schedules require an exact time and IANA time zone. Jobs and
53
+ run history are stored locally under the environment's runtime directory.
54
+ Scheduling uses the Runtime directly and requires no plugin or external bridge.
55
+
42
56
  ## Requirements
43
57
 
44
58
  - Node.js `^20.19.0` or `>=22.12.0` (Node.js 21 is not supported)
@@ -1,7 +1,8 @@
1
1
  import { constants } from "node:fs";
2
2
  import { access, copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
3
- import { dirname, join, resolve } from "node:path";
3
+ import { dirname, join, relative, resolve } from "node:path";
4
4
  import { pathToFileURL } from "node:url";
5
+ import { initializeConfiguredRuntimeDirectories } from "./runtime-setup-directories.js";
5
6
  import { buildModelConfig, buildProviderConfig, DEFAULT_ROOT_RESPONSE_METHODOLOGY_FILES, isRecord, parseBaseUrl, parseProvider, readJsonObject, resolveRuntimePackageRoot, writeJsonObject, } from "./runtime-setup-files.js";
6
7
  import { getInitNextSteps, getInitUsage, } from "./runtime-setup-presentation.js";
7
8
  const ENV_FILE = ".env";
@@ -13,16 +14,6 @@ const CONFIG_EXAMPLE_FILE = join("examples", "runtime.config.example.json");
13
14
  const REQUEST_RUNNER_CONFIG_EXAMPLE_FILE = join("examples", "request-runner.config.example.json");
14
15
  const MODEL_CONFIG_EXAMPLE_FILE = join("examples", "models", "default.config.json");
15
16
  const REQUIRED_ENV_LINE = "LLM_RUNTIME_CONFIG_FILE=local/runtime.config.json";
16
- const RUNTIME_DIRS = [
17
- join(".runtime", "compiled"),
18
- join(".runtime", "shared", "logs"),
19
- join(".runtime", "prod"),
20
- join(".runtime", "prod", "sandbox"),
21
- join(".runtime", "prod", "sessions"),
22
- join(".runtime", "dev"),
23
- join(".runtime", "dev", "sandbox"),
24
- join(".runtime", "dev", "sessions"),
25
- ];
26
17
  function requireValue(argv, index, flag) {
27
18
  const value = argv[index + 1]?.trim();
28
19
  if (!value || value.startsWith("--")) {
@@ -238,7 +229,7 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
238
229
  if (modelConfigStatus !== "kept") {
239
230
  await configureModelProfile(modelConfigPath, options.provider, options.model);
240
231
  }
241
- await Promise.all(RUNTIME_DIRS.map((runtimeDir) => mkdir(join(options.rootDir, runtimeDir), { recursive: true })));
232
+ const runtimeDirectories = await initializeConfiguredRuntimeDirectories(options.rootDir, configPath);
242
233
  console.log([
243
234
  "abot initialized",
244
235
  `root: ${options.rootDir}`,
@@ -250,7 +241,7 @@ export async function runInitRuntime(argv = process.argv.slice(2), runOptions =
250
241
  `${LOCAL_REQUEST_RUNNER_CONFIG_FILE}: ${requestRunnerConfigStatus}`,
251
242
  `${LOCAL_MODEL_CONFIG_FILE}: ${modelConfigStatus}`,
252
243
  ...methodologyStatuses.map(({ relativePath, status }) => `${relativePath}: ${status}`),
253
- "created runtime directories: .runtime/compiled, .runtime/shared/logs, .runtime/prod, .runtime/dev",
244
+ `initialized runtime directories: ${runtimeDirectories.map((directory) => relative(options.rootDir, directory) || ".").join(", ")}`,
254
245
  "",
255
246
  ...getInitNextSteps(commandMode),
256
247
  ].join("\n"));
@@ -0,0 +1,2 @@
1
+ /** Initialize the preserved configuration's output roots without moving existing state. */
2
+ export declare function initializeConfiguredRuntimeDirectories(rootDir: string, configPath: string): Promise<string[]>;
@@ -0,0 +1,38 @@
1
+ import { mkdir } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { loadRuntimeConfig } from "../src/runtime/config.js";
4
+ import { RUNTIME_LOGS_DIR_NAME } from "../src/runtime/config/layout.js";
5
+ import { isRecord, readJsonObject, } from "./runtime-setup-files.js";
6
+ function configuredEnvironmentIds(config) {
7
+ if (!isRecord(config.environment))
8
+ return [undefined];
9
+ if (!isRecord(config.environment.profiles))
10
+ return [undefined];
11
+ const profileIds = Object.keys(config.environment.profiles);
12
+ const hasConfiguredEnvironments = profileIds.length > 0;
13
+ return hasConfiguredEnvironments ? profileIds : [undefined];
14
+ }
15
+ function runtimeOwnedDirectories(paths) {
16
+ return [
17
+ paths.runtimeDir,
18
+ paths.agentWorkDir,
19
+ paths.sessionsDir,
20
+ paths.attachmentsDir,
21
+ paths.sharedDir,
22
+ paths.compiledDir,
23
+ dirname(paths.traceFile),
24
+ join(paths.sharedDir, RUNTIME_LOGS_DIR_NAME),
25
+ ];
26
+ }
27
+ /** Initialize the preserved configuration's output roots without moving existing state. */
28
+ export async function initializeConfiguredRuntimeDirectories(rootDir, configPath) {
29
+ const config = await readJsonObject(configPath);
30
+ // Resolve every environment before creating any directories. This preserves the
31
+ // canonical guard against silently reassigning existing shared runtime state.
32
+ const configurations = configuredEnvironmentIds(config).map((profileId) => loadRuntimeConfig({ rootDir, configPath, profileId }));
33
+ const directories = [
34
+ ...new Set(configurations.flatMap(({ paths }) => runtimeOwnedDirectories(paths))),
35
+ ];
36
+ await Promise.all(directories.map((directory) => mkdir(directory, { recursive: true })));
37
+ return directories;
38
+ }
@@ -1,8 +1,9 @@
1
1
  import type WebSocket from "ws";
2
+ import type { RuntimeRequestHandler } from "../runtime/composition.js";
2
3
  import { type RequestSteeringInbox } from "../runtime/request/request-steering.js";
3
4
  export type BridgeRequestSteeringRegistry = Readonly<{
4
5
  close(requestId: string, inbox: RequestSteeringInbox): Promise<void>;
5
6
  handleMessage(ws: WebSocket, message: Record<string, unknown>): Promise<boolean>;
6
7
  open(requestId: string): RequestSteeringInbox;
7
8
  }>;
8
- export declare function createBridgeRequestSteeringRegistry(): BridgeRequestSteeringRegistry;
9
+ export declare function createBridgeRequestSteeringRegistry(steer?: RuntimeRequestHandler["steer"]): BridgeRequestSteeringRegistry;
@@ -1,7 +1,7 @@
1
1
  import { traceDebug } from "../runtime/observability/debug-logger.js";
2
2
  import { createRequestSteeringInbox, } from "../runtime/request/request-steering.js";
3
3
  const LOG_SCOPE = "agent-bridge.request_steering";
4
- export function createBridgeRequestSteeringRegistry() {
4
+ export function createBridgeRequestSteeringRegistry(steer) {
5
5
  const active = new Map();
6
6
  return Object.freeze({
7
7
  async close(requestId, inbox) {
@@ -23,7 +23,9 @@ export function createBridgeRequestSteeringRegistry() {
23
23
  const steerId = readString(message.steerId).trim();
24
24
  const text = readString(message.text).trim();
25
25
  const current = active.get(requestId);
26
- const result = current?.inbox.append({ steerId, text }) ??
26
+ const result = (steer && current
27
+ ? await steer(requestId, { steerId, text })
28
+ : current?.inbox.append({ steerId, text })) ??
27
29
  Object.freeze({
28
30
  ok: false,
29
31
  reason: "request_not_active",
@@ -2,6 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { clearSessionMessages, deleteMessageWithStats, deleteSessionWithStats, getRequestReplayById, getSessionSnapshot, listSessions, } from "../sessions/index.js";
4
4
  import { DEFAULT_MAX_ATTACHMENT_BYTES, } from "../runtime/attachments/store.js";
5
+ import { deleteSessionWithAttachments, deleteSessionAttachmentsIfSupported, } from "../runtime/session/session-attachment-deletion.js";
5
6
  import { resolveRuntimeAttachmentMimeType } from "../shared/attachments.js";
6
7
  const defaultRuntimeReplaySessionStore = {
7
8
  clearSessionMessages,
@@ -344,10 +345,7 @@ async function handleSessionDeleteRequest(ws, msg, sessionStore, attachmentStore
344
345
  return;
345
346
  }
346
347
  try {
347
- const result = await sessionStore.deleteSessionWithStats(sessionId);
348
- if (result.deleted) {
349
- await deleteSessionAttachmentsIfSupported(attachmentStore, sessionId);
350
- }
348
+ const result = await deleteSessionWithAttachments(sessionStore, attachmentStore, sessionId);
351
349
  sendRuntimeReplayResponse(ws, {
352
350
  type: "session.delete.response",
353
351
  correlationId,
@@ -402,21 +400,6 @@ async function handleSessionMessagesClearRequest(ws, msg, sessionStore, attachme
402
400
  }, error instanceof Error ? error.message : String(error));
403
401
  }
404
402
  }
405
- async function deleteSessionAttachmentsIfSupported(attachmentStore, sessionId) {
406
- if (!attachmentStore) {
407
- return;
408
- }
409
- try {
410
- await attachmentStore.deleteSessionAttachments(sessionId);
411
- }
412
- catch (error) {
413
- if (error instanceof Error &&
414
- error.message === "attachment_owner_invalid") {
415
- return;
416
- }
417
- throw error;
418
- }
419
- }
420
403
  async function deleteAttachmentIfSupported(attachmentStore, attachment, sessionId) {
421
404
  if (!attachmentStore?.deleteAttachment) {
422
405
  return;
@@ -109,7 +109,7 @@ export function startAgentBridge(options = {}) {
109
109
  let lastMessageAt;
110
110
  let lastPongAt;
111
111
  const pendingToolApprovals = new Map();
112
- const requestSteering = createBridgeRequestSteeringRegistry();
112
+ const requestSteering = createBridgeRequestSteeringRegistry(requestHandler.steer);
113
113
  function getStatus() {
114
114
  return {
115
115
  runtimeId,
@@ -1,5 +1,5 @@
1
1
  import { TOOL_NORMAL_INVOCATION_IDENTIFIER_MAX_LENGTH, TOOL_NORMAL_INVOCATION_PAYLOAD_MAX_BYTES, TOOL_NORMAL_INVOCATION_VERSION, } from "./contracts.js";
2
- const MAX_OPERATIONS = 16;
2
+ const MAX_OPERATIONS = 32;
3
3
  const MAX_SUMMARY_LENGTH = 512;
4
4
  const MAX_INSTRUCTIONS_LENGTH = 1_024;
5
5
  const MAX_PROPERTIES = 16;
@@ -1,4 +1,5 @@
1
1
  import { isToolDefinitionRecordValue } from "./definition-shape.js";
2
+ import { parseEventResultMetadata } from "./event-result-metadata.js";
2
3
  const EVENT_PROJECTION_KINDS = [
3
4
  "string",
4
5
  "number",
@@ -16,8 +17,10 @@ export function parseEventPresentation(toolName, raw) {
16
17
  }
17
18
  const metadata = Object.fromEntries(Object.entries(raw.metadata).map(([key, projection]) => parseEventMetadataProjection(toolName, key, projection)));
18
19
  const lifecycle = parseEventLifecycle(toolName, raw.lifecycle);
20
+ const resultMetadata = parseEventResultMetadata(raw.resultMetadata, `eventPresentation.resultMetadata (${toolName})`);
19
21
  return {
20
22
  metadata,
23
+ ...(resultMetadata ? { resultMetadata } : {}),
21
24
  ...(lifecycle ? { lifecycle } : {}),
22
25
  };
23
26
  }
@@ -0,0 +1,2 @@
1
+ import type { ToolEventPresentation } from "../tool-types.js";
2
+ export declare function parseEventResultMetadata(raw: unknown, path: string): ToolEventPresentation["resultMetadata"];
@@ -0,0 +1,74 @@
1
+ import { isToolDefinitionRecordValue } from "./definition-shape.js";
2
+ const RESULT_METADATA_LIMIT = 16;
3
+ const RESULT_PATH_SEGMENT_LIMIT = 4;
4
+ const RESULT_PROJECTION_KINDS = ["preview", "number", "boolean"];
5
+ const FORBIDDEN_PATH_SEGMENTS = new Set([
6
+ "__proto__",
7
+ "prototype",
8
+ "constructor",
9
+ ]);
10
+ export function parseEventResultMetadata(raw, path) {
11
+ if (raw === undefined)
12
+ return undefined;
13
+ if (!isToolDefinitionRecordValue(raw)) {
14
+ throw new Error(`${path} must be an object`);
15
+ }
16
+ const entries = Object.entries(raw);
17
+ if (entries.length > RESULT_METADATA_LIMIT) {
18
+ throw new Error(`${path} exceeds ${RESULT_METADATA_LIMIT} projections`);
19
+ }
20
+ const result = Object.fromEntries(entries.map(([key, value]) => {
21
+ if (!hasSupportedResultMetadataKey(key)) {
22
+ throw new Error(`${path} contains an invalid metadata key`);
23
+ }
24
+ if (!isToolDefinitionRecordValue(value)) {
25
+ throw new Error(`${path}.${key} must be an object`);
26
+ }
27
+ if (hasUnknownResultProjectionFields(value)) {
28
+ throw new Error(`${path}.${key} contains an unknown field`);
29
+ }
30
+ if (!hasSupportedResultMetadataPath(value.path)) {
31
+ throw new Error(`${path}.${key}.path must select output or data`);
32
+ }
33
+ if (!isResultProjectionKind(value.kind)) {
34
+ throw new Error(`${path}.${key}.kind is not supported`);
35
+ }
36
+ return [key, { path: value.path, kind: value.kind }];
37
+ }));
38
+ for (const [key, projection] of Object.entries(result)) {
39
+ if (projection.kind !== "preview")
40
+ continue;
41
+ if (Object.hasOwn(result, `${key}Truncated`)) {
42
+ throw new Error(`${path}.${key} conflicts with its truncation metadata`);
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ function hasSupportedResultMetadataKey(key) {
48
+ if (!/^[a-zA-Z][a-zA-Z0-9]{0,63}$/u.test(key))
49
+ return false;
50
+ return !FORBIDDEN_PATH_SEGMENTS.has(key);
51
+ }
52
+ function hasSupportedResultMetadataPath(value) {
53
+ if (typeof value !== "string")
54
+ return false;
55
+ if (value === "output")
56
+ return true;
57
+ const segments = value.split(".");
58
+ if (segments[0] !== "data")
59
+ return false;
60
+ if (segments.length < 2 || segments.length > RESULT_PATH_SEGMENT_LIMIT)
61
+ return false;
62
+ return segments.every(isSupportedResultPathSegment);
63
+ }
64
+ function hasUnknownResultProjectionFields(value) {
65
+ return Object.keys(value).some((field) => field !== "path" && field !== "kind");
66
+ }
67
+ function isSupportedResultPathSegment(segment) {
68
+ if (!/^[a-zA-Z][a-zA-Z0-9_]*$/u.test(segment))
69
+ return false;
70
+ return !FORBIDDEN_PATH_SEGMENTS.has(segment);
71
+ }
72
+ function isResultProjectionKind(value) {
73
+ return RESULT_PROJECTION_KINDS.includes(value);
74
+ }
@@ -1,3 +1,4 @@
1
+ import { projectToolResultEventMetadata } from "./tool-result-event-projection.js";
1
2
  function safeTrim(value) {
2
3
  return typeof value === "string" ? value.trim() : "";
3
4
  }
@@ -177,5 +178,7 @@ export function buildToolCompletedEventMetadata(call, result, definition) {
177
178
  ...(buildCallMeta(call, definition) || {}),
178
179
  ...toolResultData,
179
180
  ...(buildResultMeta(result, actions) || {}),
181
+ // Explicit result mappings override generic display fallbacks when present.
182
+ ...projectToolResultEventMetadata(result, definition?.eventPresentation?.resultMetadata),
180
183
  });
181
184
  }
@@ -0,0 +1,3 @@
1
+ import type { ToolEventMetadata, ToolEventPresentation, ToolExecutionResult } from "./tool-types.js";
2
+ /** Derive display metadata without changing canonical tool evidence. */
3
+ export declare function projectToolResultEventMetadata(result: ToolExecutionResult, projections: ToolEventPresentation["resultMetadata"]): ToolEventMetadata | undefined;
@@ -0,0 +1,82 @@
1
+ const PREVIEW_CHARACTER_LIMIT = 1_200;
2
+ const PREVIEW_LINE_LIMIT = 20;
3
+ const EVENT_PREVIEW_CHARACTER_LIMIT = 2_400;
4
+ /** Derive display metadata without changing canonical tool evidence. */
5
+ export function projectToolResultEventMetadata(result, projections) {
6
+ if (!projections)
7
+ return undefined;
8
+ const metadata = {};
9
+ let remainingCharacters = EVENT_PREVIEW_CHARACTER_LIMIT;
10
+ for (const [key, projection] of Object.entries(projections)) {
11
+ const value = readProjectedResultValue(result, projection);
12
+ if (value === undefined)
13
+ continue;
14
+ if (typeof value !== "string") {
15
+ metadata[key] = value;
16
+ continue;
17
+ }
18
+ const preview = boundResultPreview(value, remainingCharacters);
19
+ metadata[key] = preview.text;
20
+ metadata[`${key}Truncated`] = preview.truncated;
21
+ remainingCharacters -= preview.text.length;
22
+ }
23
+ return Object.keys(metadata).length > 0 ? metadata : undefined;
24
+ }
25
+ function readProjectedResultValue(result, projection) {
26
+ const value = readOwnResultPath(result, projection.path);
27
+ if (projection.kind === "number") {
28
+ return isFiniteResultNumber(value) ? value : undefined;
29
+ }
30
+ if (projection.kind === "boolean") {
31
+ return typeof value === "boolean" ? value : undefined;
32
+ }
33
+ return typeof value === "string" ? value : undefined;
34
+ }
35
+ function readOwnResultPath(result, path) {
36
+ let value = result;
37
+ for (const segment of path.split(".")) {
38
+ if (!isOwnResultContainer(value, segment))
39
+ return undefined;
40
+ value = value[segment];
41
+ }
42
+ return value;
43
+ }
44
+ function isOwnResultContainer(value, key) {
45
+ if (value === null || typeof value !== "object")
46
+ return false;
47
+ if (Array.isArray(value))
48
+ return false;
49
+ return Object.hasOwn(value, key);
50
+ }
51
+ function isFiniteResultNumber(value) {
52
+ return typeof value === "number" && Number.isFinite(value);
53
+ }
54
+ function boundResultPreview(value, remainingCharacters) {
55
+ const characterLimit = Math.min(PREVIEW_CHARACTER_LIMIT, remainingCharacters);
56
+ let end = Math.min(value.length, characterLimit);
57
+ let lineCount = 1;
58
+ for (let index = 0; index < end; index += 1) {
59
+ if (!startsPreviewLine(value, index))
60
+ continue;
61
+ lineCount += 1;
62
+ if (lineCount <= PREVIEW_LINE_LIMIT)
63
+ continue;
64
+ end = index;
65
+ break;
66
+ }
67
+ if (splitsSurrogatePair(value, end))
68
+ end -= 1;
69
+ return { text: value.slice(0, end), truncated: end < value.length };
70
+ }
71
+ function startsPreviewLine(value, index) {
72
+ if (value[index] === "\r")
73
+ return true;
74
+ return value[index] === "\n" && value[index - 1] !== "\r";
75
+ }
76
+ function splitsSurrogatePair(value, end) {
77
+ if (end <= 0 || end >= value.length)
78
+ return false;
79
+ const before = value.charCodeAt(end - 1);
80
+ const after = value.charCodeAt(end);
81
+ return (before >= 0xd800 && before <= 0xdbff && after >= 0xdc00 && after <= 0xdfff);
82
+ }
@@ -18,8 +18,13 @@ export type ToolEventLifecycleCopy = Readonly<{
18
18
  status: string;
19
19
  message: string;
20
20
  }>;
21
+ export type ToolEventResultMetadataProjection = Readonly<{
22
+ path: string;
23
+ kind: "preview" | "number" | "boolean";
24
+ }>;
21
25
  export type ToolEventPresentation = Readonly<{
22
26
  metadata: Readonly<Record<string, ToolEventMetadataProjection>>;
27
+ resultMetadata?: Readonly<Record<string, ToolEventResultMetadataProjection>>;
23
28
  lifecycle?: Readonly<{
24
29
  started?: ToolEventLifecycleCopy;
25
30
  completed?: ToolEventLifecycleCopy;
@@ -4,6 +4,7 @@ import { runInitRuntime } from "../../scripts/init-runtime.js";
4
4
  import { runConfigureLongTermMemory } from "../../scripts/configure-long-term-memory.js";
5
5
  import { createModelGatewayServer, resolveProviderAdapters, resolveModelGatewayPort, } from "../model-gateway/server.js";
6
6
  import { loadDotEnvFile } from "../shared/load-dotenv.js";
7
+ import { closeHttpServerImmediately } from "../shared/http-server-shutdown.js";
7
8
  import { startWebUiServer } from "../web-ui/server.js";
8
9
  import { resolveWebUiAddress } from "../web-ui/web-ui-address.js";
9
10
  function printHelp() {
@@ -23,16 +24,6 @@ function printHelp() {
23
24
  " start Start the local model gateway and Web UI.",
24
25
  ].join("\n"));
25
26
  }
26
- function closeServer(server) {
27
- return new Promise((resolveClose, reject) => {
28
- server.close((error) => {
29
- if (error)
30
- reject(error);
31
- else
32
- resolveClose();
33
- });
34
- });
35
- }
36
27
  async function runStart(args) {
37
28
  if (args.includes("--help") || args.includes("-h")) {
38
29
  console.log("Usage: abot start");
@@ -75,7 +66,7 @@ async function runStart(args) {
75
66
  closing = true;
76
67
  void Promise.all([
77
68
  webUi.close(),
78
- ...(gateway ? [closeServer(gateway)] : []),
69
+ ...(gateway ? [closeHttpServerImmediately(gateway)] : []),
79
70
  ]).then(() => resolveExit(), rejectExit);
80
71
  };
81
72
  process.once("SIGINT", shutdown);
@@ -175,6 +175,7 @@ class InMemorySessionStore {
175
175
  taskType: options.taskType,
176
176
  requestId: options.requestId,
177
177
  cronJobId: options.cronJobId,
178
+ ...(options.schedule ? { schedule: options.schedule } : {}),
178
179
  cronTitle: options.cronTitle,
179
180
  triggerType: options.triggerType,
180
181
  attachments: options.attachments,
@@ -3,6 +3,7 @@ import { removeEmptyLockTree, removeObservedOwner } from "./cleanup.js";
3
3
  import { fileSystemErrorCode, INCOMPLETE_LOCK_GRACE_MS, LOCK_ACQUIRE_TIMEOUT_MS, LOCK_RETRY_DELAY_MS, ownerFileName, } from "./contracts.js";
4
4
  import { installLockDirectory } from "./install.js";
5
5
  import { readLockSnapshot } from "./snapshot.js";
6
+ import { removeObservedOwnerSynchronously } from "./synchronous-release.js";
6
7
  export async function acquireFileLock(lockPath, options) {
7
8
  const waitMs = options.waitMs ?? LOCK_ACQUIRE_TIMEOUT_MS;
8
9
  const retryDelayMs = options.retryDelayMs ?? LOCK_RETRY_DELAY_MS;
@@ -12,7 +13,7 @@ export async function acquireFileLock(lockPath, options) {
12
13
  const token = randomUUID();
13
14
  try {
14
15
  await installLockDirectory(lockPath, token);
15
- return createRelease(lockPath, token);
16
+ return createRelease(lockPath, token, options.releaseMode);
16
17
  }
17
18
  catch (error) {
18
19
  if (!isLockContention(error))
@@ -27,15 +28,23 @@ export async function acquireFileLock(lockPath, options) {
27
28
  }
28
29
  }
29
30
  }
30
- function createRelease(lockPath, token) {
31
+ function createRelease(lockPath, token, releaseMode) {
31
32
  let released = false;
32
33
  return async () => {
33
34
  if (released)
34
35
  return;
36
+ if (requiresSynchronousRelease(releaseMode)) {
37
+ removeObservedOwnerSynchronously(lockPath, ownerFileName(token));
38
+ released = true;
39
+ return;
40
+ }
35
41
  await removeObservedOwner(lockPath, ownerFileName(token));
36
42
  released = true;
37
43
  };
38
44
  }
45
+ function requiresSynchronousRelease(mode) {
46
+ return mode === "synchronous";
47
+ }
39
48
  async function removeAbandonedLock(lockPath, processIsAlive) {
40
49
  const snapshot = await readLockSnapshot(lockPath);
41
50
  if (!snapshot)
@@ -8,6 +8,8 @@ export type FileLockOptions = Readonly<{
8
8
  waitMs?: number;
9
9
  retryDelayMs?: number;
10
10
  processIsAlive?: (pid: number) => boolean;
11
+ /** Long-lived host leases must finish physical cleanup before process.exit. */
12
+ releaseMode?: "asynchronous" | "synchronous";
11
13
  }>;
12
14
  export type LockRecord = Readonly<{
13
15
  pid: number;
@@ -0,0 +1,2 @@
1
+ /** Keep token removal and directory cleanup indivisible by JavaScript exit. */
2
+ export declare function removeObservedOwnerSynchronously(lockPath: string, observedOwnerFileName: string): boolean;
@@ -0,0 +1,40 @@
1
+ import { rmdirSync, unlinkSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { fileSystemErrorCode, LEASE_DIRECTORY_NAME } from "./contracts.js";
4
+ /** Keep token removal and directory cleanup indivisible by JavaScript exit. */
5
+ export function removeObservedOwnerSynchronously(lockPath, observedOwnerFileName) {
6
+ try {
7
+ unlinkSync(join(lockPath, LEASE_DIRECTORY_NAME, observedOwnerFileName));
8
+ }
9
+ catch (error) {
10
+ if (fileSystemErrorCode(error) === "ENOENT")
11
+ return false;
12
+ throw error;
13
+ }
14
+ if (!removeReleasedDirectory(join(lockPath, LEASE_DIRECTORY_NAME)))
15
+ return false;
16
+ return removeReleasedDirectory(lockPath);
17
+ }
18
+ function removeReleasedDirectory(path) {
19
+ try {
20
+ rmdirSync(path);
21
+ return true;
22
+ }
23
+ catch (error) {
24
+ if (fileSystemErrorCode(error) === "ENOENT")
25
+ return true;
26
+ if (hasReplacementDirectoryContent(error))
27
+ return false;
28
+ throw error;
29
+ }
30
+ }
31
+ function hasReplacementDirectoryContent(error) {
32
+ switch (fileSystemErrorCode(error)) {
33
+ case "EEXIST":
34
+ case "ENOTEMPTY":
35
+ case "ENOTDIR":
36
+ return true;
37
+ default:
38
+ return false;
39
+ }
40
+ }
@@ -1,7 +1,10 @@
1
1
  import type { ToolCall } from "../../../../capabilities/tool-types.js";
2
+ import { type ToolEventExecutorIdentity } from "../shared/event-metadata.js";
2
3
  import type { ToolApprovalController, ToolPermissionMode } from "../../../ports.js";
3
4
  import type { RegisteredToolNormalInvocationRejection } from "../shared/contracts.js";
4
5
  export declare function requestNormalInvocationApproval(params: {
6
+ executionId?: string;
7
+ executorIdentity?: ToolEventExecutorIdentity;
5
8
  requestId: string;
6
9
  abortSignal: AbortSignal;
7
10
  toolPermissionMode: ToolPermissionMode;
@@ -1,3 +1,4 @@
1
+ import { buildToolExecutorEventMetadata, } from "../shared/event-metadata.js";
1
2
  import { rejectNormalInvocation } from "../shared/rejection.js";
2
3
  export async function requestNormalInvocationApproval(params) {
3
4
  if (!params.force && params.toolPermissionMode !== "ask") {
@@ -5,6 +6,8 @@ export async function requestNormalInvocationApproval(params) {
5
6
  }
6
7
  const approvalId = params.nextApprovalId();
7
8
  params.onEvent?.("tool.approval.required", {
9
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
10
+ ...(params.executionId ? { executionId: params.executionId } : {}),
8
11
  approvalId,
9
12
  tool: params.call.tool,
10
13
  ...(params.eventMeta ? { meta: params.eventMeta } : {}),
@@ -12,6 +15,8 @@ export async function requestNormalInvocationApproval(params) {
12
15
  if (!params.toolApprovalController) {
13
16
  const message = "Tool approval is required, but no approval controller is configured.";
14
17
  params.onEvent?.("tool.approval.rejected", {
18
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
19
+ ...(params.executionId ? { executionId: params.executionId } : {}),
15
20
  approvalId,
16
21
  tool: params.call.tool,
17
22
  reason: message,
@@ -29,6 +34,8 @@ export async function requestNormalInvocationApproval(params) {
29
34
  }, { abortSignal: params.abortSignal });
30
35
  if (decision.approved) {
31
36
  params.onEvent?.("tool.approval.granted", {
37
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
38
+ ...(params.executionId ? { executionId: params.executionId } : {}),
32
39
  approvalId,
33
40
  tool: params.call.tool,
34
41
  });
@@ -36,6 +43,8 @@ export async function requestNormalInvocationApproval(params) {
36
43
  }
37
44
  const message = decision.reason?.trim() || "Tool execution was rejected.";
38
45
  params.onEvent?.("tool.approval.rejected", {
46
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
47
+ ...(params.executionId ? { executionId: params.executionId } : {}),
39
48
  approvalId,
40
49
  tool: params.call.tool,
41
50
  reason: message,
@@ -0,0 +1,13 @@
1
+ import type { BoundOperation, RegisteredToolNormalInvocationExecutor, RegisteredToolNormalInvocationExecutorParams, RegisteredToolPreparedNormalInvocation } from "../shared/contracts.js";
2
+ /** Projects source controls only; rejected calls are never prepared again. */
3
+ export declare function prepareNormalInvocationRejectionEvent(params: {
4
+ operationByHandle: WeakMap<object, BoundOperation>;
5
+ input: Parameters<RegisteredToolNormalInvocationExecutor["prepareRejectionEvent"]>[0];
6
+ onEvent: RegisteredToolNormalInvocationExecutorParams["onEvent"];
7
+ }): ReturnType<RegisteredToolNormalInvocationExecutor["prepareRejectionEvent"]>;
8
+ /** Reports an admitted invocation rejected before the external tool ran. */
9
+ export declare function createPreparedInvocationRejectionEmitter(params: {
10
+ tool: string;
11
+ eventMeta: Record<string, unknown> | undefined;
12
+ onEvent: RegisteredToolNormalInvocationExecutorParams["onEvent"];
13
+ }): RegisteredToolPreparedNormalInvocation["emitRejection"];