@abot-ai/runtime 1.2.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 (516) hide show
  1. package/README.md +14 -0
  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 +5 -0
  14. package/dist/src/cli/abot.js +2 -11
  15. package/dist/src/runtime/adapters/in-memory-session-store.js +1 -0
  16. package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +11 -2
  17. package/dist/src/runtime/adapters/long-term-memory/file-lock/contracts.d.ts +2 -0
  18. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.d.ts +2 -0
  19. package/dist/src/runtime/adapters/long-term-memory/file-lock/synchronous-release.js +40 -0
  20. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.d.ts +3 -0
  21. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/approval.js +9 -0
  22. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.d.ts +13 -0
  23. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/rejection-event.js +25 -0
  24. package/dist/src/runtime/adapters/registered-tool-normal-invocations/execution/run.js +18 -2
  25. package/dist/src/runtime/adapters/registered-tool-normal-invocations/executor.js +8 -0
  26. package/dist/src/runtime/adapters/registered-tool-normal-invocations/payload/lifecycle.js +7 -3
  27. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/contracts.d.ts +17 -2
  28. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.d.ts +9 -0
  29. package/dist/src/runtime/adapters/registered-tool-normal-invocations/shared/event-metadata.js +8 -0
  30. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/execution.js +16 -1
  31. package/dist/src/runtime/adapters/registered-tool-worker-capabilities/payload-observability.js +2 -2
  32. package/dist/src/runtime/adapters/scheduled-request-outcome.d.ts +11 -0
  33. package/dist/src/runtime/adapters/scheduled-request-outcome.js +41 -0
  34. package/dist/src/runtime/adapters/scheduler-runtime.d.ts +19 -0
  35. package/dist/src/runtime/adapters/scheduler-runtime.js +138 -0
  36. package/dist/src/runtime/capabilities/scheduling/create-operations.d.ts +55 -0
  37. package/dist/src/runtime/capabilities/scheduling/create-operations.js +30 -0
  38. package/dist/src/runtime/capabilities/scheduling/create-time-zone.d.ts +1 -0
  39. package/dist/src/runtime/capabilities/scheduling/create-time-zone.js +11 -0
  40. package/dist/src/runtime/capabilities/scheduling/job-list-page.d.ts +25 -0
  41. package/dist/src/runtime/capabilities/scheduling/job-list-page.js +40 -0
  42. package/dist/src/runtime/capabilities/scheduling/model-validation.d.ts +2 -0
  43. package/dist/src/runtime/capabilities/scheduling/model-validation.js +15 -0
  44. package/dist/src/runtime/capabilities/scheduling/tool-contract.d.ts +2 -0
  45. package/dist/src/runtime/capabilities/scheduling/tool-contract.js +35 -0
  46. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.d.ts +43 -0
  47. package/dist/src/runtime/capabilities/scheduling/tool-input-properties.js +27 -0
  48. package/dist/src/runtime/capabilities/scheduling/tool-module.d.ts +4 -0
  49. package/dist/src/runtime/capabilities/scheduling/tool-module.js +158 -0
  50. package/dist/src/runtime/capabilities/scheduling/update-operations.d.ts +2 -0
  51. package/dist/src/runtime/capabilities/scheduling/update-operations.js +49 -0
  52. package/dist/src/runtime/composition.d.ts +23 -3
  53. package/dist/src/runtime/composition.js +12 -17
  54. package/dist/src/runtime/config/environment-paths.d.ts +10 -0
  55. package/dist/src/runtime/config/environment-paths.js +31 -0
  56. package/dist/src/runtime/config/environment-storage.d.ts +9 -0
  57. package/dist/src/runtime/config/environment-storage.js +65 -0
  58. package/dist/src/runtime/config/fields.js +7 -0
  59. package/dist/src/runtime/config/long-term-memory.js +15 -0
  60. package/dist/src/runtime/config/schema.js +8 -0
  61. package/dist/src/runtime/config.js +9 -5
  62. package/dist/src/runtime/context/scheduled-execution-context.d.ts +10 -0
  63. package/dist/src/runtime/context/scheduled-execution-context.js +52 -0
  64. package/dist/src/runtime/default-adapters.d.ts +3 -32
  65. package/dist/src/runtime/default-adapters.js +3 -270
  66. package/dist/src/runtime/default-environment-adapters.d.ts +19 -0
  67. package/dist/src/runtime/default-environment-adapters.js +144 -0
  68. package/dist/src/runtime/index.d.ts +5 -0
  69. package/dist/src/runtime/index.js +4 -0
  70. package/dist/src/runtime/local-application.d.ts +22 -0
  71. package/dist/src/runtime/local-application.js +81 -0
  72. package/dist/src/runtime/local-host/app-memory-dispatch.d.ts +11 -0
  73. package/dist/src/runtime/local-host/app-memory-dispatch.js +103 -0
  74. package/dist/src/runtime/local-host/app-owner.d.ts +4 -0
  75. package/dist/src/runtime/local-host/app-owner.js +119 -0
  76. package/dist/src/runtime/local-host/app-request-control.d.ts +24 -0
  77. package/dist/src/runtime/local-host/app-request-control.js +135 -0
  78. package/dist/src/runtime/local-host/app-service-dispatch.d.ts +5 -0
  79. package/dist/src/runtime/local-host/app-service-dispatch.js +64 -0
  80. package/dist/src/runtime/local-host/client-identity.d.ts +3 -0
  81. package/dist/src/runtime/local-host/client-identity.js +17 -0
  82. package/dist/src/runtime/local-host/client-memory.d.ts +7 -0
  83. package/dist/src/runtime/local-host/client-memory.js +54 -0
  84. package/dist/src/runtime/local-host/client-requests.d.ts +19 -0
  85. package/dist/src/runtime/local-host/client-requests.js +145 -0
  86. package/dist/src/runtime/local-host/client-services.d.ts +10 -0
  87. package/dist/src/runtime/local-host/client-services.js +14 -0
  88. package/dist/src/runtime/local-host/contracts.d.ts +36 -0
  89. package/dist/src/runtime/local-host/contracts.js +1 -0
  90. package/dist/src/runtime/local-host/endpoint.d.ts +7 -0
  91. package/dist/src/runtime/local-host/endpoint.js +79 -0
  92. package/dist/src/runtime/local-host/owner-activity.d.ts +10 -0
  93. package/dist/src/runtime/local-host/owner-activity.js +30 -0
  94. package/dist/src/runtime/local-host/owner-retirement.d.ts +3 -0
  95. package/dist/src/runtime/local-host/owner-retirement.js +15 -0
  96. package/dist/src/runtime/local-host/owner-server.d.ts +6 -0
  97. package/dist/src/runtime/local-host/owner-server.js +88 -0
  98. package/dist/src/runtime/local-host/private-access.d.ts +2 -0
  99. package/dist/src/runtime/local-host/private-access.js +16 -0
  100. package/dist/src/runtime/local-host/private-directory.d.ts +1 -0
  101. package/dist/src/runtime/local-host/private-directory.js +57 -0
  102. package/dist/src/runtime/local-host/rpc-peer.d.ts +22 -0
  103. package/dist/src/runtime/local-host/rpc-peer.js +168 -0
  104. package/dist/src/runtime/local-host/rpc-protocol.d.ts +21 -0
  105. package/dist/src/runtime/local-host/rpc-protocol.js +46 -0
  106. package/dist/src/runtime/local-host/startup-connection.d.ts +5 -0
  107. package/dist/src/runtime/local-host/startup-connection.js +72 -0
  108. package/dist/src/runtime/local-host/transport.d.ts +3 -0
  109. package/dist/src/runtime/local-host/transport.js +88 -0
  110. package/dist/src/runtime/local-host/windows-private-access.d.ts +1 -0
  111. package/dist/src/runtime/local-host/windows-private-access.js +51 -0
  112. package/dist/src/runtime/long-term-memory/onboarding/configuration.js +6 -0
  113. package/dist/src/runtime/long-term-memory/recall-binding.d.ts +3 -0
  114. package/dist/src/runtime/long-term-memory/recall-binding.js +27 -0
  115. package/dist/src/runtime/long-term-memory/recall-context.d.ts +20 -0
  116. package/dist/src/runtime/long-term-memory/recall-context.js +101 -0
  117. package/dist/src/runtime/long-term-memory/recall-continuation.d.ts +8 -0
  118. package/dist/src/runtime/long-term-memory/recall-continuation.js +36 -0
  119. package/dist/src/runtime/long-term-memory/recall-policy.d.ts +7 -0
  120. package/dist/src/runtime/long-term-memory/recall-policy.js +14 -0
  121. package/dist/src/runtime/long-term-memory/recall-result.d.ts +5 -0
  122. package/dist/src/runtime/long-term-memory/recall-result.js +54 -0
  123. package/dist/src/runtime/long-term-memory/repository-state.d.ts +2 -1
  124. package/dist/src/runtime/long-term-memory/repository-state.js +2 -2
  125. package/dist/src/runtime/model/invoke-raw-step.d.ts +1 -0
  126. package/dist/src/runtime/model/invoke-raw-step.js +1 -0
  127. package/dist/src/runtime/model/invoke-step.js +6 -0
  128. package/dist/src/runtime/model/invoke-structured-step.d.ts +1 -0
  129. package/dist/src/runtime/model/invoke-structured-step.js +1 -0
  130. package/dist/src/runtime/model/model-step-port.d.ts +2 -0
  131. package/dist/src/runtime/model/model-step-steering.d.ts +8 -0
  132. package/dist/src/runtime/model/model-step-steering.js +19 -0
  133. package/dist/src/runtime/orchestration/final-response/authoring-contract.js +1 -1
  134. package/dist/src/runtime/orchestration/final-response/invoke.d.ts +1 -0
  135. package/dist/src/runtime/orchestration/final-response/invoke.js +1 -0
  136. package/dist/src/runtime/orchestration/role-calls/activation-budget.js +1 -0
  137. package/dist/src/runtime/orchestration/role-calls/candidate-validation.js +9 -49
  138. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.d.ts +9 -0
  139. package/dist/src/runtime/orchestration/role-calls/capability-selection-reconsideration.js +17 -8
  140. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.d.ts +2 -0
  141. package/dist/src/runtime/orchestration/role-calls/capability-selection-supervision-validation.js +62 -0
  142. package/dist/src/runtime/orchestration/role-calls/command-decoder.js +4 -0
  143. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.d.ts +4 -0
  144. package/dist/src/runtime/orchestration/role-calls/command-dispatch/memory-recall-transitions.js +89 -0
  145. package/dist/src/runtime/orchestration/role-calls/command-dispatch.js +5 -0
  146. package/dist/src/runtime/orchestration/role-calls/contracts.d.ts +9 -7
  147. package/dist/src/runtime/orchestration/role-calls/contracts.js +2 -2
  148. package/dist/src/runtime/orchestration/role-calls/diagnostics.js +3 -0
  149. package/dist/src/runtime/orchestration/role-calls/index.d.ts +1 -0
  150. package/dist/src/runtime/orchestration/role-calls/index.js +1 -0
  151. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.d.ts +51 -0
  152. package/dist/src/runtime/orchestration/role-calls/memory-recall-contract.js +4 -0
  153. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.d.ts +6 -0
  154. package/dist/src/runtime/orchestration/role-calls/memory-recall-decoder.js +147 -0
  155. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.d.ts +5 -0
  156. package/dist/src/runtime/orchestration/role-calls/memory-recall-diagnostics.js +27 -0
  157. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.d.ts +3 -0
  158. package/dist/src/runtime/orchestration/role-calls/memory-recall-state-validation.js +121 -0
  159. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.d.ts +3 -0
  160. package/dist/src/runtime/orchestration/role-calls/memory-recall-transactions.js +44 -0
  161. package/dist/src/runtime/orchestration/role-calls/reducer.js +1 -0
  162. package/dist/src/runtime/orchestration/role-calls/transaction-effect.d.ts +5 -0
  163. package/dist/src/runtime/orchestration/role-calls/transaction-effect.js +14 -0
  164. package/dist/src/runtime/orchestration/role-calls/transactions.js +3 -24
  165. package/dist/src/runtime/plugins/manifest-validator.js +4 -1
  166. package/dist/src/runtime/ports.d.ts +4 -0
  167. package/dist/src/runtime/request/bound-runtime-handler.d.ts +2 -0
  168. package/dist/src/runtime/request/bound-runtime-handler.js +25 -0
  169. package/dist/src/runtime/request/contracts.d.ts +6 -0
  170. package/dist/src/runtime/request/execution-agent-root-execution.js +12 -0
  171. package/dist/src/runtime/request/execution-facets.js +6 -0
  172. package/dist/src/runtime/request/execution-scope-surfaces.js +10 -0
  173. package/dist/src/runtime/request/execution-scope.d.ts +1 -1
  174. package/dist/src/runtime/request/handler.js +6 -0
  175. package/dist/src/runtime/request/root-contract.d.ts +7 -1
  176. package/dist/src/runtime/request/root-execution-kernel.js +33 -37
  177. package/dist/src/runtime/request/root-memory-recall.d.ts +11 -0
  178. package/dist/src/runtime/request/root-memory-recall.js +71 -0
  179. package/dist/src/runtime/request/root-observation-handoff.d.ts +17 -0
  180. package/dist/src/runtime/request/root-observation-handoff.js +44 -0
  181. package/dist/src/runtime/request/scheduled-execution.d.ts +9 -0
  182. package/dist/src/runtime/request/scheduled-execution.js +32 -0
  183. package/dist/src/runtime/request/session-admission.d.ts +17 -0
  184. package/dist/src/runtime/request/session-admission.js +88 -0
  185. package/dist/src/runtime/request/supervisor-root-execution-diagnostics.d.ts +1 -1
  186. package/dist/src/runtime/request/supervisor-root-execution.js +8 -0
  187. package/dist/src/runtime/runtime-environment.d.ts +31 -0
  188. package/dist/src/runtime/runtime-environment.js +102 -0
  189. package/dist/src/runtime/runtime-host-environment.d.ts +8 -0
  190. package/dist/src/runtime/runtime-host-environment.js +57 -0
  191. package/dist/src/runtime/runtime-host-lifecycle.d.ts +4 -0
  192. package/dist/src/runtime/runtime-host-lifecycle.js +64 -0
  193. package/dist/src/runtime/runtime-host-scheduler-ownership.d.ts +5 -0
  194. package/dist/src/runtime/runtime-host-scheduler-ownership.js +67 -0
  195. package/dist/src/runtime/runtime-host.d.ts +19 -0
  196. package/dist/src/runtime/runtime-host.js +63 -0
  197. package/dist/src/runtime/scheduler/calendar-time.d.ts +10 -0
  198. package/dist/src/runtime/scheduler/calendar-time.js +58 -0
  199. package/dist/src/runtime/scheduler/contracts.d.ts +143 -0
  200. package/dist/src/runtime/scheduler/contracts.js +1 -0
  201. package/dist/src/runtime/scheduler/file-store.d.ts +2 -0
  202. package/dist/src/runtime/scheduler/file-store.js +76 -0
  203. package/dist/src/runtime/scheduler/instant-validation.d.ts +4 -0
  204. package/dist/src/runtime/scheduler/instant-validation.js +69 -0
  205. package/dist/src/runtime/scheduler/interval-range.d.ts +8 -0
  206. package/dist/src/runtime/scheduler/interval-range.js +24 -0
  207. package/dist/src/runtime/scheduler/job-management.d.ts +8 -0
  208. package/dist/src/runtime/scheduler/job-management.js +212 -0
  209. package/dist/src/runtime/scheduler/journal-checkpoint.d.ts +9 -0
  210. package/dist/src/runtime/scheduler/journal-checkpoint.js +45 -0
  211. package/dist/src/runtime/scheduler/journal-durability.d.ts +8 -0
  212. package/dist/src/runtime/scheduler/journal-durability.js +59 -0
  213. package/dist/src/runtime/scheduler/journal-files.d.ts +14 -0
  214. package/dist/src/runtime/scheduler/journal-files.js +59 -0
  215. package/dist/src/runtime/scheduler/journal-head.d.ts +21 -0
  216. package/dist/src/runtime/scheduler/journal-head.js +81 -0
  217. package/dist/src/runtime/scheduler/journal-index-state.d.ts +31 -0
  218. package/dist/src/runtime/scheduler/journal-index-state.js +137 -0
  219. package/dist/src/runtime/scheduler/journal-index.d.ts +22 -0
  220. package/dist/src/runtime/scheduler/journal-index.js +195 -0
  221. package/dist/src/runtime/scheduler/journal-store.d.ts +21 -0
  222. package/dist/src/runtime/scheduler/journal-store.js +184 -0
  223. package/dist/src/runtime/scheduler/journal-transaction.d.ts +14 -0
  224. package/dist/src/runtime/scheduler/journal-transaction.js +104 -0
  225. package/dist/src/runtime/scheduler/next-occurrence.d.ts +3 -0
  226. package/dist/src/runtime/scheduler/next-occurrence.js +39 -0
  227. package/dist/src/runtime/scheduler/run-completion.d.ts +12 -0
  228. package/dist/src/runtime/scheduler/run-completion.js +77 -0
  229. package/dist/src/runtime/scheduler/run-list-query.d.ts +5 -0
  230. package/dist/src/runtime/scheduler/run-list-query.js +38 -0
  231. package/dist/src/runtime/scheduler/run-records.d.ts +6 -0
  232. package/dist/src/runtime/scheduler/run-records.js +41 -0
  233. package/dist/src/runtime/scheduler/schedule-update.d.ts +3 -0
  234. package/dist/src/runtime/scheduler/schedule-update.js +22 -0
  235. package/dist/src/runtime/scheduler/schedule-validation.d.ts +10 -0
  236. package/dist/src/runtime/scheduler/schedule-validation.js +132 -0
  237. package/dist/src/runtime/scheduler/scheduler-engine.d.ts +2 -0
  238. package/dist/src/runtime/scheduler/scheduler-engine.js +174 -0
  239. package/dist/src/runtime/scheduler/scheduler-service.d.ts +10 -0
  240. package/dist/src/runtime/scheduler/scheduler-service.js +115 -0
  241. package/dist/src/runtime/scheduler/service-context.d.ts +21 -0
  242. package/dist/src/runtime/scheduler/service-context.js +26 -0
  243. package/dist/src/runtime/scheduler/session-deletion-state.d.ts +9 -0
  244. package/dist/src/runtime/scheduler/session-deletion-state.js +30 -0
  245. package/dist/src/runtime/scheduler/snapshot-validation.d.ts +4 -0
  246. package/dist/src/runtime/scheduler/snapshot-validation.js +112 -0
  247. package/dist/src/runtime/scheduler/startup-recovery.d.ts +2 -0
  248. package/dist/src/runtime/scheduler/startup-recovery.js +38 -0
  249. package/dist/src/runtime/scheduler/validation-error.d.ts +4 -0
  250. package/dist/src/runtime/scheduler/validation-error.js +8 -0
  251. package/dist/src/runtime/scheduler/working-store.d.ts +3 -0
  252. package/dist/src/runtime/scheduler/working-store.js +8 -0
  253. package/dist/src/runtime/session/request-session.d.ts +1 -0
  254. package/dist/src/runtime/session/request-session.js +14 -1
  255. package/dist/src/runtime/session/session-attachment-deletion.d.ts +8 -0
  256. package/dist/src/runtime/session/session-attachment-deletion.js +87 -0
  257. package/dist/src/runtime/session/session-deletion-boundary.d.ts +10 -0
  258. package/dist/src/runtime/session/session-deletion-boundary.js +39 -0
  259. package/dist/src/runtime/session/session-deletion-cleanup.d.ts +7 -0
  260. package/dist/src/runtime/session/session-deletion-cleanup.js +62 -0
  261. package/dist/src/runtime/session/session-deletion-finalization.d.ts +7 -0
  262. package/dist/src/runtime/session/session-deletion-finalization.js +34 -0
  263. package/dist/src/runtime/session/session-deletion-receipts.d.ts +7 -0
  264. package/dist/src/runtime/session/session-deletion-receipts.js +18 -0
  265. package/dist/src/runtime/session/session-lifecycle-store.d.ts +21 -0
  266. package/dist/src/runtime/session/session-lifecycle-store.js +72 -0
  267. package/dist/src/runtime/session/session-mutation-queue.d.ts +3 -0
  268. package/dist/src/runtime/session/session-mutation-queue.js +15 -0
  269. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.d.ts +16 -0
  270. package/dist/src/runtime/steps/execution-agent/capability-decision-parsing.js +165 -0
  271. package/dist/src/runtime/steps/execution-agent/contracts.d.ts +3 -1
  272. package/dist/src/runtime/steps/execution-agent/decision-parsing.d.ts +2 -0
  273. package/dist/src/runtime/steps/execution-agent/decision-parsing.js +195 -0
  274. package/dist/src/runtime/steps/execution-agent/decision-validation.d.ts +30 -0
  275. package/dist/src/runtime/steps/execution-agent/decision-validation.js +127 -0
  276. package/dist/src/runtime/steps/execution-agent/format.d.ts +1 -0
  277. package/dist/src/runtime/steps/execution-agent/format.js +12 -0
  278. package/dist/src/runtime/steps/execution-agent/input.d.ts +2 -1
  279. package/dist/src/runtime/steps/execution-agent/input.js +17 -2
  280. package/dist/src/runtime/steps/execution-agent/parser.d.ts +1 -2
  281. package/dist/src/runtime/steps/execution-agent/parser.js +1 -472
  282. package/dist/src/runtime/steps/execution-agent/prompt.d.ts +2 -0
  283. package/dist/src/runtime/steps/execution-agent/prompt.js +2 -0
  284. package/dist/src/runtime/steps/execution-agent/reconsideration-context.js +4 -3
  285. package/dist/src/runtime/steps/execution-agent/response-input.js +5 -4
  286. package/dist/src/runtime/steps/execution-agent/response-run.d.ts +3 -0
  287. package/dist/src/runtime/steps/execution-agent/response-run.js +7 -3
  288. package/dist/src/runtime/steps/execution-agent/run.d.ts +2 -0
  289. package/dist/src/runtime/steps/execution-agent/run.js +2 -0
  290. package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -1
  291. package/dist/src/runtime/steps/execution-agent/state-context.js +13 -5
  292. package/dist/src/runtime/steps/memory-recall-decision.d.ts +30 -0
  293. package/dist/src/runtime/steps/memory-recall-decision.js +101 -0
  294. package/dist/src/runtime/steps/memory-recall-prompt.d.ts +1 -0
  295. package/dist/src/runtime/steps/memory-recall-prompt.js +15 -0
  296. package/dist/src/runtime/steps/supervisor-decision/contracts.d.ts +4 -2
  297. package/dist/src/runtime/steps/supervisor-decision/diagnostics.d.ts +2 -0
  298. package/dist/src/runtime/steps/supervisor-decision/diagnostics.js +13 -6
  299. package/dist/src/runtime/steps/supervisor-decision/format.d.ts +2 -0
  300. package/dist/src/runtime/steps/supervisor-decision/format.js +41 -2
  301. package/dist/src/runtime/steps/supervisor-decision/input.d.ts +5 -1
  302. package/dist/src/runtime/steps/supervisor-decision/input.js +25 -5
  303. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.d.ts +10 -0
  304. package/dist/src/runtime/steps/supervisor-decision/memory-recall-continuation.js +32 -0
  305. package/dist/src/runtime/steps/supervisor-decision/parser.d.ts +2 -0
  306. package/dist/src/runtime/steps/supervisor-decision/parser.js +36 -1
  307. package/dist/src/runtime/steps/supervisor-decision/prompt.d.ts +3 -0
  308. package/dist/src/runtime/steps/supervisor-decision/prompt.js +16 -8
  309. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.d.ts +13 -0
  310. package/dist/src/runtime/steps/supervisor-decision/response-recommendation.js +32 -0
  311. package/dist/src/runtime/steps/supervisor-decision/resume.d.ts +2 -0
  312. package/dist/src/runtime/steps/supervisor-decision/resume.js +13 -0
  313. package/dist/src/runtime/steps/supervisor-decision/run.d.ts +3 -0
  314. package/dist/src/runtime/steps/supervisor-decision/run.js +19 -0
  315. package/dist/src/runtime/steps/supervisor-decision/working-directory.js +7 -1
  316. package/dist/src/runtime/steps/supervisor-response/diagnostics.d.ts +1 -0
  317. package/dist/src/runtime/steps/supervisor-response/diagnostics.js +1 -0
  318. package/dist/src/runtime/steps/supervisor-response/input.d.ts +2 -1
  319. package/dist/src/runtime/steps/supervisor-response/input.js +17 -4
  320. package/dist/src/runtime/steps/supervisor-response/memory-authoring.d.ts +1 -0
  321. package/dist/src/runtime/steps/supervisor-response/memory-authoring.js +4 -0
  322. package/dist/src/runtime/steps/supervisor-response/prompt.d.ts +1 -0
  323. package/dist/src/runtime/steps/supervisor-response/prompt.js +8 -2
  324. package/dist/src/runtime/steps/supervisor-response/response-recommendation.d.ts +10 -0
  325. package/dist/src/runtime/steps/supervisor-response/response-recommendation.js +25 -0
  326. package/dist/src/runtime/steps/supervisor-response/run.d.ts +6 -1
  327. package/dist/src/runtime/steps/supervisor-response/run.js +26 -7
  328. package/dist/src/sessions/record/projection.js +1 -0
  329. package/dist/src/sessions/schedule-metadata.d.ts +8 -0
  330. package/dist/src/sessions/schedule-metadata.js +1 -0
  331. package/dist/src/sessions/session-service.d.ts +1 -0
  332. package/dist/src/sessions/session-service.js +1 -0
  333. package/dist/src/sessions/types.d.ts +2 -0
  334. package/dist/src/shared/http-server-shutdown.d.ts +4 -0
  335. package/dist/src/shared/http-server-shutdown.js +17 -0
  336. package/dist/src/shared/public-http/aggregate-gate.d.ts +3 -0
  337. package/dist/src/shared/public-http/aggregate-gate.js +87 -0
  338. package/dist/src/shared/public-http/deadline.d.ts +2 -0
  339. package/dist/src/shared/public-http/deadline.js +29 -0
  340. package/dist/src/shared/public-http/errors.d.ts +6 -0
  341. package/dist/src/shared/public-http/errors.js +11 -0
  342. package/dist/src/shared/public-http/limits.d.ts +8 -0
  343. package/dist/src/shared/public-http/limits.js +8 -0
  344. package/dist/src/shared/public-http/network-policy.d.ts +11 -0
  345. package/dist/src/shared/public-http/network-policy.js +178 -0
  346. package/dist/src/shared/public-http/public-http.d.ts +24 -0
  347. package/dist/src/shared/public-http/public-http.js +85 -0
  348. package/dist/src/shared/public-http/request-hop.d.ts +18 -0
  349. package/dist/src/shared/public-http/request-hop.js +140 -0
  350. package/dist/src/web-ui/app/ARCHITECTURE.md +66 -4
  351. package/dist/src/web-ui/app/app-bootstrap.js +53 -0
  352. package/dist/src/web-ui/app/app-dom.js +80 -0
  353. package/dist/src/web-ui/app/app.js +195 -212
  354. package/dist/src/web-ui/app/components/conversation-activity.d.ts +2 -0
  355. package/dist/src/web-ui/app/components/conversation-activity.js +34 -7
  356. package/dist/src/web-ui/app/components/conversation-role-cards.d.ts +1 -0
  357. package/dist/src/web-ui/app/components/conversation-role-cards.js +61 -5
  358. package/dist/src/web-ui/app/components/conversation-schedule.js +71 -0
  359. package/dist/src/web-ui/app/components/conversation-status.js +65 -0
  360. package/dist/src/web-ui/app/components/conversation-tools.d.ts +13 -0
  361. package/dist/src/web-ui/app/components/conversation-tools.js +284 -0
  362. package/dist/src/web-ui/app/components/conversation-view.js +39 -11
  363. package/dist/src/web-ui/app/components/dashboard/activity.js +61 -0
  364. package/dist/src/web-ui/app/components/dashboard/icons.js +23 -0
  365. package/dist/src/web-ui/app/components/dashboard/recent-conversations.js +64 -0
  366. package/dist/src/web-ui/app/components/dashboard/workspace.js +107 -0
  367. package/dist/src/web-ui/app/components/message-link-previews.d.ts +16 -0
  368. package/dist/src/web-ui/app/components/message-link-previews.js +179 -0
  369. package/dist/src/web-ui/app/components/schedules/details.js +101 -0
  370. package/dist/src/web-ui/app/components/schedules/form.d.ts +13 -0
  371. package/dist/src/web-ui/app/components/schedules/form.js +246 -0
  372. package/dist/src/web-ui/app/components/schedules/workspace-state.js +59 -0
  373. package/dist/src/web-ui/app/components/schedules/workspace.js +165 -0
  374. package/dist/src/web-ui/app/components/workspace-shell.js +48 -2
  375. package/dist/src/web-ui/app/configuration-feature.js +72 -0
  376. package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +1 -0
  377. package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +17 -6
  378. package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +2 -0
  379. package/dist/src/web-ui/app/controllers/composer-submit-controller.js +15 -1
  380. package/dist/src/web-ui/app/controllers/composer-surface-controller.js +58 -0
  381. package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +53 -0
  382. package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +180 -0
  383. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.d.ts +23 -0
  384. package/dist/src/web-ui/app/controllers/conversation-read-state-controller.js +82 -0
  385. package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +8 -0
  386. package/dist/src/web-ui/app/controllers/conversation-session-controller.js +28 -39
  387. package/dist/src/web-ui/app/controllers/dashboard-controller.js +127 -0
  388. package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +40 -0
  389. package/dist/src/web-ui/app/controllers/home-composer-feature.js +119 -0
  390. package/dist/src/web-ui/app/controllers/home-conversation-activation.js +37 -0
  391. package/dist/src/web-ui/app/controllers/realtime-event-controller.d.ts +1 -0
  392. package/dist/src/web-ui/app/controllers/realtime-event-controller.js +74 -3
  393. package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +2 -1
  394. package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +15 -14
  395. package/dist/src/web-ui/app/controllers/schedule-realtime.js +118 -0
  396. package/dist/src/web-ui/app/controllers/schedules-controller.js +421 -0
  397. package/dist/src/web-ui/app/controllers/session-controller.js +30 -3
  398. package/dist/src/web-ui/app/dashboard-feature.js +44 -0
  399. package/dist/src/web-ui/app/index.html +53 -1
  400. package/dist/src/web-ui/app/lib/composer-submission-scope.d.ts +21 -0
  401. package/dist/src/web-ui/app/lib/composer-submission-scope.js +13 -0
  402. package/dist/src/web-ui/app/lib/context-window-snapshot-order.d.ts +15 -0
  403. package/dist/src/web-ui/app/lib/context-window-snapshot-order.js +31 -0
  404. package/dist/src/web-ui/app/lib/conversation-role-model.d.ts +10 -1
  405. package/dist/src/web-ui/app/lib/conversation-role-model.js +97 -15
  406. package/dist/src/web-ui/app/lib/conversation-status-model.d.ts +12 -0
  407. package/dist/src/web-ui/app/lib/conversation-status-model.js +116 -0
  408. package/dist/src/web-ui/app/lib/dashboard-job-templates.js +41 -0
  409. package/dist/src/web-ui/app/lib/dashboard-presentation.js +126 -0
  410. package/dist/src/web-ui/app/lib/message-markdown.d.ts +5 -0
  411. package/dist/src/web-ui/app/lib/message-markdown.js +99 -0
  412. package/dist/src/web-ui/app/lib/message-url-policy.d.ts +1 -0
  413. package/dist/src/web-ui/app/lib/message-url-policy.js +13 -0
  414. package/dist/src/web-ui/app/lib/schedule-errors.js +29 -0
  415. package/dist/src/web-ui/app/lib/schedule-message.js +30 -0
  416. package/dist/src/web-ui/app/lib/schedule-presentation.js +81 -0
  417. package/dist/src/web-ui/app/lib/session-read-state.d.ts +22 -0
  418. package/dist/src/web-ui/app/lib/session-read-state.js +63 -0
  419. package/dist/src/web-ui/app/lib/text-format.js +2 -143
  420. package/dist/src/web-ui/app/lib/tool-activity-event.d.ts +26 -0
  421. package/dist/src/web-ui/app/lib/tool-activity-event.js +228 -0
  422. package/dist/src/web-ui/app/lib/tool-activity-model.d.ts +41 -0
  423. package/dist/src/web-ui/app/lib/tool-activity-model.js +255 -0
  424. package/dist/src/web-ui/app/lib/tool-timeline.d.ts +3 -0
  425. package/dist/src/web-ui/app/lib/tool-timeline.js +18 -0
  426. package/dist/src/web-ui/app/schedules-feature.js +87 -0
  427. package/dist/src/web-ui/app/services/message-link-preview-client.d.ts +14 -0
  428. package/dist/src/web-ui/app/services/message-link-preview-client.js +96 -0
  429. package/dist/src/web-ui/app/services/runtime-web-client/schedules.js +51 -0
  430. package/dist/src/web-ui/app/services/runtime-web-client.d.ts +37 -0
  431. package/dist/src/web-ui/app/services/runtime-web-client.js +13 -8
  432. package/dist/src/web-ui/app/styles/00-tokens-base.css +11 -11
  433. package/dist/src/web-ui/app/styles/18-dashboard.css +384 -0
  434. package/dist/src/web-ui/app/styles/20-chat-composer.css +1 -130
  435. package/dist/src/web-ui/app/styles/26-message-content.css +295 -0
  436. package/dist/src/web-ui/app/styles/27-conversation-tools.css +266 -0
  437. package/dist/src/web-ui/app/styles/28-conversation-status.css +52 -0
  438. package/dist/src/web-ui/app/styles/38-schedule-workspace.css +263 -0
  439. package/dist/src/web-ui/app/styles/38-schedules.css +352 -0
  440. package/dist/src/web-ui/app/styles/90-responsive.css +14 -0
  441. package/dist/src/web-ui/app/styles/91-schedules-responsive.css +72 -0
  442. package/dist/src/web-ui/app/styles/92-dashboard-responsive.css +88 -0
  443. package/dist/src/web-ui/app/styles.css +8 -0
  444. package/dist/src/web-ui/app/ui-behavior.d.ts +1 -1
  445. package/dist/src/web-ui/app/ui-behavior.js +3 -1
  446. package/dist/src/web-ui/app/vendor/README.md +15 -0
  447. package/dist/src/web-ui/app/vendor/markdown-it.LICENSE +22 -0
  448. package/dist/src/web-ui/app/vendor/markdown-it.js +3003 -0
  449. package/dist/src/web-ui/link-preview/metadata.d.ts +9 -0
  450. package/dist/src/web-ui/link-preview/metadata.js +97 -0
  451. package/dist/src/web-ui/link-preview/preview-cache.d.ts +4 -0
  452. package/dist/src/web-ui/link-preview/preview-cache.js +23 -0
  453. package/dist/src/web-ui/link-preview/raster-response.d.ts +9 -0
  454. package/dist/src/web-ui/link-preview/raster-response.js +49 -0
  455. package/dist/src/web-ui/link-preview/routes.d.ts +3 -0
  456. package/dist/src/web-ui/link-preview/routes.js +97 -0
  457. package/dist/src/web-ui/link-preview/service.d.ts +11 -0
  458. package/dist/src/web-ui/link-preview/service.js +117 -0
  459. package/dist/src/web-ui/local-runtime/api-router.d.ts +4 -1
  460. package/dist/src/web-ui/local-runtime/api-router.js +42 -73
  461. package/dist/src/web-ui/local-runtime/contracts.d.ts +2 -2
  462. package/dist/src/web-ui/local-runtime/environment-registry.d.ts +12 -1
  463. package/dist/src/web-ui/local-runtime/environment-registry.js +38 -3
  464. package/dist/src/web-ui/local-runtime/realtime-controller.js +3 -1
  465. package/dist/src/web-ui/local-runtime/request-execution.d.ts +5 -1
  466. package/dist/src/web-ui/local-runtime/request-execution.js +38 -2
  467. package/dist/src/web-ui/local-runtime/schedule-job-creation.d.ts +7 -0
  468. package/dist/src/web-ui/local-runtime/schedule-job-creation.js +62 -0
  469. package/dist/src/web-ui/local-runtime/schedule-management-routes.d.ts +30 -0
  470. package/dist/src/web-ui/local-runtime/schedule-management-routes.js +134 -0
  471. package/dist/src/web-ui/local-runtime/schedule-run-page.d.ts +5 -0
  472. package/dist/src/web-ui/local-runtime/schedule-run-page.js +23 -0
  473. package/dist/src/web-ui/local-runtime/session-routes.d.ts +17 -0
  474. package/dist/src/web-ui/local-runtime/session-routes.js +74 -0
  475. package/dist/src/web-ui/local-runtime-backend.d.ts +2 -0
  476. package/dist/src/web-ui/local-runtime-backend.js +11 -1
  477. package/dist/src/web-ui/schedule-creation-contract.d.ts +7 -0
  478. package/dist/src/web-ui/schedule-creation-contract.js +1 -0
  479. package/dist/src/web-ui/server-shutdown.d.ts +4 -0
  480. package/dist/src/web-ui/server-shutdown.js +32 -0
  481. package/dist/src/web-ui/server.js +13 -10
  482. package/dist/src/web-ui/session-read-state/availability.d.ts +16 -0
  483. package/dist/src/web-ui/session-read-state/availability.js +20 -0
  484. package/dist/src/web-ui/session-read-state/projection.d.ts +17 -0
  485. package/dist/src/web-ui/session-read-state/projection.js +71 -0
  486. package/dist/src/web-ui/session-read-state/service.d.ts +86 -0
  487. package/dist/src/web-ui/session-read-state/service.js +89 -0
  488. package/dist/src/web-ui/session-read-state/store.d.ts +22 -0
  489. package/dist/src/web-ui/session-read-state/store.js +110 -0
  490. package/docs/configuration.md +41 -1
  491. package/docs/long-term-memory.md +46 -5
  492. package/docs/runtime-invariant-coverage.md +1 -1
  493. package/docs/runtime-library.md +23 -0
  494. package/docs/runtime-public-contracts.md +32 -1
  495. package/package.json +3 -1
  496. package/plugins/code-outline/plugin.json +15 -0
  497. package/plugins/document-reader/plugin.json +17 -0
  498. package/plugins/filesystem/plugin.json +17 -2
  499. package/plugins/json-inspector/plugin.json +12 -0
  500. package/plugins/local-search/plugin.json +12 -0
  501. package/plugins/memory/plugin.json +26 -1
  502. package/plugins/memory/source/index.ts +10 -6
  503. package/plugins/memory/src/index.cjs +11 -7
  504. package/plugins/project-orientation/plugin.json +14 -0
  505. package/plugins/web/source/aggregate-gate.ts +8 -130
  506. package/plugins/web/source/deadline.ts +14 -50
  507. package/plugins/web/source/errors.ts +17 -11
  508. package/plugins/web/source/limits.ts +3 -6
  509. package/plugins/web/source/network-policy.ts +28 -226
  510. package/plugins/web/source/public-http.ts +17 -142
  511. package/plugins/web/source/request-hop.ts +11 -191
  512. package/plugins/web/src/index.cjs +119 -59
  513. package/runtime.config.schema.json +7 -0
  514. package/src/runtime/README.md +105 -1
  515. package/src/runtime/local-host/README.md +86 -0
  516. package/src/runtime/scheduler/README.md +166 -0
@@ -0,0 +1,140 @@
1
+ import { request as requestHttp, } from "node:http";
2
+ import { request as requestHttps } from "node:https";
3
+ import { PublicHttpError, isPublicHttpError } from "./errors.js";
4
+ import { PUBLIC_HTTP_LIMITS } from "./limits.js";
5
+ function buildPinnedLookup(address) {
6
+ return (_hostname, options, callback) => {
7
+ if (options.all) {
8
+ callback(null, [address]);
9
+ return;
10
+ }
11
+ callback(null, address.address, address.family);
12
+ };
13
+ }
14
+ function contentLength(headers) {
15
+ const raw = headers["content-length"];
16
+ const value = Array.isArray(raw) ? raw[0] : raw;
17
+ if (typeof value !== "string" || !/^\d+$/u.test(value))
18
+ return undefined;
19
+ const parsed = Number(value);
20
+ return Number.isSafeInteger(parsed) ? parsed : undefined;
21
+ }
22
+ function readBoundedBody(response, maxBytes) {
23
+ return new Promise((resolve, reject) => {
24
+ const chunks = [];
25
+ let bytesRead = 0;
26
+ let settled = false;
27
+ const finish = (partialContent) => {
28
+ if (settled)
29
+ return;
30
+ settled = true;
31
+ resolve(Object.freeze({
32
+ body: Buffer.concat(chunks, bytesRead),
33
+ partialContent,
34
+ }));
35
+ };
36
+ response.on("data", (rawChunk) => {
37
+ if (settled)
38
+ return;
39
+ const chunk = Buffer.isBuffer(rawChunk)
40
+ ? rawChunk
41
+ : Buffer.from(rawChunk);
42
+ const remaining = maxBytes - bytesRead;
43
+ if (chunk.byteLength > remaining) {
44
+ if (remaining > 0) {
45
+ chunks.push(chunk.subarray(0, remaining));
46
+ bytesRead += remaining;
47
+ }
48
+ finish(true);
49
+ response.destroy();
50
+ return;
51
+ }
52
+ chunks.push(chunk);
53
+ bytesRead += chunk.byteLength;
54
+ });
55
+ response.once("end", () => finish(false));
56
+ response.once("error", (error) => {
57
+ if (settled)
58
+ return;
59
+ settled = true;
60
+ reject(error);
61
+ });
62
+ response.once("aborted", () => {
63
+ if (settled)
64
+ return;
65
+ settled = true;
66
+ reject(new PublicHttpError("web_response_invalid", "The upstream response ended before completion."));
67
+ });
68
+ });
69
+ }
70
+ export const requestPinnedHop = async (params) => {
71
+ if (params.abortSignal?.aborted) {
72
+ throw new PublicHttpError("web_request_aborted", "The web request was aborted.");
73
+ }
74
+ return await new Promise((resolve, reject) => {
75
+ let settled = false;
76
+ let timedOut = false;
77
+ const requestOptions = {
78
+ protocol: params.url.protocol,
79
+ hostname: params.url.hostname.replace(/^\[|\]$/gu, ""),
80
+ port: params.url.port || undefined,
81
+ path: `${params.url.pathname}${params.url.search}`,
82
+ method: "GET",
83
+ headers: params.headers,
84
+ lookup: buildPinnedLookup(params.address),
85
+ agent: false,
86
+ maxHeaderSize: PUBLIC_HTTP_LIMITS.responseHeaderBytes,
87
+ };
88
+ const requestFunction = params.url.protocol === "https:" ? requestHttps : requestHttp;
89
+ const request = requestFunction(requestOptions, async (response) => {
90
+ try {
91
+ const declaredLength = contentLength(response.headers);
92
+ const body = await readBoundedBody(response, params.maxBytes);
93
+ if (settled)
94
+ return;
95
+ settled = true;
96
+ resolve(Object.freeze({
97
+ status: response.statusCode ?? 0,
98
+ headers: response.headers,
99
+ body: body.body,
100
+ bytesRead: body.body.byteLength,
101
+ partialContent: body.partialContent ||
102
+ (declaredLength !== undefined &&
103
+ declaredLength > params.maxBytes),
104
+ }));
105
+ }
106
+ catch (error) {
107
+ if (settled)
108
+ return;
109
+ settled = true;
110
+ reject(error);
111
+ }
112
+ });
113
+ const timeout = setTimeout(() => {
114
+ timedOut = true;
115
+ request.destroy(new PublicHttpError("web_request_timed_out", "The upstream web request timed out."));
116
+ }, params.timeoutMs);
117
+ timeout.unref?.();
118
+ const onAbort = () => request.destroy(new PublicHttpError("web_request_aborted", "The web request was aborted."));
119
+ params.abortSignal?.addEventListener("abort", onAbort, { once: true });
120
+ request.once("error", (error) => {
121
+ if (settled)
122
+ return;
123
+ settled = true;
124
+ if (isPublicHttpError(error)) {
125
+ reject(error);
126
+ }
127
+ else if (timedOut) {
128
+ reject(new PublicHttpError("web_request_timed_out", "The upstream web request timed out."));
129
+ }
130
+ else {
131
+ reject(new PublicHttpError("web_response_invalid", "The upstream web request failed."));
132
+ }
133
+ });
134
+ request.once("close", () => {
135
+ clearTimeout(timeout);
136
+ params.abortSignal?.removeEventListener("abort", onAbort);
137
+ });
138
+ request.end();
139
+ });
140
+ };
@@ -17,7 +17,7 @@ Dependencies flow in one direction:
17
17
 
18
18
  Controllers and components communicate through injected callbacks or values. They must not reach back into `app.js`; services must not depend on controllers or presentation code.
19
19
 
20
- `workspace-shell.js` is the single owner of workspace navigation. It owns the active Chat or Config workspace, responsive Conversations visibility, focus restoration, Escape handling, backdrop state, and related ARIA attributes. `conversation-sidebar-layout.js` resolves the sidebar presentation policy; `operations-section.js` owns the internal Runtime, Logs, and Health tabs within Configuration. These components must not own session data, request state, or Runtime transport.
20
+ `workspace-shell.js` is the single owner of workspace navigation. It owns the active Home, Chat, Schedules or Config workspace, responsive Conversations visibility, focus restoration, Escape handling, backdrop state, and related ARIA attributes. `conversation-sidebar-layout.js` resolves the sidebar presentation policy; `operations-section.js` owns the internal Runtime, Logs, and Health tabs within Configuration. These components must not own session data, request state, or Runtime transport.
21
21
 
22
22
  `conversation-activity.js` owns only request-scoped activity presentation. `realtime-event-controller.js` preserves sequence authority, associates events and progress with their exact `requestId`, and injects those values into the conversation view. `realtime-transport.js` only parses and transports frames; it does not reduce application state.
23
23
 
@@ -25,7 +25,28 @@ Controllers and components communicate through injected callbacks or values. The
25
25
 
26
26
  `composer-plan.js` presents the current user turn's Planner plan in a collapsed-by-default drawer above the composer. `composer-plan-model.js` selects request-linked progress from the current turn, including restored failed requests that have only a persisted user message; a new user turn hides earlier plans. Disclosure identity follows the selected request, so steering preserves expansion and list scroll; session resets clear the drawer. `task-progress.js` reduces structured plan events by request: full snapshots replace the baseline, later item changes are retained across overlapping replay, and completion counters never imply request or Reviewer success. Live events and stored replay use this same projection. Historical per-response progress remains available in Activity.
27
27
 
28
- Activity counts tool invocations from `tool.started` entries and their recorded multiplicities before timeline display grouping. Completion, payload, and approval events remain visible but do not add tool invocations; terminal-only history does not invent missing starts. Failure-event counts retain their existing meaning.
28
+ Activity counts tool invocations from `tool.started` entries and their recorded multiplicities before timeline display grouping. Completion, payload, and approval events contribute to action details but do not add tool invocations; terminal-only history does not invent missing starts. Failure-event counts retain their existing meaning.
29
+
30
+ Tool activity is presented as one evolving action per `(requestId, executionId)`.
31
+ `tool-activity-event.js` retains only bounded display fields; `tool-activity-model.js`
32
+ combines payload, approval, execution, and outcome events without guessing from
33
+ tool names or event adjacency. `conversation-tools.js` renders compact disclosures
34
+ inside the executing agent's card, preserving expansion and scroll across updates.
35
+ The canonical role call supplies `executorRole` and `roleCallId`; explicit identity
36
+ takes precedence over the currently active role, including late completions.
37
+ Older events use the recorded role-stage association when available. Actions
38
+ without recorded ownership appear in an explicitly unattributed card.
39
+ Prepared input is distinguished from input sent to an executed tool. Source
40
+ truncation and preview clipping remain separate, and an absent outcome never
41
+ implies success. Existing uncorrelated history supplies independent outcome rows;
42
+ unpaired legacy progress stays in the diagnostic timeline. Live and stored events
43
+ use the same projection. Raw lifecycle events remain stored for replay and counts.
44
+
45
+ Plugins may declare `eventPresentation.resultMetadata` to select bounded previews
46
+ or scalar facts from existing tool results. This projection is evaluated only at
47
+ the completion-event boundary: tool output, canonical evidence and model context
48
+ are unchanged. The Web UI does not fetch a file or memory record again to recreate
49
+ historical evidence. Passive Runtime memory remains outside tool activity.
29
50
 
30
51
  Web sources appear in a separate Activity section alongside role cards and the event timeline. `web-source-event.js` projects only successful `web_search` and `web_fetch` completions; `web-sources.js` validates bounded plugin receipts and groups them by recorded call. `conversation-sources.js` renders links and retrieval/presentation states without interpreting answer text. Source-bearing events retain their own identity before display grouping, and stored session events use the same projection as live events. Session switching clears them with the existing Activity state.
31
52
 
@@ -33,10 +54,10 @@ The optional `meta.webSources` version 1 receipt describes the final bounded **t
33
54
 
34
55
  `conversation-session-controller.js` is the single owner of the active conversation view lifecycle: normalized message identity, session switching, stored-message hydration, request-event replay, read state, active assistant placeholders, and session/request realtime subscriptions. `chat-request-controller.js` owns starting one chat request, while `composer-submit-controller.js` owns the composer's selected action and busy/error lifecycle. `tool-approval-controller.js` owns approval state and transport; `tool-approval-card.js` owns its DOM presentation.
35
56
 
36
- The primary information architecture is chat-first:
57
+ The primary information architecture starts at Home:
37
58
 
38
59
  - the navigation rail is persistent;
39
- - Chat and Config are mutually exclusive workspaces;
60
+ - Home, Chat, Schedules and Config are mutually exclusive workspaces;
40
61
  - Conversations is docked beside Chat from 1260 CSS pixels upward, with its own column and no modal backdrop;
41
62
  - below that width, Conversations is the only transient sheet and overlays the chat canvas;
42
63
  - Configuration always hides Conversations and uses the full content canvas;
@@ -47,6 +68,18 @@ The primary information architecture is chat-first:
47
68
 
48
69
  Panel resizing and persisted panel widths are intentionally not part of this architecture. Crossing the sidebar breakpoint closes transient drawer state and restores focus when its previous target becomes hidden.
49
70
 
71
+ `dashboard-feature.js` composes Home presentation and data refresh. Its controller reuses the canonical conversation list and bounded scheduler run history, refreshing while Home is visible. Recent conversations retain all unread conversations and fill remaining slots with recently updated read conversations. Run activity follows the scheduler's scheduled-time ordering. Loading, failures, and empty states remain distinct.
72
+
73
+ `composer-workspace-controller.js` moves the existing composer DOM between Home and Chat and isolates their draft text and attachments. `composer-surface-controller.js` routes input, rendering and attachment actions to the active surface. Both surfaces use the same attachment and submission controllers; background Chat queue work writes to its own input surface. Home submission adopts its draft into a new conversation before invoking the ordinary Chat request controller. Home navigation alone never resets or reads the active conversation. `conversation-read-state-controller.js` rechecks visible Chat, environment, session and view revision before marking persisted assistant messages read.
74
+
75
+ Dashboard Job suggestions are inert data in `dashboard-job-templates.js`. They open the ordinary schedule form with editable defaults, a selected model, device time zone and a new dedicated conversation target. Only explicit Save creates state. `schedule-job-creation.ts` adapts this Web-only target into an owner-created conversation and the existing scheduler contract; it never invokes the model. Existing-conversation creation remains supported. `configuration-feature.js` owns the composition of Configuration and its memory controls. `app-bootstrap.js` owns startup ordering, environment restoration, initial loading and Home activation.
76
+
77
+ Read tracking belongs only to the native Web UI backend. `session-read-state/service.ts` reads canonical session snapshots and projects unread assistant replies; `store.ts` persists the UI cursors in an environment-specific sidecar under `runtimeDir/web-ui/read-state/`. Runtime session files, model context and Runtime contracts remain unchanged. A persisted initialization timestamp treats existing history as read and tracks later replies, including newly created Job conversations. Read acknowledgements resolve only the displayed persisted assistant message or its exact completed request ID. Cursors advance monotonically and survive server restarts; invalid boundaries never acknowledge unseen replies. Browser consumers retain newer read revisions when older responses arrive late.
78
+
79
+ The native conversation list uses the existing `SessionService` disk reader and canonical client-visible projections once per refresh. It avoids offset pagination over changing conversation order and avoids sending all request-event histories through the managed Runtime RPC. Only Web UI read-state sidecars are written by this projection. Clearing messages keeps a fresh read revision so subsequent unread replies can replace the previous read receipt.
80
+
81
+ Read-state persistence is an optional Web UI projection. `session-read-state/availability.ts` isolates sidecar failures from listing, loading, clearing and deleting conversations. A failure returns `readStateStatus: "unavailable"` and unknown counts, preserves the sidecar for diagnosis, and leaves read acknowledgements unsuccessful. The browser keeps the last known receipt, labels unavailable tracking explicitly and resumes normal counts after a healthy list refresh. Canonical session and attachment failures remain errors. Workspace visibility is committed before change callbacks attempt to acknowledge visible messages, including drawer closure and responsive layout changes.
82
+
50
83
  ## Styles
51
84
 
52
85
  `styles.css` is the ordered manifest. The modules under `styles/` own:
@@ -63,3 +96,32 @@ Keep responsive overrides last and avoid moving declarations between modules wit
63
96
  ## Contract boundary
64
97
 
65
98
  Visual components may format or group events, but they never accept transport frames or construct Runtime API payloads. Realtime frame parsing belongs to `realtime-transport.js`; request sequence and terminal-state reduction belong to `realtime-event-controller.js`; endpoint construction and HTTP payload serialization belong to `runtime-web-client.js` and its feature request modules; and feature controllers own when those operations occur. Config remains explicit-save; presentation changes must never introduce autosave.
99
+
100
+
101
+ ## Core schedules
102
+
103
+ `schedules-feature.js` composes the scheduler browser feature from its controller,
104
+ transport requests and presentation. `schedules-controller.js` owns loading and
105
+ management actions scoped to the selected environment, guards stale reads, and
106
+ refreshes only while the workspace is active and no editor or mutation is pending.
107
+ The full Schedules workspace shares the shell navigation and discard guards;
108
+ its editor uses an explicit save and a saved model/mode with Full tool access.
109
+ Unchanged timing fields are omitted from edits, preserving the original timer or
110
+ interval anchor when only a title, prompt or model changes.
111
+
112
+ `workspace-state.js` owns the single page-level loading, empty, missing or failed
113
+ read presentation before any schedules are available. Loaded jobs and unsaved
114
+ editors remain visible if a later request fails. `schedule-errors.js` maps service
115
+ error reasons to display text without changing the management or domain contract.
116
+ The schedule workspace owns its full-width alignment; it does not inherit the
117
+ configuration page's centered child-width caps.
118
+
119
+ `conversation-schedule.js` presents the persisted invocation as a compact Job/Run
120
+ reference. Its prompt disclosure reads that canonical message's exact historical
121
+ content; it does not fetch the current Job to reconstruct an earlier request.
122
+ The normal assistant reply remains separate. `schedule-realtime.js` admits only
123
+ `schedule.triggered` events with exact environment, session, request, message and
124
+ run identity before activating the ordinary realtime request lifecycle. Duplicate
125
+ trigger delivery cannot add another user message or reactivate a completed run.
126
+ The scheduler page and chat card are presentation-only consumers; the runtime
127
+ scheduler remains the sole owner of Job state and dispatch decisions.
@@ -0,0 +1,53 @@
1
+ import { textOf } from "./lib/text-format.js";
2
+
3
+ export async function bootstrapWebApp({
4
+ state,
5
+ dom,
6
+ preferences,
7
+ shell,
8
+ homeComposer,
9
+ dashboard,
10
+ schedules,
11
+ selection,
12
+ client,
13
+ bindables,
14
+ bindEvents,
15
+ renderComposer,
16
+ renderMessages,
17
+ operations,
18
+ configuration,
19
+ realtime,
20
+ restoreLastSession,
21
+ }) {
22
+ selection.loadPreferences();
23
+ shell.load();
24
+ homeComposer.setWorkspace(shell.activeWorkspace());
25
+ dashboard.setActive(true);
26
+ for (const control of [shell, ...bindables]) control.bind();
27
+ bindEvents();
28
+ renderComposer();
29
+ selection.renderPermissionMode();
30
+ renderMessages();
31
+ state.config = await client.loadWebConfig();
32
+ schedules.refreshAvailability();
33
+ selection.renderEnvironmentOptions();
34
+ const options = selection.environmentOptions();
35
+ const saved = preferences.environmentId();
36
+ const fallback =
37
+ textOf(state.config.defaultEnvironmentId).trim() || options[0]?.value || "";
38
+ const hasSavedEnvironment = options.some((option) => option.value === saved);
39
+ dom.environmentSelect.value = hasSavedEnvironment ? saved : fallback;
40
+ preferences.saveEnvironmentId(dom.environmentSelect.value);
41
+ homeComposer.environmentChanged();
42
+ selection.renderAgentPicker();
43
+ realtime.connect();
44
+ await Promise.allSettled([
45
+ selection.loadModels(),
46
+ selection.loadAgentMode(),
47
+ operations.loadRuntimeStatus(),
48
+ operations.loadSystemHealth(),
49
+ configuration.load(),
50
+ ]);
51
+ await restoreLastSession();
52
+ dashboard.setReady();
53
+ }
@@ -0,0 +1,80 @@
1
+ export function findAppDom(documentRoot = document) {
2
+ return {
3
+ app: documentRoot.getElementById("app"),
4
+ homeWorkspaceButton: documentRoot.getElementById("homeWorkspaceButton"),
5
+ homeWorkspacePanel: documentRoot.getElementById("homeWorkspacePanel"),
6
+ homeDashboardRoot: documentRoot.getElementById("homeDashboardRoot"),
7
+ chatWorkspaceButton: documentRoot.getElementById("chatWorkspaceButton"),
8
+ schedulesWorkspaceButton: documentRoot.getElementById(
9
+ "schedulesWorkspaceButton",
10
+ ),
11
+ schedulesWorkspacePanel: documentRoot.getElementById(
12
+ "schedulesWorkspacePanel",
13
+ ),
14
+ closeSchedulesWorkspaceButton: documentRoot.getElementById(
15
+ "closeSchedulesWorkspaceButton",
16
+ ),
17
+ schedulesRoot: documentRoot.getElementById("schedulesRoot"),
18
+ configWorkspaceButton: documentRoot.getElementById("configWorkspaceButton"),
19
+ chatPanel: documentRoot.querySelector(".chat-panel"),
20
+ sessionsPanel: documentRoot.querySelector(".sessions-panel"),
21
+ configWorkspacePanel: documentRoot.getElementById("configWorkspacePanel"),
22
+ closeConfigWorkspaceButton: documentRoot.getElementById(
23
+ "closeConfigWorkspaceButton",
24
+ ),
25
+ connectionLabel: documentRoot.getElementById("connectionLabel"),
26
+ environmentSelect: documentRoot.getElementById("environmentSelect"),
27
+ agentPickerButton: documentRoot.getElementById("agentPickerButton"),
28
+ agentPickerMenu: documentRoot.getElementById("agentPickerMenu"),
29
+ newSessionButton: documentRoot.getElementById("newSessionButton"),
30
+ refreshSessionsButton: documentRoot.getElementById("refreshSessionsButton"),
31
+ closeSessionsButton: documentRoot.getElementById("closeSessionsButton"),
32
+ sessionsToggleButton: documentRoot.getElementById("sessionsToggleButton"),
33
+ sessionSearchInput: documentRoot.getElementById("sessionSearchInput"),
34
+ sessionsCount: documentRoot.getElementById("sessionsCount"),
35
+ sessionsList: documentRoot.getElementById("sessionsList"),
36
+ sessionTitle: documentRoot.getElementById("sessionTitle"),
37
+ agentModeButton: documentRoot.getElementById("agentModeButton"),
38
+ agentModeMenu: documentRoot.getElementById("agentModeMenu"),
39
+ permissionModeButton: documentRoot.getElementById("permissionModeButton"),
40
+ permissionModeMenu: documentRoot.getElementById("permissionModeMenu"),
41
+ modelSelect: documentRoot.getElementById("modelSelect"),
42
+ modelSelectButton: documentRoot.getElementById("modelSelectButton"),
43
+ modelSelectValue: documentRoot.getElementById("modelSelectValue"),
44
+ modelSelectMenu: documentRoot.getElementById("modelSelectMenu"),
45
+ messagesList: documentRoot.getElementById("messagesList"),
46
+ runtimeSetupGuide: documentRoot.getElementById("runtimeSetupGuide"),
47
+ messageStatusRegion: documentRoot.getElementById("messageStatusRegion"),
48
+ jumpToLatestButton: documentRoot.getElementById("jumpToLatestButton"),
49
+ composerForm: documentRoot.getElementById("composerForm"),
50
+ attachmentButton: documentRoot.getElementById("attachmentButton"),
51
+ attachmentInput: documentRoot.getElementById("attachmentInput"),
52
+ attachmentPreview: documentRoot.getElementById("attachmentPreview"),
53
+ composerInput: documentRoot.getElementById("composerInput"),
54
+ composerContextWindow: documentRoot.getElementById("composerContextWindow"),
55
+ composerPlan: documentRoot.getElementById("composerPlan"),
56
+ composerSubmitControl: documentRoot.getElementById("composerSubmitControl"),
57
+ sendButton: documentRoot.getElementById("sendButton"),
58
+ sendButtonLabel: documentRoot.getElementById("sendButtonLabel"),
59
+ sendNextMenuButton: documentRoot.getElementById("sendNextMenuButton"),
60
+ sendNextMenu: documentRoot.getElementById("sendNextMenu"),
61
+ sendNextButton: documentRoot.getElementById("sendNextButton"),
62
+ refreshRuntimeButton: documentRoot.getElementById("refreshRuntimeButton"),
63
+ runtimeStatus: documentRoot.getElementById("runtimeStatus"),
64
+ refreshLogsButton: documentRoot.getElementById("refreshLogsButton"),
65
+ runtimeLogs: documentRoot.getElementById("runtimeLogs"),
66
+ refreshHealthButton: documentRoot.getElementById("refreshHealthButton"),
67
+ healthStatus: documentRoot.getElementById("healthStatus"),
68
+ refreshConfigButton: documentRoot.getElementById("refreshConfigButton"),
69
+ configStatus: documentRoot.getElementById("configStatus"),
70
+ configDashboard: documentRoot.getElementById("configDashboard"),
71
+ panelBackdrop: documentRoot.getElementById("panelBackdrop"),
72
+ toastRegion: documentRoot.getElementById("toastRegion"),
73
+ operationsTabButtons: [
74
+ ...documentRoot.querySelectorAll(".operations-tab-button"),
75
+ ],
76
+ operationsTabPages: [
77
+ ...documentRoot.querySelectorAll(".operations-tab-page"),
78
+ ],
79
+ };
80
+ }