@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
@@ -6,9 +6,11 @@ import { pathToFileURL } from "node:url";
6
6
  import { WebSocketServer } from "ws";
7
7
  import { inspectRuntimeConfigFileWithMeta } from "../runtime/config/loader.js";
8
8
  import { loadDotEnvFile } from "../shared/load-dotenv.js";
9
+ import { createWebUiShutdown } from "./server-shutdown.js";
9
10
  import { ExternalBridgeWebBackend } from "./external-bridge-backend.js";
10
11
  import { LocalRuntimeWebBackend } from "./local-runtime-backend.js";
11
12
  import { resolveWebUiAddress } from "./web-ui-address.js";
13
+ import { createLinkPreviewRouteHandler } from "./link-preview/routes.js";
12
14
  const DEFAULT_WEB_BACKEND = "runtime";
13
15
  const DEFAULT_BRIDGE_API_BASE = "http://127.0.0.1:8787/abot/api";
14
16
  const DEFAULT_BRIDGE_REALTIME_URL = "ws://127.0.0.1:8787/abot/realtime";
@@ -226,8 +228,11 @@ export function startWebUiServer(overrides = {}) {
226
228
  externalBridgeBackend.handleRealtimeConnection(client);
227
229
  });
228
230
  }
231
+ const handleLinkPreview = createLinkPreviewRouteHandler();
229
232
  const server = createServer((req, res) => {
230
233
  void (async () => {
234
+ if (await handleLinkPreview(req, res))
235
+ return;
231
236
  const pathname = new URL(req.url || "/", "http://localhost").pathname;
232
237
  if (pathname === "/web-config") {
233
238
  sendJson(res, 200, {
@@ -301,7 +306,12 @@ export function startWebUiServer(overrides = {}) {
301
306
  wss.emit("connection", ws, req);
302
307
  });
303
308
  });
304
- server.listen(options.port, options.host, () => {
309
+ const listenAbort = new AbortController();
310
+ server.listen({
311
+ port: options.port,
312
+ host: options.host,
313
+ signal: listenAbort.signal,
314
+ }, () => {
305
315
  console.log(`abot web UI listening on http://${options.host}:${options.port}`);
306
316
  if (localRuntimeBackend) {
307
317
  console.log("using local abot backend");
@@ -311,16 +321,9 @@ export function startWebUiServer(overrides = {}) {
311
321
  console.log(`using external bridge realtime ${options.realtimeUrl}`);
312
322
  }
313
323
  });
324
+ const schedulerStartup = localRuntimeBackend?.start(options.environments.map(({ id }) => id));
314
325
  return {
315
- close: () => new Promise((resolveClose, reject) => {
316
- wss.close();
317
- server.close((error) => {
318
- if (error)
319
- reject(error);
320
- else
321
- resolveClose();
322
- });
323
- }),
326
+ close: createWebUiShutdown(server, wss, schedulerStartup, () => localRuntimeBackend?.stop(), listenAbort),
324
327
  };
325
328
  }
326
329
  const invokedPath = process.argv[1] ? pathToFileURL(process.argv[1]).href : "";
@@ -0,0 +1,16 @@
1
+ /** Isolate UI sidecar failures; canonical session operations stay outside this boundary. */
2
+ export declare function captureReadStateAvailability<T>(operation: () => Promise<T>): Promise<{
3
+ readStateStatus: "available";
4
+ value: Awaited<T>;
5
+ } | {
6
+ readStateStatus: "unavailable";
7
+ value?: undefined;
8
+ }>;
9
+ export declare function unavailableSessionReadState(sessionId: string): {
10
+ sessionId: string;
11
+ readStateStatus: "unavailable";
12
+ unreadCount: null;
13
+ hasUnread: null;
14
+ lastReadAt: null;
15
+ lastReadMessageId: null;
16
+ };
@@ -0,0 +1,20 @@
1
+ /** Isolate UI sidecar failures; canonical session operations stay outside this boundary. */
2
+ export async function captureReadStateAvailability(operation) {
3
+ try {
4
+ return { readStateStatus: "available", value: await operation() };
5
+ }
6
+ catch (error) {
7
+ console.error("Web UI read tracking unavailable:", error);
8
+ return { readStateStatus: "unavailable" };
9
+ }
10
+ }
11
+ export function unavailableSessionReadState(sessionId) {
12
+ return {
13
+ sessionId,
14
+ readStateStatus: "unavailable",
15
+ unreadCount: null,
16
+ hasUnread: null,
17
+ lastReadAt: null,
18
+ lastReadMessageId: null,
19
+ };
20
+ }
@@ -0,0 +1,17 @@
1
+ import type { SessionSnapshotMessage } from "../../sessions/types.js";
2
+ import type { WebReadState } from "./store.js";
3
+ export type ReadBoundary = {
4
+ readThroughMessageId?: unknown;
5
+ readThroughRequestId?: unknown;
6
+ };
7
+ export declare function advanceReadCursor(state: WebReadState, sessionId: string, messages: SessionSnapshotMessage[], boundary: ReadBoundary, now: number): void;
8
+ export declare function projectSessionReadState(state: WebReadState, sessionId: string, messages: SessionSnapshotMessage[]): {
9
+ sessionId: string;
10
+ readStateStatus: "available";
11
+ unreadCount: number;
12
+ hasUnread: boolean;
13
+ lastReadMessageId: string | null;
14
+ lastReadAt: number;
15
+ latestMessageId: string | number | null;
16
+ latestAssistantMessageId: string | number | null;
17
+ };
@@ -0,0 +1,71 @@
1
+ function messageTimestamp(message) {
2
+ const value = typeof message.createdAt === "number"
3
+ ? message.createdAt
4
+ : Date.parse(String(message.createdAt));
5
+ return Number.isFinite(value) ? value : 0;
6
+ }
7
+ function cursorIndex(messages, cursor) {
8
+ if (!cursor)
9
+ return -1;
10
+ if (!cursor.messageId)
11
+ return -1;
12
+ return messages.findIndex((message) => String(message.id) === cursor.messageId &&
13
+ messageTimestamp(message) === cursor.createdAt);
14
+ }
15
+ function requestedAssistantIndex(messages, boundary) {
16
+ const id = boundary.readThroughMessageId;
17
+ const hasNumericBoundary = typeof id === "number" && Number.isSafeInteger(id) && id >= 0;
18
+ if (hasNumericBoundary)
19
+ return messages.findIndex((message) => message.role === "assistant" && String(message.id) === String(id));
20
+ const requestId = boundary.readThroughRequestId;
21
+ if (typeof requestId !== "string" || !requestId)
22
+ return -1;
23
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
24
+ const message = messages[index];
25
+ if (message.role === "assistant" && message.requestId === requestId)
26
+ return index;
27
+ }
28
+ return -1;
29
+ }
30
+ export function advanceReadCursor(state, sessionId, messages, boundary, now) {
31
+ const nextIndex = requestedAssistantIndex(messages, boundary);
32
+ if (nextIndex < 0)
33
+ return;
34
+ const cursors = new Map(state.cursors);
35
+ const previous = cursors.get(sessionId);
36
+ const previousIndex = cursorIndex(messages, previous);
37
+ if (previousIndex >= nextIndex)
38
+ return;
39
+ const message = messages[nextIndex];
40
+ const createdAt = messageTimestamp(message);
41
+ if (previous && previous.createdAt > createdAt)
42
+ return;
43
+ cursors.set(sessionId, {
44
+ messageId: String(message.id),
45
+ createdAt,
46
+ lastReadAt: Math.max(now, (previous?.lastReadAt ?? state.initializedAt) + 1),
47
+ });
48
+ state.cursors = [...cursors];
49
+ }
50
+ export function projectSessionReadState(state, sessionId, messages) {
51
+ const cursor = new Map(state.cursors).get(sessionId);
52
+ const readIndex = cursorIndex(messages, cursor);
53
+ const unreadCount = messages.filter((message, index) => {
54
+ if (message.role !== "assistant")
55
+ return false;
56
+ if (messageTimestamp(message) <= state.initializedAt)
57
+ return false;
58
+ return index > readIndex;
59
+ }).length;
60
+ return {
61
+ sessionId,
62
+ readStateStatus: "available",
63
+ unreadCount,
64
+ hasUnread: unreadCount > 0,
65
+ lastReadMessageId: cursor?.messageId || null,
66
+ lastReadAt: cursor?.lastReadAt ?? state.initializedAt,
67
+ latestMessageId: messages.at(-1)?.id ?? null,
68
+ latestAssistantMessageId: [...messages].reverse().find((message) => message.role === "assistant")
69
+ ?.id ?? null,
70
+ };
71
+ }
@@ -0,0 +1,86 @@
1
+ import type { RuntimeConfig, SessionStore } from "../../runtime/ports.js";
2
+ import type { SessionSnapshot } from "../../sessions/types.js";
3
+ import { type ReadBoundary } from "./projection.js";
4
+ type Sessions = Pick<SessionStore, "getSessionSnapshot">;
5
+ type Environment = {
6
+ services: {
7
+ config: RuntimeConfig;
8
+ sessions: Sessions;
9
+ };
10
+ };
11
+ export declare class WebSessionReadStates {
12
+ private readonly getEnvironment;
13
+ private readonly now;
14
+ private readonly stores;
15
+ private readonly initializedAt;
16
+ constructor(getEnvironment: (id: string) => Environment, now?: () => number);
17
+ private store;
18
+ initialize(environmentId: string): Promise<void>;
19
+ forget(environmentId: string, sessionId: string): Promise<void>;
20
+ reset(environmentId: string, sessionId: string): Promise<void>;
21
+ project(environmentId: string, snapshot: SessionSnapshot): Promise<{
22
+ sessionId: string;
23
+ readStateStatus: "unavailable";
24
+ unreadCount: null;
25
+ hasUnread: null;
26
+ lastReadAt: null;
27
+ lastReadMessageId: null;
28
+ } | {
29
+ sessionId: string;
30
+ readStateStatus: "available";
31
+ unreadCount: number;
32
+ hasUnread: boolean;
33
+ lastReadMessageId: string | null;
34
+ lastReadAt: number;
35
+ latestMessageId: string | number | null;
36
+ latestAssistantMessageId: string | number | null;
37
+ }>;
38
+ mark(environmentId: string, sessionId: string, boundary: ReadBoundary): Promise<{
39
+ sessionId: string;
40
+ readStateStatus: "available";
41
+ unreadCount: number;
42
+ hasUnread: boolean;
43
+ lastReadMessageId: string | null;
44
+ lastReadAt: number;
45
+ latestMessageId: string | number | null;
46
+ latestAssistantMessageId: string | number | null;
47
+ } | null>;
48
+ list(environmentId: string): Promise<{
49
+ sessions: {
50
+ sessionId: string;
51
+ readStateStatus: "available";
52
+ unreadCount: number;
53
+ hasUnread: boolean;
54
+ lastReadMessageId: string | null;
55
+ lastReadAt: number;
56
+ latestMessageId: string | number | null;
57
+ latestAssistantMessageId: string | number | null;
58
+ id: string;
59
+ title: string;
60
+ createdAt: number;
61
+ updatedAt: number;
62
+ lastMessagePreview: string;
63
+ lastMessageAt: number | null;
64
+ }[];
65
+ nextCursor: null;
66
+ } | {
67
+ sessions: {
68
+ sessionId: string;
69
+ readStateStatus: "unavailable";
70
+ unreadCount: null;
71
+ hasUnread: null;
72
+ lastReadAt: null;
73
+ lastReadMessageId: null;
74
+ id: string;
75
+ title: string;
76
+ createdAt: number;
77
+ updatedAt: number;
78
+ lastMessagePreview: string;
79
+ lastMessageAt: number | null;
80
+ latestMessageId: string | number | null;
81
+ latestAssistantMessageId: string | number | null;
82
+ }[];
83
+ nextCursor: null;
84
+ }>;
85
+ }
86
+ export {};
@@ -0,0 +1,89 @@
1
+ import { createHash } from "node:crypto";
2
+ import { join, resolve } from "node:path";
3
+ import { SessionService } from "../../sessions/session-service.js";
4
+ import { clientVisibleMessages, toSessionListItem, toSnapshotMessage, } from "../../sessions/record/projection.js";
5
+ import { WebReadStateStore } from "./store.js";
6
+ import { captureReadStateAvailability, unavailableSessionReadState, } from "./availability.js";
7
+ import { advanceReadCursor, projectSessionReadState, } from "./projection.js";
8
+ export class WebSessionReadStates {
9
+ getEnvironment;
10
+ now;
11
+ stores = new Map();
12
+ initializedAt;
13
+ constructor(getEnvironment, now = Date.now) {
14
+ this.getEnvironment = getEnvironment;
15
+ this.now = now;
16
+ this.initializedAt = now();
17
+ }
18
+ store(environmentId) {
19
+ const { paths } = this.getEnvironment(environmentId).services.config;
20
+ const identity = JSON.stringify([
21
+ environmentId,
22
+ resolve(paths.sessionsDir),
23
+ ]);
24
+ const existing = this.stores.get(identity);
25
+ if (existing)
26
+ return existing;
27
+ const filename = createHash("sha256").update(identity).digest("hex") + ".json";
28
+ const store = new WebReadStateStore(join(paths.runtimeDir, "web-ui", "read-state", filename), this.initializedAt);
29
+ this.stores.set(identity, store);
30
+ return store;
31
+ }
32
+ initialize(environmentId) {
33
+ return this.store(environmentId).initialize();
34
+ }
35
+ async forget(environmentId, sessionId) {
36
+ await captureReadStateAvailability(() => this.store(environmentId).forget(sessionId));
37
+ }
38
+ async reset(environmentId, sessionId) {
39
+ await captureReadStateAvailability(() => this.store(environmentId).reset(sessionId, this.now()));
40
+ }
41
+ async project(environmentId, snapshot) {
42
+ const result = await captureReadStateAvailability(() => this.store(environmentId).transaction((state) => projectSessionReadState(state, snapshot.sessionId, snapshot.messages)));
43
+ if (result.readStateStatus === "unavailable")
44
+ return unavailableSessionReadState(snapshot.sessionId);
45
+ return result.value;
46
+ }
47
+ async mark(environmentId, sessionId, boundary) {
48
+ const store = this.store(environmentId);
49
+ await store.initialize();
50
+ const sessions = this.getEnvironment(environmentId).services.sessions;
51
+ return store.transaction(async (state) => {
52
+ const snapshot = await sessions.getSessionSnapshot(sessionId, {
53
+ includeRequests: false,
54
+ });
55
+ if (!snapshot)
56
+ return null;
57
+ advanceReadCursor(state, sessionId, snapshot.messages, boundary, this.now());
58
+ return projectSessionReadState(state, sessionId, snapshot.messages);
59
+ });
60
+ }
61
+ async list(environmentId) {
62
+ const { sessionsDir } = this.getEnvironment(environmentId).services.config.paths;
63
+ // One canonical disk enumeration avoids mutable offset pages and sending
64
+ // every request event across the managed Runtime's bounded RPC transport.
65
+ const records = await new SessionService({ sessionsDir }).getAllSessions();
66
+ const projectedSessions = records.map((record) => ({
67
+ summary: toSessionListItem(record),
68
+ messages: clientVisibleMessages(record.messages).map((message) => toSnapshotMessage(record.id, message, record.requests ?? [])),
69
+ }));
70
+ const result = await captureReadStateAvailability(() => this.store(environmentId).transaction((state) => {
71
+ const sessions = projectedSessions.map(({ summary, messages }) => {
72
+ return {
73
+ ...summary,
74
+ ...projectSessionReadState(state, summary.id, messages),
75
+ };
76
+ });
77
+ return { sessions, nextCursor: null };
78
+ }));
79
+ if (result.readStateStatus === "unavailable")
80
+ return {
81
+ sessions: projectedSessions.map(({ summary }) => ({
82
+ ...summary,
83
+ ...unavailableSessionReadState(summary.id),
84
+ })),
85
+ nextCursor: null,
86
+ };
87
+ return result.value;
88
+ }
89
+ }
@@ -0,0 +1,22 @@
1
+ export type WebReadCursor = {
2
+ messageId: string;
3
+ createdAt: number;
4
+ lastReadAt: number;
5
+ };
6
+ export type WebReadState = {
7
+ version: 1;
8
+ initializedAt: number;
9
+ cursors: Array<[string, WebReadCursor]>;
10
+ };
11
+ /** UI-owned state; never writes Runtime session records or model context. */
12
+ export declare class WebReadStateStore {
13
+ private readonly initializedAt;
14
+ private readonly path;
15
+ constructor(path: string, initializedAt: number);
16
+ private load;
17
+ private save;
18
+ transaction<T>(operation: (state: WebReadState) => T | Promise<T>): Promise<T>;
19
+ initialize(): Promise<void>;
20
+ reset(sessionId: string, now: number): Promise<void>;
21
+ forget(sessionId: string): Promise<void>;
22
+ }
@@ -0,0 +1,110 @@
1
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ const pendingWrites = new Map();
5
+ function hasFileErrorCode(error, code) {
6
+ return error instanceof Error && "code" in error && error.code === code;
7
+ }
8
+ function isReadCursor(value) {
9
+ if (!value || typeof value !== "object")
10
+ return false;
11
+ const cursor = value;
12
+ if (typeof cursor.messageId !== "string")
13
+ return false;
14
+ if (!Number.isFinite(cursor.createdAt))
15
+ return false;
16
+ return Number.isFinite(cursor.lastReadAt);
17
+ }
18
+ function decodeReadState(raw) {
19
+ const state = JSON.parse(raw);
20
+ if (state?.version !== 1)
21
+ throw new Error("Unsupported Web UI read state.");
22
+ if (!Number.isFinite(state.initializedAt))
23
+ throw new Error("Invalid Web UI read boundary.");
24
+ if (!Array.isArray(state.cursors))
25
+ throw new Error("Invalid Web UI read cursors.");
26
+ for (const entry of state.cursors) {
27
+ if (!Array.isArray(entry) || entry.length !== 2)
28
+ throw new Error("Invalid Web UI read cursor entry.");
29
+ if (typeof entry[0] !== "string" || !isReadCursor(entry[1]))
30
+ throw new Error("Invalid Web UI read cursor entry.");
31
+ }
32
+ return state;
33
+ }
34
+ /** UI-owned state; never writes Runtime session records or model context. */
35
+ export class WebReadStateStore {
36
+ initializedAt;
37
+ path;
38
+ constructor(path, initializedAt) {
39
+ this.initializedAt = initializedAt;
40
+ this.path = resolve(path);
41
+ }
42
+ async load() {
43
+ try {
44
+ return decodeReadState(await readFile(this.path, "utf8"));
45
+ }
46
+ catch (error) {
47
+ if (hasFileErrorCode(error, "ENOENT"))
48
+ return null;
49
+ throw error;
50
+ }
51
+ }
52
+ async save(state) {
53
+ await mkdir(dirname(this.path), { recursive: true });
54
+ const temporary = `${this.path}.${process.pid}.${randomUUID()}.tmp`;
55
+ try {
56
+ await writeFile(temporary, JSON.stringify(state), "utf8");
57
+ await rename(temporary, this.path);
58
+ }
59
+ catch (error) {
60
+ await rm(temporary, { force: true }).catch(() => undefined);
61
+ throw error;
62
+ }
63
+ }
64
+ async transaction(operation) {
65
+ const prior = pendingWrites.get(this.path) ?? Promise.resolve();
66
+ const pending = prior
67
+ .catch(() => undefined)
68
+ .then(async () => {
69
+ const existing = await this.load();
70
+ const state = existing ?? {
71
+ version: 1,
72
+ initializedAt: this.initializedAt,
73
+ cursors: [],
74
+ };
75
+ const before = JSON.stringify(state);
76
+ const result = await operation(state);
77
+ if (!existing || JSON.stringify(state) !== before)
78
+ await this.save(state);
79
+ return result;
80
+ });
81
+ pendingWrites.set(this.path, pending);
82
+ try {
83
+ return await pending;
84
+ }
85
+ finally {
86
+ if (pendingWrites.get(this.path) === pending)
87
+ pendingWrites.delete(this.path);
88
+ }
89
+ }
90
+ initialize() {
91
+ return this.transaction(() => undefined);
92
+ }
93
+ reset(sessionId, now) {
94
+ return this.transaction((state) => {
95
+ const cursors = new Map(state.cursors);
96
+ const previous = cursors.get(sessionId);
97
+ cursors.set(sessionId, {
98
+ messageId: "",
99
+ createdAt: 0,
100
+ lastReadAt: Math.max(now, (previous?.lastReadAt ?? state.initializedAt) + 1),
101
+ });
102
+ state.cursors = [...cursors];
103
+ });
104
+ }
105
+ forget(sessionId) {
106
+ return this.transaction((state) => {
107
+ state.cursors = state.cursors.filter(([id]) => id !== sessionId);
108
+ });
109
+ }
110
+ }
@@ -31,11 +31,16 @@ AGENT_BRIDGE_TOKEN=
31
31
  LLM_RUNTIME_CONFIG_FILE=local/runtime.config.json
32
32
  ```
33
33
 
34
- `BRAVE_SEARCH_API_KEY` is optional for startup and URL fetching. The bundled
35
- Web plugin always exposes `web_fetch` and `web_search`; invoking `web_search`
36
- without a non-empty key returns a clear plugin configuration error without
37
- making a search request. The key never belongs in runtime JSON or a plugin
38
- manifest.
34
+ `BRAVE_SEARCH_API_KEY` is optional. The bundled Web plugin always exposes
35
+ `web_fetch` and `web_search`. A non-empty key selects Brave Search; without one,
36
+ `web_search` uses Light search over a limited catalog of public Hebrew and
37
+ English sources. Light reads those sources directly without an external search
38
+ engine. A failing configured key does not silently switch providers. The key
39
+ never belongs in runtime JSON or a plugin manifest.
40
+
41
+ Light uses the Web plugin's defaults and an in-memory cache; no background
42
+ crawler or separate service is installed. See
43
+ [Known Limitations](known-limitations.md#web-search) for its coverage and limits.
39
44
 
40
45
  Provider configs should reference env var names:
41
46
 
@@ -138,7 +143,21 @@ storage, privacy, retrieval, and management behavior.
138
143
 
139
144
  ## Paths
140
145
 
141
- `environment.paths.runtimeDir` is environment-local generated runtime state.
146
+ `environment.paths.runtimeDir` is the generated runtime state base. A named
147
+ environment profile without its own `paths.runtimeDir` uses
148
+ `<base>/environments/<sha256(profileId)>`. The stable profile ID determines that
149
+ directory; changing models or adding another profile does not move its state.
150
+ `LLM_RUNTIME_DIR` takes precedence over profile paths and acts as the shared base
151
+ when a profile is selected. Without a selected profile, the existing runtime
152
+ directory layout is unchanged.
153
+
154
+ An explicit `environment.profiles.<id>.paths.runtimeDir` is already a final
155
+ environment directory and is preserved when there is no `LLM_RUNTIME_DIR`
156
+ override. Explicit session, attachment and trace path overrides also remain
157
+ final paths. Use distinct final paths for different environments. The resolved
158
+ runtime directory owns local hosting, scheduling, passive memory, plugin state,
159
+ and the default session, attachment and log paths. Shared, compiled, workspace
160
+ and agent-work directories retain their configured sharing behavior.
142
161
  `environment.paths.attachmentsDir` stores runtime-managed attachment files
143
162
  referenced by session/request metadata. Images and supported document files
144
163
  share this store; document contents are read on demand by a request-bound tool
@@ -215,6 +234,32 @@ LLM_RUNTIME_PROFILE=dev npm run dev
215
234
 
216
235
  The active profile id becomes the runtime id used by the bridge.
217
236
 
237
+ Existing populated state in an inherited base is never automatically moved or
238
+ silently replaced by an empty environment. Loading stops with
239
+ `runtime_environment_storage_assignment_required` until that state is explicitly
240
+ assigned. For example, to retain an existing `prod` environment at `.runtime`
241
+ and add an isolated `dev` environment:
242
+
243
+ ```json
244
+ {
245
+ "environment": {
246
+ "default": "prod",
247
+ "paths": { "runtimeDir": ".runtime" },
248
+ "profiles": {
249
+ "prod": { "paths": { "runtimeDir": ".runtime" } },
250
+ "dev": {}
251
+ }
252
+ }
253
+ }
254
+ ```
255
+
256
+ This leaves existing Jobs and conversations in place and gives `dev` its own
257
+ namespace. Preserve any previous explicit session, attachment and trace paths
258
+ on the assigned profile too. Remove a shared `LLM_RUNTIME_DIR` override before
259
+ making this assignment because environment variables keep their precedence.
260
+ The stored Jobs must retain their original environment ID. Empty state folders
261
+ and intentionally shared or compiled artifacts do not require assignment.
262
+
218
263
  ## Request Runner
219
264
 
220
265
  The runtime config owns host wiring, installed models, and plugin availability.
@@ -310,10 +355,12 @@ the request-runner context block supplies only admission headroom.
310
355
  subtracted while projecting messages so the prompt does not consume the whole
311
356
  context window; it is never forwarded to a provider as an output limit. Model
312
357
  steps may vary their prompt contract, timeout, format, or other generation
313
- controls, but they do not receive a shared per-step output-token cap.
358
+ controls, but configuration does not define a shared per-step output-token cap.
314
359
  The Ollama adapter still sends a finite provider-native `num_predict`, derived
315
- mechanically from the final provider input, the physical context remainder,
316
- and a strict bounded output schema when one applies.
360
+ mechanically from the final provider input and the physical context remainder.
361
+ Registered core-decision steps additionally retain their internal output-token
362
+ limit. Output schema size does not impose another generation limit; schema
363
+ projection, validation, input estimation, and compaction remain unchanged.
317
364
 
318
365
  The required context fields remain explicit. Unknown fields, unknown step ids,
319
366
  and invalid explicit overrides are rejected during configuration loading;
@@ -155,10 +155,13 @@ a bundled plugin: duplicate plugin ids fail closed.
155
155
  The passive long-term memory service belongs to the Runtime core and does not
156
156
  depend on the bundled `memory` plugin.
157
157
 
158
- Web URL fetching is available through the bundled Web plugin without a search
159
- credential. Set `BRAVE_SEARCH_API_KEY` to make `web_search` operational. With
160
- no key, `web_fetch` remains operational and a `web_search` invocation fails
161
- locally with a configuration error before any search request is made.
158
+ The bundled Web plugin supports URL fetching and Light search without a search
159
+ credential. Light searches a limited catalog of public Hebrew and English
160
+ sources directly; it does not query an external search engine or provide
161
+ whole-web coverage. Set `BRAVE_SEARCH_API_KEY` to use Brave Search instead.
162
+ A configured Brave key that fails remains a Brave error. See
163
+ [Known Limitations](known-limitations.md#web-search) for Light's discovery and
164
+ cache boundaries.
162
165
 
163
166
  ## Run From Source
164
167
 
@@ -61,6 +61,27 @@ plugin entrypoints are not currently supported.
61
61
  Plugin behavior belongs inside the plugin. Runtime orchestration should only
62
62
  see the generic selected catalog and execution results.
63
63
 
64
+ ## Web Search
65
+
66
+ With a configured `BRAVE_SEARCH_API_KEY`, `web_search` uses Brave Search and
67
+ preserves its authentication and rate-limit errors. Without a key, Light search
68
+ discovers and ranks pages within a catalog of public Hebrew and English
69
+ sources. It contacts content sources directly, without another search engine.
70
+
71
+ Light does not maintain a whole-web index. Its source selection, crawl depth,
72
+ candidate count, response sizes, and request deadline are bounded. Results may
73
+ be partial because a source is unavailable, disallows crawling, or exceeds a
74
+ budget. Zero matches mean no matches in the inspected sources, not that the
75
+ information is absent from the web. Source coverage accompanies the results.
76
+
77
+ The document cache exists only in the plugin instance's memory, bounded to
78
+ 16 MiB of serialized content and 500 documents. Feed entries expire within
79
+ five minutes and page entries within 30 minutes; origin directives can shorten
80
+ these lifetimes. Restarting the runtime clears the cache. There is no background
81
+ crawl, browser rendering, or persistent search database. Content that requires
82
+ JavaScript may therefore be unavailable. Exact public URL fetching remains a
83
+ separate `web_fetch` capability with its existing public-network restrictions.
84
+
64
85
  ## Passive Long-Term Memory
65
86
 
66
87
  Passive long-term memory is disabled by default and requires an embedding model