@pellux/goodvibes-sdk 0.38.0 → 1.1.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 (559) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +4468 -916
  2. package/dist/daemon.d.ts +2 -0
  3. package/dist/daemon.d.ts.map +1 -1
  4. package/dist/daemon.js +4 -0
  5. package/dist/events/communication.d.ts +1 -1
  6. package/dist/events/surfaces.d.ts +25 -3
  7. package/dist/events/surfaces.d.ts.map +1 -1
  8. package/dist/events/surfaces.js +22 -1
  9. package/dist/events/workflows.d.ts +7 -6
  10. package/dist/events/workflows.d.ts.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/platform/agents/archetypes.d.ts.map +1 -1
  14. package/dist/platform/agents/archetypes.js +7 -0
  15. package/dist/platform/agents/index.d.ts +1 -0
  16. package/dist/platform/agents/index.d.ts.map +1 -1
  17. package/dist/platform/agents/index.js +1 -0
  18. package/dist/platform/agents/orchestrator-runner.d.ts +16 -3
  19. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  20. package/dist/platform/agents/orchestrator-runner.js +20 -6
  21. package/dist/platform/agents/orchestrator.d.ts +42 -10
  22. package/dist/platform/agents/orchestrator.d.ts.map +1 -1
  23. package/dist/platform/agents/orchestrator.js +68 -20
  24. package/dist/platform/agents/planner-decomposition-runner.d.ts +38 -0
  25. package/dist/platform/agents/planner-decomposition-runner.d.ts.map +1 -0
  26. package/dist/platform/agents/planner-decomposition-runner.js +113 -0
  27. package/dist/platform/agents/turn-knowledge-injection.d.ts +88 -3
  28. package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -1
  29. package/dist/platform/agents/turn-knowledge-injection.js +147 -30
  30. package/dist/platform/agents/worktree.d.ts +126 -8
  31. package/dist/platform/agents/worktree.d.ts.map +1 -1
  32. package/dist/platform/agents/worktree.js +240 -19
  33. package/dist/platform/agents/wrfc-controller.d.ts +24 -1
  34. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  35. package/dist/platform/agents/wrfc-controller.js +161 -35
  36. package/dist/platform/agents/wrfc-gate-runtime.d.ts +9 -0
  37. package/dist/platform/agents/wrfc-gate-runtime.d.ts.map +1 -1
  38. package/dist/platform/agents/wrfc-gate-runtime.js +7 -3
  39. package/dist/platform/agents/wrfc-gates.d.ts +1 -1
  40. package/dist/platform/agents/wrfc-gates.d.ts.map +1 -1
  41. package/dist/platform/agents/wrfc-gates.js +7 -1
  42. package/dist/platform/agents/wrfc-types.d.ts +23 -3
  43. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  44. package/dist/platform/automation/types.d.ts +9 -1
  45. package/dist/platform/automation/types.d.ts.map +1 -1
  46. package/dist/platform/calendar/calendar-api-shared.d.ts +25 -0
  47. package/dist/platform/calendar/calendar-api-shared.d.ts.map +1 -0
  48. package/dist/platform/calendar/calendar-api-shared.js +100 -0
  49. package/dist/platform/calendar/calendar-connector.d.ts +79 -0
  50. package/dist/platform/calendar/calendar-connector.d.ts.map +1 -0
  51. package/dist/platform/calendar/calendar-connector.js +155 -0
  52. package/dist/platform/calendar/google-calendar-api.d.ts +25 -0
  53. package/dist/platform/calendar/google-calendar-api.d.ts.map +1 -0
  54. package/dist/platform/calendar/google-calendar-api.js +89 -0
  55. package/dist/platform/calendar/http-fetch-adapter.d.ts +25 -0
  56. package/dist/platform/calendar/http-fetch-adapter.d.ts.map +1 -0
  57. package/dist/platform/calendar/http-fetch-adapter.js +25 -0
  58. package/dist/platform/calendar/ics-parser.d.ts +35 -0
  59. package/dist/platform/calendar/ics-parser.d.ts.map +1 -0
  60. package/dist/platform/calendar/ics-parser.js +236 -0
  61. package/dist/platform/calendar/index.d.ts +41 -0
  62. package/dist/platform/calendar/index.d.ts.map +1 -0
  63. package/dist/platform/calendar/index.js +49 -0
  64. package/dist/platform/calendar/merged-calendar-model.d.ts +67 -0
  65. package/dist/platform/calendar/merged-calendar-model.d.ts.map +1 -0
  66. package/dist/platform/calendar/merged-calendar-model.js +181 -0
  67. package/dist/platform/calendar/microsoft-graph-api.d.ts +25 -0
  68. package/dist/platform/calendar/microsoft-graph-api.d.ts.map +1 -0
  69. package/dist/platform/calendar/microsoft-graph-api.js +95 -0
  70. package/dist/platform/calendar/oauth-flow.d.ts +62 -0
  71. package/dist/platform/calendar/oauth-flow.d.ts.map +1 -0
  72. package/dist/platform/calendar/oauth-flow.js +305 -0
  73. package/dist/platform/calendar/oauth-providers.d.ts +43 -0
  74. package/dist/platform/calendar/oauth-providers.d.ts.map +1 -0
  75. package/dist/platform/calendar/oauth-providers.js +120 -0
  76. package/dist/platform/calendar/oauth-token-store.d.ts +72 -0
  77. package/dist/platform/calendar/oauth-token-store.d.ts.map +1 -0
  78. package/dist/platform/calendar/oauth-token-store.js +189 -0
  79. package/dist/platform/calendar/oauth-types.d.ts +274 -0
  80. package/dist/platform/calendar/oauth-types.d.ts.map +1 -0
  81. package/dist/platform/calendar/oauth-types.js +22 -0
  82. package/dist/platform/calendar/rrule.d.ts +39 -0
  83. package/dist/platform/calendar/rrule.d.ts.map +1 -0
  84. package/dist/platform/calendar/rrule.js +261 -0
  85. package/dist/platform/calendar/subscription-store.d.ts +118 -0
  86. package/dist/platform/calendar/subscription-store.d.ts.map +1 -0
  87. package/dist/platform/calendar/subscription-store.js +293 -0
  88. package/dist/platform/calendar/types.d.ts +170 -0
  89. package/dist/platform/calendar/types.d.ts.map +1 -0
  90. package/dist/platform/calendar/types.js +21 -0
  91. package/dist/platform/companion/companion-chat-attachments.d.ts +29 -0
  92. package/dist/platform/companion/companion-chat-attachments.d.ts.map +1 -0
  93. package/dist/platform/companion/companion-chat-attachments.js +121 -0
  94. package/dist/platform/companion/companion-chat-branching.d.ts +66 -0
  95. package/dist/platform/companion/companion-chat-branching.d.ts.map +1 -0
  96. package/dist/platform/companion/companion-chat-branching.js +142 -0
  97. package/dist/platform/companion/companion-chat-broker-bridge.d.ts +40 -0
  98. package/dist/platform/companion/companion-chat-broker-bridge.d.ts.map +1 -0
  99. package/dist/platform/companion/companion-chat-broker-bridge.js +14 -0
  100. package/dist/platform/companion/companion-chat-broker-sync.d.ts +38 -0
  101. package/dist/platform/companion/companion-chat-broker-sync.d.ts.map +1 -0
  102. package/dist/platform/companion/companion-chat-broker-sync.js +80 -0
  103. package/dist/platform/companion/companion-chat-gc.d.ts +63 -0
  104. package/dist/platform/companion/companion-chat-gc.d.ts.map +1 -0
  105. package/dist/platform/companion/companion-chat-gc.js +38 -0
  106. package/dist/platform/companion/companion-chat-manager.d.ts +91 -23
  107. package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
  108. package/dist/platform/companion/companion-chat-manager.js +195 -223
  109. package/dist/platform/companion/companion-chat-persistence.d.ts +9 -1
  110. package/dist/platform/companion/companion-chat-persistence.d.ts.map +1 -1
  111. package/dist/platform/companion/companion-chat-persistence.js +10 -2
  112. package/dist/platform/companion/companion-chat-routes.d.ts +2 -1
  113. package/dist/platform/companion/companion-chat-routes.d.ts.map +1 -1
  114. package/dist/platform/companion/companion-chat-routes.js +113 -4
  115. package/dist/platform/companion/companion-chat-turn-execution.d.ts +61 -0
  116. package/dist/platform/companion/companion-chat-turn-execution.d.ts.map +1 -0
  117. package/dist/platform/companion/companion-chat-turn-execution.js +107 -0
  118. package/dist/platform/companion/companion-chat-types.d.ts +67 -0
  119. package/dist/platform/companion/companion-chat-types.d.ts.map +1 -1
  120. package/dist/platform/config/credential-status.d.ts +28 -0
  121. package/dist/platform/config/credential-status.d.ts.map +1 -0
  122. package/dist/platform/config/credential-status.js +75 -0
  123. package/dist/platform/config/index.d.ts +25 -0
  124. package/dist/platform/config/index.d.ts.map +1 -1
  125. package/dist/platform/config/index.js +18 -0
  126. package/dist/platform/config/manager.d.ts +9 -0
  127. package/dist/platform/config/manager.d.ts.map +1 -1
  128. package/dist/platform/config/manager.js +21 -2
  129. package/dist/platform/config/migrations.d.ts +48 -0
  130. package/dist/platform/config/migrations.d.ts.map +1 -0
  131. package/dist/platform/config/migrations.js +54 -0
  132. package/dist/platform/config/schema-domain-core.d.ts +10 -1
  133. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  134. package/dist/platform/config/schema-domain-core.js +46 -3
  135. package/dist/platform/config/schema-domain-runtime.d.ts +8 -0
  136. package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
  137. package/dist/platform/config/schema-domain-runtime.js +32 -0
  138. package/dist/platform/config/schema-types.d.ts +21 -7
  139. package/dist/platform/config/schema-types.d.ts.map +1 -1
  140. package/dist/platform/config/schema.d.ts.map +1 -1
  141. package/dist/platform/config/schema.js +2 -0
  142. package/dist/platform/control-plane/approval-broker.d.ts +11 -0
  143. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  144. package/dist/platform/control-plane/approval-broker.js +17 -1
  145. package/dist/platform/control-plane/approval-hunk-apply.d.ts +77 -0
  146. package/dist/platform/control-plane/approval-hunk-apply.d.ts.map +1 -0
  147. package/dist/platform/control-plane/approval-hunk-apply.js +80 -0
  148. package/dist/platform/control-plane/gateway-disabled-response.d.ts +20 -0
  149. package/dist/platform/control-plane/gateway-disabled-response.d.ts.map +1 -0
  150. package/dist/platform/control-plane/gateway-disabled-response.js +24 -0
  151. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts +68 -0
  152. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts.map +1 -0
  153. package/dist/platform/control-plane/gateway-scope-enforcement.js +91 -0
  154. package/dist/platform/control-plane/gateway-utils.d.ts +17 -0
  155. package/dist/platform/control-plane/gateway-utils.d.ts.map +1 -1
  156. package/dist/platform/control-plane/gateway-utils.js +30 -0
  157. package/dist/platform/control-plane/gateway.d.ts +12 -2
  158. package/dist/platform/control-plane/gateway.d.ts.map +1 -1
  159. package/dist/platform/control-plane/gateway.js +27 -31
  160. package/dist/platform/control-plane/index.d.ts +8 -1
  161. package/dist/platform/control-plane/index.d.ts.map +1 -1
  162. package/dist/platform/control-plane/index.js +8 -0
  163. package/dist/platform/control-plane/invoke-input-validation.d.ts +56 -0
  164. package/dist/platform/control-plane/invoke-input-validation.d.ts.map +1 -0
  165. package/dist/platform/control-plane/invoke-input-validation.js +163 -0
  166. package/dist/platform/control-plane/method-catalog-admin.d.ts.map +1 -1
  167. package/dist/platform/control-plane/method-catalog-admin.js +12 -1
  168. package/dist/platform/control-plane/method-catalog-calendar.d.ts +16 -0
  169. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -1
  170. package/dist/platform/control-plane/method-catalog-calendar.js +21 -0
  171. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  172. package/dist/platform/control-plane/method-catalog-channels.js +32 -3
  173. package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
  174. package/dist/platform/control-plane/method-catalog-control-automation.js +19 -34
  175. package/dist/platform/control-plane/method-catalog-control-companion.d.ts +15 -0
  176. package/dist/platform/control-plane/method-catalog-control-companion.d.ts.map +1 -0
  177. package/dist/platform/control-plane/method-catalog-control-companion.js +176 -0
  178. package/dist/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
  179. package/dist/platform/control-plane/method-catalog-control-core.js +104 -122
  180. package/dist/platform/control-plane/method-catalog-control.d.ts.map +1 -1
  181. package/dist/platform/control-plane/method-catalog-control.js +4 -0
  182. package/dist/platform/control-plane/method-catalog-email.d.ts +17 -0
  183. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
  184. package/dist/platform/control-plane/method-catalog-email.js +21 -0
  185. package/dist/platform/control-plane/method-catalog-events.d.ts +28 -0
  186. package/dist/platform/control-plane/method-catalog-events.d.ts.map +1 -1
  187. package/dist/platform/control-plane/method-catalog-events.js +74 -1
  188. package/dist/platform/control-plane/method-catalog-fleet.d.ts +24 -0
  189. package/dist/platform/control-plane/method-catalog-fleet.d.ts.map +1 -0
  190. package/dist/platform/control-plane/method-catalog-fleet.js +65 -0
  191. package/dist/platform/control-plane/method-catalog-push.d.ts +30 -0
  192. package/dist/platform/control-plane/method-catalog-push.d.ts.map +1 -0
  193. package/dist/platform/control-plane/method-catalog-push.js +80 -0
  194. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts +84 -0
  195. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts.map +1 -0
  196. package/dist/platform/control-plane/method-catalog-route-reconcile.js +103 -0
  197. package/dist/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
  198. package/dist/platform/control-plane/method-catalog-runtime.js +83 -1
  199. package/dist/platform/control-plane/method-catalog-shared.d.ts +29 -0
  200. package/dist/platform/control-plane/method-catalog-shared.d.ts.map +1 -1
  201. package/dist/platform/control-plane/method-catalog.d.ts +9 -0
  202. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  203. package/dist/platform/control-plane/method-catalog.js +34 -3
  204. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts +8 -0
  205. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
  206. package/dist/platform/control-plane/operator-contract-schemas-admin.js +22 -1
  207. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts +18 -0
  208. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts.map +1 -0
  209. package/dist/platform/control-plane/operator-contract-schemas-fleet.js +182 -0
  210. package/dist/platform/control-plane/operator-contract-schemas-permissions.d.ts.map +1 -1
  211. package/dist/platform/control-plane/operator-contract-schemas-permissions.js +5 -0
  212. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts +37 -0
  213. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts.map +1 -1
  214. package/dist/platform/control-plane/operator-contract-schemas-runtime.js +100 -3
  215. package/dist/platform/control-plane/operator-contract-schemas.d.ts +1 -0
  216. package/dist/platform/control-plane/operator-contract-schemas.d.ts.map +1 -1
  217. package/dist/platform/control-plane/operator-contract-schemas.js +1 -0
  218. package/dist/platform/control-plane/operator-contract.d.ts.map +1 -1
  219. package/dist/platform/control-plane/operator-contract.js +8 -0
  220. package/dist/platform/control-plane/routes/checkpoints.d.ts +39 -0
  221. package/dist/platform/control-plane/routes/checkpoints.d.ts.map +1 -0
  222. package/dist/platform/control-plane/routes/checkpoints.js +166 -0
  223. package/dist/platform/control-plane/routes/fleet.d.ts +53 -0
  224. package/dist/platform/control-plane/routes/fleet.d.ts.map +1 -0
  225. package/dist/platform/control-plane/routes/fleet.js +153 -0
  226. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts +30 -0
  227. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts.map +1 -0
  228. package/dist/platform/control-plane/routes/gateway-verb-error.js +36 -0
  229. package/dist/platform/control-plane/routes/index.d.ts +0 -6
  230. package/dist/platform/control-plane/routes/index.d.ts.map +1 -1
  231. package/dist/platform/control-plane/routes/index.js +5 -5
  232. package/dist/platform/control-plane/routes/invocation-params.d.ts +23 -0
  233. package/dist/platform/control-plane/routes/invocation-params.d.ts.map +1 -0
  234. package/dist/platform/control-plane/routes/invocation-params.js +9 -0
  235. package/dist/platform/control-plane/routes/push.d.ts +26 -0
  236. package/dist/platform/control-plane/routes/push.d.ts.map +1 -0
  237. package/dist/platform/control-plane/routes/push.js +104 -0
  238. package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts +31 -0
  239. package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts.map +1 -0
  240. package/dist/platform/control-plane/routes/register-gateway-verb-groups.js +16 -0
  241. package/dist/platform/control-plane/routes/register-w3-s2.d.ts +26 -0
  242. package/dist/platform/control-plane/routes/register-w3-s2.d.ts.map +1 -0
  243. package/dist/platform/control-plane/routes/register-w3-s2.js +8 -0
  244. package/dist/platform/control-plane/routes/session-search.d.ts +37 -0
  245. package/dist/platform/control-plane/routes/session-search.d.ts.map +1 -0
  246. package/dist/platform/control-plane/routes/session-search.js +113 -0
  247. package/dist/platform/control-plane/session-broker-gc.d.ts +16 -0
  248. package/dist/platform/control-plane/session-broker-gc.d.ts.map +1 -1
  249. package/dist/platform/control-plane/session-broker-gc.js +23 -6
  250. package/dist/platform/control-plane/session-broker-helpers.d.ts +3 -3
  251. package/dist/platform/control-plane/session-broker-helpers.d.ts.map +1 -1
  252. package/dist/platform/control-plane/session-broker-inputs.d.ts +18 -0
  253. package/dist/platform/control-plane/session-broker-inputs.d.ts.map +1 -1
  254. package/dist/platform/control-plane/session-broker-inputs.js +34 -0
  255. package/dist/platform/control-plane/session-broker-sessions.d.ts +102 -3
  256. package/dist/platform/control-plane/session-broker-sessions.d.ts.map +1 -1
  257. package/dist/platform/control-plane/session-broker-sessions.js +179 -5
  258. package/dist/platform/control-plane/session-broker-state.d.ts +20 -1
  259. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  260. package/dist/platform/control-plane/session-broker-state.js +67 -5
  261. package/dist/platform/control-plane/session-broker.d.ts +51 -38
  262. package/dist/platform/control-plane/session-broker.d.ts.map +1 -1
  263. package/dist/platform/control-plane/session-broker.js +183 -75
  264. package/dist/platform/control-plane/session-store-importer.d.ts +57 -0
  265. package/dist/platform/control-plane/session-store-importer.d.ts.map +1 -0
  266. package/dist/platform/control-plane/session-store-importer.js +227 -0
  267. package/dist/platform/control-plane/session-types.d.ts +142 -7
  268. package/dist/platform/control-plane/session-types.d.ts.map +1 -1
  269. package/dist/platform/core/execution-plan.d.ts +43 -1
  270. package/dist/platform/core/execution-plan.d.ts.map +1 -1
  271. package/dist/platform/core/execution-plan.js +46 -10
  272. package/dist/platform/core/index.d.ts +1 -0
  273. package/dist/platform/core/index.d.ts.map +1 -1
  274. package/dist/platform/core/index.js +1 -0
  275. package/dist/platform/core/orchestrator-runtime.d.ts +23 -3
  276. package/dist/platform/core/orchestrator-runtime.d.ts.map +1 -1
  277. package/dist/platform/core/orchestrator-tool-runtime.d.ts +7 -0
  278. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  279. package/dist/platform/core/orchestrator-tool-runtime.js +10 -0
  280. package/dist/platform/core/orchestrator-turn-loop.d.ts +13 -6
  281. package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
  282. package/dist/platform/core/orchestrator-turn-loop.js +29 -22
  283. package/dist/platform/core/orchestrator.d.ts +16 -10
  284. package/dist/platform/core/orchestrator.d.ts.map +1 -1
  285. package/dist/platform/core/orchestrator.js +23 -8
  286. package/dist/platform/core/plan-decomposition.d.ts +196 -0
  287. package/dist/platform/core/plan-decomposition.d.ts.map +1 -0
  288. package/dist/platform/core/plan-decomposition.js +417 -0
  289. package/dist/platform/core/plan-proposal.d.ts +39 -0
  290. package/dist/platform/core/plan-proposal.d.ts.map +1 -1
  291. package/dist/platform/core/wrfc-routing.d.ts +1 -0
  292. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  293. package/dist/platform/core/wrfc-routing.js +51 -1
  294. package/dist/platform/daemon/boot.d.ts +69 -0
  295. package/dist/platform/daemon/boot.d.ts.map +1 -0
  296. package/dist/platform/daemon/boot.js +61 -0
  297. package/dist/platform/daemon/cli.js +2 -1
  298. package/dist/platform/daemon/control-plane.d.ts.map +1 -1
  299. package/dist/platform/daemon/control-plane.js +50 -1
  300. package/dist/platform/daemon/facade-composition.d.ts.map +1 -1
  301. package/dist/platform/daemon/facade-composition.js +6 -0
  302. package/dist/platform/daemon/facade.d.ts +15 -6
  303. package/dist/platform/daemon/facade.d.ts.map +1 -1
  304. package/dist/platform/daemon/facade.js +48 -43
  305. package/dist/platform/daemon/http/router-route-contexts.d.ts +1 -0
  306. package/dist/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
  307. package/dist/platform/daemon/http/router-route-contexts.js +1 -0
  308. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts +13 -0
  309. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts.map +1 -0
  310. package/dist/platform/daemon/http/router-session-broker-adapter.js +27 -0
  311. package/dist/platform/daemon/http/router.d.ts +2 -1
  312. package/dist/platform/daemon/http/router.d.ts.map +1 -1
  313. package/dist/platform/daemon/http/router.js +42 -40
  314. package/dist/platform/daemon/http/runtime-route-types.d.ts +42 -4
  315. package/dist/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
  316. package/dist/platform/daemon/http/webui-serving.d.ts +68 -0
  317. package/dist/platform/daemon/http/webui-serving.d.ts.map +1 -0
  318. package/dist/platform/daemon/http/webui-serving.js +230 -0
  319. package/dist/platform/daemon/index.d.ts +2 -0
  320. package/dist/platform/daemon/index.d.ts.map +1 -1
  321. package/dist/platform/daemon/index.js +1 -0
  322. package/dist/platform/daemon/service-manager.d.ts +16 -0
  323. package/dist/platform/daemon/service-manager.d.ts.map +1 -1
  324. package/dist/platform/daemon/service-manager.js +79 -15
  325. package/dist/platform/intelligence/tree-sitter/service.d.ts.map +1 -1
  326. package/dist/platform/intelligence/tree-sitter/service.js +16 -2
  327. package/dist/platform/knowledge/browser-history/readers.d.ts.map +1 -1
  328. package/dist/platform/knowledge/browser-history/readers.js +15 -5
  329. package/dist/platform/knowledge/knowledge-api.d.ts +1 -1
  330. package/dist/platform/knowledge/project-planning/service.d.ts +14 -1
  331. package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
  332. package/dist/platform/knowledge/project-planning/service.js +77 -0
  333. package/dist/platform/knowledge/project-planning/types.d.ts +32 -0
  334. package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
  335. package/dist/platform/orchestration/bookkeeping.d.ts +12 -0
  336. package/dist/platform/orchestration/bookkeeping.d.ts.map +1 -0
  337. package/dist/platform/orchestration/bookkeeping.js +91 -0
  338. package/dist/platform/orchestration/budget.d.ts +2 -2
  339. package/dist/platform/orchestration/cancellation.d.ts +2 -2
  340. package/dist/platform/orchestration/controller-compat.d.ts +16 -3
  341. package/dist/platform/orchestration/controller-compat.d.ts.map +1 -1
  342. package/dist/platform/orchestration/controller-compat.js +18 -4
  343. package/dist/platform/orchestration/dirty-guard.js +1 -1
  344. package/dist/platform/orchestration/engine.d.ts +26 -1
  345. package/dist/platform/orchestration/engine.d.ts.map +1 -1
  346. package/dist/platform/orchestration/engine.js +229 -25
  347. package/dist/platform/orchestration/index.d.ts +6 -4
  348. package/dist/platform/orchestration/index.d.ts.map +1 -1
  349. package/dist/platform/orchestration/index.js +3 -2
  350. package/dist/platform/orchestration/persistence.d.ts.map +1 -1
  351. package/dist/platform/orchestration/persistence.js +6 -3
  352. package/dist/platform/orchestration/phase-runner.d.ts +33 -6
  353. package/dist/platform/orchestration/phase-runner.d.ts.map +1 -1
  354. package/dist/platform/orchestration/phase-runner.js +98 -25
  355. package/dist/platform/orchestration/proposal-workstream.d.ts +56 -0
  356. package/dist/platform/orchestration/proposal-workstream.d.ts.map +1 -0
  357. package/dist/platform/orchestration/proposal-workstream.js +76 -0
  358. package/dist/platform/orchestration/scheduler.d.ts +20 -1
  359. package/dist/platform/orchestration/scheduler.d.ts.map +1 -1
  360. package/dist/platform/orchestration/scheduler.js +16 -0
  361. package/dist/platform/orchestration/types.d.ts +289 -4
  362. package/dist/platform/orchestration/types.d.ts.map +1 -1
  363. package/dist/platform/orchestration/types.js +32 -0
  364. package/dist/platform/orchestration/worktree-isolation.d.ts +33 -0
  365. package/dist/platform/orchestration/worktree-isolation.d.ts.map +1 -0
  366. package/dist/platform/orchestration/worktree-isolation.js +248 -0
  367. package/dist/platform/presentation/glyphs.d.ts +91 -0
  368. package/dist/platform/presentation/glyphs.d.ts.map +1 -0
  369. package/dist/platform/presentation/glyphs.js +93 -0
  370. package/dist/platform/presentation/index.d.ts +28 -0
  371. package/dist/platform/presentation/index.d.ts.map +1 -0
  372. package/dist/platform/presentation/index.js +27 -0
  373. package/dist/platform/presentation/thinking-phrases.d.ts +12 -0
  374. package/dist/platform/presentation/thinking-phrases.d.ts.map +1 -0
  375. package/dist/platform/presentation/thinking-phrases.js +32 -0
  376. package/dist/platform/presentation/tones.d.ts +121 -0
  377. package/dist/platform/presentation/tones.d.ts.map +1 -0
  378. package/dist/platform/presentation/tones.js +145 -0
  379. package/dist/platform/presentation/waiting-wording.d.ts +54 -0
  380. package/dist/platform/presentation/waiting-wording.d.ts.map +1 -0
  381. package/dist/platform/presentation/waiting-wording.js +51 -0
  382. package/dist/platform/providers/runtime-snapshot.d.ts.map +1 -1
  383. package/dist/platform/providers/runtime-snapshot.js +12 -2
  384. package/dist/platform/push/delivery.d.ts +48 -0
  385. package/dist/platform/push/delivery.d.ts.map +1 -0
  386. package/dist/platform/push/delivery.js +117 -0
  387. package/dist/platform/push/encryption.d.ts +41 -0
  388. package/dist/platform/push/encryption.d.ts.map +1 -0
  389. package/dist/platform/push/encryption.js +82 -0
  390. package/dist/platform/push/index.d.ts +17 -0
  391. package/dist/platform/push/index.d.ts.map +1 -0
  392. package/dist/platform/push/index.js +10 -0
  393. package/dist/platform/push/service.d.ts +75 -0
  394. package/dist/platform/push/service.d.ts.map +1 -0
  395. package/dist/platform/push/service.js +95 -0
  396. package/dist/platform/push/subscription-store.d.ts +50 -0
  397. package/dist/platform/push/subscription-store.d.ts.map +1 -0
  398. package/dist/platform/push/subscription-store.js +123 -0
  399. package/dist/platform/push/types.d.ts +68 -0
  400. package/dist/platform/push/types.d.ts.map +1 -0
  401. package/dist/platform/push/types.js +13 -0
  402. package/dist/platform/push/vapid.d.ts +54 -0
  403. package/dist/platform/push/vapid.d.ts.map +1 -0
  404. package/dist/platform/push/vapid.js +113 -0
  405. package/dist/platform/runtime/bootstrap-services.d.ts +62 -2
  406. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  407. package/dist/platform/runtime/bootstrap-services.js +217 -50
  408. package/dist/platform/runtime/daemon-version-compat.d.ts +39 -0
  409. package/dist/platform/runtime/daemon-version-compat.d.ts.map +1 -0
  410. package/dist/platform/runtime/daemon-version-compat.js +75 -0
  411. package/dist/platform/runtime/detached-daemon-runtime.d.ts +26 -0
  412. package/dist/platform/runtime/detached-daemon-runtime.d.ts.map +1 -0
  413. package/dist/platform/runtime/detached-daemon-runtime.js +49 -0
  414. package/dist/platform/runtime/emitters/workflows.d.ts +1 -1
  415. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  416. package/dist/platform/runtime/events/index.d.ts +13 -0
  417. package/dist/platform/runtime/events/index.d.ts.map +1 -1
  418. package/dist/platform/runtime/events/index.js +13 -0
  419. package/dist/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  420. package/dist/platform/runtime/feature-flags/flags.js +39 -1
  421. package/dist/platform/runtime/fleet/adapters/agent.d.ts +2 -2
  422. package/dist/platform/runtime/fleet/adapters/agent.d.ts.map +1 -1
  423. package/dist/platform/runtime/fleet/adapters/agent.js +4 -4
  424. package/dist/platform/runtime/fleet/adapters/automation.d.ts +1 -1
  425. package/dist/platform/runtime/fleet/adapters/automation.js +1 -1
  426. package/dist/platform/runtime/fleet/adapters/code-index.d.ts +1 -1
  427. package/dist/platform/runtime/fleet/adapters/code-index.js +1 -1
  428. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +40 -18
  429. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -1
  430. package/dist/platform/runtime/fleet/adapters/orchestration.js +138 -34
  431. package/dist/platform/runtime/fleet/adapters/schedule.d.ts +4 -4
  432. package/dist/platform/runtime/fleet/adapters/schedule.js +4 -4
  433. package/dist/platform/runtime/fleet/adapters/trigger.d.ts +3 -4
  434. package/dist/platform/runtime/fleet/adapters/trigger.d.ts.map +1 -1
  435. package/dist/platform/runtime/fleet/adapters/trigger.js +3 -4
  436. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +13 -0
  437. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -1
  438. package/dist/platform/runtime/fleet/adapters/wrfc.js +49 -2
  439. package/dist/platform/runtime/fleet/registry.d.ts +7 -7
  440. package/dist/platform/runtime/fleet/registry.d.ts.map +1 -1
  441. package/dist/platform/runtime/fleet/registry.js +41 -7
  442. package/dist/platform/runtime/fleet/types.d.ts +9 -9
  443. package/dist/platform/runtime/fleet/types.d.ts.map +1 -1
  444. package/dist/platform/runtime/memory-spine/client.d.ts +127 -0
  445. package/dist/platform/runtime/memory-spine/client.d.ts.map +1 -0
  446. package/dist/platform/runtime/memory-spine/client.js +113 -0
  447. package/dist/platform/runtime/memory-spine/index.d.ts +11 -0
  448. package/dist/platform/runtime/memory-spine/index.d.ts.map +1 -0
  449. package/dist/platform/runtime/memory-spine/index.js +10 -0
  450. package/dist/platform/runtime/operator-client.d.ts +20 -2
  451. package/dist/platform/runtime/operator-client.d.ts.map +1 -1
  452. package/dist/platform/runtime/operator-client.js +11 -1
  453. package/dist/platform/runtime/provider-accounts/registry.d.ts.map +1 -1
  454. package/dist/platform/runtime/provider-accounts/registry.js +11 -1
  455. package/dist/platform/runtime/services.d.ts +11 -9
  456. package/dist/platform/runtime/services.d.ts.map +1 -1
  457. package/dist/platform/runtime/services.js +24 -9
  458. package/dist/platform/runtime/session-spine/client.d.ts +234 -0
  459. package/dist/platform/runtime/session-spine/client.d.ts.map +1 -0
  460. package/dist/platform/runtime/session-spine/client.js +449 -0
  461. package/dist/platform/runtime/session-spine/index.d.ts +12 -0
  462. package/dist/platform/runtime/session-spine/index.d.ts.map +1 -0
  463. package/dist/platform/runtime/session-spine/index.js +11 -0
  464. package/dist/platform/runtime/session-spine/union-cache.d.ts +225 -0
  465. package/dist/platform/runtime/session-spine/union-cache.d.ts.map +1 -0
  466. package/dist/platform/runtime/session-spine/union-cache.js +333 -0
  467. package/dist/platform/runtime/shell-command-ops.d.ts +3 -1
  468. package/dist/platform/runtime/shell-command-ops.d.ts.map +1 -1
  469. package/dist/platform/runtime/transports/daemon-http-client-validators.d.ts.map +1 -1
  470. package/dist/platform/runtime/transports/daemon-http-client-validators.js +22 -0
  471. package/dist/platform/runtime/transports/daemon-http-client.d.ts.map +1 -1
  472. package/dist/platform/runtime/transports/daemon-http-client.js +25 -2
  473. package/dist/platform/runtime/transports/http-types.d.ts +9 -2
  474. package/dist/platform/runtime/transports/http-types.d.ts.map +1 -1
  475. package/dist/platform/state/canonical-memory.d.ts +95 -0
  476. package/dist/platform/state/canonical-memory.d.ts.map +1 -0
  477. package/dist/platform/state/canonical-memory.js +155 -0
  478. package/dist/platform/state/code-index-chunking.js +1 -1
  479. package/dist/platform/state/code-index-db.d.ts +1 -1
  480. package/dist/platform/state/code-index-reindex.d.ts +73 -0
  481. package/dist/platform/state/code-index-reindex.d.ts.map +1 -0
  482. package/dist/platform/state/code-index-reindex.js +156 -0
  483. package/dist/platform/state/code-index-store.d.ts.map +1 -1
  484. package/dist/platform/state/code-index-store.js +11 -3
  485. package/dist/platform/state/index.d.ts +8 -0
  486. package/dist/platform/state/index.d.ts.map +1 -1
  487. package/dist/platform/state/index.js +4 -0
  488. package/dist/platform/state/memory-recall-contract.d.ts +118 -0
  489. package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
  490. package/dist/platform/state/memory-recall-contract.js +170 -0
  491. package/dist/platform/state/memory-registry.d.ts +8 -0
  492. package/dist/platform/state/memory-registry.d.ts.map +1 -1
  493. package/dist/platform/state/memory-registry.js +10 -0
  494. package/dist/platform/state/memory-store.d.ts +2 -0
  495. package/dist/platform/state/memory-store.d.ts.map +1 -1
  496. package/dist/platform/state/memory-store.js +4 -0
  497. package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
  498. package/dist/platform/state/memory-vector-store.js +14 -3
  499. package/dist/platform/state/sqlite-store.d.ts +2 -0
  500. package/dist/platform/state/sqlite-store.d.ts.map +1 -1
  501. package/dist/platform/state/sqlite-store.js +4 -0
  502. package/dist/platform/state/sqlite-vec-loader.d.ts +1 -1
  503. package/dist/platform/state/sqlite-vec-loader.js +1 -1
  504. package/dist/platform/state/vibe-projection.d.ts +67 -0
  505. package/dist/platform/state/vibe-projection.d.ts.map +1 -0
  506. package/dist/platform/state/vibe-projection.js +115 -0
  507. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  508. package/dist/platform/tools/agent/index.js +8 -0
  509. package/dist/platform/tools/agent/manager.d.ts +22 -10
  510. package/dist/platform/tools/agent/manager.d.ts.map +1 -1
  511. package/dist/platform/tools/agent/manager.js +13 -7
  512. package/dist/platform/tools/agent/schema.d.ts +26 -0
  513. package/dist/platform/tools/agent/schema.d.ts.map +1 -1
  514. package/dist/platform/tools/agent/schema.js +2 -2
  515. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +13 -0
  516. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
  517. package/dist/platform/tools/agent/wrfc-batch-policy.js +60 -0
  518. package/dist/platform/tools/exec/runtime.d.ts +10 -0
  519. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  520. package/dist/platform/tools/exec/runtime.js +27 -10
  521. package/dist/platform/tools/exec/schema.d.ts +2 -2
  522. package/dist/platform/tools/exec/schema.d.ts.map +1 -1
  523. package/dist/platform/tools/exec/schema.js +2 -1
  524. package/dist/platform/tools/fetch/runtime.d.ts +1 -1
  525. package/dist/platform/tools/index.d.ts +2 -0
  526. package/dist/platform/tools/index.d.ts.map +1 -1
  527. package/dist/platform/tools/index.js +2 -0
  528. package/dist/platform/tools/registry.d.ts +1 -1
  529. package/dist/platform/tools/registry.js +1 -1
  530. package/dist/platform/tools/state/index.d.ts +9 -0
  531. package/dist/platform/tools/state/index.d.ts.map +1 -1
  532. package/dist/platform/tools/state/index.js +60 -3
  533. package/dist/platform/types/foundation-contract.d.ts +1 -1
  534. package/dist/platform/types/foundation-contract.d.ts.map +1 -1
  535. package/dist/platform/types/index.d.ts +1 -1
  536. package/dist/platform/types/index.d.ts.map +1 -1
  537. package/dist/platform/types/tools.d.ts +1 -1
  538. package/dist/platform/utils/request-body.d.ts.map +1 -1
  539. package/dist/platform/utils/request-body.js +50 -5
  540. package/dist/platform/version.js +1 -1
  541. package/package.json +25 -9
  542. package/dist/platform/control-plane/routes/automation.d.ts +0 -3
  543. package/dist/platform/control-plane/routes/automation.d.ts.map +0 -1
  544. package/dist/platform/control-plane/routes/automation.js +0 -63
  545. package/dist/platform/control-plane/routes/context.d.ts +0 -2
  546. package/dist/platform/control-plane/routes/context.d.ts.map +0 -1
  547. package/dist/platform/control-plane/routes/context.js +0 -1
  548. package/dist/platform/control-plane/routes/operator.d.ts +0 -8
  549. package/dist/platform/control-plane/routes/operator.d.ts.map +0 -1
  550. package/dist/platform/control-plane/routes/operator.js +0 -415
  551. package/dist/platform/control-plane/routes/remote.d.ts +0 -3
  552. package/dist/platform/control-plane/routes/remote.d.ts.map +0 -1
  553. package/dist/platform/control-plane/routes/remote.js +0 -35
  554. package/dist/platform/control-plane/routes/sessions.d.ts +0 -3
  555. package/dist/platform/control-plane/routes/sessions.d.ts.map +0 -1
  556. package/dist/platform/control-plane/routes/sessions.js +0 -43
  557. package/dist/platform/control-plane/routes/tasks.d.ts +0 -3
  558. package/dist/platform/control-plane/routes/tasks.d.ts.map +0 -1
  559. package/dist/platform/control-plane/routes/tasks.js +0 -22
@@ -2,6 +2,64 @@ import { randomUUID } from 'node:crypto';
2
2
  import { dedupeSessionSurfaceKinds } from './session-broker-helpers.js';
3
3
  import { upsertSessionParticipant } from './session-broker-state.js';
4
4
  export const RESERVED_SHARED_SESSION_IDS = new Set(['', 'system']);
5
+ /**
6
+ * Metadata key under which a closed session records WHY it was closed. Kept in
7
+ * `metadata` (not a first-class field) so it rides the wire without a schema
8
+ * change and 0.38 readers ignore it. See {@link SharedSessionCloseReason}.
9
+ */
10
+ export const SESSION_CLOSE_REASON_METADATA_KEY = 'closeReason';
11
+ /** Read the close reason off a record's metadata, or undefined when unset/unknown. */
12
+ export function readSessionCloseReason(session) {
13
+ const raw = session.metadata?.[SESSION_CLOSE_REASON_METADATA_KEY];
14
+ return raw === 'idle-reaped' || raw === 'user' || raw === 'surface' ? raw : undefined;
15
+ }
16
+ /** Stamp a close reason onto a metadata bag (returns a new object). */
17
+ export function withSessionCloseReason(metadata, reason) {
18
+ return { ...metadata, [SESSION_CLOSE_REASON_METADATA_KEY]: reason };
19
+ }
20
+ /** Strip any close reason from a metadata bag (returns a new object only if needed). */
21
+ export function withoutSessionCloseReason(metadata) {
22
+ if (!(SESSION_CLOSE_REASON_METADATA_KEY in metadata))
23
+ return metadata;
24
+ const next = { ...metadata };
25
+ delete next[SESSION_CLOSE_REASON_METADATA_KEY];
26
+ return next;
27
+ }
28
+ /**
29
+ * Metadata flag marking a session as SURFACE-MANAGED: a spine-registered surface
30
+ * (via `sessions.register`) owns turn execution and input collection for it. Set
31
+ * on every register/heartbeat. Steer/follow-up inputs to such a session (when no
32
+ * daemon agent is live) route to the surface as a queued input the surface
33
+ * collects — NOT a daemon executor spawn. Kept in metadata (open record) so it
34
+ * needs no schema change. Daemon-run origins (companion-task/automation, or a
35
+ * plain /task session) never call register and stay executor-routed.
36
+ */
37
+ export const SESSION_SURFACE_MANAGED_METADATA_KEY = 'surfaceManaged';
38
+ /** How recently a participant must have been seen to count as a LIVE surface for
39
+ * steer/follow-up routing. A surface heartbeats via `sessions.register`; if the
40
+ * newest heartbeat is older than this, the surface is treated as gone and inputs
41
+ * fall back to the daemon executor path. */
42
+ export const SURFACE_ROUTE_FRESHNESS_MS = 2 * 60 * 1000;
43
+ export function isSurfaceManagedSession(session) {
44
+ return session.metadata?.[SESSION_SURFACE_MANAGED_METADATA_KEY] === true;
45
+ }
46
+ /**
47
+ * True when a participant OTHER than `exclude` (the current input's own surface)
48
+ * was seen within `freshnessMs`. Excluding the sender prevents a steer's own
49
+ * just-attached participant from making a surfaceless session look live.
50
+ */
51
+ export function hasFreshSurfaceParticipant(session, now, freshnessMs, exclude) {
52
+ return session.participants.some((participant) => {
53
+ if (exclude?.surfaceId && participant.surfaceId === exclude.surfaceId)
54
+ return false;
55
+ return now - participant.lastSeenAt < freshnessMs;
56
+ });
57
+ }
58
+ /** Steer/follow-up to this session should route to a live surface (queue-for-surface)
59
+ * rather than spawn a daemon executor. */
60
+ export function shouldRouteInputToSurface(session, now, freshnessMs, exclude) {
61
+ return isSurfaceManagedSession(session) && hasFreshSurfaceParticipant(session, now, freshnessMs, exclude);
62
+ }
5
63
  export function assertSharedSessionIdAllowed(id) {
6
64
  if (id === undefined || !RESERVED_SHARED_SESSION_IDS.has(id))
7
65
  return;
@@ -17,6 +75,7 @@ export function createSharedSessionRecord(input) {
17
75
  return {
18
76
  id: sessionId,
19
77
  kind: input.kind ?? 'tui',
78
+ project: input.project?.trim() || 'unknown',
20
79
  title: input.title?.trim() || input.routeBinding?.title || `Session ${sessionId}`,
21
80
  status: 'active',
22
81
  createdAt: now,
@@ -37,7 +96,56 @@ export function createSharedSessionRecord(input) {
37
96
  },
38
97
  };
39
98
  }
40
- export function closeSharedSessionRecord(session) {
99
+ /**
100
+ * The idempotent register/heartbeat control-flow with HONEST closed semantics:
101
+ * a brand-new id is created; an existing OPEN id adopts the participant; an
102
+ * existing CLOSED id records the heartbeat but stays closed (returning a conflict
103
+ * marker) UNLESS `reopen: true` is passed. A titled session is never renamed by
104
+ * the heartbeat (that rule lives in {@link attachSharedSessionParticipantAndRoute}).
105
+ */
106
+ export async function registerSharedSession(ops, input) {
107
+ const existing = ops.getSession(input.sessionId);
108
+ if (!existing) {
109
+ const created = await ops.createSession({
110
+ id: input.sessionId,
111
+ ...(input.kind !== undefined ? { kind: input.kind } : {}),
112
+ ...(input.project !== undefined ? { project: input.project } : {}),
113
+ ...(input.title !== undefined ? { title: input.title } : {}),
114
+ participant: input.participant,
115
+ });
116
+ return { record: created, reopened: false };
117
+ }
118
+ const attach = participantToAttachInput(input.participant, input.title);
119
+ if (existing.status === 'closed') {
120
+ // Reopen honesty: a session the SYSTEM reaper closed ('idle-reaped') reopens
121
+ // automatically on the next participant heartbeat — the surface never
122
+ // deliberately closed it, so re-registering is not a conflict. An explicit
123
+ // 'user'/'surface' close stays closed (honest conflict) unless reopen:true.
124
+ const systemReaped = readSessionCloseReason(existing) === 'idle-reaped';
125
+ if (input.reopen === true || systemReaped) {
126
+ const reopened = (await ops.reopenSession(existing.id)) ?? existing;
127
+ return { record: await ops.attachParticipant(reopened, attach), reopened: true };
128
+ }
129
+ return { record: await ops.attachParticipant(existing, attach), reopened: false, conflict: { status: 'closed' } };
130
+ }
131
+ return { record: await ops.attachParticipant(existing, attach), reopened: false };
132
+ }
133
+ export function participantToAttachInput(participant, title) {
134
+ return {
135
+ surfaceKind: participant.surfaceKind,
136
+ surfaceId: participant.surfaceId,
137
+ externalId: participant.externalId,
138
+ userId: participant.userId,
139
+ displayName: participant.displayName,
140
+ routeId: participant.routeId,
141
+ ...(title ? { title } : {}),
142
+ body: '',
143
+ };
144
+ }
145
+ /** Close a session, recording WHY. Defaults to 'user' — the explicit close verb
146
+ * (daemon `sessions.close`) is a deliberate user/surface action, which does NOT
147
+ * auto-reopen on heartbeat. The reaper passes 'idle-reaped'. */
148
+ export function closeSharedSessionRecord(session, reason = 'user') {
41
149
  const now = Date.now();
42
150
  return {
43
151
  ...session,
@@ -45,6 +153,7 @@ export function closeSharedSessionRecord(session) {
45
153
  activeAgentId: undefined,
46
154
  updatedAt: now,
47
155
  closedAt: now,
156
+ metadata: withSessionCloseReason(session.metadata, reason),
48
157
  };
49
158
  }
50
159
  export function reopenSharedSessionRecord(session) {
@@ -53,6 +162,9 @@ export function reopenSharedSessionRecord(session) {
53
162
  status: 'active',
54
163
  updatedAt: Date.now(),
55
164
  closedAt: undefined,
165
+ // A reopened session is no longer closed-for-any-reason; clear the marker so
166
+ // it never carries a stale close reason on the wire.
167
+ metadata: withoutSessionCloseReason(session.metadata),
56
168
  };
57
169
  }
58
170
  export function bindSharedSessionAgent(session, agentId) {
@@ -65,6 +177,21 @@ export function bindSharedSessionAgent(session, agentId) {
65
177
  lastActivityAt: now,
66
178
  };
67
179
  }
180
+ /**
181
+ * True when a session title is still the auto-generated placeholder (empty or
182
+ * `Session <id>`) and can be named by an incoming register/attach. A real,
183
+ * user-supplied title is never overwritten by this path.
184
+ */
185
+ export function isPlaceholderSessionTitle(title, id) {
186
+ const trimmed = title.trim();
187
+ return trimmed.length === 0 || trimmed === `Session ${id}`;
188
+ }
189
+ /**
190
+ * Merge a participant + optional route onto a session. This is the HEARTBEAT
191
+ * path — it records the participant and advances lastSeenAt, but it must NOT by
192
+ * itself change lifecycle status (a closed session stays closed; reopening is an
193
+ * explicit verb) and must NOT overwrite a real title (only names a placeholder).
194
+ */
68
195
  export function attachSharedSessionParticipantAndRoute(input) {
69
196
  const nextRouteIds = input.binding?.id
70
197
  ? [...new Set([...input.session.routeIds, input.binding.id])]
@@ -78,12 +205,23 @@ export function attachSharedSessionParticipantAndRoute(input) {
78
205
  routeId: input.binding?.id,
79
206
  lastSeenAt: Date.now(),
80
207
  });
208
+ const incomingTitle = input.message.title?.trim();
209
+ const title = incomingTitle && isPlaceholderSessionTitle(input.session.title, input.session.id)
210
+ ? incomingTitle
211
+ : input.session.title;
212
+ const now = Date.now();
81
213
  return {
82
214
  ...input.session,
83
- title: input.message.title?.trim() || input.session.title,
84
- status: input.session.status === 'closed' ? 'active' : input.session.status,
85
- updatedAt: Date.now(),
86
- closedAt: input.session.status === 'closed' ? undefined : input.session.closedAt,
215
+ title,
216
+ // Status is intentionally preserved: the participant merge is a heartbeat and
217
+ // cannot flip a closed session back to active. Reopening is an explicit verb.
218
+ status: input.session.status,
219
+ updatedAt: now,
220
+ // A register heartbeat IS session activity: advance lastActivityAt (not only
221
+ // the participant's lastSeenAt) so the idle-empty reaper does not close a
222
+ // live, message-less surface session out from under a heartbeating participant.
223
+ lastActivityAt: now,
224
+ closedAt: input.session.closedAt,
87
225
  routeIds: nextRouteIds,
88
226
  participants,
89
227
  surfaceKinds: dedupeSessionSurfaceKinds(participants),
@@ -92,3 +230,39 @@ export function attachSharedSessionParticipantAndRoute(input) {
92
230
  },
93
231
  };
94
232
  }
233
+ /**
234
+ * The inverse of {@link attachSharedSessionParticipantAndRoute}: remove EVERY
235
+ * participant bound to `surfaceId` and unbind the route bindings those
236
+ * participants alone held. This is "detach != close != kill" — the session and
237
+ * all other participants keep running; the detached surface simply stops being a
238
+ * routing target (and, filtered by domain, stops receiving session updates).
239
+ *
240
+ * Route pruning is conservative: a routeId is dropped from the session only when
241
+ * NO surviving participant still references it, so detaching one surface never
242
+ * severs another surface's live binding.
243
+ *
244
+ * Returns `{ session, changed }`. `changed` is false when no participant matched
245
+ * `surfaceId` (the caller can treat a no-match detach as an idempotent no-op and
246
+ * skip persistence/emit). Status, title, and closedAt are preserved untouched —
247
+ * detach is never a lifecycle transition.
248
+ */
249
+ export function detachSharedSessionParticipant(session, surfaceId) {
250
+ const remaining = session.participants.filter((participant) => participant.surfaceId !== surfaceId);
251
+ if (remaining.length === session.participants.length) {
252
+ return { session, changed: false };
253
+ }
254
+ const survivingRouteIds = new Set(remaining
255
+ .map((participant) => participant.routeId)
256
+ .filter((routeId) => typeof routeId === 'string'));
257
+ const routeIds = session.routeIds.filter((routeId) => survivingRouteIds.has(routeId));
258
+ return {
259
+ session: {
260
+ ...session,
261
+ updatedAt: Date.now(),
262
+ participants: remaining,
263
+ surfaceKinds: dedupeSessionSurfaceKinds(remaining),
264
+ routeIds,
265
+ },
266
+ changed: true,
267
+ };
268
+ }
@@ -9,11 +9,30 @@ export declare function loadSessionBrokerState(snapshot: SharedSessionStoreSnaps
9
9
  readonly messages: Map<string, SharedSessionMessage[]>;
10
10
  readonly inputs: Map<string, SharedSessionInputRecord[]>;
11
11
  };
12
+ /**
13
+ * Build the durable snapshot with a PER-SESSION message cap.
14
+ *
15
+ * `maxPersistedMessagesPerSession` bounds each session's retained bodies
16
+ * independently — NOT the flattened total. The old global slice-after-flatten
17
+ * behaviour silently dropped whole sessions' transcripts (the oldest ones) once
18
+ * the combined message count crossed the cap, while `messageCount` stayed
19
+ * inflated. Capping per session keeps every session's most recent bodies and,
20
+ * when a session IS truncated, stamps `retainedMessageCount` so the loss is
21
+ * honest rather than silent (see {@link SharedSessionRecord.retainedMessageCount}).
22
+ */
12
23
  export declare function createSessionBrokerSnapshot(state: {
13
24
  readonly sessions: ReadonlyMap<string, SharedSessionRecord>;
14
25
  readonly messages: ReadonlyMap<string, readonly SharedSessionMessage[]>;
15
26
  readonly inputs: ReadonlyMap<string, readonly SharedSessionInputRecord[]>;
16
- }, maxPersistedMessages: number): SharedSessionStoreSnapshot;
27
+ }, maxPersistedMessagesPerSession: number): SharedSessionStoreSnapshot;
17
28
  export declare function upsertSessionParticipant(participants: readonly SharedSessionParticipant[], participant: SharedSessionParticipant): SharedSessionParticipant[];
29
+ /**
30
+ * Boot-time reconciliation of a freshly-loaded broker state (mutates in place):
31
+ * cancels inputs stuck in `spawned`/`delivered` from a prior run (agent state is
32
+ * unknown after a restart) and clears stale `activeAgentId` on every session.
33
+ * Returns the set of session ids whose input buckets changed so the caller can
34
+ * refresh their pending counts.
35
+ */
36
+ export declare function reconcileSessionBrokerBoot(sessions: Map<string, SharedSessionRecord>, inputs: Map<string, SharedSessionInputRecord[]>): Set<string>;
18
37
  export declare function countPendingSessionInputs(records: readonly SharedSessionInputRecord[]): number;
19
38
  //# sourceMappingURL=session-broker-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-broker-state.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAyQ9G,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,EAAE,CAE1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,EAAE,CAE5F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,EAAE,CAElG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,GAAG;IAC/F,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;CAC1D,CAsCA;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IACL,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC,CAAC;CAC3E,EACD,oBAAoB,EAAE,MAAM,GAC3B,0BAA0B,CAQ5B;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,wBAAwB,EAAE,EACjD,WAAW,EAAE,wBAAwB,GACpC,wBAAwB,EAAE,CAM5B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,GAAG,MAAM,CAI9F"}
1
+ {"version":3,"file":"session-broker-state.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA8Q9G,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,EAAE,CAE1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,EAAE,CAE5F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,EAAE,CAElG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,GAAG;IAC/F,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;CAC1D,CAsCA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IACL,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC,CAAC;CAC3E,EACD,8BAA8B,EAAE,MAAM,GACrC,0BAA0B,CA2B5B;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,wBAAwB,EAAE,EACjD,WAAW,EAAE,wBAAwB,GACpC,wBAAwB,EAAE,CAM5B;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAC9C,GAAG,CAAC,MAAM,CAAC,CAkBb;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,GAAG,MAAM,CAI9F"}
@@ -1,6 +1,6 @@
1
1
  import { SHARED_SESSION_INPUT_INTENTS, SHARED_SESSION_INPUT_STATES, } from './session-intents.js';
2
2
  import { isRecord } from '../utils/record-coerce.js';
3
- const SESSION_KINDS = new Set(['tui', 'companion-task', 'companion-chat']);
3
+ const SESSION_KINDS = new Set(['tui', 'agent', 'webui', 'companion-task', 'companion-chat', 'automation']);
4
4
  const SESSION_STATUSES = new Set(['active', 'closed']);
5
5
  const MESSAGE_ROLES = new Set(['user', 'assistant', 'system']);
6
6
  function isFiniteNumber(value) {
@@ -78,6 +78,7 @@ function normalizeSessionRecord(value, messages, inputs) {
78
78
  validateOptionalNumber(value['updatedAt']);
79
79
  validateOptionalNumber(value['lastActivityAt']);
80
80
  validateOptionalNumber(value['messageCount']);
81
+ validateOptionalNumber(value['retainedMessageCount']);
81
82
  validateOptionalNumber(value['pendingInputCount']);
82
83
  validateOptionalNumber(value['lastMessageAt']);
83
84
  validateOptionalNumber(value['closedAt']);
@@ -120,6 +121,7 @@ function normalizeSessionRecord(value, messages, inputs) {
120
121
  kind: typeof value['kind'] === 'string' && SESSION_KINDS.has(value['kind'])
121
122
  ? value['kind']
122
123
  : 'tui',
124
+ project: typeof value['project'] === 'string' && value['project'].length > 0 ? value['project'] : 'unknown',
123
125
  title: typeof value['title'] === 'string' && value['title'].trim().length > 0 ? value['title'] : `Session ${id}`,
124
126
  status: typeof value['status'] === 'string' && SESSION_STATUSES.has(value['status'])
125
127
  ? value['status']
@@ -130,6 +132,9 @@ function normalizeSessionRecord(value, messages, inputs) {
130
132
  ...(closedAt !== undefined ? { closedAt } : {}),
131
133
  lastActivityAt,
132
134
  messageCount: Math.max(isFiniteNumber(value['messageCount']) ? value['messageCount'] : 0, messages.length),
135
+ ...(isFiniteNumber(value['retainedMessageCount']) && value['retainedMessageCount'] < Math.max(isFiniteNumber(value['messageCount']) ? value['messageCount'] : 0, messages.length)
136
+ ? { retainedMessageCount: value['retainedMessageCount'] }
137
+ : {}),
133
138
  pendingInputCount: Math.max(isFiniteNumber(value['pendingInputCount']) ? value['pendingInputCount'] : 0, countPendingSessionInputs(inputs)),
134
139
  routeIds,
135
140
  surfaceKinds,
@@ -284,12 +289,43 @@ export function loadSessionBrokerState(snapshot) {
284
289
  }
285
290
  return { sessions, messages, inputs };
286
291
  }
287
- export function createSessionBrokerSnapshot(state, maxPersistedMessages) {
288
- const messages = [...state.messages.values()].flatMap((bucket) => bucket);
292
+ /**
293
+ * Build the durable snapshot with a PER-SESSION message cap.
294
+ *
295
+ * `maxPersistedMessagesPerSession` bounds each session's retained bodies
296
+ * independently — NOT the flattened total. The old global slice-after-flatten
297
+ * behaviour silently dropped whole sessions' transcripts (the oldest ones) once
298
+ * the combined message count crossed the cap, while `messageCount` stayed
299
+ * inflated. Capping per session keeps every session's most recent bodies and,
300
+ * when a session IS truncated, stamps `retainedMessageCount` so the loss is
301
+ * honest rather than silent (see {@link SharedSessionRecord.retainedMessageCount}).
302
+ */
303
+ export function createSessionBrokerSnapshot(state, maxPersistedMessagesPerSession) {
304
+ const cap = Math.max(1, maxPersistedMessagesPerSession);
305
+ const cappedMessages = [];
306
+ const retainedBySession = new Map();
307
+ for (const [sessionId, bucket] of state.messages.entries()) {
308
+ const retained = sortMessages(bucket).slice(-cap);
309
+ for (const message of retained)
310
+ cappedMessages.push(message);
311
+ retainedBySession.set(sessionId, retained.length);
312
+ }
289
313
  const inputs = [...state.inputs.values()].flatMap((bucket) => bucket);
314
+ const sessions = sortSessions(state.sessions.values()).map((session) => {
315
+ const retained = retainedBySession.get(session.id) ?? 0;
316
+ if (retained < session.messageCount) {
317
+ return { ...session, retainedMessageCount: retained };
318
+ }
319
+ // Nothing pruned — drop any stale marker so the common case carries none.
320
+ if (session.retainedMessageCount !== undefined) {
321
+ const { retainedMessageCount: _drop, ...rest } = session;
322
+ return rest;
323
+ }
324
+ return session;
325
+ });
290
326
  return {
291
- sessions: sortSessions(state.sessions.values()),
292
- messages: sortMessages(messages).slice(-maxPersistedMessages),
327
+ sessions,
328
+ messages: sortMessages(cappedMessages),
293
329
  inputs: sortInputs(inputs),
294
330
  };
295
331
  }
@@ -300,6 +336,32 @@ export function upsertSessionParticipant(participants, participant) {
300
336
  participant,
301
337
  ];
302
338
  }
339
+ /**
340
+ * Boot-time reconciliation of a freshly-loaded broker state (mutates in place):
341
+ * cancels inputs stuck in `spawned`/`delivered` from a prior run (agent state is
342
+ * unknown after a restart) and clears stale `activeAgentId` on every session.
343
+ * Returns the set of session ids whose input buckets changed so the caller can
344
+ * refresh their pending counts.
345
+ */
346
+ export function reconcileSessionBrokerBoot(sessions, inputs) {
347
+ const restartReason = 'daemon restart — agent state unknown';
348
+ const changed = new Set();
349
+ for (const [sessionId, bucket] of inputs.entries()) {
350
+ for (let i = 0; i < bucket.length; i++) {
351
+ const entry = bucket[i];
352
+ if (entry.state === 'spawned' || entry.state === 'delivered') {
353
+ bucket[i] = { ...entry, state: 'cancelled', updatedAt: Date.now(), error: restartReason };
354
+ changed.add(sessionId);
355
+ }
356
+ }
357
+ }
358
+ for (const [sessionId, session] of sessions.entries()) {
359
+ if (session.activeAgentId) {
360
+ sessions.set(sessionId, { ...session, activeAgentId: undefined, updatedAt: Date.now() });
361
+ }
362
+ }
363
+ return changed;
364
+ }
303
365
  export function countPendingSessionInputs(records) {
304
366
  return records.filter((entry) => entry.state === 'queued' || entry.state === 'delivered' || entry.state === 'spawned').length;
305
367
  }
@@ -1,9 +1,8 @@
1
1
  import { PersistentStore } from '../state/persistent-store.js';
2
2
  import type { RuntimeEventBus } from '../runtime/events/index.js';
3
3
  import { RouteBindingManager } from '../channels/index.js';
4
- import type { AutomationRouteBinding } from '../automation/routes.js';
5
4
  import type { SharedSessionCompletion, SharedSessionContinuationRunner, SharedSessionInputRecord } from './session-intents.js';
6
- import type { FindSharedSessionOptions, SharedSessionMessage, SharedSessionParticipant, SharedSessionRecord, SharedSessionSubmission, SteerSharedSessionMessageInput, SubmitSharedSessionMessageInput } from './session-types.js';
5
+ import type { CreateSharedSessionInput, EnsureSharedSessionInput, FindSharedSessionOptions, ListSharedSessionsOptions, RegisterSharedSessionInput, SharedSessionMessage, SharedSessionRecord, SharedSessionRegisterResult, SharedSessionSubmission, SteerSharedSessionMessageInput, SubmitSharedSessionMessageInput } from './session-types.js';
7
6
  import { type SharedSessionAgentStatusProvider, type SharedSessionEventPublisher, type SharedSessionMessageSender, type SharedSessionStoreSnapshot } from './session-broker-helpers.js';
8
7
  export declare class SharedSessionBroker {
9
8
  private readonly store;
@@ -22,10 +21,10 @@ export declare class SharedSessionBroker {
22
21
  private readonly _idleEmptyMs;
23
22
  /** Default idle threshold for sessions with content (ms). */
24
23
  private readonly _idleLongMs;
25
- /**
26
- * @param config.idleEmptyMs - Idle timeout for empty (0-message) sessions (default: 10 minutes).
27
- * @param config.idleLongMs - Idle timeout for sessions with content (default: 24 hours).
28
- */
24
+ /** Retention window (ms since closedAt) for CLOSED sessions; Infinity = retain forever. */
25
+ private readonly _deletionRetentionMs;
26
+ /** @param config idleEmptyMs (empty-session idle, default 10m), idleLongMs (default
27
+ * 24h), deletionRetentionMs (closed-session delete age, default Infinity = retain). */
29
28
  constructor(config: {
30
29
  readonly store?: PersistentStore<SharedSessionStoreSnapshot> | undefined;
31
30
  readonly storePath?: string | undefined;
@@ -34,6 +33,7 @@ export declare class SharedSessionBroker {
34
33
  readonly messageSender: SharedSessionMessageSender;
35
34
  readonly idleEmptyMs?: number | undefined;
36
35
  readonly idleLongMs?: number | undefined;
36
+ readonly deletionRetentionMs?: number | undefined;
37
37
  });
38
38
  setEventPublisher(publisher: SharedSessionEventPublisher | null): void;
39
39
  /**
@@ -61,28 +61,43 @@ export declare class SharedSessionBroker {
61
61
  attachRuntimeBus(bus: RuntimeEventBus, sessionResolver: (agentId: string) => string | null): () => void;
62
62
  setContinuationRunner(runner: SharedSessionContinuationRunner | null): void;
63
63
  start(): Promise<void>;
64
- listSessions(limit?: number): SharedSessionRecord[];
64
+ listSessions(limit?: number, options?: ListSharedSessionsOptions): SharedSessionRecord[];
65
65
  getSession(sessionId: string): SharedSessionRecord | null;
66
66
  findPreferredSession(options?: FindSharedSessionOptions): Promise<SharedSessionRecord | null>;
67
- ensureSession(input?: {
68
- readonly sessionId?: string | undefined;
69
- readonly title?: string | undefined;
70
- readonly metadata?: Record<string, unknown> | undefined;
71
- readonly routeBinding?: AutomationRouteBinding | undefined;
72
- readonly participant?: SharedSessionParticipant | undefined;
73
- }): Promise<SharedSessionRecord>;
67
+ ensureSession(input?: EnsureSharedSessionInput): Promise<SharedSessionRecord>;
68
+ /** Idempotent register/heartbeat; a brand-new session is born ALREADY
69
+ * surface-managed (avoids a create-then-patch race where a concurrent steer
70
+ * sees active-but-not-yet-managed and hits the executor path). */
71
+ register(input: RegisterSharedSessionInput): Promise<SharedSessionRegisterResult>;
72
+ private markSurfaceManaged;
74
73
  getMessages(sessionId: string, limit?: number): SharedSessionMessage[];
75
74
  getInputs(sessionId: string, limit?: number): SharedSessionInputRecord[];
76
- createSession(input?: {
77
- readonly id?: string | undefined;
78
- readonly title?: string | undefined;
79
- readonly metadata?: Record<string, unknown> | undefined;
80
- readonly routeBinding?: AutomationRouteBinding | undefined;
81
- readonly participant?: SharedSessionParticipant | undefined;
82
- readonly kind?: SharedSessionRecord['kind'] | undefined;
83
- }): Promise<SharedSessionRecord>;
75
+ createSession(input?: CreateSharedSessionInput): Promise<SharedSessionRecord>;
84
76
  closeSession(sessionId: string): Promise<SharedSessionRecord | null>;
85
77
  reopenSession(sessionId: string): Promise<SharedSessionRecord | null>;
78
+ /**
79
+ * Permanently remove a shared session record and its queued messages/inputs
80
+ * from the home-scoped store (see CHANGELOG 1.0.0: a real hard-delete verb, distinct from
81
+ * `closeSession` — closed sessions are HISTORY and are never touched by this
82
+ * path unless explicitly asked). Requires the session to already be closed:
83
+ * deleting a still-active session returns `'active'` so the caller can
84
+ * surface an honest 409 (close it, then delete) rather than yanking a
85
+ * record out from under a live participant/agent. An unknown OR
86
+ * already-deleted id returns `'not-found'` — delete is not a 200-noop; a
87
+ * second delete of the same id is an honest 404 at the route layer.
88
+ *
89
+ * Emits `session-deleted` on the same `session-update` wire channel as
90
+ * close/reopen/detach so subscribers drop the row live.
91
+ */
92
+ deleteSession(sessionId: string): Promise<'deleted' | 'not-found' | 'active'>;
93
+ /**
94
+ * Detach a surface's participant + route binding without closing or killing the
95
+ * session ("detach != close != kill"). Emits `session-detached`. Idempotent:
96
+ * unknown session -> null (404); closed session or no matching participant ->
97
+ * returned unchanged (a closed session emits no updates, so "stop receiving
98
+ * updates" is already satisfied). See {@link detachSharedSessionParticipant}.
99
+ */
100
+ detachParticipant(sessionId: string, surfaceId: string): Promise<SharedSessionRecord | null>;
86
101
  bindAgent(sessionId: string, agentId: string): Promise<SharedSessionRecord | null>;
87
102
  submitMessage(input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission>;
88
103
  steerMessage(input: SteerSharedSessionMessageInput): Promise<SharedSessionSubmission>;
@@ -113,27 +128,25 @@ export declare class SharedSessionBroker {
113
128
  private publishUpdate;
114
129
  private publishInputLifecycleEvent;
115
130
  private handleIntent;
116
- private recordInput;
117
- private updateInput;
118
- private claimNextQueuedInput;
119
- private finalizeAgentInputs;
131
+ /** Collection read for a live surface (see {@link filterSessionInputsSince}). */
132
+ getInputsSince(sessionId: string, options?: {
133
+ readonly state?: SharedSessionInputRecord['state'] | undefined;
134
+ readonly since?: number | undefined;
135
+ readonly limit?: number | undefined;
136
+ }): SharedSessionInputRecord[];
137
+ /** A live surface reports a collected input delivered (`consumed:false`) or
138
+ * consumed/completed (`consumed:true`); emits a session_update. Lifecycle rules
139
+ * live in {@link markSurfaceInputDelivered}. */
140
+ markInputDelivered(sessionId: string, inputId: string, options?: {
141
+ readonly consumed?: boolean | undefined;
142
+ }): Promise<SharedSessionInputRecord | null>;
120
143
  private runQueuedFollowUp;
121
144
  private sessionInputStore;
122
145
  private messageStore;
123
146
  private touch;
124
147
  private refreshPendingInputCount;
125
- /**
126
- * Periodic idle-session GC sweep.
127
- *
128
- * Policy:
129
- * - Sessions with messageCount === 0 AND no active agent AND idle longer than
130
- * `_idleEmptyMs` (default 10min) are closed with reason `idle-empty`.
131
- * - Sessions with messageCount > 0 AND no active agent AND idle longer than
132
- * `_idleLongMs` (default 24h) are closed with reason `idle-long`.
133
- *
134
- * "Idle" is measured from `lastActivityAt` (updated on createInput/bindAgent/
135
- * appendMessage). Sessions with an active agent are never GC'd.
136
- */
148
+ /** Periodic sweep: idle-close active sessions and (only under a finite retention
149
+ * window) delete closed ones. Full policy lives in {@link sweepSharedSessions}. */
137
150
  private gcSweep;
138
151
  }
139
152
  //# sourceMappingURL=session-broker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-broker.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-broker.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker.ts"],"names":[],"mappings":"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"}