@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
@@ -246,11 +246,24 @@ function failureFromError(error, options) {
246
246
  });
247
247
  }
248
248
 
249
- // plugins/web/source/errors.ts
250
- var WebPluginError = class extends Error {
249
+ // src/shared/public-http/errors.ts
250
+ var PublicHttpError = class extends Error {
251
251
  code;
252
252
  constructor(code, message) {
253
253
  super(message);
254
+ this.name = "PublicHttpError";
255
+ this.code = code;
256
+ }
257
+ };
258
+ function isPublicHttpError(error) {
259
+ return error instanceof PublicHttpError;
260
+ }
261
+
262
+ // plugins/web/source/errors.ts
263
+ var WebPluginError = class extends PublicHttpError {
264
+ code;
265
+ constructor(code, message) {
266
+ super(code, message);
254
267
  this.name = "WebPluginError";
255
268
  this.code = code;
256
269
  }
@@ -258,6 +271,13 @@ var WebPluginError = class extends Error {
258
271
  function isWebPluginError(error) {
259
272
  return error instanceof WebPluginError;
260
273
  }
274
+ function rethrowWebPluginError(error) {
275
+ if (error instanceof WebPluginError) throw error;
276
+ if (isPublicHttpError(error)) {
277
+ throw new WebPluginError(error.code, error.message);
278
+ }
279
+ throw error;
280
+ }
261
281
 
262
282
  // plugins/web/source/concurrency.ts
263
283
  async function mapWithConcurrency(values, concurrency, operation) {
@@ -280,8 +300,19 @@ async function mapWithConcurrency(values, concurrency, operation) {
280
300
  return Object.freeze(results);
281
301
  }
282
302
 
303
+ // src/shared/public-http/limits.ts
304
+ var PUBLIC_HTTP_LIMITS = Object.freeze({
305
+ httpConcurrency: 6,
306
+ httpQueueLimit: 64,
307
+ redirects: 3,
308
+ responseBytes: 512 * 1024,
309
+ requestTimeoutMs: 1e4,
310
+ responseHeaderBytes: 32 * 1024
311
+ });
312
+
283
313
  // plugins/web/source/limits.ts
284
314
  var WEB_LIMITS = Object.freeze({
315
+ ...PUBLIC_HTTP_LIMITS,
285
316
  queryMaxChars: 400,
286
317
  queryMaxWords: 50,
287
318
  searchQueries: 5,
@@ -292,14 +323,9 @@ var WEB_LIMITS = Object.freeze({
292
323
  targetReadableSources: 3,
293
324
  fetchUrls: 3,
294
325
  fetchConcurrency: 3,
295
- httpConcurrency: 6,
296
- httpQueueLimit: 64,
297
- redirects: 3,
298
- responseBytes: 512 * 1024,
299
326
  outputChars: 16e3,
300
327
  pageOutputChars: 12e3,
301
328
  sourceOutputChars: 3e3,
302
- requestTimeoutMs: 1e4,
303
329
  searchTotalTimeoutMs: 3e4,
304
330
  outputBytes: 48 * 1024,
305
331
  upstreamUrlChars: 4096,
@@ -307,8 +333,7 @@ var WEB_LIMITS = Object.freeze({
307
333
  upstreamTitleChars: 180,
308
334
  upstreamSnippetChars: 800,
309
335
  retryAttempts: 2,
310
- retryBaseMs: 750,
311
- responseHeaderBytes: 32 * 1024
336
+ retryBaseMs: 750
312
337
  });
313
338
 
314
339
  // plugins/web/source/content.ts
@@ -832,7 +857,7 @@ function createWebFetchService(httpClient) {
832
857
  });
833
858
  }
834
859
 
835
- // plugins/web/source/network-policy.ts
860
+ // src/shared/public-http/network-policy.ts
836
861
  var import_promises = require("node:dns/promises");
837
862
  var import_node_net = require("node:net");
838
863
  function ipv4Value(address) {
@@ -935,33 +960,33 @@ function parsePublicHttpUrl(rawUrl) {
935
960
  try {
936
961
  parsed = new URL(rawUrl);
937
962
  } catch {
938
- throw new WebPluginError(
963
+ throw new PublicHttpError(
939
964
  "web_target_invalid",
940
965
  "A valid absolute URL is required."
941
966
  );
942
967
  }
943
968
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
944
- throw new WebPluginError(
969
+ throw new PublicHttpError(
945
970
  "web_target_invalid",
946
971
  "Only http and https URLs are supported."
947
972
  );
948
973
  }
949
974
  if (parsed.username || parsed.password) {
950
- throw new WebPluginError(
975
+ throw new PublicHttpError(
951
976
  "web_target_invalid",
952
977
  "URLs containing credentials are not supported."
953
978
  );
954
979
  }
955
980
  const hostname = normalizeHostname(parsed.hostname);
956
981
  if (!hostname || isBlockedHostname(hostname)) {
957
- throw new WebPluginError(
982
+ throw new PublicHttpError(
958
983
  "web_target_not_public",
959
984
  "Only public Internet targets are allowed."
960
985
  );
961
986
  }
962
987
  const family = (0, import_node_net.isIP)(hostname);
963
988
  if (family === 4 && !isPublicIpv4(hostname) || family === 6 && !isPublicIpv6(hostname)) {
964
- throw new WebPluginError(
989
+ throw new PublicHttpError(
965
990
  "web_target_not_public",
966
991
  "Only public Internet targets are allowed."
967
992
  );
@@ -980,7 +1005,7 @@ var resolveHostAddresses = async (hostname) => {
980
1005
  try {
981
1006
  resolved = await (0, import_promises.lookup)(normalized, { all: true, verbatim: true });
982
1007
  } catch {
983
- throw new WebPluginError(
1008
+ throw new PublicHttpError(
984
1009
  "web_target_unresolvable",
985
1010
  "The public target hostname could not be resolved."
986
1011
  );
@@ -991,7 +1016,7 @@ var resolveHostAddresses = async (hostname) => {
991
1016
  (entry) => Object.freeze({ address: entry.address, family: entry.family })
992
1017
  );
993
1018
  if (addresses.length === 0) {
994
- throw new WebPluginError(
1019
+ throw new PublicHttpError(
995
1020
  "web_target_unresolvable",
996
1021
  "The public target hostname could not be resolved."
997
1022
  );
@@ -1002,7 +1027,7 @@ async function resolvePublicTarget(url, resolver = resolveHostAddresses) {
1002
1027
  const hostname = normalizeHostname(url.hostname);
1003
1028
  const addresses = await resolver(hostname);
1004
1029
  if (addresses.length === 0 || addresses.some((entry) => !isPublicAddress(entry))) {
1005
- throw new WebPluginError(
1030
+ throw new PublicHttpError(
1006
1031
  "web_target_not_public",
1007
1032
  "Only public Internet targets are allowed."
1008
1033
  );
@@ -1010,6 +1035,15 @@ async function resolvePublicTarget(url, resolver = resolveHostAddresses) {
1010
1035
  return addresses[0];
1011
1036
  }
1012
1037
 
1038
+ // plugins/web/source/network-policy.ts
1039
+ function parsePublicHttpUrl2(rawUrl) {
1040
+ try {
1041
+ return parsePublicHttpUrl(rawUrl);
1042
+ } catch (error) {
1043
+ return rethrowWebPluginError(error);
1044
+ }
1045
+ }
1046
+
1013
1047
  // plugins/web/source/parameters.ts
1014
1048
  var SEARCH_REPAIR_HINT = "Do not retry this call unchanged. Provide query for one non-empty web query, or queries for up to five distinct non-empty web queries.";
1015
1049
  var FETCH_REPAIR_HINT = "Do not retry this call unchanged. Provide url for one absolute public http(s) URL, or urls for up to three such URLs.";
@@ -1069,7 +1103,7 @@ function parseFetchParams(params) {
1069
1103
  maxItems: WEB_LIMITS.fetchUrls,
1070
1104
  maxItemLength: WEB_LIMITS.upstreamUrlChars
1071
1105
  });
1072
- for (const url of urls) parsePublicHttpUrl(url);
1106
+ for (const url of urls) parsePublicHttpUrl2(url);
1073
1107
  return urls;
1074
1108
  }
1075
1109
  function validate(parse, error, repairHint) {
@@ -1106,11 +1140,11 @@ var webFetchCallAdapter = Object.freeze({
1106
1140
  validateCall: ({ params }) => adapterValidation(validateFetchParams(params))
1107
1141
  });
1108
1142
 
1109
- // plugins/web/source/deadline.ts
1143
+ // src/shared/public-http/deadline.ts
1110
1144
  function remainingTime(deadline) {
1111
1145
  const remaining = deadline - Date.now();
1112
1146
  if (remaining <= 0) {
1113
- throw new WebPluginError(
1147
+ throw new PublicHttpError(
1114
1148
  "web_request_timed_out",
1115
1149
  "The upstream web request timed out."
1116
1150
  );
@@ -1120,7 +1154,10 @@ function remainingTime(deadline) {
1120
1154
  function withinDeadline(promise, deadline, abortSignal) {
1121
1155
  if (abortSignal?.aborted) {
1122
1156
  return Promise.reject(
1123
- new WebPluginError("web_request_aborted", "The web request was aborted.")
1157
+ new PublicHttpError(
1158
+ "web_request_aborted",
1159
+ "The web request was aborted."
1160
+ )
1124
1161
  );
1125
1162
  }
1126
1163
  return new Promise((resolve, reject) => {
@@ -1134,7 +1171,7 @@ function withinDeadline(promise, deadline, abortSignal) {
1134
1171
  };
1135
1172
  const onAbort = () => finish(
1136
1173
  () => reject(
1137
- new WebPluginError(
1174
+ new PublicHttpError(
1138
1175
  "web_request_aborted",
1139
1176
  "The web request was aborted."
1140
1177
  )
@@ -1143,7 +1180,7 @@ function withinDeadline(promise, deadline, abortSignal) {
1143
1180
  const timeout = setTimeout(
1144
1181
  () => finish(
1145
1182
  () => reject(
1146
- new WebPluginError(
1183
+ new PublicHttpError(
1147
1184
  "web_request_timed_out",
1148
1185
  "The upstream web request timed out."
1149
1186
  )
@@ -1160,7 +1197,7 @@ function withinDeadline(promise, deadline, abortSignal) {
1160
1197
  });
1161
1198
  }
1162
1199
 
1163
- // plugins/web/source/aggregate-gate.ts
1200
+ // src/shared/public-http/aggregate-gate.ts
1164
1201
  function createAggregateGate(maxActive, maxQueued) {
1165
1202
  let active = 0;
1166
1203
  const queue = [];
@@ -1173,7 +1210,7 @@ function createAggregateGate(maxActive, maxQueued) {
1173
1210
  }
1174
1211
  if (waiter.abortSignal?.aborted) {
1175
1212
  waiter.reject(
1176
- new WebPluginError(
1213
+ new PublicHttpError(
1177
1214
  "web_request_aborted",
1178
1215
  "The web request was aborted."
1179
1216
  )
@@ -1182,7 +1219,7 @@ function createAggregateGate(maxActive, maxQueued) {
1182
1219
  }
1183
1220
  if (waiter.deadline <= Date.now()) {
1184
1221
  waiter.reject(
1185
- new WebPluginError(
1222
+ new PublicHttpError(
1186
1223
  "web_request_timed_out",
1187
1224
  "The upstream web request timed out."
1188
1225
  )
@@ -1202,7 +1239,7 @@ function createAggregateGate(maxActive, maxQueued) {
1202
1239
  const acquire = (deadline, abortSignal) => {
1203
1240
  if (abortSignal?.aborted) {
1204
1241
  return Promise.reject(
1205
- new WebPluginError(
1242
+ new PublicHttpError(
1206
1243
  "web_request_aborted",
1207
1244
  "The web request was aborted."
1208
1245
  )
@@ -1220,7 +1257,7 @@ function createAggregateGate(maxActive, maxQueued) {
1220
1257
  }
1221
1258
  if (queue.length >= maxQueued) {
1222
1259
  return Promise.reject(
1223
- new WebPluginError(
1260
+ new PublicHttpError(
1224
1261
  "web_request_capacity_exceeded",
1225
1262
  "The web client is at its bounded request capacity."
1226
1263
  )
@@ -1246,14 +1283,14 @@ function createAggregateGate(maxActive, maxQueued) {
1246
1283
  reject(error);
1247
1284
  };
1248
1285
  waiter.onAbort = () => fail(
1249
- new WebPluginError(
1286
+ new PublicHttpError(
1250
1287
  "web_request_aborted",
1251
1288
  "The web request was aborted."
1252
1289
  )
1253
1290
  );
1254
1291
  waiter.timeout = setTimeout(
1255
1292
  () => fail(
1256
- new WebPluginError(
1293
+ new PublicHttpError(
1257
1294
  "web_request_timed_out",
1258
1295
  "The upstream web request timed out."
1259
1296
  )
@@ -1275,7 +1312,7 @@ function createAggregateGate(maxActive, maxQueued) {
1275
1312
  });
1276
1313
  }
1277
1314
 
1278
- // plugins/web/source/request-hop.ts
1315
+ // src/shared/public-http/request-hop.ts
1279
1316
  var import_node_http = require("node:http");
1280
1317
  var import_node_https = require("node:https");
1281
1318
  function buildPinnedLookup(address) {
@@ -1335,7 +1372,7 @@ function readBoundedBody(response, maxBytes) {
1335
1372
  if (settled) return;
1336
1373
  settled = true;
1337
1374
  reject(
1338
- new WebPluginError(
1375
+ new PublicHttpError(
1339
1376
  "web_response_invalid",
1340
1377
  "The upstream response ended before completion."
1341
1378
  )
@@ -1345,7 +1382,7 @@ function readBoundedBody(response, maxBytes) {
1345
1382
  }
1346
1383
  var requestPinnedHop = async (params) => {
1347
1384
  if (params.abortSignal?.aborted) {
1348
- throw new WebPluginError(
1385
+ throw new PublicHttpError(
1349
1386
  "web_request_aborted",
1350
1387
  "The web request was aborted."
1351
1388
  );
@@ -1362,7 +1399,7 @@ var requestPinnedHop = async (params) => {
1362
1399
  headers: params.headers,
1363
1400
  lookup: buildPinnedLookup(params.address),
1364
1401
  agent: false,
1365
- maxHeaderSize: WEB_LIMITS.responseHeaderBytes
1402
+ maxHeaderSize: PUBLIC_HTTP_LIMITS.responseHeaderBytes
1366
1403
  };
1367
1404
  const requestFunction = params.url.protocol === "https:" ? import_node_https.request : import_node_http.request;
1368
1405
  const request = requestFunction(requestOptions, async (response) => {
@@ -1389,7 +1426,7 @@ var requestPinnedHop = async (params) => {
1389
1426
  const timeout = setTimeout(() => {
1390
1427
  timedOut = true;
1391
1428
  request.destroy(
1392
- new WebPluginError(
1429
+ new PublicHttpError(
1393
1430
  "web_request_timed_out",
1394
1431
  "The upstream web request timed out."
1395
1432
  )
@@ -1397,7 +1434,7 @@ var requestPinnedHop = async (params) => {
1397
1434
  }, params.timeoutMs);
1398
1435
  timeout.unref?.();
1399
1436
  const onAbort = () => request.destroy(
1400
- new WebPluginError(
1437
+ new PublicHttpError(
1401
1438
  "web_request_aborted",
1402
1439
  "The web request was aborted."
1403
1440
  )
@@ -1406,18 +1443,18 @@ var requestPinnedHop = async (params) => {
1406
1443
  request.once("error", (error) => {
1407
1444
  if (settled) return;
1408
1445
  settled = true;
1409
- if (isWebPluginError(error)) {
1446
+ if (isPublicHttpError(error)) {
1410
1447
  reject(error);
1411
1448
  } else if (timedOut) {
1412
1449
  reject(
1413
- new WebPluginError(
1450
+ new PublicHttpError(
1414
1451
  "web_request_timed_out",
1415
1452
  "The upstream web request timed out."
1416
1453
  )
1417
1454
  );
1418
1455
  } else {
1419
1456
  reject(
1420
- new WebPluginError(
1457
+ new PublicHttpError(
1421
1458
  "web_response_invalid",
1422
1459
  "The upstream web request failed."
1423
1460
  )
@@ -1432,7 +1469,7 @@ var requestPinnedHop = async (params) => {
1432
1469
  });
1433
1470
  };
1434
1471
 
1435
- // plugins/web/source/public-http.ts
1472
+ // src/shared/public-http/public-http.ts
1436
1473
  var REDIRECT_STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
1437
1474
  function canFollowHttpRedirect(request, status) {
1438
1475
  if (request.followRedirects === false) return false;
@@ -1443,9 +1480,9 @@ function redirectLocation(response) {
1443
1480
  return Array.isArray(raw) ? raw[0] : raw;
1444
1481
  }
1445
1482
  function validateBounds(request) {
1446
- const maxBytes = request.maxBytes ?? WEB_LIMITS.responseBytes;
1447
- const maxRedirects = request.maxRedirects ?? WEB_LIMITS.redirects;
1448
- const timeoutMs = request.timeoutMs ?? WEB_LIMITS.requestTimeoutMs;
1483
+ const maxBytes = request.maxBytes ?? PUBLIC_HTTP_LIMITS.responseBytes;
1484
+ const maxRedirects = request.maxRedirects ?? PUBLIC_HTTP_LIMITS.redirects;
1485
+ const timeoutMs = request.timeoutMs ?? PUBLIC_HTTP_LIMITS.requestTimeoutMs;
1449
1486
  if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
1450
1487
  throw new RangeError("maxBytes must be a positive safe integer");
1451
1488
  }
@@ -1461,8 +1498,8 @@ function createPublicHttpClient(dependencies = {}) {
1461
1498
  const resolveHost = dependencies.resolveHost;
1462
1499
  const requestHop = dependencies.requestHop ?? requestPinnedHop;
1463
1500
  const gate = createAggregateGate(
1464
- WEB_LIMITS.httpConcurrency,
1465
- WEB_LIMITS.httpQueueLimit
1501
+ PUBLIC_HTTP_LIMITS.httpConcurrency,
1502
+ PUBLIC_HTTP_LIMITS.httpQueueLimit
1466
1503
  );
1467
1504
  return Object.freeze({
1468
1505
  async get(request) {
@@ -1502,13 +1539,13 @@ function createPublicHttpClient(dependencies = {}) {
1502
1539
  }
1503
1540
  const location = redirectLocation(response);
1504
1541
  if (!location) {
1505
- throw new WebPluginError(
1542
+ throw new PublicHttpError(
1506
1543
  "web_redirect_invalid",
1507
1544
  "The upstream redirect did not provide a valid destination."
1508
1545
  );
1509
1546
  }
1510
1547
  if (redirectCount >= bounds.maxRedirects) {
1511
- throw new WebPluginError(
1548
+ throw new PublicHttpError(
1512
1549
  "web_redirect_limit_exceeded",
1513
1550
  "The web request exceeded the redirect limit."
1514
1551
  );
@@ -1516,8 +1553,8 @@ function createPublicHttpClient(dependencies = {}) {
1516
1553
  try {
1517
1554
  current = parsePublicHttpUrl(new URL(location, current).toString());
1518
1555
  } catch (error) {
1519
- if (isWebPluginError(error)) throw error;
1520
- throw new WebPluginError(
1556
+ if (isPublicHttpError(error)) throw error;
1557
+ throw new PublicHttpError(
1521
1558
  "web_redirect_invalid",
1522
1559
  "The upstream redirect did not provide a valid destination."
1523
1560
  );
@@ -1527,6 +1564,20 @@ function createPublicHttpClient(dependencies = {}) {
1527
1564
  });
1528
1565
  }
1529
1566
 
1567
+ // plugins/web/source/public-http.ts
1568
+ function createPublicHttpClient2(dependencies = {}) {
1569
+ const client = createPublicHttpClient(dependencies);
1570
+ return Object.freeze({
1571
+ async get(request) {
1572
+ try {
1573
+ return await client.get(request);
1574
+ } catch (error) {
1575
+ return rethrowWebPluginError(error);
1576
+ }
1577
+ }
1578
+ });
1579
+ }
1580
+
1530
1581
  // plugins/web/source/research.ts
1531
1582
  function uniqueHits(results) {
1532
1583
  const seen = /* @__PURE__ */ new Set();
@@ -2141,9 +2192,9 @@ function readSource(value) {
2141
2192
  value.allowedOrigins,
2142
2193
  "allowedOrigins",
2143
2194
  8
2144
- ).map((origin) => parsePublicHttpUrl(origin).origin);
2195
+ ).map((origin) => parsePublicHttpUrl2(origin).origin);
2145
2196
  const entryUrls = readSourceStrings(value.entryUrls, "entryUrls", 8).map(
2146
- (url) => parsePublicHttpUrl(url).toString()
2197
+ (url) => parsePublicHttpUrl2(url).toString()
2147
2198
  );
2148
2199
  for (const url of entryUrls) {
2149
2200
  if (url.length > 1024)
@@ -2220,6 +2271,15 @@ function readLightConfig(value) {
2220
2271
  });
2221
2272
  }
2222
2273
 
2274
+ // plugins/web/source/deadline.ts
2275
+ async function withinDeadline2(promise, deadline, abortSignal) {
2276
+ try {
2277
+ return await withinDeadline(promise, deadline, abortSignal);
2278
+ } catch (error) {
2279
+ return rethrowWebPluginError(error);
2280
+ }
2281
+ }
2282
+
2223
2283
  // plugins/web/source/light/crawl/origin-gate.ts
2224
2284
  function createOriginGate(maxActive, maxPerOrigin) {
2225
2285
  const activeOrigins = /* @__PURE__ */ new Map();
@@ -2321,7 +2381,7 @@ function createOriginGate(maxActive, maxPerOrigin) {
2321
2381
  const release = await acquire(origin, deadline, signal);
2322
2382
  const work = Promise.resolve().then(operation);
2323
2383
  void work.then(release, release);
2324
- return await withinDeadline(work, deadline, signal);
2384
+ return await withinDeadline2(work, deadline, signal);
2325
2385
  }
2326
2386
  });
2327
2387
  }
@@ -2726,7 +2786,7 @@ function createRobotsPolicy(config, admittedOrigins) {
2726
2786
  document.sitemaps.filter((rawUrl) => {
2727
2787
  if (rawUrl.length > WEB_LIMITS.upstreamUrlChars) return false;
2728
2788
  try {
2729
- return admittedOrigins.has(parsePublicHttpUrl(rawUrl).origin);
2789
+ return admittedOrigins.has(parsePublicHttpUrl2(rawUrl).origin);
2730
2790
  } catch {
2731
2791
  return false;
2732
2792
  }
@@ -2864,7 +2924,7 @@ function parseLightUrl(raw) {
2864
2924
  "The Light source URL exceeds its length limit."
2865
2925
  );
2866
2926
  }
2867
- return parsePublicHttpUrl(raw);
2927
+ return parsePublicHttpUrl2(raw);
2868
2928
  }
2869
2929
  function redirectTarget(response, current) {
2870
2930
  const raw = response.headers.location;
@@ -3260,7 +3320,7 @@ function boundedDiscoveryText(value, maxChars = 800) {
3260
3320
  function resolveDiscoveryUrl(value, base) {
3261
3321
  if (!value || value.length > 4096) return void 0;
3262
3322
  try {
3263
- const parsed = parsePublicHttpUrl(new URL(value.trim(), base).toString());
3323
+ const parsed = parsePublicHttpUrl2(new URL(value.trim(), base).toString());
3264
3324
  parsed.hash = "";
3265
3325
  return parsed.toString();
3266
3326
  } catch {
@@ -3898,7 +3958,7 @@ async function readLightDocument(params) {
3898
3958
  // plugins/web/source/light/search-frontier.ts
3899
3959
  function admittedCandidateUrl(url, source) {
3900
3960
  try {
3901
- const parsed = parsePublicHttpUrl(url);
3961
+ const parsed = parsePublicHttpUrl2(url);
3902
3962
  if (!source.allowedOrigins.includes(parsed.origin)) return void 0;
3903
3963
  parsed.hash = "";
3904
3964
  if (parsed.toString().length > 1024) return void 0;
@@ -4413,7 +4473,7 @@ function parseBraveHits(body, query) {
4413
4473
  if (!title || !rawUrl) continue;
4414
4474
  let parsed;
4415
4475
  try {
4416
- parsed = parsePublicHttpUrl(rawUrl);
4476
+ parsed = parsePublicHttpUrl2(rawUrl);
4417
4477
  } catch {
4418
4478
  continue;
4419
4479
  }
@@ -4722,7 +4782,7 @@ function failure(error, operation) {
4722
4782
  });
4723
4783
  }
4724
4784
  function createWebPlugin(context, dependencies = {}) {
4725
- const httpClient = dependencies.httpClient ?? createPublicHttpClient();
4785
+ const httpClient = dependencies.httpClient ?? createPublicHttpClient2();
4726
4786
  const fetchService = createWebFetchService(httpClient);
4727
4787
  const braveApiKey = context.secrets?.get("braveSearchApiKey")?.trim() ?? "";
4728
4788
  const retryBaseMs = readBoundedInteger(context.config?.retryBaseMs, {
@@ -339,6 +339,13 @@
339
339
  "properties": {
340
340
  "enabled": { "type": "boolean", "default": false },
341
341
  "emitClientEvents": { "type": "boolean", "default": false },
342
+ "maxRecallCallsPerRequest": {
343
+ "type": "integer",
344
+ "minimum": 1,
345
+ "maximum": 9007199254740991,
346
+ "default": 5,
347
+ "description": "Maximum explicit memory recall calls offered per request."
348
+ },
342
349
  "embeddingProfileId": {
343
350
  "type": "string",
344
351
  "minLength": 1,
@@ -46,6 +46,12 @@ The production path is:
46
46
  kernel establishes one immutable normalized working directory on the root
47
47
  call from the accepted Execution Agent decision; an explicit `null`
48
48
  selection resolves to `.`.
49
+ When long-term memory is enabled, either root contract may instead select
50
+ `recall_memory`. The kernel invokes the Runtime memory service directly,
51
+ commits a root-bound passive receipt, and resumes the same root under the
52
+ existing activation ceiling. Recall neither creates a child nor consumes a
53
+ capability execution. The bounded projection belongs only to the current
54
+ root steering version and is reused during terminal response authoring.
49
55
  6. Only the canonical root commits the root response. The selected contract
50
56
  may use its own presentation step, but the request finalizer, persistence,
51
57
  terminal observation, and completion path are shared.
@@ -155,7 +161,7 @@ or model prose.
155
161
 
156
162
  ## Canonical State
157
163
 
158
- `orchestration/role-calls/` ledger v17 is the sole writer of the request-local call tree
164
+ `orchestration/role-calls/` ledger v18 is the sole writer of the request-local call tree
159
165
  and role results. Each call frame records its caller, role, bounded objective,
160
166
  depth, status, result reference, and any canonical capability catalog-group
161
167
  scope. An authorized root, Planner, or Worker may also record one normalized
@@ -450,6 +456,104 @@ terminal-text behavior.
450
456
 
451
457
  ## Public Package Boundary
452
458
 
459
+ ### Scheduler lifecycle
460
+
461
+ For installed clients, use `createLocalRuntimeApplication(config)` from
462
+ `@abot-ai/runtime/runtime`. It automatically attaches to or creates one local
463
+ environment owner. Web and Bridge use the same managed facade, so requests,
464
+ session deletion and scheduling share admission across processes. Start with
465
+ `await application.start()` and close with `await application.stop()`; closing
466
+ an attached client leaves the owner running. See
467
+ [local ownership and client lifecycle](local-host/README.md).
468
+
469
+ `createRuntimeApplication` composes one local scheduler and its management
470
+ capability. Call `await application.start()` to load persisted Jobs and begin
471
+ the clock, and `await application.stop()` when shutting down. The local Web
472
+ backend starts all configured environments without waiting for a browser visit.
473
+ Scheduling can also start lazily when its built-in capability is first invoked.
474
+ After shutdown, explicit application or compatibility-host startup can restart
475
+ the same scheduler. Lazy management cannot revive a stopped scheduler. New
476
+ subscribers belong to the restarted lifecycle; old run events cannot cross into
477
+ it, and interrupted work is never retried.
478
+
479
+ The compatibility `createDefaultRuntimeDependencies(config).host.start()` and
480
+ standalone default host also start their composed scheduler automatically. The
481
+ synchronous handle exposes optional `ready` for asynchronous startup and `stop`
482
+ for both scheduler and Bridge; host requests and optional steering await
483
+ readiness and reject after shutdown. Host adapter overrides that change execution
484
+ or storage rebuild the scheduling graph. An event-only override rebinds future
485
+ scheduled requests while preserving the existing scheduler, admission, session
486
+ guard and subscriptions; running requests keep their captured sink. Starting the
487
+ default host again restores its sink for future schedules. The default-adapters
488
+ facade delegates these
489
+ responsibilities to `runtime-environment`, `runtime-host-environment` and
490
+ `runtime-host-lifecycle`; caller-supplied stores and registries remain injected.
491
+
492
+ `application.services.scheduler` provides create/list/get/update/pause/resume/
493
+ cancel/runNow and run history. Model calls bind the current conversation and
494
+ model mechanically; the Web page selects an existing conversation and model.
495
+ Each scheduled run enters the ordinary request handler with FULL permissions,
496
+ its saved model, current canonical history, and one persisted trigger message.
497
+ The trigger's immutable `schedule` reference identifies the Job and Run; its
498
+ message content is the exact historical prompt. Provenance comes from an internal
499
+ scheduler option bound to the exact request and session, never from public
500
+ `run_request` fields. Supplied `schedule` fields do not mark ordinary requests as
501
+ scheduled. Scheduled events can be observed
502
+ through `application.subscribeScheduledEvents`. Consumers may supply
503
+ `scheduledRequestOptions` for the existing approval and steering controllers.
504
+ Scheduled terminal events are published once after the handler settles. Success
505
+ requires the correlated assistant reply in canonical session storage; missing or
506
+ failed persistence is published as failure instead of an earlier completion.
507
+
508
+ Session admission defers scheduled work while ordinary requests are active;
509
+ subsequent ordinary requests wait for a running scheduled reservation. Existing
510
+ ordinary-request concurrency is unchanged when no scheduled reservation exists.
511
+ The composed SessionStore facade serializes mutations and marks deletion intent
512
+ synchronously. It uses the injected backing store but intentionally does not
513
+ preserve that object's identity: all callers must use the composed facade for
514
+ deletion and request persistence to share the lifetime guard.
515
+
516
+ Session deletion keeps its tombstone even if backing deletion or cleanup fails.
517
+ A later explicit delete retries only failed listeners from the original deletion;
518
+ successful cleanup is not repeated and newly registered listeners are not
519
+ retroactive. Concurrent deletes share the cleanup attempt until all listeners
520
+ settle. Successful physical deletion retains its original result until cleanup
521
+ succeeds, so an explicit retry can finish consumer attachment cleanup. Both
522
+ delete APIs use the backing store's statistics operation; the boolean API projects
523
+ its `deleted` result. The receipt is delivered once, including across API variants.
524
+ Cleanup never revives the session or reruns scheduled work.
525
+
526
+ See [scheduler ownership and time rules](scheduler/README.md) for persistence,
527
+ offline behavior, cancellation, and local ownership locking. Stopping does not
528
+ drain active model requests or retry interrupted work. This lifecycle does not
529
+ start a separate model loop or alter the Supervisor/Worker/Execution Agent roles.
530
+
531
+ The conversation-scoped `schedules.list` tool returns at most 100 Jobs per page,
532
+ newest first, without their stored prompts. Pass `nextCursor` as `cursor` to
533
+ continue until it is null; `omittedCount` describes the entries after that page.
534
+ A stale cursor fails explicitly and requires listing from the beginning. This
535
+ passive listing never schedules or executes work; `get` resolves an exact Job ID.
536
+ `get` requests the latest 20 runs from storage before loading their payloads and
537
+ returns that bounded history in chronological order, without pruning older runs.
538
+
539
+ Creation is projected as six flat operations (`create_timer`, `create_once`,
540
+ `create_interval`, `create_daily`, `create_weekly`, `create_monthly`). Each fixes
541
+ the adapter's `action=create` and schedule kind mechanically and requires only
542
+ its relevant timing fields. Calendar variants require an explicit IANA time zone.
543
+ Missing required timing is rejected before dispatch; model and conversation
544
+ binding remain owned by the active request. Recurrence changes use six matching
545
+ `update_*` operations with complete required timing and fixed action/kind.
546
+ The plain `update` operation edits metadata while retaining the recurrence;
547
+ omitted time zone, model and mode retain their saved values. The scheduling tool
548
+ has 19 operations under the shared 32-operation contract limit. Other management
549
+ operations and the underlying scheduler service keep their existing contracts.
550
+
551
+ `SchedulerService.listRuns` preserves complete chronological results when no
552
+ query is supplied. Optional cursor/limit queries return bounded newest-first
553
+ records with an exact Job-scoped run cursor. The Web requests one lookahead
554
+ record before owner RPC serialization, returns 50 runs by default (maximum 100),
555
+ and preserves access to older full records.
556
+
453
557
  Stable public subpath exports are:
454
558
 
455
559
  - `@abot-ai/runtime/runtime`