@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
@@ -1,3 +1,4 @@
1
+ import { createScheduleRealtimeController } from "./schedule-realtime.js";
1
2
  import { isMatchingActiveRequest } from "../ui-behavior.js";
2
3
  import {
3
4
  eventKeyFor,
@@ -10,6 +11,8 @@ import { textOf } from "../lib/text-format.js";
10
11
  import { normalizeRealtimeMessage } from "../lib/realtime-message.js";
11
12
  import { reduceTaskProgress } from "../lib/task-progress.js";
12
13
  import { projectWebSourceEvent } from "../lib/web-source-event.js";
14
+ import { projectToolActivityEvent } from "../lib/tool-activity-event.js";
15
+ import { canReplaceContextWindowEvidence } from "../lib/context-window-snapshot-order.js";
13
16
 
14
17
  export { normalizeRealtimeMessage } from "../lib/realtime-message.js";
15
18
  export { taskStatusClass } from "../lib/task-progress.js";
@@ -26,9 +29,16 @@ function hasRecordedOriginalEvent(events, requestId, eventSequence) {
26
29
  );
27
30
  }
28
31
 
29
- function canMergeUnsequencedActivity(previous, key, eventSequence, webSources) {
32
+ function canMergeUnsequencedActivity(
33
+ previous,
34
+ key,
35
+ eventSequence,
36
+ webSources,
37
+ toolActivity,
38
+ ) {
30
39
  if (eventSequence !== undefined) return false;
31
40
  if (webSources || previous?.webSources) return false;
41
+ if (toolActivity || previous?.toolActivity) return false;
32
42
  if (!previous?.key || previous.key !== key) return false;
33
43
  return !hasOriginalEventSequence(previous.eventSequence);
34
44
  }
@@ -45,6 +55,7 @@ export function createRealtimeEventController({
45
55
  normalizeChatMessage,
46
56
  renderMessages,
47
57
  renderContextWindow = () => {},
58
+ renderActivityStatus = () => {},
48
59
  scheduleMessageRender,
49
60
  scheduleThinkingRender,
50
61
  cancelScheduledMessageRender,
@@ -57,6 +68,19 @@ export function createRealtimeEventController({
57
68
  drainQueuedComposerMessage,
58
69
  loadSessions,
59
70
  }) {
71
+ const scheduleRealtime = createScheduleRealtimeController({
72
+ state,
73
+ selectedEnvironmentId,
74
+ addOrMergeMessage,
75
+ normalizeChatMessage,
76
+ activeAssistantForRequest,
77
+ renderMessages,
78
+ updateComposerSendState,
79
+ setMessageActivityStatus,
80
+ trackSeq,
81
+ loadSessions,
82
+ });
83
+
60
84
  function trackSeq(message) {
61
85
  if (message.requestId && typeof message.seqNo === "number") {
62
86
  state.lastSeqByRequest.set(message.requestId, message.seqNo);
@@ -81,6 +105,7 @@ export function createRealtimeEventController({
81
105
  providerUsage: null,
82
106
  pendingCompaction: null,
83
107
  lastCompaction: null,
108
+ lastCompactionEvent: null,
84
109
  };
85
110
  if (eventName === "context.window.snapshot") {
86
111
  const contextWindowTokens = Number(message.contextWindowTokens);
@@ -97,8 +122,11 @@ export function createRealtimeEventController({
97
122
  return;
98
123
  }
99
124
  const previous = current.snapshot;
125
+ if (!canReplaceContextWindowEvidence(previous, message)) return;
100
126
  const snapshot = {
101
127
  requestId,
128
+ eventSequence: message.eventSequence,
129
+ seqNo: message.seqNo,
102
130
  invocationId: textOf(message.invocationId),
103
131
  modelStep: textOf(message.modelStep),
104
132
  profileId: textOf(message.profileId),
@@ -143,10 +171,14 @@ export function createRealtimeEventController({
143
171
  return true;
144
172
  }
145
173
  if (eventName === "context.window.provider_usage") {
174
+ if (!canReplaceContextWindowEvidence(current.providerUsage, message))
175
+ return;
146
176
  state.contextWindowByRequest.set(requestId, {
147
177
  ...current,
148
178
  requestId,
149
179
  providerUsage: {
180
+ eventSequence: message.eventSequence,
181
+ seqNo: message.seqNo,
150
182
  invocationId: textOf(message.invocationId),
151
183
  modelStep: textOf(message.modelStep),
152
184
  profileId: textOf(message.profileId),
@@ -159,9 +191,18 @@ export function createRealtimeEventController({
159
191
  return true;
160
192
  }
161
193
  if (eventName === "context.compaction.started") {
194
+ if (
195
+ !canReplaceContextWindowEvidence(current.lastCompactionEvent, message)
196
+ )
197
+ return;
198
+ if (!canReplaceContextWindowEvidence(current.snapshot, message)) return;
162
199
  state.contextWindowByRequest.set(requestId, {
163
200
  ...current,
164
201
  requestId,
202
+ lastCompactionEvent: {
203
+ eventSequence: message.eventSequence,
204
+ seqNo: message.seqNo,
205
+ },
165
206
  pendingCompaction: {
166
207
  beforePercent: Number.isFinite(
167
208
  Number(message.beforeUsedContextPercent),
@@ -173,11 +214,19 @@ export function createRealtimeEventController({
173
214
  return true;
174
215
  }
175
216
  if (eventName === "context.compaction.completed") {
217
+ if (
218
+ !canReplaceContextWindowEvidence(current.lastCompactionEvent, message)
219
+ )
220
+ return;
176
221
  const beforePercent = Number(message.beforeUsedContextPercent);
177
222
  const afterPercent = Number(message.afterUsedContextPercent);
178
223
  state.contextWindowByRequest.set(requestId, {
179
224
  ...current,
180
225
  requestId,
226
+ lastCompactionEvent: {
227
+ eventSequence: message.eventSequence,
228
+ seqNo: message.seqNo,
229
+ },
181
230
  pendingCompaction: null,
182
231
  lastCompaction:
183
232
  Number.isFinite(beforePercent) && Number.isFinite(afterPercent)
@@ -187,9 +236,17 @@ export function createRealtimeEventController({
187
236
  return true;
188
237
  }
189
238
  if (eventName === "context.compaction.failed") {
239
+ if (
240
+ !canReplaceContextWindowEvidence(current.lastCompactionEvent, message)
241
+ )
242
+ return;
190
243
  state.contextWindowByRequest.set(requestId, {
191
244
  ...current,
192
245
  requestId,
246
+ lastCompactionEvent: {
247
+ eventSequence: message.eventSequence,
248
+ seqNo: message.seqNo,
249
+ },
193
250
  pendingCompaction: null,
194
251
  });
195
252
  return true;
@@ -207,7 +264,10 @@ export function createRealtimeEventController({
207
264
  }
208
265
  updateTaskProgress(message);
209
266
  const contextWindowUpdated = updateContextWindow(message);
210
- if (contextWindowUpdated) renderContextWindow();
267
+ if (contextWindowUpdated) {
268
+ renderContextWindow();
269
+ renderActivityStatus();
270
+ }
211
271
  const eventName = textOf(message.name || message.rawType || message.type);
212
272
  if (isLowValueActivityEvent(message)) {
213
273
  trackSeq(message);
@@ -220,9 +280,16 @@ export function createRealtimeEventController({
220
280
  const phase = textOf(message.phase);
221
281
  const key = eventKeyFor({ ...message, requestId }, name, tone);
222
282
  const webSources = projectWebSourceEvent(message);
283
+ const toolActivity = projectToolActivityEvent(message);
223
284
  const lastEvent = state.events[state.events.length - 1];
224
285
  if (
225
- canMergeUnsequencedActivity(lastEvent, key, eventSequence, webSources)
286
+ canMergeUnsequencedActivity(
287
+ lastEvent,
288
+ key,
289
+ eventSequence,
290
+ webSources,
291
+ toolActivity,
292
+ )
226
293
  ) {
227
294
  lastEvent.count = (lastEvent.count || 1) + 1;
228
295
  lastEvent.summary = summary;
@@ -252,6 +319,7 @@ export function createRealtimeEventController({
252
319
  tool: textOf(message.tool),
253
320
  approvalId: textOf(message.approvalId),
254
321
  ...(webSources ? { webSources } : {}),
322
+ ...(toolActivity ? { toolActivity } : {}),
255
323
  payload: {
256
324
  plan: message.plan,
257
325
  item: message.item,
@@ -263,6 +331,7 @@ export function createRealtimeEventController({
263
331
  state.events.splice(0, state.events.length - 1_200);
264
332
  }
265
333
  trackSeq(message);
334
+ renderActivityStatus();
266
335
  scheduleMessageRender();
267
336
  if (eventName.startsWith("tool.approval.")) renderMessages();
268
337
  }
@@ -316,6 +385,7 @@ export function createRealtimeEventController({
316
385
  const message = normalizeRealtimeMessage(rawMessage);
317
386
  if (message.type === "steer_ack" && handleSteerAcknowledgement(message))
318
387
  return;
388
+ if (scheduleRealtime.handle(message)) return;
319
389
  if (!shouldAcceptMessage(message)) return;
320
390
  if (message.type === "chat_read_state") {
321
391
  applySessionReadState(message.sessionId, message.readState || message);
@@ -377,6 +447,7 @@ export function createRealtimeEventController({
377
447
  }
378
448
  cancelScheduledMessageRender();
379
449
  recordEvent(message);
450
+ renderActivityStatus();
380
451
  cancelScheduledThinkingRender();
381
452
  renderMessages();
382
453
  setMessageActivityStatus("ABot response completed.");
@@ -146,6 +146,7 @@ export interface RuntimeSelectionControllerDependencies {
146
146
  summary: string;
147
147
  }) => void;
148
148
  readonly onAttachmentPolicyChange: () => void;
149
+ readonly getComposerSessionId?: () => string;
149
150
  readonly onModelCatalogLoading?: () => void;
150
151
  readonly onModelCatalogLoaded?: (payload: Record<string, unknown>) => void;
151
152
  readonly onModelCatalogUnavailable?: (error: unknown) => void;
@@ -171,7 +172,7 @@ export declare function createRuntimeSelectionController(
171
172
  saveModelPreferences(): void;
172
173
  selectedEnvironmentId(): string;
173
174
  selectedModelPreference(): Record<string, unknown> | null;
174
- selectedModelSupportsImageInput(): boolean;
175
+ selectedModelSupportsImageInput(profileId?: string): boolean;
175
176
  setAgentMode(mode: AgentMode): Promise<boolean>;
176
177
  setToolPermissionMode(mode: ToolPermissionMode): void;
177
178
  };
@@ -52,6 +52,7 @@ export function createRuntimeSelectionController({
52
52
  client,
53
53
  recordControlEvent,
54
54
  onAttachmentPolicyChange,
55
+ getComposerSessionId = () => state.currentSessionId,
55
56
  onModelCatalogLoading = () => {},
56
57
  onModelCatalogLoaded = () => {},
57
58
  onModelCatalogUnavailable = () => {},
@@ -144,12 +145,12 @@ export function createRuntimeSelectionController({
144
145
 
145
146
  const selectedModelPreference = () =>
146
147
  dom.modelSelect.value ? { profileId: dom.modelSelect.value } : null;
147
- const selectedModelProfile = () =>
148
+ const selectedModelProfile = (profileId = dom.modelSelect.value) =>
148
149
  state.modelProfiles.find(
149
- (profile) => profile.id === textOf(dom.modelSelect.value),
150
+ (profile) => profile.id === textOf(profileId),
150
151
  ) || null;
151
- function selectedModelSupportsImageInput() {
152
- const profile = selectedModelProfile();
152
+ function selectedModelSupportsImageInput(profileId = dom.modelSelect.value) {
153
+ const profile = selectedModelProfile(profileId);
153
154
  if (typeof profile?.supportsImageInput === "boolean")
154
155
  return profile.supportsImageInput;
155
156
  const inputModalities = profile?.capabilities?.inputModalities;
@@ -176,7 +177,7 @@ export function createRuntimeSelectionController({
176
177
  state.lastModelByEnvironment,
177
178
  );
178
179
  const preferredModel = () =>
179
- textOf(state.sessionModels[state.currentSessionId]) ||
180
+ textOf(state.sessionModels[getComposerSessionId()]) ||
180
181
  textOf(state.lastModelByEnvironment[selectedEnvironmentId()]);
181
182
 
182
183
  function applyModelSelection() {
@@ -201,8 +202,8 @@ export function createRuntimeSelectionController({
201
202
  const profileId = textOf(dom.modelSelect.value);
202
203
  if (!profileId) return;
203
204
  state.lastModelByEnvironment[selectedEnvironmentId()] = profileId;
204
- if (state.currentSessionId)
205
- state.sessionModels[state.currentSessionId] = profileId;
205
+ if (getComposerSessionId())
206
+ state.sessionModels[getComposerSessionId()] = profileId;
206
207
  saveModelPreferences();
207
208
  }
208
209
 
@@ -212,8 +213,8 @@ export function createRuntimeSelectionController({
212
213
  };
213
214
  const currentToolPermissionMode = () =>
214
215
  normalizeToolPermissionMode(
215
- state.currentSessionId
216
- ? sessionModeFor(state.currentSessionId).toolPermissionMode
216
+ getComposerSessionId()
217
+ ? sessionModeFor(getComposerSessionId()).toolPermissionMode
217
218
  : undefined,
218
219
  );
219
220
 
@@ -224,13 +225,13 @@ export function createRuntimeSelectionController({
224
225
  }
225
226
 
226
227
  function setToolPermissionMode(mode) {
227
- if (!state.currentSessionId) return;
228
+ if (!getComposerSessionId()) return;
228
229
  const normalized = normalizeToolPermissionMode(mode);
229
230
  if (normalized === "full_access")
230
- delete state.sessionModes[state.currentSessionId];
231
+ delete state.sessionModes[getComposerSessionId()];
231
232
  else {
232
- state.sessionModes[state.currentSessionId] = {
233
- ...sessionModeFor(state.currentSessionId),
233
+ state.sessionModes[getComposerSessionId()] = {
234
+ ...sessionModeFor(getComposerSessionId()),
234
235
  toolPermissionMode: normalized,
235
236
  savedAt: Date.now(),
236
237
  };
@@ -246,7 +247,7 @@ export function createRuntimeSelectionController({
246
247
  const meta = permissionMeta(mode);
247
248
  dom.permissionModeButton.innerHTML = `<span class="permission-mode-label">${escapeHtml(meta.label)}</span>`;
248
249
  dom.permissionModeButton.title = meta.title;
249
- dom.permissionModeButton.disabled = !state.currentSessionId;
250
+ dom.permissionModeButton.disabled = !getComposerSessionId();
250
251
  dom.permissionModeButton.classList.toggle("full", mode === "full_access");
251
252
  dom.permissionModeButton.classList.toggle(
252
253
  "open",
@@ -0,0 +1,118 @@
1
+ import { normalizeScheduleReference } from "../lib/schedule-message.js";
2
+ import { textOf } from "../lib/text-format.js";
3
+
4
+ export function isScheduleTriggerForConversation(
5
+ message,
6
+ sessionId,
7
+ environmentId,
8
+ ) {
9
+ if (!sessionId || message.sessionId !== sessionId) return false;
10
+ return isScheduleTriggerInEnvironment(message, environmentId);
11
+ }
12
+
13
+ function isScheduleTriggerInEnvironment(message, environmentId) {
14
+ if (!textOf(message.sessionId)) return false;
15
+ if (textOf(message.environment || message.environmentId) !== environmentId)
16
+ return false;
17
+ if (!textOf(message.requestId) || !textOf(message.messageId)) return false;
18
+ return Boolean(normalizeScheduleReference(message.schedule));
19
+ }
20
+
21
+ export function createScheduleRealtimeController({
22
+ state,
23
+ selectedEnvironmentId,
24
+ addOrMergeMessage,
25
+ normalizeChatMessage,
26
+ activeAssistantForRequest,
27
+ renderMessages,
28
+ updateComposerSendState,
29
+ setMessageActivityStatus,
30
+ trackSeq,
31
+ loadSessions,
32
+ }) {
33
+ const scheduledRequests = new Map();
34
+
35
+ function hasRecordedTrigger(message) {
36
+ return (state.messages || []).some(
37
+ (item) => item.schedule?.runId === message.schedule.runId,
38
+ );
39
+ }
40
+
41
+ function hasDifferentActiveRequest(requestId) {
42
+ if (!state.activeRequestId) return false;
43
+ return state.activeRequestId !== requestId;
44
+ }
45
+
46
+ function isForegroundScheduledRequest(message) {
47
+ if (message.sessionId !== state.currentSessionId) return false;
48
+ return message.requestId === state.activeRequestId;
49
+ }
50
+
51
+ function scheduledTerminalScope(message) {
52
+ const tracked = scheduledRequests.get(message.requestId);
53
+ if (tracked) return tracked;
54
+ if (message.requestOrigin !== "schedule") return undefined;
55
+ const environmentId = textOf(message.environment || message.environmentId);
56
+ if (!environmentId.trim()) return undefined;
57
+ if (!textOf(message.requestId).trim()) return undefined;
58
+ if (!textOf(message.sessionId).trim()) return undefined;
59
+ return { sessionId: message.sessionId, environmentId };
60
+ }
61
+
62
+ function handleScheduledTerminal(message) {
63
+ if (message.type !== "completed" && message.type !== "failed") return false;
64
+ const scope = scheduledTerminalScope(message);
65
+ if (!scope) return message.requestOrigin === "schedule";
66
+ if (message.sessionId !== scope.sessionId) return true;
67
+ const environmentId =
68
+ textOf(message.environment || message.environmentId) ||
69
+ scope.environmentId;
70
+ if (environmentId !== scope.environmentId) return true;
71
+ scheduledRequests.delete(message.requestId);
72
+ if (environmentId !== selectedEnvironmentId()) return true;
73
+ if (message.sessionDeleted === true) return true;
74
+ if (isForegroundScheduledRequest(message)) return false;
75
+ void loadSessions();
76
+ return true;
77
+ }
78
+
79
+ function handle(message) {
80
+ if (handleScheduledTerminal(message)) return true;
81
+ if (message.type !== "event" || message.name !== "schedule.triggered")
82
+ return false;
83
+ if (!isScheduleTriggerInEnvironment(message, selectedEnvironmentId()))
84
+ return true;
85
+ if (message.sessionDeleted === true) return true;
86
+ scheduledRequests.set(message.requestId, {
87
+ sessionId: message.sessionId,
88
+ environmentId: selectedEnvironmentId(),
89
+ });
90
+ if (hasRecordedTrigger(message)) return true;
91
+ if (
92
+ !isScheduleTriggerForConversation(
93
+ message,
94
+ state.currentSessionId,
95
+ selectedEnvironmentId(),
96
+ )
97
+ )
98
+ return true;
99
+ if (hasDifferentActiveRequest(message.requestId)) return true;
100
+ const userMessage = normalizeChatMessage({
101
+ id: message.messageId,
102
+ role: "user",
103
+ requestId: message.requestId,
104
+ text: message.text,
105
+ createdAt: message.createdAt,
106
+ schedule: message.schedule,
107
+ });
108
+ addOrMergeMessage(userMessage);
109
+ state.activeRequestId = message.requestId;
110
+ activeAssistantForRequest(message.requestId);
111
+ trackSeq(message);
112
+ renderMessages();
113
+ updateComposerSendState();
114
+ setMessageActivityStatus("Scheduled task is running.", true);
115
+ return true;
116
+ }
117
+ return { handle };
118
+ }