@abot-ai/runtime 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (731) hide show
  1. package/README.md +20 -3
  2. package/dist/src/bridge/request-steering.d.ts +2 -1
  3. package/dist/src/bridge/request-steering.js +4 -2
  4. package/dist/src/bridge/runtime-replay.js +2 -19
  5. package/dist/src/bridge/start-agent-bridge.js +1 -1
  6. package/dist/src/capabilities/normal-invocation/validator.js +1 -1
  7. package/dist/src/capabilities/tool-definition-validator/event-presentation.js +3 -0
  8. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.d.ts +2 -0
  9. package/dist/src/capabilities/tool-definition-validator/event-result-metadata.js +74 -0
  10. package/dist/src/capabilities/tool-event-metadata.js +3 -0
  11. package/dist/src/capabilities/tool-result-event-projection.d.ts +3 -0
  12. package/dist/src/capabilities/tool-result-event-projection.js +82 -0
  13. package/dist/src/capabilities/tool-types.d.ts +6 -1
  14. package/dist/src/cli/abot.js +2 -11
  15. package/dist/src/model-gateway/providers/ollama/generation-options.d.ts +1 -3
  16. package/dist/src/model-gateway/providers/ollama/generation-options.js +1 -5
  17. package/dist/src/model-gateway/providers/ollama/payload.js +0 -8
  18. package/dist/src/model-gateway/server/request-body.js +1 -0
  19. package/dist/src/plugin-sdk/index.d.ts +2 -0
  20. package/dist/src/plugin-sdk/index.js +2 -0
  21. package/dist/src/plugin-sdk/tool-availability-brief.d.ts +9 -0
  22. package/dist/src/plugin-sdk/tool-availability-brief.js +48 -0
  23. package/dist/src/plugin-sdk/tool-availability-overview.d.ts +9 -0
  24. package/dist/src/plugin-sdk/tool-availability-overview.js +62 -0
  25. package/dist/src/runtime/adapters/in-memory-session-store.js +1 -0
  26. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +11 -2
  27. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +2 -0
  28. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.d.ts +2 -0
  29. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.js +40 -0
  30. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +3 -0
  31. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +9 -0
  32. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts +13 -0
  33. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.js +25 -0
  34. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +18 -2
  35. package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +8 -0
  36. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +7 -3
  37. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +17 -2
  38. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.d.ts +9 -0
  39. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.js +8 -0
  40. package/dist/src/runtime/adapters/registered-tool-payload-plan.d.ts +0 -9
  41. package/dist/src/runtime/adapters/registered-tool-payload-plan.js +0 -67
  42. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.d.ts +13 -0
  43. package/dist/src/runtime/adapters/registered-tool-payload-related-artifacts.js +84 -0
  44. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/catalog.js +4 -0
  45. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +19 -1
  46. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.d.ts +1 -0
  47. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-lifecycle.js +11 -1
  48. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +2 -2
  49. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.d.ts +1 -0
  50. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-stages.js +9 -1
  51. package/dist/src/runtime/adapters/scheduled-request-outcome.d.ts +11 -0
  52. package/dist/src/runtime/adapters/scheduled-request-outcome.js +41 -0
  53. package/dist/src/runtime/adapters/scheduler-runtime.d.ts +19 -0
  54. package/dist/src/runtime/adapters/scheduler-runtime.js +138 -0
  55. package/dist/src/runtime/capabilities/request-bound-tool-registry.js +1 -24
  56. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +55 -0
  57. package/dist/src/runtime/capabilities/scheduling/create-operations.js +30 -0
  58. package/dist/src/runtime/capabilities/scheduling/create-time-zone.d.ts +1 -0
  59. package/dist/src/runtime/capabilities/scheduling/create-time-zone.js +11 -0
  60. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +25 -0
  61. package/dist/src/runtime/capabilities/scheduling/job-list-page.js +40 -0
  62. package/dist/src/runtime/capabilities/scheduling/model-validation.d.ts +2 -0
  63. package/dist/src/runtime/capabilities/scheduling/model-validation.js +15 -0
  64. package/dist/src/runtime/capabilities/scheduling/tool-contract.d.ts +2 -0
  65. package/dist/src/runtime/capabilities/scheduling/tool-contract.js +35 -0
  66. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.d.ts +43 -0
  67. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.js +27 -0
  68. package/dist/src/runtime/capabilities/scheduling/tool-module.d.ts +4 -0
  69. package/dist/src/runtime/capabilities/scheduling/tool-module.js +158 -0
  70. package/dist/src/runtime/capabilities/scheduling/update-operations.d.ts +2 -0
  71. package/dist/src/runtime/capabilities/scheduling/update-operations.js +49 -0
  72. package/dist/src/runtime/capabilities/tool-availability.d.ts +6 -0
  73. package/dist/src/runtime/capabilities/tool-availability.js +28 -0
  74. package/dist/src/runtime/composition.d.ts +23 -3
  75. package/dist/src/runtime/composition.js +12 -17
  76. package/dist/src/runtime/config/environment-paths.d.ts +10 -0
  77. package/dist/src/runtime/config/environment-paths.js +31 -0
  78. package/dist/src/runtime/config/environment-storage.d.ts +9 -0
  79. package/dist/src/runtime/config/environment-storage.js +65 -0
  80. package/dist/src/runtime/config/fields.js +7 -0
  81. package/dist/src/runtime/config/long-term-memory.js +15 -0
  82. package/dist/src/runtime/config/schema.js +8 -0
  83. package/dist/src/runtime/config.js +9 -5
  84. package/dist/src/runtime/context/capability-brief.d.ts +25 -0
  85. package/dist/src/runtime/context/capability-brief.js +106 -0
  86. package/dist/src/runtime/context/request-tool-results-message-binding.d.ts +6 -0
  87. package/dist/src/runtime/context/request-tool-results-message-binding.js +30 -0
  88. package/dist/src/runtime/context/request-tool-results-scope.d.ts +3 -0
  89. package/dist/src/runtime/context/request-tool-results-scope.js +8 -0
  90. package/dist/src/runtime/context/request-tool-results.d.ts +8 -4
  91. package/dist/src/runtime/context/request-tool-results.js +49 -38
  92. package/dist/src/runtime/context/scheduled-execution-context.d.ts +10 -0
  93. package/dist/src/runtime/context/scheduled-execution-context.js +52 -0
  94. package/dist/src/runtime/default-adapters.d.ts +3 -32
  95. package/dist/src/runtime/default-adapters.js +3 -270
  96. package/dist/src/runtime/default-environment-adapters.d.ts +19 -0
  97. package/dist/src/runtime/default-environment-adapters.js +144 -0
  98. package/dist/src/runtime/index.d.ts +5 -0
  99. package/dist/src/runtime/index.js +4 -0
  100. package/dist/src/runtime/local-application.d.ts +22 -0
  101. package/dist/src/runtime/local-application.js +81 -0
  102. package/dist/src/runtime/local-host/app-memory-dispatch.d.ts +11 -0
  103. package/dist/src/runtime/local-host/app-memory-dispatch.js +103 -0
  104. package/dist/src/runtime/local-host/app-owner.d.ts +4 -0
  105. package/dist/src/runtime/local-host/app-owner.js +119 -0
  106. package/dist/src/runtime/local-host/app-request-control.d.ts +24 -0
  107. package/dist/src/runtime/local-host/app-request-control.js +135 -0
  108. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +5 -0
  109. package/dist/src/runtime/local-host/app-service-dispatch.js +64 -0
  110. package/dist/src/runtime/local-host/client-identity.d.ts +3 -0
  111. package/dist/src/runtime/local-host/client-identity.js +17 -0
  112. package/dist/src/runtime/local-host/client-memory.d.ts +7 -0
  113. package/dist/src/runtime/local-host/client-memory.js +54 -0
  114. package/dist/src/runtime/local-host/client-requests.d.ts +19 -0
  115. package/dist/src/runtime/local-host/client-requests.js +145 -0
  116. package/dist/src/runtime/local-host/client-services.d.ts +10 -0
  117. package/dist/src/runtime/local-host/client-services.js +14 -0
  118. package/dist/src/runtime/local-host/contracts.d.ts +36 -0
  119. package/dist/src/runtime/local-host/contracts.js +1 -0
  120. package/dist/src/runtime/local-host/endpoint.d.ts +7 -0
  121. package/dist/src/runtime/local-host/endpoint.js +79 -0
  122. package/dist/src/runtime/local-host/owner-activity.d.ts +10 -0
  123. package/dist/src/runtime/local-host/owner-activity.js +30 -0
  124. package/dist/src/runtime/local-host/owner-retirement.d.ts +3 -0
  125. package/dist/src/runtime/local-host/owner-retirement.js +15 -0
  126. package/dist/src/runtime/local-host/owner-server.d.ts +6 -0
  127. package/dist/src/runtime/local-host/owner-server.js +88 -0
  128. package/dist/src/runtime/local-host/private-access.d.ts +2 -0
  129. package/dist/src/runtime/local-host/private-access.js +16 -0
  130. package/dist/src/runtime/local-host/private-directory.d.ts +1 -0
  131. package/dist/src/runtime/local-host/private-directory.js +57 -0
  132. package/dist/src/runtime/local-host/rpc-peer.d.ts +22 -0
  133. package/dist/src/runtime/local-host/rpc-peer.js +168 -0
  134. package/dist/src/runtime/local-host/rpc-protocol.d.ts +21 -0
  135. package/dist/src/runtime/local-host/rpc-protocol.js +46 -0
  136. package/dist/src/runtime/local-host/startup-connection.d.ts +5 -0
  137. package/dist/src/runtime/local-host/startup-connection.js +72 -0
  138. package/dist/src/runtime/local-host/transport.d.ts +3 -0
  139. package/dist/src/runtime/local-host/transport.js +88 -0
  140. package/dist/src/runtime/local-host/windows-private-access.d.ts +1 -0
  141. package/dist/src/runtime/local-host/windows-private-access.js +51 -0
  142. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +6 -0
  143. package/dist/src/runtime/long-term-memory/recall-binding.d.ts +3 -0
  144. package/dist/src/runtime/long-term-memory/recall-binding.js +27 -0
  145. package/dist/src/runtime/long-term-memory/recall-context.d.ts +20 -0
  146. package/dist/src/runtime/long-term-memory/recall-context.js +101 -0
  147. package/dist/src/runtime/long-term-memory/recall-continuation.d.ts +8 -0
  148. package/dist/src/runtime/long-term-memory/recall-continuation.js +36 -0
  149. package/dist/src/runtime/long-term-memory/recall-policy.d.ts +7 -0
  150. package/dist/src/runtime/long-term-memory/recall-policy.js +14 -0
  151. package/dist/src/runtime/long-term-memory/recall-result.d.ts +5 -0
  152. package/dist/src/runtime/long-term-memory/recall-result.js +54 -0
  153. package/dist/src/runtime/long-term-memory/repository-state.d.ts +2 -1
  154. package/dist/src/runtime/long-term-memory/repository-state.js +2 -2
  155. package/dist/src/runtime/model/invoke-raw-step.d.ts +1 -0
  156. package/dist/src/runtime/model/invoke-raw-step.js +1 -0
  157. package/dist/src/runtime/model/invoke-step.js +6 -0
  158. package/dist/src/runtime/model/invoke-structured-step.d.ts +1 -0
  159. package/dist/src/runtime/model/invoke-structured-step.js +1 -0
  160. package/dist/src/runtime/model/model-step-port.d.ts +2 -0
  161. package/dist/src/runtime/model/model-step-steering.d.ts +8 -0
  162. package/dist/src/runtime/model/model-step-steering.js +19 -0
  163. package/dist/src/runtime/orchestration/final-response/authoring-contract.js +1 -1
  164. package/dist/src/runtime/orchestration/final-response/invoke.d.ts +1 -0
  165. package/dist/src/runtime/orchestration/final-response/invoke.js +1 -0
  166. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  167. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +17 -50
  168. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.d.ts +9 -0
  169. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +17 -8
  170. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.d.ts +2 -0
  171. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.js +62 -0
  172. package/dist/src/runtime/orchestration/role-calls/child-return.d.ts +4 -0
  173. package/dist/src/runtime/orchestration/role-calls/child-return.js +25 -5
  174. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +12 -3
  175. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.d.ts +1 -1
  176. package/dist/src/runtime/orchestration/role-calls/command-dispatch/child-transitions.js +17 -2
  177. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.d.ts +4 -0
  178. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.js +89 -0
  179. package/dist/src/runtime/orchestration/role-calls/command-dispatch.d.ts +1 -1
  180. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +7 -2
  181. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +12 -7
  182. package/dist/src/runtime/orchestration/role-calls/contracts.js +4 -4
  183. package/dist/src/runtime/orchestration/role-calls/dependency-results.d.ts +1 -1
  184. package/dist/src/runtime/orchestration/role-calls/dependency-results.js +1 -0
  185. package/dist/src/runtime/orchestration/role-calls/diagnostics.js +3 -0
  186. package/dist/src/runtime/orchestration/role-calls/index.d.ts +6 -1
  187. package/dist/src/runtime/orchestration/role-calls/index.js +6 -1
  188. package/dist/src/runtime/orchestration/role-calls/ledger.d.ts +3 -1
  189. package/dist/src/runtime/orchestration/role-calls/ledger.js +9 -2
  190. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +51 -0
  191. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.js +4 -0
  192. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.d.ts +6 -0
  193. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.js +147 -0
  194. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.d.ts +5 -0
  195. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.js +27 -0
  196. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +3 -0
  197. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +121 -0
  198. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.d.ts +3 -0
  199. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.js +44 -0
  200. package/dist/src/runtime/orchestration/role-calls/reducer.d.ts +1 -1
  201. package/dist/src/runtime/orchestration/role-calls/reducer.js +3 -2
  202. package/dist/src/runtime/orchestration/role-calls/result-receipt.d.ts +49 -0
  203. package/dist/src/runtime/orchestration/role-calls/result-receipt.js +188 -0
  204. package/dist/src/runtime/orchestration/role-calls/return-result-receipt.d.ts +19 -0
  205. package/dist/src/runtime/orchestration/role-calls/return-result-receipt.js +52 -0
  206. package/dist/src/runtime/orchestration/role-calls/transaction-effect.d.ts +5 -0
  207. package/dist/src/runtime/orchestration/role-calls/transaction-effect.js +14 -0
  208. package/dist/src/runtime/orchestration/role-calls/transactions.js +4 -24
  209. package/dist/src/runtime/orchestration/role-calls/work-result-lineage.d.ts +34 -0
  210. package/dist/src/runtime/orchestration/role-calls/work-result-lineage.js +185 -0
  211. package/dist/src/runtime/orchestration/role-calls/work-result-receipt.d.ts +36 -0
  212. package/dist/src/runtime/orchestration/role-calls/work-result-receipt.js +187 -0
  213. package/dist/src/runtime/orchestration/role-executors/activation/result-normalization.js +6 -3
  214. package/dist/src/runtime/orchestration/role-executors/child-invocation/transaction.js +1 -0
  215. package/dist/src/runtime/orchestration/role-executors/contracts.d.ts +2 -1
  216. package/dist/src/runtime/orchestration/worker-capabilities/assignment-provenance.d.ts +36 -0
  217. package/dist/src/runtime/orchestration/worker-capabilities/assignment-provenance.js +171 -0
  218. package/dist/src/runtime/orchestration/worker-capabilities/contracts.d.ts +32 -1
  219. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.d.ts +2 -1
  220. package/dist/src/runtime/orchestration/worker-capabilities/execution/invocation-preparation.js +3 -0
  221. package/dist/src/runtime/orchestration/worker-capabilities/execution.js +42 -19
  222. package/dist/src/runtime/orchestration/worker-capabilities/index.d.ts +2 -0
  223. package/dist/src/runtime/orchestration/worker-capabilities/index.js +2 -0
  224. package/dist/src/runtime/orchestration/worker-capabilities/payload-assignment-validation.d.ts +3 -0
  225. package/dist/src/runtime/orchestration/worker-capabilities/payload-assignment-validation.js +30 -0
  226. package/dist/src/runtime/orchestration/worker-capabilities/payload-author.js +8 -19
  227. package/dist/src/runtime/orchestration/worker-capabilities/payload-contracts.d.ts +5 -1
  228. package/dist/src/runtime/orchestration/worker-capabilities/payload-instructions.js +1 -1
  229. package/dist/src/runtime/orchestration/worker-capabilities/payload-source-provenance.d.ts +14 -0
  230. package/dist/src/runtime/orchestration/worker-capabilities/payload-source-provenance.js +132 -0
  231. package/dist/src/runtime/plugins/manifest-validator.js +4 -1
  232. package/dist/src/runtime/ports.d.ts +4 -0
  233. package/dist/src/runtime/request/bound-runtime-handler.d.ts +2 -0
  234. package/dist/src/runtime/request/bound-runtime-handler.js +25 -0
  235. package/dist/src/runtime/request/capability-brief.d.ts +5 -0
  236. package/dist/src/runtime/request/capability-brief.js +24 -0
  237. package/dist/src/runtime/request/contracts.d.ts +6 -0
  238. package/dist/src/runtime/request/execution-agent-root-execution.js +12 -0
  239. package/dist/src/runtime/request/execution-facets.js +6 -0
  240. package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
  241. package/dist/src/runtime/request/execution-scope.d.ts +3 -2
  242. package/dist/src/runtime/request/handler.js +6 -0
  243. package/dist/src/runtime/request/role-executor-composition.js +1 -1
  244. package/dist/src/runtime/request/root-contract.d.ts +7 -1
  245. package/dist/src/runtime/request/root-execution-kernel.js +33 -37
  246. package/dist/src/runtime/request/root-memory-recall.d.ts +11 -0
  247. package/dist/src/runtime/request/root-memory-recall.js +71 -0
  248. package/dist/src/runtime/request/root-observation-handoff.d.ts +17 -0
  249. package/dist/src/runtime/request/root-observation-handoff.js +44 -0
  250. package/dist/src/runtime/request/scheduled-execution.d.ts +9 -0
  251. package/dist/src/runtime/request/scheduled-execution.js +32 -0
  252. package/dist/src/runtime/request/session-admission.d.ts +17 -0
  253. package/dist/src/runtime/request/session-admission.js +88 -0
  254. package/dist/src/runtime/request/supervisor-root-execution-diagnostics.d.ts +1 -1
  255. package/dist/src/runtime/request/supervisor-root-execution.js +8 -0
  256. package/dist/src/runtime/request/worker-capability-composition.d.ts +2 -1
  257. package/dist/src/runtime/request/worker-capability-composition.js +6 -1
  258. package/dist/src/runtime/request/worker-capability-payload.js +11 -8
  259. package/dist/src/runtime/runtime-environment.d.ts +31 -0
  260. package/dist/src/runtime/runtime-environment.js +102 -0
  261. package/dist/src/runtime/runtime-host-environment.d.ts +8 -0
  262. package/dist/src/runtime/runtime-host-environment.js +57 -0
  263. package/dist/src/runtime/runtime-host-lifecycle.d.ts +4 -0
  264. package/dist/src/runtime/runtime-host-lifecycle.js +64 -0
  265. package/dist/src/runtime/runtime-host-scheduler-ownership.d.ts +5 -0
  266. package/dist/src/runtime/runtime-host-scheduler-ownership.js +67 -0
  267. package/dist/src/runtime/runtime-host.d.ts +19 -0
  268. package/dist/src/runtime/runtime-host.js +63 -0
  269. package/dist/src/runtime/scheduler/calendar-time.d.ts +10 -0
  270. package/dist/src/runtime/scheduler/calendar-time.js +58 -0
  271. package/dist/src/runtime/scheduler/contracts.d.ts +143 -0
  272. package/dist/src/runtime/scheduler/contracts.js +1 -0
  273. package/dist/src/runtime/scheduler/file-store.d.ts +2 -0
  274. package/dist/src/runtime/scheduler/file-store.js +76 -0
  275. package/dist/src/runtime/scheduler/instant-validation.d.ts +4 -0
  276. package/dist/src/runtime/scheduler/instant-validation.js +69 -0
  277. package/dist/src/runtime/scheduler/interval-range.d.ts +8 -0
  278. package/dist/src/runtime/scheduler/interval-range.js +24 -0
  279. package/dist/src/runtime/scheduler/job-management.d.ts +8 -0
  280. package/dist/src/runtime/scheduler/job-management.js +212 -0
  281. package/dist/src/runtime/scheduler/journal-checkpoint.d.ts +9 -0
  282. package/dist/src/runtime/scheduler/journal-checkpoint.js +45 -0
  283. package/dist/src/runtime/scheduler/journal-durability.d.ts +8 -0
  284. package/dist/src/runtime/scheduler/journal-durability.js +59 -0
  285. package/dist/src/runtime/scheduler/journal-files.d.ts +14 -0
  286. package/dist/src/runtime/scheduler/journal-files.js +59 -0
  287. package/dist/src/runtime/scheduler/journal-head.d.ts +21 -0
  288. package/dist/src/runtime/scheduler/journal-head.js +81 -0
  289. package/dist/src/runtime/scheduler/journal-index-state.d.ts +31 -0
  290. package/dist/src/runtime/scheduler/journal-index-state.js +137 -0
  291. package/dist/src/runtime/scheduler/journal-index.d.ts +22 -0
  292. package/dist/src/runtime/scheduler/journal-index.js +195 -0
  293. package/dist/src/runtime/scheduler/journal-store.d.ts +21 -0
  294. package/dist/src/runtime/scheduler/journal-store.js +184 -0
  295. package/dist/src/runtime/scheduler/journal-transaction.d.ts +14 -0
  296. package/dist/src/runtime/scheduler/journal-transaction.js +104 -0
  297. package/dist/src/runtime/scheduler/next-occurrence.d.ts +3 -0
  298. package/dist/src/runtime/scheduler/next-occurrence.js +39 -0
  299. package/dist/src/runtime/scheduler/run-completion.d.ts +12 -0
  300. package/dist/src/runtime/scheduler/run-completion.js +77 -0
  301. package/dist/src/runtime/scheduler/run-list-query.d.ts +5 -0
  302. package/dist/src/runtime/scheduler/run-list-query.js +38 -0
  303. package/dist/src/runtime/scheduler/run-records.d.ts +6 -0
  304. package/dist/src/runtime/scheduler/run-records.js +41 -0
  305. package/dist/src/runtime/scheduler/schedule-update.d.ts +3 -0
  306. package/dist/src/runtime/scheduler/schedule-update.js +22 -0
  307. package/dist/src/runtime/scheduler/schedule-validation.d.ts +10 -0
  308. package/dist/src/runtime/scheduler/schedule-validation.js +132 -0
  309. package/dist/src/runtime/scheduler/scheduler-engine.d.ts +2 -0
  310. package/dist/src/runtime/scheduler/scheduler-engine.js +174 -0
  311. package/dist/src/runtime/scheduler/scheduler-service.d.ts +10 -0
  312. package/dist/src/runtime/scheduler/scheduler-service.js +115 -0
  313. package/dist/src/runtime/scheduler/service-context.d.ts +21 -0
  314. package/dist/src/runtime/scheduler/service-context.js +26 -0
  315. package/dist/src/runtime/scheduler/session-deletion-state.d.ts +9 -0
  316. package/dist/src/runtime/scheduler/session-deletion-state.js +30 -0
  317. package/dist/src/runtime/scheduler/snapshot-validation.d.ts +4 -0
  318. package/dist/src/runtime/scheduler/snapshot-validation.js +112 -0
  319. package/dist/src/runtime/scheduler/startup-recovery.d.ts +2 -0
  320. package/dist/src/runtime/scheduler/startup-recovery.js +38 -0
  321. package/dist/src/runtime/scheduler/validation-error.d.ts +4 -0
  322. package/dist/src/runtime/scheduler/validation-error.js +8 -0
  323. package/dist/src/runtime/scheduler/working-store.d.ts +3 -0
  324. package/dist/src/runtime/scheduler/working-store.js +8 -0
  325. package/dist/src/runtime/session/request-session.d.ts +1 -0
  326. package/dist/src/runtime/session/request-session.js +14 -1
  327. package/dist/src/runtime/session/session-attachment-deletion.d.ts +8 -0
  328. package/dist/src/runtime/session/session-attachment-deletion.js +87 -0
  329. package/dist/src/runtime/session/session-deletion-boundary.d.ts +10 -0
  330. package/dist/src/runtime/session/session-deletion-boundary.js +39 -0
  331. package/dist/src/runtime/session/session-deletion-cleanup.d.ts +7 -0
  332. package/dist/src/runtime/session/session-deletion-cleanup.js +62 -0
  333. package/dist/src/runtime/session/session-deletion-finalization.d.ts +7 -0
  334. package/dist/src/runtime/session/session-deletion-finalization.js +34 -0
  335. package/dist/src/runtime/session/session-deletion-receipts.d.ts +7 -0
  336. package/dist/src/runtime/session/session-deletion-receipts.js +18 -0
  337. package/dist/src/runtime/session/session-lifecycle-store.d.ts +21 -0
  338. package/dist/src/runtime/session/session-lifecycle-store.js +72 -0
  339. package/dist/src/runtime/session/session-mutation-queue.d.ts +3 -0
  340. package/dist/src/runtime/session/session-mutation-queue.js +15 -0
  341. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.d.ts +16 -0
  342. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.js +165 -0
  343. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +3 -1
  344. package/dist/src/runtime/steps/execution-agent/decision-parsing.d.ts +2 -0
  345. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +195 -0
  346. package/dist/src/runtime/steps/execution-agent/decision-validation.d.ts +30 -0
  347. package/dist/src/runtime/steps/execution-agent/decision-validation.js +127 -0
  348. package/dist/src/runtime/steps/execution-agent/format.d.ts +1 -0
  349. package/dist/src/runtime/steps/execution-agent/format.js +12 -0
  350. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -1
  351. package/dist/src/runtime/steps/execution-agent/input.js +17 -2
  352. package/dist/src/runtime/steps/execution-agent/parser.d.ts +1 -2
  353. package/dist/src/runtime/steps/execution-agent/parser.js +1 -472
  354. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +2 -0
  355. package/dist/src/runtime/steps/execution-agent/prompt.js +6 -3
  356. package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +4 -3
  357. package/dist/src/runtime/steps/execution-agent/response-input.js +5 -4
  358. package/dist/src/runtime/steps/execution-agent/response-run.d.ts +3 -0
  359. package/dist/src/runtime/steps/execution-agent/response-run.js +7 -3
  360. package/dist/src/runtime/steps/execution-agent/run.d.ts +2 -0
  361. package/dist/src/runtime/steps/execution-agent/run.js +2 -0
  362. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -1
  363. package/dist/src/runtime/steps/execution-agent/state-context.js +13 -5
  364. package/dist/src/runtime/steps/memory-recall-decision.d.ts +30 -0
  365. package/dist/src/runtime/steps/memory-recall-decision.js +101 -0
  366. package/dist/src/runtime/steps/memory-recall-prompt.d.ts +1 -0
  367. package/dist/src/runtime/steps/memory-recall-prompt.js +15 -0
  368. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.d.ts +14 -0
  369. package/dist/src/runtime/steps/planner-decision/capability-catalog-context.js +87 -0
  370. package/dist/src/runtime/steps/planner-decision/contracts.d.ts +3 -5
  371. package/dist/src/runtime/steps/planner-decision/contracts.js +3 -3
  372. package/dist/src/runtime/steps/planner-decision/format.d.ts +3 -2
  373. package/dist/src/runtime/steps/planner-decision/format.js +73 -76
  374. package/dist/src/runtime/steps/planner-decision/input.d.ts +4 -3
  375. package/dist/src/runtime/steps/planner-decision/input.js +10 -7
  376. package/dist/src/runtime/steps/planner-decision/parser.d.ts +3 -2
  377. package/dist/src/runtime/steps/planner-decision/parser.js +10 -19
  378. package/dist/src/runtime/steps/planner-decision/plan-parser.js +18 -12
  379. package/dist/src/runtime/steps/planner-decision/prompt.js +33 -28
  380. package/dist/src/runtime/steps/planner-decision/resume.d.ts +1 -1
  381. package/dist/src/runtime/steps/planner-decision/resume.js +38 -1
  382. package/dist/src/runtime/steps/planner-decision/run.d.ts +3 -2
  383. package/dist/src/runtime/steps/reviewer-decision/audit-coverage.d.ts +10 -0
  384. package/dist/src/runtime/steps/reviewer-decision/audit-coverage.js +186 -0
  385. package/dist/src/runtime/steps/reviewer-decision/contracts.d.ts +3 -8
  386. package/dist/src/runtime/steps/reviewer-decision/contracts.js +12 -6
  387. package/dist/src/runtime/steps/reviewer-decision/delegated-context.d.ts +24 -0
  388. package/dist/src/runtime/steps/reviewer-decision/delegated-context.js +70 -0
  389. package/dist/src/runtime/steps/reviewer-decision/diagnostics.js +1 -1
  390. package/dist/src/runtime/steps/reviewer-decision/format.js +37 -24
  391. package/dist/src/runtime/steps/reviewer-decision/input.js +1 -1
  392. package/dist/src/runtime/steps/reviewer-decision/model-context.d.ts +4 -3
  393. package/dist/src/runtime/steps/reviewer-decision/model-context.js +92 -10
  394. package/dist/src/runtime/steps/reviewer-decision/parser.js +19 -1
  395. package/dist/src/runtime/steps/reviewer-decision/projection.js +42 -68
  396. package/dist/src/runtime/steps/reviewer-decision/prompt.js +10 -5
  397. package/dist/src/runtime/steps/reviewer-decision/run.js +12 -3
  398. package/dist/src/runtime/steps/reviewer-decision/verification-coverage.d.ts +14 -0
  399. package/dist/src/runtime/steps/reviewer-decision/verification-coverage.js +52 -0
  400. package/dist/src/runtime/steps/supervisor-decision/capability-brief.d.ts +14 -0
  401. package/dist/src/runtime/steps/supervisor-decision/capability-brief.js +38 -0
  402. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +11 -5
  403. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +4 -0
  404. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +21 -8
  405. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +2 -0
  406. package/dist/src/runtime/steps/supervisor-decision/format.js +73 -22
  407. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +9 -2
  408. package/dist/src/runtime/steps/supervisor-decision/input.js +44 -6
  409. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.d.ts +10 -0
  410. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.js +32 -0
  411. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +2 -0
  412. package/dist/src/runtime/steps/supervisor-decision/parser.js +97 -59
  413. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +3 -0
  414. package/dist/src/runtime/steps/supervisor-decision/prompt.js +22 -15
  415. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +13 -0
  416. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +32 -0
  417. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +2 -0
  418. package/dist/src/runtime/steps/supervisor-decision/resume.js +60 -1
  419. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +3 -0
  420. package/dist/src/runtime/steps/supervisor-decision/run.js +29 -0
  421. package/dist/src/runtime/steps/supervisor-decision/working-directory.js +8 -1
  422. package/dist/src/runtime/steps/supervisor-response/diagnostics.d.ts +1 -0
  423. package/dist/src/runtime/steps/supervisor-response/diagnostics.js +1 -0
  424. package/dist/src/runtime/steps/supervisor-response/input.d.ts +2 -1
  425. package/dist/src/runtime/steps/supervisor-response/input.js +17 -4
  426. package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +1 -0
  427. package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +4 -0
  428. package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +1 -0
  429. package/dist/src/runtime/steps/supervisor-response/prompt.js +8 -2
  430. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +10 -0
  431. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +25 -0
  432. package/dist/src/runtime/steps/supervisor-response/run.d.ts +6 -1
  433. package/dist/src/runtime/steps/supervisor-response/run.js +26 -7
  434. package/dist/src/runtime/steps/worker-decision/contracts.d.ts +2 -1
  435. package/dist/src/runtime/steps/worker-decision/input/canonical-state.js +8 -1
  436. package/dist/src/runtime/steps/worker-decision/input/diagnostic-projection.js +2 -2
  437. package/dist/src/runtime/steps/worker-decision/input/prompt-context.d.ts +1 -0
  438. package/dist/src/runtime/steps/worker-decision/input/prompt-context.js +4 -1
  439. package/dist/src/runtime/steps/worker-decision/input/reference-context.js +34 -14
  440. package/dist/src/runtime/steps/worker-decision/input/types.d.ts +2 -1
  441. package/dist/src/runtime/steps/worker-decision/input.d.ts +1 -0
  442. package/dist/src/runtime/steps/worker-decision/input.js +1 -0
  443. package/dist/src/runtime/steps/worker-decision/payload-dependency-results.d.ts +8 -0
  444. package/dist/src/runtime/steps/worker-decision/payload-dependency-results.js +19 -0
  445. package/dist/src/runtime/steps/worker-decision/prompt.js +8 -8
  446. package/dist/src/runtime/steps/worker-decision/result-author.js +18 -11
  447. package/dist/src/runtime/steps/worker-decision/run.js +2 -2
  448. package/dist/src/sessions/record/projection.js +1 -0
  449. package/dist/src/sessions/schedule-metadata.d.ts +8 -0
  450. package/dist/src/sessions/schedule-metadata.js +1 -0
  451. package/dist/src/sessions/session-service.d.ts +1 -0
  452. package/dist/src/sessions/session-service.js +1 -0
  453. package/dist/src/sessions/types.d.ts +2 -0
  454. package/dist/src/shared/http-server-shutdown.d.ts +4 -0
  455. package/dist/src/shared/http-server-shutdown.js +17 -0
  456. package/dist/src/shared/public-http/aggregate-gate.d.ts +3 -0
  457. package/dist/src/shared/public-http/aggregate-gate.js +87 -0
  458. package/dist/src/shared/public-http/deadline.d.ts +2 -0
  459. package/dist/src/shared/public-http/deadline.js +29 -0
  460. package/dist/src/shared/public-http/errors.d.ts +6 -0
  461. package/dist/src/shared/public-http/errors.js +11 -0
  462. package/dist/src/shared/public-http/limits.d.ts +8 -0
  463. package/dist/src/shared/public-http/limits.js +8 -0
  464. package/dist/src/shared/public-http/network-policy.d.ts +11 -0
  465. package/dist/src/shared/public-http/network-policy.js +178 -0
  466. package/dist/src/shared/public-http/public-http.d.ts +24 -0
  467. package/dist/src/shared/public-http/public-http.js +85 -0
  468. package/dist/src/shared/public-http/request-hop.d.ts +18 -0
  469. package/dist/src/shared/public-http/request-hop.js +140 -0
  470. package/dist/src/web-ui/app/ARCHITECTURE.md +82 -7
  471. package/dist/src/web-ui/app/app-bootstrap.js +53 -0
  472. package/dist/src/web-ui/app/app-dom.js +80 -0
  473. package/dist/src/web-ui/app/app.js +199 -217
  474. package/dist/src/web-ui/app/components/composer-context-window.d.ts +25 -0
  475. package/dist/src/web-ui/app/components/composer-context-window.js +155 -0
  476. package/dist/src/web-ui/app/components/composer-plan.d.ts +9 -0
  477. package/dist/src/web-ui/app/components/composer-plan.js +128 -0
  478. package/dist/src/web-ui/app/components/conversation-activity.d.ts +7 -6
  479. package/dist/src/web-ui/app/components/conversation-activity.js +97 -163
  480. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +24 -0
  481. package/dist/src/web-ui/app/components/conversation-role-cards.js +237 -0
  482. package/dist/src/web-ui/app/components/conversation-schedule.js +71 -0
  483. package/dist/src/web-ui/app/components/conversation-sidebar-layout.js +12 -0
  484. package/dist/src/web-ui/app/components/conversation-sources.d.ts +7 -0
  485. package/dist/src/web-ui/app/components/conversation-sources.js +182 -0
  486. package/dist/src/web-ui/app/components/conversation-status.js +65 -0
  487. package/dist/src/web-ui/app/components/conversation-tools.d.ts +13 -0
  488. package/dist/src/web-ui/app/components/conversation-tools.js +284 -0
  489. package/dist/src/web-ui/app/components/conversation-view.js +73 -17
  490. package/dist/src/web-ui/app/components/dashboard/activity.js +61 -0
  491. package/dist/src/web-ui/app/components/dashboard/icons.js +23 -0
  492. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +64 -0
  493. package/dist/src/web-ui/app/components/dashboard/workspace.js +107 -0
  494. package/dist/src/web-ui/app/components/message-link-previews.d.ts +16 -0
  495. package/dist/src/web-ui/app/components/message-link-previews.js +179 -0
  496. package/dist/src/web-ui/app/components/model-selector.js +4 -1
  497. package/dist/src/web-ui/app/components/operations-section.js +46 -0
  498. package/dist/src/web-ui/app/components/schedules/details.js +101 -0
  499. package/dist/src/web-ui/app/components/schedules/form.d.ts +13 -0
  500. package/dist/src/web-ui/app/components/schedules/form.js +246 -0
  501. package/dist/src/web-ui/app/components/schedules/workspace-state.js +59 -0
  502. package/dist/src/web-ui/app/components/schedules/workspace.js +165 -0
  503. package/dist/src/web-ui/app/components/workspace-shell.js +133 -79
  504. package/dist/src/web-ui/app/configuration-feature.js +72 -0
  505. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +1 -0
  506. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +17 -6
  507. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +2 -0
  508. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +15 -1
  509. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +58 -0
  510. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +53 -0
  511. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +180 -0
  512. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +23 -0
  513. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +82 -0
  514. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +8 -0
  515. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +28 -39
  516. package/dist/src/web-ui/app/controllers/dashboard-controller.js +127 -0
  517. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +40 -0
  518. package/dist/src/web-ui/app/controllers/home-composer-feature.js +119 -0
  519. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +37 -0
  520. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +2 -0
  521. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +126 -90
  522. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +2 -1
  523. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +17 -14
  524. package/dist/src/web-ui/app/controllers/schedule-realtime.js +118 -0
  525. package/dist/src/web-ui/app/controllers/schedules-controller.js +421 -0
  526. package/dist/src/web-ui/app/controllers/session-controller.js +47 -15
  527. package/dist/src/web-ui/app/dashboard-feature.js +44 -0
  528. package/dist/src/web-ui/app/index.html +240 -189
  529. package/dist/src/web-ui/app/lib/composer-plan-model.d.ts +32 -0
  530. package/dist/src/web-ui/app/lib/composer-plan-model.js +108 -0
  531. package/dist/src/web-ui/app/lib/composer-submission-scope.d.ts +21 -0
  532. package/dist/src/web-ui/app/lib/composer-submission-scope.js +13 -0
  533. package/dist/src/web-ui/app/lib/context-window-snapshot-order.d.ts +15 -0
  534. package/dist/src/web-ui/app/lib/context-window-snapshot-order.js +31 -0
  535. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +28 -0
  536. package/dist/src/web-ui/app/lib/conversation-role-model.js +275 -0
  537. package/dist/src/web-ui/app/lib/conversation-status-model.d.ts +12 -0
  538. package/dist/src/web-ui/app/lib/conversation-status-model.js +116 -0
  539. package/dist/src/web-ui/app/lib/dashboard-job-templates.js +41 -0
  540. package/dist/src/web-ui/app/lib/dashboard-presentation.js +126 -0
  541. package/dist/src/web-ui/app/lib/event-presentation.js +30 -9
  542. package/dist/src/web-ui/app/lib/message-markdown.d.ts +5 -0
  543. package/dist/src/web-ui/app/lib/message-markdown.js +99 -0
  544. package/dist/src/web-ui/app/lib/message-url-policy.d.ts +1 -0
  545. package/dist/src/web-ui/app/lib/message-url-policy.js +13 -0
  546. package/dist/src/web-ui/app/lib/schedule-errors.js +29 -0
  547. package/dist/src/web-ui/app/lib/schedule-message.js +30 -0
  548. package/dist/src/web-ui/app/lib/schedule-presentation.js +81 -0
  549. package/dist/src/web-ui/app/lib/session-read-state.d.ts +22 -0
  550. package/dist/src/web-ui/app/lib/session-read-state.js +63 -0
  551. package/dist/src/web-ui/app/lib/source-url-policy.d.ts +2 -0
  552. package/dist/src/web-ui/app/lib/source-url-policy.js +31 -0
  553. package/dist/src/web-ui/app/lib/task-progress.d.ts +53 -0
  554. package/dist/src/web-ui/app/lib/task-progress.js +233 -0
  555. package/dist/src/web-ui/app/lib/text-format.js +2 -143
  556. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +26 -0
  557. package/dist/src/web-ui/app/lib/tool-activity-event.js +228 -0
  558. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +41 -0
  559. package/dist/src/web-ui/app/lib/tool-activity-model.js +255 -0
  560. package/dist/src/web-ui/app/lib/tool-invocation-count.d.ts +5 -0
  561. package/dist/src/web-ui/app/lib/tool-invocation-count.js +21 -0
  562. package/dist/src/web-ui/app/lib/tool-timeline.d.ts +3 -0
  563. package/dist/src/web-ui/app/lib/tool-timeline.js +18 -0
  564. package/dist/src/web-ui/app/lib/web-source-event.d.ts +8 -0
  565. package/dist/src/web-ui/app/lib/web-source-event.js +21 -0
  566. package/dist/src/web-ui/app/lib/web-sources.d.ts +36 -0
  567. package/dist/src/web-ui/app/lib/web-sources.js +177 -0
  568. package/dist/src/web-ui/app/schedules-feature.js +87 -0
  569. package/dist/src/web-ui/app/services/message-link-preview-client.d.ts +14 -0
  570. package/dist/src/web-ui/app/services/message-link-preview-client.js +96 -0
  571. package/dist/src/web-ui/app/services/runtime-web-client/schedules.js +51 -0
  572. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +37 -0
  573. package/dist/src/web-ui/app/services/runtime-web-client.js +13 -8
  574. package/dist/src/web-ui/app/styles/00-tokens-base.css +15 -3
  575. package/dist/src/web-ui/app/styles/10-shell-sessions.css +24 -34
  576. package/dist/src/web-ui/app/styles/12-conversation-sidebar.css +93 -0
  577. package/dist/src/web-ui/app/styles/18-dashboard.css +384 -0
  578. package/dist/src/web-ui/app/styles/20-chat-composer.css +54 -600
  579. package/dist/src/web-ui/app/styles/21-composer-controls.css +368 -0
  580. package/dist/src/web-ui/app/styles/22-composer-context-window.css +90 -0
  581. package/dist/src/web-ui/app/styles/23-composer-plan.css +171 -0
  582. package/dist/src/web-ui/app/styles/24-conversation-role-cards.css +205 -0
  583. package/dist/src/web-ui/app/styles/25-conversation-sources.css +141 -0
  584. package/dist/src/web-ui/app/styles/26-message-content.css +295 -0
  585. package/dist/src/web-ui/app/styles/27-conversation-tools.css +266 -0
  586. package/dist/src/web-ui/app/styles/28-conversation-status.css +52 -0
  587. package/dist/src/web-ui/app/styles/30-inspector-config.css +21 -209
  588. package/dist/src/web-ui/app/styles/35-memory-onboarding.css +8 -8
  589. package/dist/src/web-ui/app/styles/36-memory-management.css +13 -13
  590. package/dist/src/web-ui/app/styles/37-config-operations.css +197 -0
  591. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +263 -0
  592. package/dist/src/web-ui/app/styles/38-schedules.css +352 -0
  593. package/dist/src/web-ui/app/styles/40-config-workspace.css +36 -36
  594. package/dist/src/web-ui/app/styles/90-responsive.css +28 -77
  595. package/dist/src/web-ui/app/styles/91-schedules-responsive.css +72 -0
  596. package/dist/src/web-ui/app/styles/92-dashboard-responsive.css +88 -0
  597. package/dist/src/web-ui/app/styles/foundation.css +2 -2
  598. package/dist/src/web-ui/app/styles.css +15 -0
  599. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  600. package/dist/src/web-ui/app/ui-behavior.js +4 -2
  601. package/dist/src/web-ui/app/vendor/README.md +15 -0
  602. package/dist/src/web-ui/app/vendor/markdown-it.LICENSE +22 -0
  603. package/dist/src/web-ui/app/vendor/markdown-it.js +3003 -0
  604. package/dist/src/web-ui/link-preview/metadata.d.ts +9 -0
  605. package/dist/src/web-ui/link-preview/metadata.js +97 -0
  606. package/dist/src/web-ui/link-preview/preview-cache.d.ts +4 -0
  607. package/dist/src/web-ui/link-preview/preview-cache.js +23 -0
  608. package/dist/src/web-ui/link-preview/raster-response.d.ts +9 -0
  609. package/dist/src/web-ui/link-preview/raster-response.js +49 -0
  610. package/dist/src/web-ui/link-preview/routes.d.ts +3 -0
  611. package/dist/src/web-ui/link-preview/routes.js +97 -0
  612. package/dist/src/web-ui/link-preview/service.d.ts +11 -0
  613. package/dist/src/web-ui/link-preview/service.js +117 -0
  614. package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -1
  615. package/dist/src/web-ui/local-runtime/api-router.js +42 -73
  616. package/dist/src/web-ui/local-runtime/contracts.d.ts +2 -2
  617. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +12 -1
  618. package/dist/src/web-ui/local-runtime/environment-registry.js +38 -3
  619. package/dist/src/web-ui/local-runtime/realtime-controller.js +3 -1
  620. package/dist/src/web-ui/local-runtime/request-execution.d.ts +5 -1
  621. package/dist/src/web-ui/local-runtime/request-execution.js +38 -2
  622. package/dist/src/web-ui/local-runtime/schedule-job-creation.d.ts +7 -0
  623. package/dist/src/web-ui/local-runtime/schedule-job-creation.js +62 -0
  624. package/dist/src/web-ui/local-runtime/schedule-management-routes.d.ts +30 -0
  625. package/dist/src/web-ui/local-runtime/schedule-management-routes.js +134 -0
  626. package/dist/src/web-ui/local-runtime/schedule-run-page.d.ts +5 -0
  627. package/dist/src/web-ui/local-runtime/schedule-run-page.js +23 -0
  628. package/dist/src/web-ui/local-runtime/session-routes.d.ts +17 -0
  629. package/dist/src/web-ui/local-runtime/session-routes.js +74 -0
  630. package/dist/src/web-ui/local-runtime-backend.d.ts +2 -0
  631. package/dist/src/web-ui/local-runtime-backend.js +11 -1
  632. package/dist/src/web-ui/schedule-creation-contract.d.ts +7 -0
  633. package/dist/src/web-ui/schedule-creation-contract.js +1 -0
  634. package/dist/src/web-ui/server-shutdown.d.ts +4 -0
  635. package/dist/src/web-ui/server-shutdown.js +32 -0
  636. package/dist/src/web-ui/server.js +13 -10
  637. package/dist/src/web-ui/session-read-state/availability.d.ts +16 -0
  638. package/dist/src/web-ui/session-read-state/availability.js +20 -0
  639. package/dist/src/web-ui/session-read-state/projection.d.ts +17 -0
  640. package/dist/src/web-ui/session-read-state/projection.js +71 -0
  641. package/dist/src/web-ui/session-read-state/service.d.ts +86 -0
  642. package/dist/src/web-ui/session-read-state/service.js +89 -0
  643. package/dist/src/web-ui/session-read-state/store.d.ts +22 -0
  644. package/dist/src/web-ui/session-read-state/store.js +110 -0
  645. package/docs/configuration.md +56 -9
  646. package/docs/installation.md +7 -4
  647. package/docs/known-limitations.md +21 -0
  648. package/docs/long-term-memory.md +46 -5
  649. package/docs/plugins.md +28 -13
  650. package/docs/runtime-invariant-coverage.md +18 -17
  651. package/docs/runtime-library.md +23 -0
  652. package/docs/runtime-prompt-policy-contracts.md +27 -17
  653. package/docs/runtime-public-contracts.md +32 -1
  654. package/package.json +6 -3
  655. package/plugins/capability-brief/source/index.ts +5 -48
  656. package/plugins/capability-brief/src/index.cjs +46 -33
  657. package/plugins/code-outline/plugin.json +15 -0
  658. package/plugins/document-reader/plugin.json +17 -0
  659. package/plugins/filesystem/plugin.json +17 -2
  660. package/plugins/json-inspector/plugin.json +12 -0
  661. package/plugins/local-search/plugin.json +12 -0
  662. package/plugins/memory/plugin.json +26 -1
  663. package/plugins/memory/source/index.ts +10 -6
  664. package/plugins/memory/src/index.cjs +11 -7
  665. package/plugins/project-orientation/plugin.json +14 -0
  666. package/plugins/system-probe/plugin.json +1 -0
  667. package/plugins/web/README.md +125 -0
  668. package/plugins/web/plugin.json +1 -1
  669. package/plugins/web/skills/web_fetch_skill/SKILL.md +2 -2
  670. package/plugins/web/skills/web_search_skill/SKILL.md +8 -4
  671. package/plugins/web/source/aggregate-gate.ts +8 -130
  672. package/plugins/web/source/deadline.ts +14 -50
  673. package/plugins/web/source/errors.ts +22 -12
  674. package/plugins/web/source/fetch-presentation.ts +61 -0
  675. package/plugins/web/source/fetch-service.ts +2 -31
  676. package/plugins/web/source/light/config.ts +196 -0
  677. package/plugins/web/source/light/crawl/origin-gate.ts +134 -0
  678. package/plugins/web/source/light/crawl/robots-cache.ts +71 -0
  679. package/plugins/web/source/light/crawl/robots-parser.ts +132 -0
  680. package/plugins/web/source/light/crawl/robots-policy.ts +154 -0
  681. package/plugins/web/source/light/crawl/session-budget.ts +141 -0
  682. package/plugins/web/source/light/crawl/transport.ts +216 -0
  683. package/plugins/web/source/light/discovery/candidate-values.ts +63 -0
  684. package/plugins/web/source/light/discovery/feed-document.ts +127 -0
  685. package/plugins/web/source/light/discovery/html-links.ts +80 -0
  686. package/plugins/web/source/light/discovery/html-robots-directives.ts +29 -0
  687. package/plugins/web/source/light/discovery/markup-tree.ts +145 -0
  688. package/plugins/web/source/light/discovery/origin-dates.ts +71 -0
  689. package/plugins/web/source/light/discovery/sitemap-document.ts +63 -0
  690. package/plugins/web/source/light/documents/cache-policy.ts +28 -0
  691. package/plugins/web/source/light/documents/document-cache.ts +99 -0
  692. package/plugins/web/source/light/documents/document-charset.ts +89 -0
  693. package/plugins/web/source/light/documents/document-contract.ts +20 -0
  694. package/plugins/web/source/light/documents/document-reader.ts +75 -0
  695. package/plugins/web/source/light/documents/extract-document.ts +124 -0
  696. package/plugins/web/source/light/documents/http-cache-freshness.ts +68 -0
  697. package/plugins/web/source/light/documents/response-decoding.ts +120 -0
  698. package/plugins/web/source/light/ranking/document-ranking.ts +114 -0
  699. package/plugins/web/source/light/ranking/query-normalization.ts +69 -0
  700. package/plugins/web/source/light/search-collection.ts +136 -0
  701. package/plugins/web/source/light/search-frontier.ts +246 -0
  702. package/plugins/web/source/light/search-metadata.ts +84 -0
  703. package/plugins/web/source/light/search-service.ts +154 -0
  704. package/plugins/web/source/light/search-unavailable.ts +33 -0
  705. package/plugins/web/source/light/sources/catalog.ts +312 -0
  706. package/plugins/web/source/light/sources/source-definition.ts +9 -0
  707. package/plugins/web/source/light/sources/source-selection.ts +35 -0
  708. package/plugins/web/source/limits.ts +3 -6
  709. package/plugins/web/source/network-policy.ts +28 -226
  710. package/plugins/web/source/plugin.ts +70 -56
  711. package/plugins/web/source/public-http.ts +17 -133
  712. package/plugins/web/source/request-hop.ts +11 -191
  713. package/plugins/web/source/search-presentation.ts +63 -63
  714. package/plugins/web/source/search-service-selector.ts +31 -0
  715. package/plugins/web/source/search-service.ts +6 -0
  716. package/plugins/web/source/search-source-presentation.ts +76 -0
  717. package/plugins/web/source/search-types.ts +4 -0
  718. package/plugins/web/source/source-output-receipts.ts +267 -0
  719. package/plugins/web/source/source-receipt-budget.ts +51 -0
  720. package/plugins/web/source/source-receipt-contract.ts +18 -0
  721. package/plugins/web/src/index.cjs +3289 -303
  722. package/runtime.config.schema.json +7 -0
  723. package/src/runtime/README.md +134 -9
  724. package/src/runtime/local-host/README.md +86 -0
  725. package/src/runtime/scheduler/README.md +166 -0
  726. package/dist/src/model-gateway/structured-output/budget.d.ts +0 -7
  727. package/dist/src/model-gateway/structured-output/budget.js +0 -20
  728. package/dist/src/model-gateway/structured-output/schema-character-estimator.d.ts +0 -1
  729. package/dist/src/model-gateway/structured-output/schema-character-estimator.js +0 -211
  730. package/dist/src/model-gateway/structured-output-budget.d.ts +0 -1
  731. package/dist/src/model-gateway/structured-output-budget.js +0 -1
@@ -0,0 +1,76 @@
1
+ import { mkdir } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { acquireFileLock } from "../adapters/long-term-memory/file-lock/acquisition.js";
4
+ import { SchedulerJournalStore } from "./journal-store.js";
5
+ import { journalReadIdentity, readJournalHead } from "./journal-head.js";
6
+ export function createFileSchedulerStore(directory) {
7
+ let releaseOwner;
8
+ let journal;
9
+ let transactionTail = Promise.resolve();
10
+ const enqueue = (operation) => {
11
+ const transaction = transactionTail.then(operation);
12
+ transactionTail = transaction.catch(() => undefined);
13
+ return transaction;
14
+ };
15
+ const readJournal = async (read) => {
16
+ if (journal)
17
+ return read(journal);
18
+ // Unowned readers have no cached lease. A retired immutable generation is
19
+ // retried only when its authoritative pointer changed during this read.
20
+ for (;;) {
21
+ const before = journalReadIdentity(await readJournalHead(directory));
22
+ const [result] = await Promise.allSettled([
23
+ new SchedulerJournalStore(directory).load().then(read),
24
+ ]);
25
+ if (before !== journalReadIdentity(await readJournalHead(directory)))
26
+ continue;
27
+ if (result.status === "rejected")
28
+ throw result.reason;
29
+ return result.value;
30
+ }
31
+ };
32
+ return {
33
+ acquire: async () => {
34
+ if (releaseOwner)
35
+ throw new Error("scheduler_store_in_use");
36
+ await mkdir(directory, { recursive: true, mode: 0o700 });
37
+ try {
38
+ releaseOwner = await acquireFileLock(join(directory, "scheduler.owner"), { waitMs: 0 });
39
+ }
40
+ catch (error) {
41
+ if (isOwnerContention(error))
42
+ throw new Error("scheduler_store_in_use");
43
+ throw error;
44
+ }
45
+ try {
46
+ journal = await new SchedulerJournalStore(directory).load();
47
+ await journal.prepareOwned();
48
+ }
49
+ catch (error) {
50
+ const release = releaseOwner;
51
+ releaseOwner = undefined;
52
+ journal = undefined;
53
+ await release();
54
+ throw error;
55
+ }
56
+ return async () => {
57
+ await transactionTail;
58
+ const release = releaseOwner;
59
+ releaseOwner = undefined;
60
+ journal = undefined;
61
+ await release?.();
62
+ };
63
+ },
64
+ read: (view) => enqueue(() => readJournal((store) => store.snapshot(view))),
65
+ readRuns: (jobId, query) => enqueue(() => readJournal((store) => store.readRuns(jobId, query))),
66
+ update: (mutate, view) => enqueue(async () => {
67
+ if (!releaseOwner || !journal)
68
+ throw new Error("scheduler_store_not_owned");
69
+ return journal.update(mutate, view);
70
+ }),
71
+ };
72
+ }
73
+ function isOwnerContention(error) {
74
+ return (error instanceof Error &&
75
+ error.message === "long_term_memory_store_lock_timeout");
76
+ }
@@ -0,0 +1,4 @@
1
+ export declare function parseSchedulerInstant(value: unknown, field: string): string;
2
+ export declare function schedulerInstantFromMilliseconds(value: number): string;
3
+ /** Canonical output must be accepted again by the four-digit ISO parser. */
4
+ export declare function isSupportedSchedulerInstant(value: number): boolean;
@@ -0,0 +1,69 @@
1
+ import { SchedulerValidationError } from "./validation-error.js";
2
+ const MIN_SCHEDULER_INSTANT = Date.parse("0000-01-01T00:00:00.000Z");
3
+ const MAX_SCHEDULER_INSTANT = Date.parse("9999-12-31T23:59:59.999Z");
4
+ export function parseSchedulerInstant(value, field) {
5
+ if (typeof value !== "string") {
6
+ throw new SchedulerValidationError("scheduler_invalid_schedule", `${field} requires an ISO instant`);
7
+ }
8
+ const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2})$/i.exec(value);
9
+ if (!match) {
10
+ throw new SchedulerValidationError("scheduler_invalid_schedule", `${field} requires an ISO instant with an explicit UTC offset`);
11
+ }
12
+ const [, year, month, day, hour, minute, second = "0"] = match;
13
+ if (!isExistingCalendarDate(Number(year), Number(month), Number(day))) {
14
+ throw new SchedulerValidationError("scheduler_invalid_schedule", `${field} contains an invalid date`);
15
+ }
16
+ if (!isExistingClockTime(Number(hour), Number(minute), Number(second))) {
17
+ throw new SchedulerValidationError("scheduler_invalid_schedule", `${field} contains an invalid time`);
18
+ }
19
+ return schedulerInstantFromMilliseconds(Date.parse(value));
20
+ }
21
+ function isExistingCalendarDate(year, month, day) {
22
+ if (month < 1 || month > 12)
23
+ return false;
24
+ if (day < 1)
25
+ return false;
26
+ const monthDays = [
27
+ 31,
28
+ isLeapYear(year) ? 29 : 28,
29
+ 31,
30
+ 30,
31
+ 31,
32
+ 30,
33
+ 31,
34
+ 31,
35
+ 30,
36
+ 31,
37
+ 30,
38
+ 31,
39
+ ];
40
+ return day <= monthDays[month - 1];
41
+ }
42
+ function isLeapYear(year) {
43
+ if (year % 400 === 0)
44
+ return true;
45
+ if (year % 100 === 0)
46
+ return false;
47
+ return year % 4 === 0;
48
+ }
49
+ function isExistingClockTime(hour, minute, second) {
50
+ if (hour > 23)
51
+ return false;
52
+ if (minute > 59)
53
+ return false;
54
+ return second <= 59;
55
+ }
56
+ export function schedulerInstantFromMilliseconds(value) {
57
+ if (!isSupportedSchedulerInstant(value)) {
58
+ throw new SchedulerValidationError("scheduler_invalid_schedule", "Instant is outside the supported date range");
59
+ }
60
+ return new Date(value).toISOString();
61
+ }
62
+ /** Canonical output must be accepted again by the four-digit ISO parser. */
63
+ export function isSupportedSchedulerInstant(value) {
64
+ if (!Number.isSafeInteger(value))
65
+ return false;
66
+ if (value < MIN_SCHEDULER_INSTANT)
67
+ return false;
68
+ return value <= MAX_SCHEDULER_INSTANT;
69
+ }
@@ -0,0 +1,8 @@
1
+ import type { SchedulerSchedule } from "./contracts.js";
2
+ type IntervalSchedule = Extract<SchedulerSchedule, {
3
+ kind: "interval";
4
+ }>;
5
+ export declare function nextIntervalOccurrence(schedule: IntervalSchedule, after: number): string | null;
6
+ /** Admission only: legacy stored intervals remain readable until exhaustion. */
7
+ export declare function requireRepresentableIntervalRecurrence(schedule: SchedulerSchedule, after: number): void;
8
+ export {};
@@ -0,0 +1,24 @@
1
+ import { isSupportedSchedulerInstant, schedulerInstantFromMilliseconds, } from "./instant-validation.js";
2
+ import { SchedulerValidationError } from "./validation-error.js";
3
+ export function nextIntervalOccurrence(schedule, after) {
4
+ const anchor = Date.parse(schedule.anchorAt);
5
+ const steps = Math.max(0, Math.floor((after - anchor) / schedule.everyMs) + 1);
6
+ const next = anchor + steps * schedule.everyMs;
7
+ if (!isSupportedSchedulerInstant(next))
8
+ return null;
9
+ return schedulerInstantFromMilliseconds(next);
10
+ }
11
+ /** Admission only: legacy stored intervals remain readable until exhaustion. */
12
+ export function requireRepresentableIntervalRecurrence(schedule, after) {
13
+ if (schedule.kind !== "interval")
14
+ return;
15
+ const first = nextIntervalOccurrence(schedule, after);
16
+ if (first === null)
17
+ throwUnsupportedRecurrence();
18
+ const second = nextIntervalOccurrence(schedule, Date.parse(first));
19
+ if (second === null)
20
+ throwUnsupportedRecurrence();
21
+ }
22
+ function throwUnsupportedRecurrence() {
23
+ throw new SchedulerValidationError("scheduler_invalid_schedule", "Interval recurrence is outside the supported date range");
24
+ }
@@ -0,0 +1,8 @@
1
+ import type { CreateSchedulerJobInput, SchedulerJob, SchedulerJobState, SchedulerListFilter, SchedulerRun, UpdateSchedulerJobInput } from "./contracts.js";
2
+ import { type SchedulerContext } from "./service-context.js";
3
+ export declare function createSchedulerJob(context: SchedulerContext, input: CreateSchedulerJobInput): Promise<SchedulerJob>;
4
+ export declare function updateSchedulerJob(context: SchedulerContext, jobId: string, patch: UpdateSchedulerJobInput): Promise<SchedulerJob>;
5
+ export declare function changeSchedulerJobState(context: SchedulerContext, jobId: string, target: SchedulerJobState): Promise<SchedulerJob>;
6
+ export declare function requestSchedulerRunNow(context: SchedulerContext, jobId: string): Promise<SchedulerRun>;
7
+ export declare function deleteSchedulerSession(context: SchedulerContext, sessionId: string): Promise<void>;
8
+ export declare function matchesSchedulerFilter(job: SchedulerJob, filter: SchedulerListFilter): boolean;
@@ -0,0 +1,212 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { nextSchedulerOccurrence } from "./next-occurrence.js";
3
+ import { normalizeSchedulerScheduleUpdate } from "./schedule-update.js";
4
+ import { requireRepresentableIntervalRecurrence } from "./interval-range.js";
5
+ import { cancelPendingRuns, findPendingRun, makeSchedulerRun, requireSchedulerJob, } from "./run-records.js";
6
+ import { normalizeSchedulerSchedule, validateSchedulerJobInput, } from "./schedule-validation.js";
7
+ import { invalidateJob, requireRunningScheduler, } from "./service-context.js";
8
+ export function createSchedulerJob(context, input) {
9
+ return context.enqueue(async () => {
10
+ requireRunningScheduler(context);
11
+ validateSchedulerJobInput(input);
12
+ await requireExistingSession(context, input.sessionId);
13
+ const now = context.now();
14
+ const schedule = normalizeSchedulerSchedule(input.schedule, now);
15
+ requireRepresentableIntervalRecurrence(schedule, now);
16
+ const nextRunAt = nextSchedulerOccurrence(schedule, input.timeZone, now);
17
+ if (!nextRunAt)
18
+ throw new Error("scheduler_schedule_in_past");
19
+ const job = {
20
+ id: randomUUID(),
21
+ environmentId: context.environmentId,
22
+ sessionId: input.sessionId,
23
+ title: input.title.trim(),
24
+ prompt: input.prompt,
25
+ modelProfileId: input.modelProfileId,
26
+ agentMode: input.agentMode,
27
+ toolPermissionMode: "full_access",
28
+ timeZone: input.timeZone,
29
+ schedule,
30
+ state: "active",
31
+ createdAt: new Date(now).toISOString(),
32
+ updatedAt: new Date(now).toISOString(),
33
+ nextRunAt,
34
+ revision: 1,
35
+ };
36
+ return context.store.update((state) => {
37
+ if (context.deletedSessions.has(job.sessionId))
38
+ throw new Error("scheduler_session_deleted");
39
+ state.jobs.push(job);
40
+ return job;
41
+ });
42
+ });
43
+ }
44
+ export function updateSchedulerJob(context, jobId, patch) {
45
+ const settleInvalidation = invalidateJob(context, jobId);
46
+ return context
47
+ .enqueue(async () => {
48
+ requireRunningScheduler(context);
49
+ return context.store.update((state) => {
50
+ const job = requireSchedulerJob(state, jobId);
51
+ if (job.state === "cancelled")
52
+ throw new Error("scheduler_job_cancelled");
53
+ const editable = pickEditableFields(patch);
54
+ const input = { ...job, ...editable };
55
+ validateSchedulerJobInput(input);
56
+ const now = context.now();
57
+ const schedule = normalizeSchedulerScheduleUpdate(job.schedule, editable.schedule, now);
58
+ const candidate = { ...input, schedule };
59
+ if (!hasSchedulerJobChanges(job, candidate))
60
+ return job;
61
+ const changedTiming = hasSchedulerTimingChanges(job, candidate);
62
+ if (changedTiming)
63
+ requireRepresentableIntervalRecurrence(schedule, now);
64
+ const nextRunAt = changedTiming
65
+ ? nextSchedulerOccurrence(schedule, input.timeZone, now)
66
+ : job.nextRunAt;
67
+ if (changedTiming && !nextRunAt)
68
+ throw new Error("scheduler_schedule_in_past");
69
+ const pending = findPendingRun(state, jobId);
70
+ cancelPendingRuns(state, jobId, new Date(now).toISOString());
71
+ Object.assign(job, editable, {
72
+ schedule,
73
+ nextRunAt,
74
+ toolPermissionMode: "full_access",
75
+ updatedAt: new Date(now).toISOString(),
76
+ revision: job.revision + 1,
77
+ });
78
+ if (changedTiming && job.state === "completed")
79
+ job.state = "active";
80
+ if (pending && !changedTiming) {
81
+ state.runs.push(makeSchedulerRun(job, pending.scheduledAt, pending.trigger));
82
+ }
83
+ return job;
84
+ });
85
+ })
86
+ .finally(settleInvalidation);
87
+ }
88
+ function hasSchedulerTimingChanges(job, candidate) {
89
+ if (JSON.stringify(job.schedule) !== JSON.stringify(candidate.schedule))
90
+ return true;
91
+ if (job.timeZone === candidate.timeZone)
92
+ return false;
93
+ switch (candidate.schedule.kind) {
94
+ case "daily":
95
+ case "weekly":
96
+ case "monthly":
97
+ return true;
98
+ default:
99
+ return false;
100
+ }
101
+ }
102
+ function hasSchedulerJobChanges(job, candidate) {
103
+ if (hasSchedulerTimingChanges(job, candidate))
104
+ return true;
105
+ return [
106
+ "title",
107
+ "prompt",
108
+ "modelProfileId",
109
+ "agentMode",
110
+ "timeZone",
111
+ ].some((field) => job[field] !== candidate[field]);
112
+ }
113
+ function pickEditableFields(patch) {
114
+ const result = {};
115
+ for (const key of [
116
+ "title",
117
+ "prompt",
118
+ "modelProfileId",
119
+ "agentMode",
120
+ "timeZone",
121
+ "schedule",
122
+ ]) {
123
+ if (patch[key] === undefined)
124
+ continue;
125
+ Object.assign(result, { [key]: patch[key] });
126
+ }
127
+ return result;
128
+ }
129
+ export function changeSchedulerJobState(context, jobId, target) {
130
+ const settleInvalidation = invalidateJob(context, jobId);
131
+ return context
132
+ .enqueue(async () => {
133
+ requireRunningScheduler(context);
134
+ return context.store.update((state) => {
135
+ const job = requireSchedulerJob(state, jobId);
136
+ if (job.state === "cancelled" && target !== "cancelled") {
137
+ throw new Error("scheduler_job_cancelled");
138
+ }
139
+ const now = context.now();
140
+ if (target !== "active") {
141
+ cancelPendingRuns(state, jobId, new Date(now).toISOString());
142
+ }
143
+ if (job.state === target)
144
+ return job;
145
+ job.state = target;
146
+ job.updatedAt = new Date(now).toISOString();
147
+ job.revision += 1;
148
+ if (target === "cancelled")
149
+ job.nextRunAt = null;
150
+ if (target !== "active")
151
+ return job;
152
+ job.nextRunAt = nextSchedulerOccurrence(job.schedule, job.timeZone, now);
153
+ if (!job.nextRunAt)
154
+ job.state = "completed";
155
+ return job;
156
+ });
157
+ })
158
+ .finally(settleInvalidation);
159
+ }
160
+ export function requestSchedulerRunNow(context, jobId) {
161
+ return context.enqueue(async () => {
162
+ requireRunningScheduler(context);
163
+ const existing = await context.store.read();
164
+ const owner = requireSchedulerJob(existing, jobId);
165
+ await requireExistingSession(context, owner.sessionId);
166
+ return context.store.update((state) => {
167
+ const job = requireSchedulerJob(state, jobId);
168
+ if (job.state === "cancelled")
169
+ throw new Error("scheduler_job_cancelled");
170
+ if (context.deletedSessions.has(job.sessionId))
171
+ throw new Error("scheduler_session_deleted");
172
+ const pending = findPendingRun(state, jobId);
173
+ if (pending)
174
+ return pending;
175
+ const run = makeSchedulerRun(job, new Date(context.now()).toISOString(), "manual");
176
+ state.runs.push(run);
177
+ return run;
178
+ });
179
+ });
180
+ }
181
+ export function deleteSchedulerSession(context, sessionId) {
182
+ // Invalidation is synchronous: no awaited preparation may dispatch after this call.
183
+ const releaseIntent = context.deletedSessions.reserveIntent(sessionId);
184
+ return context
185
+ .enqueue(async () => {
186
+ requireRunningScheduler(context);
187
+ context.deletedSessions.add(sessionId);
188
+ await context.store.update((state) => {
189
+ state.jobs = state.jobs.filter((job) => job.sessionId !== sessionId);
190
+ state.runs = state.runs.filter((run) => run.sessionId !== sessionId);
191
+ });
192
+ })
193
+ .finally(releaseIntent);
194
+ }
195
+ export function matchesSchedulerFilter(job, filter) {
196
+ if (filter.sessionId !== undefined && job.sessionId !== filter.sessionId)
197
+ return false;
198
+ if (filter.state !== undefined && job.state !== filter.state)
199
+ return false;
200
+ if (!filter.search?.trim())
201
+ return true;
202
+ const searchable = [job.title, job.prompt, job.sessionId, job.modelProfileId]
203
+ .join(" ")
204
+ .toLowerCase();
205
+ return searchable.includes(filter.search.trim().toLowerCase());
206
+ }
207
+ async function requireExistingSession(context, sessionId) {
208
+ if (context.deletedSessions.has(sessionId))
209
+ throw new Error("scheduler_session_deleted");
210
+ if (!(await context.executor.sessionExists(sessionId)))
211
+ throw new Error("scheduler_session_not_found");
212
+ }
@@ -0,0 +1,9 @@
1
+ import { SchedulerJournalIndex } from "./journal-index.js";
2
+ import { type CommittedJournalHead } from "./journal-head.js";
3
+ export declare function loadCheckpointJournalIndex(directory: string, head: CommittedJournalHead): Promise<{
4
+ index: SchedulerJournalIndex;
5
+ sequence: number;
6
+ }>;
7
+ export declare function writeJournalCheckpoint(directory: string, generation: string, sequence: number, index: SchedulerJournalIndex): Promise<CommittedJournalHead>;
8
+ /** Only checkpoint artifacts are retired here; archived transaction payloads remain immutable. */
9
+ export declare function cleanObsoleteJournalCheckpoints(directory: string, head: CommittedJournalHead): Promise<void>;
@@ -0,0 +1,45 @@
1
+ import { mkdir, readFile, readdir, rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { SchedulerJournalIndex } from "./journal-index.js";
4
+ import { encodeJournalIndexState, parseJournalIndexState, } from "./journal-index-state.js";
5
+ import { journalCheckpointName, } from "./journal-head.js";
6
+ import { journalTransactionName, writeJournalJson } from "./journal-files.js";
7
+ import { parseSchedulerTransaction } from "./journal-transaction.js";
8
+ import { syncJournalDirectory } from "./journal-durability.js";
9
+ export async function loadCheckpointJournalIndex(directory, head) {
10
+ const generationDirectory = join(directory, head.generation);
11
+ const checkpointPath = join(generationDirectory, "checkpoints", head.checkpoint.file);
12
+ const state = parseJournalIndexState(JSON.parse(await readFile(checkpointPath, "utf8")), generationDirectory, head.generation, head.checkpoint.sequence);
13
+ const index = new SchedulerJournalIndex(state);
14
+ for (let sequence = head.checkpoint.sequence + 1; sequence <= head.sequence; sequence++) {
15
+ const file = join(generationDirectory, journalTransactionName(sequence));
16
+ index.apply(parseSchedulerTransaction(JSON.parse(await readFile(file, "utf8"))), file);
17
+ }
18
+ return { index, sequence: head.sequence };
19
+ }
20
+ export async function writeJournalCheckpoint(directory, generation, sequence, index) {
21
+ const checkpointDirectory = join(directory, generation, "checkpoints");
22
+ await mkdir(checkpointDirectory, { recursive: true, mode: 0o700 });
23
+ await syncJournalDirectory(join(directory, generation));
24
+ const file = journalCheckpointName(sequence);
25
+ const state = encodeJournalIndexState(index.exportState(), generation, sequence);
26
+ parseJournalIndexState(state, join(directory, generation), generation, sequence);
27
+ await writeJournalJson(join(checkpointDirectory, file), state);
28
+ return {
29
+ schemaVersion: 3,
30
+ generation,
31
+ sequence,
32
+ checkpoint: { file, sequence },
33
+ };
34
+ }
35
+ /** Only checkpoint artifacts are retired here; archived transaction payloads remain immutable. */
36
+ export async function cleanObsoleteJournalCheckpoints(directory, head) {
37
+ const path = join(directory, head.generation, "checkpoints");
38
+ for (const entry of await readdir(path, { withFileTypes: true })) {
39
+ if (!entry.isFile())
40
+ continue;
41
+ if (entry.name === head.checkpoint.file)
42
+ continue;
43
+ await rm(join(path, entry.name), { force: true });
44
+ }
45
+ }
@@ -0,0 +1,8 @@
1
+ /** The replacement is visible, but its directory entry is not confirmed durable. */
2
+ export declare class JournalPublicationSyncError extends Error {
3
+ constructor(cause: unknown);
4
+ }
5
+ export declare function syncJournalDirectory(directory: string): Promise<void>;
6
+ /** Establish the owned root, including directories left by an interrupted mkdir. */
7
+ export declare function syncJournalDirectoryPath(directory: string): Promise<void>;
8
+ export declare function writeJournalJson(path: string, value: unknown): Promise<void>;
@@ -0,0 +1,59 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { open, rename, rm } from "node:fs/promises";
3
+ import { dirname, resolve } from "node:path";
4
+ /** The replacement is visible, but its directory entry is not confirmed durable. */
5
+ export class JournalPublicationSyncError extends Error {
6
+ constructor(cause) {
7
+ super("scheduler_store_directory_sync_failed", { cause });
8
+ }
9
+ }
10
+ function supportsJournalDirectorySync() {
11
+ // Node does not support opening Windows directories for FileHandle.sync().
12
+ return process.platform !== "win32";
13
+ }
14
+ export async function syncJournalDirectory(directory) {
15
+ if (!supportsJournalDirectorySync())
16
+ return;
17
+ const handle = await open(directory, "r");
18
+ try {
19
+ await handle.sync();
20
+ }
21
+ finally {
22
+ await handle.close();
23
+ }
24
+ }
25
+ /** Establish the owned root, including directories left by an interrupted mkdir. */
26
+ export async function syncJournalDirectoryPath(directory) {
27
+ if (!supportsJournalDirectorySync())
28
+ return;
29
+ let current = resolve(directory);
30
+ for (;;) {
31
+ await syncJournalDirectory(current);
32
+ const parent = dirname(current);
33
+ if (parent === current)
34
+ return;
35
+ current = parent;
36
+ }
37
+ }
38
+ export async function writeJournalJson(path, value) {
39
+ const temporary = `${path}.${randomUUID()}.tmp`;
40
+ const handle = await open(temporary, "wx", 0o600);
41
+ try {
42
+ await handle.writeFile(JSON.stringify(value), "utf8");
43
+ await handle.sync();
44
+ await handle.close();
45
+ await rename(temporary, path);
46
+ }
47
+ catch (error) {
48
+ await handle.close().catch(() => undefined);
49
+ await rm(temporary, { force: true }).catch(() => undefined);
50
+ throw error;
51
+ }
52
+ try {
53
+ await syncJournalDirectory(dirname(path));
54
+ }
55
+ catch (error) {
56
+ // Do not unlink or roll back a replacement that readers can already see.
57
+ throw new JournalPublicationSyncError(error);
58
+ }
59
+ }
@@ -0,0 +1,14 @@
1
+ import { SchedulerJournalIndex } from "./journal-index.js";
2
+ import { type SchedulerTransaction } from "./journal-transaction.js";
3
+ export { SCHEDULER_MANIFEST, isMissingJournalFile } from "./journal-head.js";
4
+ export { writeJournalJson } from "./journal-durability.js";
5
+ export declare function readJournalGeneration(directory: string): Promise<string | undefined>;
6
+ export declare function loadJournalIndex(directory: string, generation: string): Promise<{
7
+ index: SchedulerJournalIndex;
8
+ sequence: number;
9
+ }>;
10
+ export declare function journalTransactionName(sequence: number): string;
11
+ export declare function createJournalGeneration(directory: string): Promise<string>;
12
+ /** Only under the owner lock. The committed pointer is the sole keep rule. */
13
+ export declare function cleanObsoleteJournalGenerations(directory: string, active?: string): Promise<void>;
14
+ export declare function initialJournalTransaction(): SchedulerTransaction;
@@ -0,0 +1,59 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, readdir, rm } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { SchedulerJournalIndex } from "./journal-index.js";
5
+ import { parseSchedulerTransaction, } from "./journal-transaction.js";
6
+ import { JOURNAL_GENERATION_NAME, readJournalHead } from "./journal-head.js";
7
+ import { syncJournalDirectory } from "./journal-durability.js";
8
+ export { SCHEDULER_MANIFEST, isMissingJournalFile } from "./journal-head.js";
9
+ export { writeJournalJson } from "./journal-durability.js";
10
+ export async function readJournalGeneration(directory) {
11
+ return (await readJournalHead(directory))?.generation;
12
+ }
13
+ export async function loadJournalIndex(directory, generation) {
14
+ const path = join(directory, generation);
15
+ const entries = (await readdir(path))
16
+ .filter((name) => name.endsWith(".json"))
17
+ .sort();
18
+ if (!entries.length)
19
+ throw new Error("scheduler_store_corrupt");
20
+ const index = new SchedulerJournalIndex();
21
+ for (const [position, name] of entries.entries()) {
22
+ if (name !== journalTransactionName(position + 1))
23
+ throw new Error("scheduler_store_corrupt");
24
+ const file = join(path, name);
25
+ index.apply(parseSchedulerTransaction(JSON.parse(await readFile(file, "utf8"))), file);
26
+ }
27
+ return { index, sequence: entries.length };
28
+ }
29
+ export function journalTransactionName(sequence) {
30
+ if (!Number.isSafeInteger(sequence) || sequence < 1)
31
+ throw new Error("scheduler_store_sequence_invalid");
32
+ return `${String(sequence).padStart(16, "0")}.json`;
33
+ }
34
+ export async function createJournalGeneration(directory) {
35
+ const generation = `generation-${randomUUID()}`;
36
+ await mkdir(join(directory, generation), { mode: 0o700 });
37
+ await syncJournalDirectory(directory);
38
+ return generation;
39
+ }
40
+ /** Only under the owner lock. The committed pointer is the sole keep rule. */
41
+ export async function cleanObsoleteJournalGenerations(directory, active) {
42
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
43
+ if (!isJournalGenerationDirectory(entry))
44
+ continue;
45
+ if (entry.name === active)
46
+ continue;
47
+ await rm(join(directory, entry.name), { recursive: true, force: true });
48
+ }
49
+ if (active)
50
+ await rm(join(directory, "scheduler.json"), { force: true });
51
+ }
52
+ function isJournalGenerationDirectory(entry) {
53
+ if (!entry.isDirectory())
54
+ return false;
55
+ return JOURNAL_GENERATION_NAME.test(entry.name);
56
+ }
57
+ export function initialJournalTransaction() {
58
+ return { version: 1, jobs: [], runs: [], deletedJobs: [], deletedRuns: [] };
59
+ }
@@ -0,0 +1,21 @@
1
+ export declare const SCHEDULER_MANIFEST = "scheduler-journal.json";
2
+ export declare const MAX_JOURNAL_SUFFIX = 256;
3
+ export declare const JOURNAL_GENERATION_NAME: RegExp;
4
+ export type JournalCheckpointReference = {
5
+ file: string;
6
+ sequence: number;
7
+ };
8
+ export type JournalHead = {
9
+ schemaVersion: 2;
10
+ generation: string;
11
+ } | CommittedJournalHead;
12
+ export type CommittedJournalHead = {
13
+ schemaVersion: 3;
14
+ generation: string;
15
+ sequence: number;
16
+ checkpoint: JournalCheckpointReference;
17
+ };
18
+ export declare function readJournalHead(directory: string): Promise<JournalHead | undefined>;
19
+ export declare function journalReadIdentity(head: JournalHead | undefined): string | undefined;
20
+ export declare function journalCheckpointName(sequence: number): string;
21
+ export declare function isMissingJournalFile(error: unknown): boolean;