@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
@@ -0,0 +1,25 @@
1
+ import { buildToolExecutorEventMetadata, buildToolIntentEventMetadata, } from "../shared/event-metadata.js";
2
+ /** Projects source controls only; rejected calls are never prepared again. */
3
+ export function prepareNormalInvocationRejectionEvent(params) {
4
+ const source = params.operationByHandle.get(params.input.handle);
5
+ if (!source)
6
+ return undefined;
7
+ return createPreparedInvocationRejectionEmitter({
8
+ tool: source.registration.toolName,
9
+ eventMeta: buildToolIntentEventMetadata({ tool: source.registration.toolName, params: params.input.controls }, params.input.intent, source.registration.definition),
10
+ onEvent: params.onEvent,
11
+ });
12
+ }
13
+ /** Reports an admitted invocation rejected before the external tool ran. */
14
+ export function createPreparedInvocationRejectionEmitter(params) {
15
+ return ({ executionId, executorIdentity, errorCode }) => {
16
+ params.onEvent?.("tool.failed", {
17
+ ...buildToolExecutorEventMetadata(executorIdentity),
18
+ executionId,
19
+ tool: params.tool,
20
+ stage: "before_external_execution",
21
+ error: errorCode,
22
+ ...(params.eventMeta ? { meta: params.eventMeta } : {}),
23
+ });
24
+ };
25
+ }
@@ -1,8 +1,9 @@
1
1
  import { buildToolCompletedEventActions, buildToolCompletedEventMetadata, buildToolLifecycleEventCopy, } from "../../../../capabilities/tool-event-metadata.js";
2
2
  import { requestNormalInvocationApproval } from "./approval.js";
3
+ import { createPreparedInvocationRejectionEmitter } from "./rejection-event.js";
3
4
  import { captureToolCall, materializeCall, resolveExactTargetOperation, validateCompleteCall, } from "./call-binding.js";
4
5
  import { createRegisteredToolActionFingerprint } from "../shared/action-fingerprint.js";
5
- import { buildToolIntentEventMetadata } from "../shared/event-metadata.js";
6
+ import { buildToolExecutorEventMetadata, buildToolIntentEventMetadata, } from "../shared/event-metadata.js";
6
7
  import { prepareCompleteInvocationInput } from "../payload/input-preparation.js";
7
8
  import { rejectNormalInvocation } from "../shared/rejection.js";
8
9
  export async function executeNormalInvocation(params) {
@@ -59,7 +60,14 @@ export function prepareNormalInvocation(params) {
59
60
  status: "prepared",
60
61
  actionFingerprint,
61
62
  acceptedControls: preparedInput.controls,
62
- execute: () => executePreparedNormalInvocation({
63
+ emitRejection: createPreparedInvocationRejectionEmitter({
64
+ tool: source.registration.toolName,
65
+ eventMeta,
66
+ onEvent: executor.onEvent,
67
+ }),
68
+ execute: (executionId, executorIdentity) => executePreparedNormalInvocation({
69
+ ...(executionId ? { executionId } : {}),
70
+ ...(executorIdentity ? { executorIdentity } : {}),
63
71
  executor,
64
72
  source,
65
73
  target: target.binding,
@@ -71,6 +79,10 @@ export function prepareNormalInvocation(params) {
71
79
  }
72
80
  async function executePreparedNormalInvocation(params) {
73
81
  const approval = await requestNormalInvocationApproval({
82
+ ...(params.executorIdentity
83
+ ? { executorIdentity: params.executorIdentity }
84
+ : {}),
85
+ ...(params.executionId ? { executionId: params.executionId } : {}),
74
86
  requestId: params.executor.requestId,
75
87
  abortSignal: params.executor.abortSignal,
76
88
  toolPermissionMode: params.executor.toolPermissionMode,
@@ -89,6 +101,8 @@ async function executePreparedNormalInvocation(params) {
89
101
  params.executor.abortSignal.throwIfAborted();
90
102
  const startedCopy = buildToolLifecycleEventCopy(params.target.registration.definition, "started");
91
103
  params.executor.onEvent?.("tool.started", {
104
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
105
+ ...(params.executionId ? { executionId: params.executionId } : {}),
92
106
  tool: params.call.tool,
93
107
  ...(params.input.intent
94
108
  ? { intent: params.input.intent, intentSource: "model" }
@@ -106,6 +120,8 @@ async function executePreparedNormalInvocation(params) {
106
120
  const completedMeta = buildToolCompletedEventMetadata(params.call, result, params.target.registration.definition);
107
121
  const completedCopy = buildToolLifecycleEventCopy(params.target.registration.definition, result.ok ? "completed" : "failed");
108
122
  params.executor.onEvent?.("tool.completed", {
123
+ ...buildToolExecutorEventMetadata(params.executorIdentity),
124
+ ...(params.executionId ? { executionId: params.executionId } : {}),
109
125
  tool: params.source.registration.toolName,
110
126
  ok: result.ok,
111
127
  actions: completionActions,
@@ -4,6 +4,7 @@ import { projectRuntimePathBindings } from "./catalog/runtime-path-bindings.js";
4
4
  import { executeNormalInvocation, prepareNormalInvocation, } from "./execution/run.js";
5
5
  import { emitNormalInvocationPayloadLifecycle } from "./payload/lifecycle.js";
6
6
  import { prepareNormalInvocationPayloadLifecycle } from "./payload/lifecycle.js";
7
+ import { prepareNormalInvocationRejectionEvent } from "./execution/rejection-event.js";
7
8
  /**
8
9
  * Captures one selected ToolRegistry snapshot and executes its ordinary
9
10
  * invocation contracts. Normalization may only resolve another operation from
@@ -36,6 +37,13 @@ export function createRegisteredToolNormalInvocationExecutor(params) {
36
37
  })));
37
38
  return Object.freeze({
38
39
  operations,
40
+ prepareRejectionEvent(input) {
41
+ return prepareNormalInvocationRejectionEvent({
42
+ operationByHandle,
43
+ input,
44
+ onEvent: params.onEvent,
45
+ });
46
+ },
39
47
  emitPayloadLifecycle(input) {
40
48
  return emitNormalInvocationPayloadLifecycle({
41
49
  operationByHandle,
@@ -1,5 +1,5 @@
1
1
  import { materializeCall } from "../execution/call-binding.js";
2
- import { buildToolIntentEventMetadata } from "../shared/event-metadata.js";
2
+ import { buildToolExecutorEventMetadata, buildToolIntentEventMetadata, } from "../shared/event-metadata.js";
3
3
  import { rejectNormalInvocation } from "../shared/rejection.js";
4
4
  import { validatePublicInput } from "./input-preparation.js";
5
5
  export function emitNormalInvocationPayloadLifecycle(params) {
@@ -35,8 +35,12 @@ export function prepareNormalInvocationPayloadLifecycle(params) {
35
35
  const event = materializePayloadLifecycleEvent(params.input, base);
36
36
  return Object.freeze({
37
37
  status: "prepared",
38
- emit: () => {
39
- params.onEvent?.(event.name, event.payload);
38
+ emit: (executionId, executorIdentity) => {
39
+ params.onEvent?.(event.name, {
40
+ ...event.payload,
41
+ ...buildToolExecutorEventMetadata(executorIdentity),
42
+ ...(executionId ? { executionId } : {}),
43
+ });
40
44
  return Object.freeze({ status: "emitted" });
41
45
  },
42
46
  });
@@ -1,3 +1,4 @@
1
+ import type { ToolEventExecutorIdentity } from "./event-metadata.js";
1
2
  import type { RegisteredToolNormalInvocation, ToolActionSummary, ToolExecutionResult, ToolExecutionSharedState, ToolNormalInvocationEffect, ToolNormalInvocationOperation } from "../../../../capabilities/tool-types.js";
2
3
  import type { ToolApprovalController, ToolPermissionMode, ToolRegistry } from "../../../ports.js";
3
4
  import type { RegisteredToolPayloadContextPlan, RegisteredToolStagedPayloadPlan } from "../../registered-tool-payload-plan.js";
@@ -37,7 +38,14 @@ export type RegisteredToolPreparedNormalInvocation = Readonly<{
37
38
  actionFingerprint: string;
38
39
  /** Exact validated non-payload controls accepted for this invocation. */
39
40
  acceptedControls: Readonly<Record<string, unknown>>;
40
- execute(): Promise<RegisteredToolNormalInvocationResult>;
41
+ /** Client-only terminal event when admission is rejected before execution. */
42
+ emitRejection(input: Readonly<{
43
+ executionId: string;
44
+ executorIdentity: ToolEventExecutorIdentity;
45
+ errorCode: string;
46
+ }>): void;
47
+ /** Canonical execution identity for client lifecycle events only. */
48
+ execute(executionId?: string, executorIdentity?: ToolEventExecutorIdentity): Promise<RegisteredToolNormalInvocationResult>;
41
49
  }>;
42
50
  export type RegisteredToolNormalInvocationPreparation = RegisteredToolPreparedNormalInvocation | RegisteredToolNormalInvocationRejection;
43
51
  export type RegisteredToolNormalInvocationPayloadLifecyclePhase = "started" | "completed" | "failed";
@@ -46,13 +54,20 @@ export type RegisteredToolNormalInvocationPayloadLifecycleResult = Readonly<{
46
54
  }> | RegisteredToolNormalInvocationRejection;
47
55
  export type RegisteredToolPreparedNormalInvocationPayloadLifecycle = Readonly<{
48
56
  status: "prepared";
49
- emit(): Readonly<{
57
+ /** Canonical execution identity for client lifecycle events only. */
58
+ emit(executionId?: string, executorIdentity?: ToolEventExecutorIdentity): Readonly<{
50
59
  status: "emitted";
51
60
  }>;
52
61
  }>;
53
62
  export type RegisteredToolNormalInvocationPayloadLifecyclePreparation = RegisteredToolPreparedNormalInvocationPayloadLifecycle | RegisteredToolNormalInvocationRejection;
54
63
  export type RegisteredToolNormalInvocationExecutor = Readonly<{
55
64
  operations: readonly RegisteredToolNormalInvocationProjection[];
65
+ /** Prepares client-only rejection reporting for a registered source handle. */
66
+ prepareRejectionEvent(input: Readonly<{
67
+ handle: RegisteredToolNormalInvocationHandle;
68
+ controls: Readonly<Record<string, unknown>>;
69
+ intent?: string;
70
+ }>): RegisteredToolPreparedNormalInvocation["emitRejection"] | undefined;
56
71
  /**
57
72
  * Emits the existing client payload lifecycle without exposing the bound
58
73
  * tool name or payload parameter to the profile that owns model context.
@@ -1,2 +1,11 @@
1
1
  import type { ToolCall, ToolDefinition } from "../../../../capabilities/tool-types.js";
2
2
  export declare function buildToolIntentEventMetadata(call: ToolCall, intent: string | undefined, definition?: ToolDefinition): Record<string, unknown> | undefined;
3
+ /** Canonical caller identity used only to attribute client lifecycle events. */
4
+ export type ToolEventExecutorIdentity = Readonly<{
5
+ callId: string;
6
+ roleId: string;
7
+ }>;
8
+ export declare function buildToolExecutorEventMetadata(identity: ToolEventExecutorIdentity | undefined): {
9
+ roleCallId: string;
10
+ executorRole: string;
11
+ } | undefined;
@@ -8,3 +8,11 @@ export function buildToolIntentEventMetadata(call, intent, definition) {
8
8
  intent,
9
9
  };
10
10
  }
11
+ export function buildToolExecutorEventMetadata(identity) {
12
+ if (!identity)
13
+ return undefined;
14
+ return {
15
+ roleCallId: identity.callId,
16
+ executorRole: identity.roleId,
17
+ };
18
+ }
@@ -166,6 +166,11 @@ async function prepareRegisteredToolWorkerCapability(params, input, payloadObser
166
166
  selectedTargetReferences,
167
167
  rejectedExecution: canonicalRejection,
168
168
  payloadObservability,
169
+ emitRejection: params.executor.prepareRejectionEvent({
170
+ handle: params.projection.handle,
171
+ controls: effectiveControls,
172
+ intent: input.intent,
173
+ }),
169
174
  ...(preparedPayload.body === undefined
170
175
  ? {}
171
176
  : { payload: preparedPayload.body }),
@@ -183,6 +188,11 @@ async function prepareRegisteredToolWorkerCapability(params, input, payloadObser
183
188
  tracePreparedExecutionStarted(params, input, operationId, executionId);
184
189
  const rejectedExecution = executionFreshnessRejection(input.executionFreshness);
185
190
  if (rejectedExecution) {
191
+ normalPreparation.emitRejection({
192
+ executionId,
193
+ executorIdentity: input.call,
194
+ errorCode: rejectedExecution.sourceIssueCode,
195
+ });
186
196
  return completeRuntimeRejection({
187
197
  params,
188
198
  input,
@@ -192,7 +202,7 @@ async function prepareRegisteredToolWorkerCapability(params, input, payloadObser
192
202
  rejectedExecution,
193
203
  });
194
204
  }
195
- const externalResult = await normalPreparation.execute();
205
+ const externalResult = await normalPreparation.execute(executionId, input.call);
196
206
  const observed = observeExternalResult(externalResult, params.projection.operation.effect, input.call.parentCallId === null);
197
207
  const observedResult = attachTargetReferences(observed.result, selectedTargetReferences);
198
208
  traceRegisteredToolWorkerCapabilityExecutionCompleted(params.diagnostic, operationId, input.call, executionId, observedResult, externalResult.status, {
@@ -235,6 +245,11 @@ function preparedRuntimeRejection(input) {
235
245
  try {
236
246
  input.payloadObservability.release(executionId);
237
247
  tracePreparedExecutionStarted(input.params, input.input, input.operationId, executionId);
248
+ input.emitRejection?.({
249
+ executionId,
250
+ executorIdentity: input.input.call,
251
+ errorCode: input.rejectedExecution.sourceIssueCode,
252
+ });
238
253
  return completeRuntimeRejection({ ...input, executionId });
239
254
  }
240
255
  catch (error) {
@@ -11,8 +11,8 @@ export function createDeferredPayloadObservability(params) {
11
11
  const prepared = params.executor.preparePayloadLifecycle(input);
12
12
  if (prepared.status === "rejected")
13
13
  return prepared;
14
- deferred.push(() => {
15
- prepared.emit();
14
+ deferred.push((executionId) => {
15
+ prepared.emit(executionId, params.call);
16
16
  });
17
17
  return Object.freeze({ status: "emitted" });
18
18
  },
@@ -0,0 +1,11 @@
1
+ import type { SessionStore } from "../ports.js";
2
+ import type { SchedulerRun, SchedulerRunOutcome } from "../scheduler/contracts.js";
3
+ export type ScheduledRequestEvent = Record<string, unknown>;
4
+ export type ScheduledRequestSettlement = Readonly<{
5
+ outcome: SchedulerRunOutcome;
6
+ event: ScheduledRequestEvent;
7
+ }>;
8
+ export declare function isScheduledTerminalEvent(event: ScheduledRequestEvent): boolean;
9
+ export declare function failedScheduledRequestOutcome(error: unknown): ScheduledRequestSettlement;
10
+ /** A captured completion is provisional until canonical assistant persistence is proven. */
11
+ export declare function resolveScheduledRequestOutcome(terminal: ScheduledRequestEvent | undefined, sessions: SessionStore, run: SchedulerRun): Promise<ScheduledRequestSettlement>;
@@ -0,0 +1,41 @@
1
+ export function isScheduledTerminalEvent(event) {
2
+ return event.type === "completed" || event.type === "failed";
3
+ }
4
+ export function failedScheduledRequestOutcome(error) {
5
+ const message = error instanceof Error ? error.message : String(error);
6
+ return {
7
+ outcome: { status: "failed", error: message },
8
+ event: { type: "failed", error: message },
9
+ };
10
+ }
11
+ /** A captured completion is provisional until canonical assistant persistence is proven. */
12
+ export async function resolveScheduledRequestOutcome(terminal, sessions, run) {
13
+ if (!terminal)
14
+ return failedScheduledRequestOutcome("scheduled_request_missing_terminal");
15
+ if (terminal.type === "failed") {
16
+ const failure = failedScheduledRequestOutcome(terminal.error ?? "scheduled_request_failed");
17
+ return { ...failure, event: { ...terminal, ...failure.event } };
18
+ }
19
+ try {
20
+ const session = await sessions.getSessionById(run.sessionId);
21
+ const result = session?.messages.find((message) => isScheduledAssistantReply(message, run.requestId));
22
+ if (!result)
23
+ return failedScheduledRequestOutcome("scheduled_result_not_persisted");
24
+ return {
25
+ outcome: {
26
+ status: "succeeded",
27
+ resultText: String(terminal.output ?? ""),
28
+ resultMessageId: result.id,
29
+ },
30
+ event: terminal,
31
+ };
32
+ }
33
+ catch (error) {
34
+ return failedScheduledRequestOutcome(error);
35
+ }
36
+ }
37
+ function isScheduledAssistantReply(message, requestId) {
38
+ if (message.role !== "assistant")
39
+ return false;
40
+ return message.requestId === requestId;
41
+ }
@@ -0,0 +1,19 @@
1
+ import type { RuntimeConfig, SessionStore } from "../ports.js";
2
+ import type { RuntimeRequestHandler, RuntimeRequestOptions } from "../composition.js";
3
+ import type { SchedulerRun } from "../scheduler/contracts.js";
4
+ import type { SessionRequestAdmission } from "../request/session-admission.js";
5
+ import { type ScheduledRequestEvent } from "./scheduled-request-outcome.js";
6
+ export declare function createRuntimeScheduler(options: {
7
+ config: RuntimeConfig;
8
+ sessions: SessionStore;
9
+ admission: SessionRequestAdmission;
10
+ isDeleted(sessionId: string): boolean;
11
+ handle: RuntimeRequestHandler["handle"];
12
+ requestOptions?: (run: SchedulerRun) => RuntimeRequestOptions;
13
+ }): {
14
+ scheduler: import("../scheduler/contracts.js").SchedulerService;
15
+ start: () => Promise<void>;
16
+ ensureStarted(): Promise<void>;
17
+ stop(): Promise<void>;
18
+ subscribe(listener: (event: ScheduledRequestEvent) => void): () => void;
19
+ };
@@ -0,0 +1,138 @@
1
+ import { join } from "node:path";
2
+ import { createFileSchedulerStore } from "../scheduler/file-store.js";
3
+ import { createSchedulerService } from "../scheduler/scheduler-service.js";
4
+ import { withScheduledExecution } from "../request/scheduled-execution.js";
5
+ import { resolveModelSelection } from "../model/model-selection.js";
6
+ import { failedScheduledRequestOutcome, isScheduledTerminalEvent, resolveScheduledRequestOutcome, } from "./scheduled-request-outcome.js";
7
+ export function createRuntimeScheduler(options) {
8
+ const listeners = new Set();
9
+ let startup;
10
+ let stopped = false;
11
+ let generation = 0;
12
+ function canPublishRunEvents(runGeneration) {
13
+ if (stopped)
14
+ return false;
15
+ return runGeneration === generation;
16
+ }
17
+ function publish(event, sessionId, runGeneration) {
18
+ if (!canPublishRunEvents(runGeneration))
19
+ return;
20
+ const isDeletedSession = options.isDeleted(sessionId);
21
+ const isTerminalEvent = isScheduledTerminalEvent(event);
22
+ if (isDeletedSession && !isTerminalEvent)
23
+ return;
24
+ const outbound = isDeletedSession
25
+ ? { ...event, sessionDeleted: true }
26
+ : event;
27
+ for (const listener of [...listeners]) {
28
+ if (!canPublishRunEvents(runGeneration))
29
+ return;
30
+ try {
31
+ listener(outbound);
32
+ }
33
+ catch {
34
+ /* A view cannot alter execution settlement. */
35
+ }
36
+ }
37
+ }
38
+ async function execute(job, run) {
39
+ const runGeneration = generation;
40
+ const publishForRun = (event) => {
41
+ publish({
42
+ ...event,
43
+ requestId: run.requestId,
44
+ sessionId: job.sessionId,
45
+ environment: job.environmentId,
46
+ }, job.sessionId, runGeneration);
47
+ };
48
+ const finish = (settlement) => {
49
+ publishForRun(settlement.event);
50
+ return settlement.outcome;
51
+ };
52
+ if (options.isDeleted(job.sessionId))
53
+ return finish(failedScheduledRequestOutcome("session_deleted"));
54
+ const selection = resolveModelSelection({
55
+ agentMode: job.agentMode,
56
+ modelPreference: { profileId: job.modelProfileId, scope: "all" },
57
+ modelPolicy: options.config.models,
58
+ });
59
+ if (selection.execution.primaryProfileId !== job.modelProfileId) {
60
+ return finish(failedScheduledRequestOutcome("scheduled_model_unavailable"));
61
+ }
62
+ let terminal;
63
+ let acceptingEvents = true;
64
+ const ws = {
65
+ send(data) {
66
+ if (!acceptingEvents)
67
+ return;
68
+ const event = JSON.parse(data);
69
+ if (event.requestId !== run.requestId)
70
+ return;
71
+ if (isScheduledTerminalEvent(event)) {
72
+ terminal = event;
73
+ return;
74
+ }
75
+ publishForRun(event);
76
+ },
77
+ };
78
+ const message = {
79
+ type: "run_request",
80
+ requestId: run.requestId,
81
+ sessionId: job.sessionId,
82
+ text: run.prompt,
83
+ agentMode: job.agentMode,
84
+ modelPreference: { profileId: job.modelProfileId, scope: "all" },
85
+ toolPermissionMode: "full_access",
86
+ };
87
+ try {
88
+ await options.handle(ws, message, withScheduledExecution(options.requestOptions?.(run), run));
89
+ }
90
+ catch (error) {
91
+ terminal = failedScheduledRequestOutcome(error).event;
92
+ }
93
+ finally {
94
+ acceptingEvents = false;
95
+ }
96
+ return finish(await resolveScheduledRequestOutcome(terminal, options.sessions, run));
97
+ }
98
+ const scheduler = createSchedulerService({
99
+ environmentId: options.config.runtimeId,
100
+ store: createFileSchedulerStore(join(options.config.paths.runtimeDir, "scheduler")),
101
+ executor: {
102
+ tryReserve: (sessionId) => options.admission.tryReserve(sessionId),
103
+ sessionExists: async (sessionId) => {
104
+ if (options.isDeleted(sessionId))
105
+ return false;
106
+ return (await options.sessions.getSessionById(sessionId)) !== null;
107
+ },
108
+ start: execute,
109
+ },
110
+ });
111
+ function start() {
112
+ stopped = false;
113
+ startup ??= scheduler.start();
114
+ return startup;
115
+ }
116
+ return {
117
+ scheduler,
118
+ start,
119
+ ensureStarted() {
120
+ if (stopped)
121
+ return Promise.reject(new Error("scheduler_stopped"));
122
+ return start();
123
+ },
124
+ stop() {
125
+ stopped = true;
126
+ generation += 1;
127
+ startup = undefined;
128
+ listeners.clear();
129
+ return scheduler.stop();
130
+ },
131
+ subscribe(listener) {
132
+ listeners.add(listener);
133
+ return () => {
134
+ listeners.delete(listener);
135
+ };
136
+ },
137
+ };
138
+ }
@@ -0,0 +1,55 @@
1
+ export declare const scheduleCreateOperations: readonly [Readonly<{
2
+ operationId: string;
3
+ summary: string;
4
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
5
+ selectionControlIds?: readonly string[];
6
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
7
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
8
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
9
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
10
+ }>, Readonly<{
11
+ operationId: string;
12
+ summary: string;
13
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
14
+ selectionControlIds?: readonly string[];
15
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
16
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
17
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
18
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
19
+ }>, Readonly<{
20
+ operationId: string;
21
+ summary: string;
22
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
23
+ selectionControlIds?: readonly string[];
24
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
25
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
26
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
27
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
28
+ }>, Readonly<{
29
+ operationId: string;
30
+ summary: string;
31
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
32
+ selectionControlIds?: readonly string[];
33
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
34
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
35
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
36
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
37
+ }>, Readonly<{
38
+ operationId: string;
39
+ summary: string;
40
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
41
+ selectionControlIds?: readonly string[];
42
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
43
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
44
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
45
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
46
+ }>, Readonly<{
47
+ operationId: string;
48
+ summary: string;
49
+ input: import("../../../capabilities/tool-types.js").ToolNormalInvocationInput;
50
+ selectionControlIds?: readonly string[];
51
+ fixedParams?: Readonly<Record<string, import("../../../capabilities/tool-types.js").ToolNormalInvocationFixedValue>>;
52
+ payload?: import("../../../capabilities/tool-types.js").ToolNormalInvocationPayload;
53
+ effect: import("../../../capabilities/tool-types.js").ToolNormalInvocationEffect;
54
+ approval: import("../../../capabilities/tool-types.js").ToolNormalInvocationApproval;
55
+ }>];
@@ -0,0 +1,30 @@
1
+ import { scheduleDetailProperties, scheduleTimingProperties, } from "./tool-input-properties.js";
2
+ function createScheduleOperation(kind, timingSummary, timingFields, requiredTiming = timingFields) {
3
+ return {
4
+ operationId: `create_${kind}`,
5
+ summary: `Schedule a future request in this conversation using the current model. Write prompt as the complete instruction the assistant must execute when this Job runs. For reminders, explicitly ask it to remind the user to act; preserve the exact action and target. For delegated work, retain the work itself. Put timing in the schedule fields and ask for missing timing details before creating. ${timingSummary}`,
6
+ effect: "mutating",
7
+ approval: "request_policy",
8
+ fixedParams: { action: "create", scheduleKind: kind },
9
+ input: {
10
+ type: "object",
11
+ additionalProperties: false,
12
+ properties: {
13
+ ...scheduleDetailProperties,
14
+ timeZone: scheduleTimingProperties.timeZone,
15
+ ...Object.fromEntries(timingFields.map((field) => [field, scheduleTimingProperties[field]])),
16
+ },
17
+ required: ["title", "prompt", ...requiredTiming],
18
+ },
19
+ };
20
+ }
21
+ export const scheduleCreateOperations = [
22
+ createScheduleOperation("timer", "Run once after delayMs milliseconds.", [
23
+ "delayMs",
24
+ ]),
25
+ createScheduleOperation("once", "Run once at an exact ISO instant in at, including its UTC offset.", ["at"]),
26
+ createScheduleOperation("interval", "Repeat everyMs milliseconds with optional exact first-run anchorAt ISO instant.", ["everyMs", "anchorAt"], ["everyMs"]),
27
+ createScheduleOperation("daily", "Run daily at exact HH:mm in at and an explicit IANA timeZone.", ["at"], ["at", "timeZone"]),
28
+ createScheduleOperation("weekly", "Run on weekdays (Sunday=0) at exact HH:mm in at and an explicit IANA timeZone.", ["at", "weekdays"], ["at", "weekdays", "timeZone"]),
29
+ createScheduleOperation("monthly", "Run on dayOfMonth at exact HH:mm in at and an explicit IANA timeZone.", ["at", "dayOfMonth"], ["at", "dayOfMonth", "timeZone"]),
30
+ ];
@@ -0,0 +1 @@
1
+ export declare function requireCreateCalendarTimeZone(params: Record<string, unknown>): void;
@@ -0,0 +1,11 @@
1
+ export function requireCreateCalendarTimeZone(params) {
2
+ const isCalendarSchedule = ["daily", "weekly", "monthly"].includes(String(params.scheduleKind));
3
+ if (!isCalendarSchedule)
4
+ return;
5
+ if (typeof params.timeZone !== "string") {
6
+ throw new Error("schedule_time_zone_required");
7
+ }
8
+ if (!params.timeZone.trim()) {
9
+ throw new Error("schedule_time_zone_required");
10
+ }
11
+ }
@@ -0,0 +1,25 @@
1
+ import type { SchedulerJob } from "../../scheduler/contracts.js";
2
+ /** A bounded, passive projection; cursors bind to exact Jobs in this session. */
3
+ export declare function createSchedulerJobPage(jobs: readonly SchedulerJob[], params: {
4
+ cursor?: unknown;
5
+ limit?: unknown;
6
+ }): {
7
+ jobs: {
8
+ id: string;
9
+ environmentId: string;
10
+ sessionId: string;
11
+ title: string;
12
+ modelProfileId: string;
13
+ agentMode: import("../../../shared/types.js").AgentMode;
14
+ toolPermissionMode: "full_access";
15
+ timeZone: string;
16
+ schedule: import("../../scheduler/contracts.js").SchedulerSchedule;
17
+ state: import("../../scheduler/contracts.js").SchedulerJobState;
18
+ createdAt: string;
19
+ updatedAt: string;
20
+ nextRunAt: string | null;
21
+ revision: number;
22
+ }[];
23
+ omittedCount: number;
24
+ nextCursor: string | null;
25
+ };
@@ -0,0 +1,40 @@
1
+ /** A bounded, passive projection; cursors bind to exact Jobs in this session. */
2
+ export function createSchedulerJobPage(jobs, params) {
3
+ const limit = params.limit === undefined ? 100 : params.limit;
4
+ if (!isSupportedPageLimit(limit))
5
+ throw new Error("schedule_page_limit_invalid");
6
+ const ordered = [...jobs].sort(compareNewestJobs);
7
+ const offset = cursorOffset(ordered, params.cursor);
8
+ const page = ordered.slice(offset, offset + limit);
9
+ const omittedCount = Math.max(0, ordered.length - offset - page.length);
10
+ return {
11
+ jobs: page.map(({ prompt: _prompt, ...job }) => job),
12
+ omittedCount,
13
+ nextCursor: omittedCount > 0 ? page.at(-1).id : null,
14
+ };
15
+ }
16
+ function isSupportedPageLimit(value) {
17
+ if (!Number.isSafeInteger(value))
18
+ return false;
19
+ if (Number(value) < 1)
20
+ return false;
21
+ return Number(value) <= 100;
22
+ }
23
+ function cursorOffset(jobs, cursor) {
24
+ if (cursor === undefined)
25
+ return 0;
26
+ if (typeof cursor !== "string")
27
+ throw new Error("schedule_cursor_invalid");
28
+ if (!cursor)
29
+ throw new Error("schedule_cursor_invalid");
30
+ const index = jobs.findIndex((job) => job.id === cursor);
31
+ if (index < 0)
32
+ throw new Error("schedule_cursor_not_found");
33
+ return index + 1;
34
+ }
35
+ function compareNewestJobs(left, right) {
36
+ const created = right.createdAt.localeCompare(left.createdAt);
37
+ if (created !== 0)
38
+ return created;
39
+ return right.id.localeCompare(left.id);
40
+ }
@@ -0,0 +1,2 @@
1
+ import type { RuntimeConfig } from "../../ports.js";
2
+ export declare function requireAvailableScheduleModel(config: RuntimeConfig, modelProfileId: unknown): void;