@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
@@ -1,5 +1,77 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ /**
3
+ * Orchestration-engine fleet adapters — Workstream/Phase/
4
+ * WorkItem -> ProcessNode, mirroring adapters/wrfc.ts's chain/subtask
5
+ * pattern: a workstream is a root node (no native cancel of its own, so kill
6
+ * is DERIVED — cascades AgentManager.cancel over every agent any item ever
7
+ * spawned, same shape as adaptChain/cancelAgents), a phase is a pure grouping
8
+ * node (no lifecycle, no usage — same "report nothing" choice adaptSubtask
9
+ * makes, since attributing a work-item's CUMULATIVE usage to whichever phase
10
+ * it currently sits in would double-count across phases), and a work-item is
11
+ * the WRFC-subtask analogue: it delegates interrupt/kill/steer to its
12
+ * current live agent when it has one.
13
+ */
14
+ import { mergeWorkItemUsage } from '../../../orchestration/types.js';
2
15
  import { workItemNodeId } from './agent.js';
16
+ /** True once a ProcessUsage carries any non-zero count worth surfacing. */
17
+ function hasAnyUsage(u) {
18
+ return u !== undefined && (u.inputTokens > 0 || u.outputTokens > 0 || u.cacheReadTokens > 0 || u.cacheWriteTokens > 0
19
+ || u.llmCallCount > 0 || u.turnCount > 0 || u.toolCallCount > 0);
20
+ }
21
+ /**
22
+ * True when a committed WorkItemUsage carries no real data yet (the untouched
23
+ * emptyWorkItemUsage placeholder — zero counts, unpriced, no cost). Such a
24
+ * placeholder must NOT be folded into a live overlay: merging an 'unpriced'
25
+ * zero into a priced overlay would honestly-but-uselessly degrade the result to
26
+ * 'estimated' and drop it from the priced cost rollup (aggregateWorkItemCost),
27
+ * re-introducing the very n/a this overlay removes. When committed is empty the
28
+ * overlay stands alone.
29
+ */
30
+ function isEmptyCommittedUsage(u) {
31
+ return u.costUsd === null && !hasAnyUsage(u);
32
+ }
33
+ /** Convert a live overlay into WorkItemUsage shape, or undefined when it carries nothing real yet. */
34
+ function liveOverlayUsage(live) {
35
+ if (!live)
36
+ return undefined;
37
+ const u = live.usage;
38
+ const hasCost = live.costUsd !== undefined && live.costUsd !== null;
39
+ if (!hasAnyUsage(u) && !hasCost)
40
+ return undefined;
41
+ return {
42
+ inputTokens: u?.inputTokens ?? 0,
43
+ outputTokens: u?.outputTokens ?? 0,
44
+ cacheReadTokens: u?.cacheReadTokens ?? 0,
45
+ cacheWriteTokens: u?.cacheWriteTokens ?? 0,
46
+ reasoningTokens: u?.reasoningTokens,
47
+ llmCallCount: u?.llmCallCount ?? 0,
48
+ turnCount: u?.turnCount ?? 0,
49
+ toolCallCount: u?.toolCallCount ?? 0,
50
+ costUsd: live.costUsd ?? null,
51
+ costState: live.costState ?? (hasCost ? 'priced' : 'unpriced'),
52
+ };
53
+ }
54
+ /**
55
+ * The usage the fleet DISPLAYS for a work-item: its committed phase-boundary
56
+ * total, plus — only while it is actively 'in-phase' — the live in-flight
57
+ * usage of its current agent. The overlay is applied ONLY for an 'in-phase'
58
+ * item, which is exactly the window in which `item.usage` does NOT yet include
59
+ * the running phase (the engine folds that in at completion — see
60
+ * runItemPhase), so committed + live never double-counts and the two hand off
61
+ * atomically at the phase boundary. Because both operands only ever grow and
62
+ * merge through {@link mergeWorkItemUsage}, presence is MONOTONE: once usage
63
+ * has appeared for an item it never blinks back to n/a (DEBT-4 item 2).
64
+ */
65
+ export function displayWorkItemUsage(item, live) {
66
+ const overlay = item.state === 'in-phase' ? liveOverlayUsage(live) : undefined;
67
+ if (!overlay)
68
+ return item.usage;
69
+ // First-phase window: no committed usage yet, so the live overlay is the
70
+ // whole truth — don't let the empty 'unpriced' placeholder degrade it.
71
+ if (isEmptyCommittedUsage(item.usage))
72
+ return overlay;
73
+ return mergeWorkItemUsage(item.usage, overlay);
74
+ }
3
75
  /** Workstream node ids are namespaced to avoid colliding with agent/process ids. */
4
76
  export function workstreamNodeId(workstreamId) {
5
77
  return `workstream:${workstreamId}`;
@@ -37,6 +109,14 @@ function workItemState(item) {
37
109
  // reconsideration is automatic the instant the ceiling changes, but a
38
110
  // fixed ceiling on its own never lifts the block (usage only grows).
39
111
  return 'stalled';
112
+ case 'blocked-dependency':
113
+ // Same "stuck, not progressing" signal as blocked-budget, for the same
114
+ // reason (BIG-3 item 2): the item is out of the claimable set until every
115
+ // dependency reaches 'passed'. Distinct from 'queued' (which WILL be
116
+ // claimed by free capacity) — a dependency-blocked item waits on other
117
+ // items, or on engine.retryItem reviving a failed dependency. blockedReason
118
+ // carries the honest 'waiting on: …' / 'dependency failed: …' detail.
119
+ return 'stalled';
40
120
  case 'in-phase':
41
121
  return 'executing-tool';
42
122
  }
@@ -48,7 +128,7 @@ function workstreamState(workstream) {
48
128
  return 'executing-tool';
49
129
  if (workstream.items.some((item) => item.state === 'pending' || item.state === 'awaiting-capacity'))
50
130
  return 'queued';
51
- if (workstream.items.some((item) => item.state === 'blocked-budget'))
131
+ if (workstream.items.some((item) => item.state === 'blocked-budget' || item.state === 'blocked-dependency'))
52
132
  return 'stalled';
53
133
  return workstream.items.some((item) => item.state === 'failed') ? 'failed' : 'done';
54
134
  }
@@ -62,9 +142,15 @@ function phaseState(workstream, phase) {
62
142
  const allTerminal = workstream.items.every((item) => TERMINAL_ITEM_STATES.has(item.state));
63
143
  return allTerminal ? 'done' : 'idle';
64
144
  }
65
- /** token-count-only rollup over a workstream's items (cost handled separately — see aggregateWorkItemCost). */
66
- function sumWorkItemUsage(items) {
67
- if (items.length === 0)
145
+ /**
146
+ * token-count-only rollup over a workstream's per-item DISPLAY usages (cost
147
+ * handled separately — see aggregateWorkItemCost). Takes resolved display
148
+ * usages (committed + any live overlay) rather than raw items so the workstream
149
+ * total reflects live in-flight work, not just phase-boundary snapshots
150
+ * (DEBT-4 item 2).
151
+ */
152
+ function sumWorkItemUsage(usages) {
153
+ if (usages.length === 0)
68
154
  return undefined;
69
155
  const total = {
70
156
  inputTokens: 0,
@@ -77,8 +163,7 @@ function sumWorkItemUsage(items) {
77
163
  toolCallCount: 0,
78
164
  };
79
165
  let sawReasoning = false;
80
- for (const item of items) {
81
- const usage = item.usage;
166
+ for (const usage of usages) {
82
167
  total.inputTokens += usage.inputTokens;
83
168
  total.outputTokens += usage.outputTokens;
84
169
  total.cacheReadTokens += usage.cacheReadTokens;
@@ -102,22 +187,29 @@ function sumWorkItemUsage(items) {
102
187
  toolCallCount: total.toolCallCount,
103
188
  };
104
189
  }
105
- /** Honest cost rollup: all-priced -> 'priced'; none -> null/'unpriced'; mixed -> summed subset, 'estimated'. Mirrors adapters/wrfc.ts aggregateCost. */
106
- function aggregateWorkItemCost(items) {
107
- const withUsage = items.filter((item) => item.usage.costState !== 'unpriced' || item.usage.inputTokens > 0 || item.usage.outputTokens > 0);
190
+ /** Honest cost rollup: all-priced -> 'priced'; none -> null/'unpriced'; mixed -> summed subset, 'estimated'. Mirrors adapters/wrfc.ts aggregateCost. Operates on resolved display usages (committed + live overlay). */
191
+ function aggregateWorkItemCost(usages) {
192
+ const withUsage = usages.filter((usage) => usage.costState !== 'unpriced' || usage.inputTokens > 0 || usage.outputTokens > 0);
108
193
  if (withUsage.length === 0)
109
194
  return { costUsd: null, costState: 'unpriced' };
110
- const priced = withUsage.filter((item) => item.usage.costState === 'priced' && item.usage.costUsd !== null);
195
+ const priced = withUsage.filter((usage) => usage.costState === 'priced' && usage.costUsd !== null);
111
196
  if (priced.length === 0)
112
197
  return { costUsd: null, costState: 'unpriced' };
113
- const total = priced.reduce((sum, item) => sum + item.usage.costUsd, 0);
198
+ const total = priced.reduce((sum, usage) => sum + usage.costUsd, 0);
114
199
  return { costUsd: total, costState: priced.length === withUsage.length ? 'priced' : 'estimated' };
115
200
  }
116
- /** WorkItem -> ProcessNode. Delegates interruptible/killable/steerable to its currently-active agent, mirroring adaptSubtask. */
201
+ /**
202
+ * WorkItem -> ProcessNode. Delegates interruptible/killable/steerable to its
203
+ * currently-active agent, mirroring adaptSubtask. `opts.live` supplies the
204
+ * currently-active agent's in-flight usage so a running phase shows real,
205
+ * growing numbers instead of n/a until it completes (DEBT-4 item 2); omit it
206
+ * (or pass undefined) for the committed-only view.
207
+ */
117
208
  export function adaptWorkItem(item, workstreamId, parentId, opts) {
118
209
  const state = workItemState(item);
119
210
  const killable = !TERMINAL_ITEM_STATES.has(item.state);
120
211
  const activeAgentId = activeWorkItemAgentId(item);
212
+ const usage = displayWorkItemUsage(item, opts.live);
121
213
  return {
122
214
  id: workItemNodeId(item.id),
123
215
  kind: 'work-item',
@@ -128,26 +220,33 @@ export function adaptWorkItem(item, workstreamId, parentId, opts) {
128
220
  startedAt: item.createdAt,
129
221
  completedAt: item.completedAt,
130
222
  elapsedMs: Math.max(0, (item.completedAt ?? Date.now()) - item.createdAt),
131
- usage: item.usage.inputTokens > 0 || item.usage.outputTokens > 0
223
+ usage: usage.inputTokens > 0 || usage.outputTokens > 0
132
224
  ? {
133
- inputTokens: item.usage.inputTokens,
134
- outputTokens: item.usage.outputTokens,
135
- cacheReadTokens: item.usage.cacheReadTokens,
136
- cacheWriteTokens: item.usage.cacheWriteTokens,
137
- reasoningTokens: item.usage.reasoningTokens,
138
- llmCallCount: item.usage.llmCallCount,
139
- turnCount: item.usage.turnCount,
140
- toolCallCount: item.usage.toolCallCount,
225
+ inputTokens: usage.inputTokens,
226
+ outputTokens: usage.outputTokens,
227
+ cacheReadTokens: usage.cacheReadTokens,
228
+ cacheWriteTokens: usage.cacheWriteTokens,
229
+ reasoningTokens: usage.reasoningTokens,
230
+ llmCallCount: usage.llmCallCount,
231
+ turnCount: usage.turnCount,
232
+ toolCallCount: usage.toolCallCount,
141
233
  }
142
234
  : undefined,
143
- costUsd: item.usage.costUsd,
144
- costState: item.usage.costState,
145
- // Blocked-budget items surface their reason (set/cleared by the engine
146
- // alongside the state transition, types.ts WorkItem.blockedReason) in
147
- // place of the bare phase id — the phase id alone doesn't tell an
148
- // operator WHY the item stopped moving.
235
+ costUsd: usage.costUsd,
236
+ costState: usage.costState,
237
+ // Blocked items surface their reason (set/cleared by the engine alongside
238
+ // the state transition, types.ts WorkItem.blockedReason) in place of the
239
+ // bare phase id — the phase id alone doesn't tell an operator WHY the item
240
+ // stopped moving. Covers both budget blocks and dependency blocks (BIG-3
241
+ // item 2: 'waiting on: …' / 'dependency failed: …').
149
242
  currentActivity: item.currentPhaseId
150
- ? { kind: 'phase', text: item.state === 'blocked-budget' && item.blockedReason ? item.blockedReason : item.currentPhaseId, at: item.createdAt }
243
+ ? {
244
+ kind: 'phase',
245
+ text: (item.state === 'blocked-budget' || item.state === 'blocked-dependency') && item.blockedReason
246
+ ? item.blockedReason
247
+ : item.currentPhaseId,
248
+ at: item.createdAt,
249
+ }
151
250
  : undefined,
152
251
  capabilities: {
153
252
  interruptible: activeAgentId !== undefined,
@@ -190,17 +289,22 @@ export function adaptPhase(phase, workstream) {
190
289
  };
191
290
  }
192
291
  /**
193
- * Workstream -> ProcessNode. Root node (no parentId). Sums every item's
194
- * usage/cost exactly once (never through an intermediate phase bucket see
195
- * adaptPhase) so this total can never double-count.
292
+ * Workstream -> ProcessNode. Root node (no parentId). Sums every item's DISPLAY
293
+ * usage/cost (committed total + any live in-flight overlay, resolved once per
294
+ * item) exactly once never through an intermediate phase bucket (see
295
+ * adaptPhase) — so this total can never double-count and never shows n/a while
296
+ * an item is actively producing usage (DEBT-4 item 2). `liveByItemId` supplies
297
+ * the active agents' in-flight usage keyed by item id; omit it for the
298
+ * committed-only view.
196
299
  */
197
- export function adaptWorkstream(workstream, now) {
300
+ export function adaptWorkstream(workstream, now, liveByItemId) {
198
301
  const state = workstreamState(workstream);
199
302
  const killable = state !== 'done' && state !== 'failed';
200
303
  const completedAt = (state === 'done' || state === 'failed')
201
304
  ? workstream.items.reduce((latest, item) => (item.completedAt !== undefined && (latest === undefined || item.completedAt > latest) ? item.completedAt : latest), undefined)
202
305
  : undefined;
203
- const { costUsd, costState } = aggregateWorkItemCost(workstream.items);
306
+ const displayUsages = workstream.items.map((item) => displayWorkItemUsage(item, liveByItemId?.get(item.id)));
307
+ const { costUsd, costState } = aggregateWorkItemCost(displayUsages);
204
308
  return {
205
309
  id: workstreamNodeId(workstream.id),
206
310
  kind: 'workstream',
@@ -210,7 +314,7 @@ export function adaptWorkstream(workstream, now) {
210
314
  startedAt: workstream.createdAt,
211
315
  completedAt,
212
316
  elapsedMs: Math.max(0, (completedAt ?? now) - workstream.createdAt),
213
- usage: sumWorkItemUsage(workstream.items),
317
+ usage: sumWorkItemUsage(displayUsages),
214
318
  costUsd,
215
319
  costState,
216
320
  currentActivity: undefined,
@@ -5,10 +5,10 @@ import type { ProcessNode } from '../types.js';
5
5
  export declare function scheduleNodeId(name: string): string;
6
6
  /**
7
7
  * ScheduleEntry → ProcessNode. A schedule between runs is honestly 'idle'
8
- * (not force-fit into an active state); disabled maps to 'paused' (Wave 6,
9
- * wo-F item d2 — NOT 'killed': the entry still exists and ScheduleManager.
10
- * enable() can re-arm it, so collapsing it into a terminal state was
11
- * dishonest). resumable mirrors the inverse of pausable.
8
+ * (not force-fit into an active state); disabled maps to 'paused' (NOT
9
+ * 'killed': the entry still exists and ScheduleManager.enable() can re-arm
10
+ * it, so collapsing it into a terminal state was dishonest). resumable
11
+ * mirrors the inverse of pausable.
12
12
  */
13
13
  export declare function adaptSchedule(entry: ScheduleEntry): ProcessNode;
14
14
  //# sourceMappingURL=schedule.d.ts.map
@@ -5,10 +5,10 @@ export function scheduleNodeId(name) {
5
5
  }
6
6
  /**
7
7
  * ScheduleEntry → ProcessNode. A schedule between runs is honestly 'idle'
8
- * (not force-fit into an active state); disabled maps to 'paused' (Wave 6,
9
- * wo-F item d2 — NOT 'killed': the entry still exists and ScheduleManager.
10
- * enable() can re-arm it, so collapsing it into a terminal state was
11
- * dishonest). resumable mirrors the inverse of pausable.
8
+ * (not force-fit into an active state); disabled maps to 'paused' (NOT
9
+ * 'killed': the entry still exists and ScheduleManager.enable() can re-arm
10
+ * it, so collapsing it into a terminal state was dishonest). resumable
11
+ * mirrors the inverse of pausable.
12
12
  */
13
13
  export function adaptSchedule(entry) {
14
14
  return {
@@ -3,10 +3,9 @@ import type { TriggerDefinition } from '../../../tools/workflow/index.js';
3
3
  import type { ProcessNode } from '../types.js';
4
4
  /**
5
5
  * TriggerDefinition → ProcessNode. Triggers have no timestamps and no run
6
- * state — enabled means armed ('idle'), disabled maps to 'paused' (Wave 6,
7
- * wo-F item d2 — NOT 'killed': the definition still exists and
8
- * TriggerManager.enable() can re-arm it). resumable mirrors the inverse of
9
- * pausable.
6
+ * state — enabled means armed ('idle'), disabled maps to 'paused' (NOT
7
+ * 'killed': the definition still exists and TriggerManager.enable() can
8
+ * re-arm it). resumable mirrors the inverse of pausable.
10
9
  */
11
10
  export declare function adaptTrigger(def: TriggerDefinition): ProcessNode;
12
11
  //# sourceMappingURL=trigger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/trigger.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,WAAW,CAahE"}
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/trigger.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,GAAG,WAAW,CAahE"}
@@ -1,10 +1,9 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
2
  /**
3
3
  * TriggerDefinition → ProcessNode. Triggers have no timestamps and no run
4
- * state — enabled means armed ('idle'), disabled maps to 'paused' (Wave 6,
5
- * wo-F item d2 — NOT 'killed': the definition still exists and
6
- * TriggerManager.enable() can re-arm it). resumable mirrors the inverse of
7
- * pausable.
4
+ * state — enabled means armed ('idle'), disabled maps to 'paused' (NOT
5
+ * 'killed': the definition still exists and TriggerManager.enable() can
6
+ * re-arm it). resumable mirrors the inverse of pausable.
8
7
  */
9
8
  export function adaptTrigger(def) {
10
9
  return {
@@ -1,6 +1,19 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
2
  import type { WrfcChain, WrfcSubtask } from '../../../agents/wrfc-types.js';
3
3
  import type { ProcessNode } from '../types.js';
4
+ /**
5
+ * Reprice a WRFC owner agent node for honest DISPLAY. The owner runs no LLM turn
6
+ * itself; at completion its usage is backfilled from aggregateChainUsage — a
7
+ * mixed-model rollup of its children — so pricing it with a single owner model is
8
+ * wrong and leaving it "unpriced" while its children priced fine is misleading.
9
+ * Instead adopt the chain node's per-child-summed cost (and its model descriptor).
10
+ *
11
+ * Returns the SAME node reference when no reprice applies (owner already priced, or
12
+ * the chain has no priced cost), so callers can skip untouched nodes. The owner is
13
+ * excluded from every leaf-sum (registry aggregateCost / isWrfcOwnerAgentNode), so
14
+ * adopting the chain total here can never double-count.
15
+ */
16
+ export declare function repriceWrfcOwnerNode(ownerNode: ProcessNode, chainNode: ProcessNode): ProcessNode;
4
17
  /**
5
18
  * The subtask's currently-active member agent, i.e. whichever role is
6
19
  * driving its current phase. Undefined when the subtask has no phase
@@ -1 +1 @@
1
- {"version":3,"file":"wrfc.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/wrfc.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAmJ3E;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,CAwB9G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAgC1G"}
1
+ {"version":3,"file":"wrfc.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/wrfc.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAuK3E;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,GAAG,WAAW,CAShG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAWnF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,CAwB9G;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAiC1G"}
@@ -11,7 +11,11 @@ function chainState(chain, memberNodes) {
11
11
  case 'passed':
12
12
  return { state: 'done' };
13
13
  case 'failed':
14
- return { state: 'failed' };
14
+ // An operator-cancelled chain is terminal-'failed' internally but must read
15
+ // as cancelled, not a failure — map it to 'killed' (⊘) so the chain row and
16
+ // the cohort tally match the cancelled owner/leaf agents instead of showing
17
+ // '✗ failed' for an intended stop.
18
+ return chain.failureKind === 'cancelled' ? { state: 'killed' } : { state: 'failed' };
15
19
  case 'pending':
16
20
  return { state: 'queued' };
17
21
  case 'awaiting_gates':
@@ -131,7 +135,7 @@ function sumUsage(nodes) {
131
135
  *
132
136
  * The owner agent is EXCLUDED from aggregation: it runs no LLM turns itself —
133
137
  * its AgentRecord.usage is populated FROM the phase children at completion
134
- * time (Wave-0/1), so including it would double-count.
138
+ * time, so including it would double-count.
135
139
  */
136
140
  function aggregateCost(members) {
137
141
  const withUsage = members.filter((node) => node.usage !== undefined);
@@ -143,6 +147,48 @@ function aggregateCost(members) {
143
147
  const total = priced.reduce((sum, node) => sum + node.costUsd, 0);
144
148
  return { costUsd: total, costState: priced.length === withUsage.length ? 'priced' : 'estimated' };
145
149
  }
150
+ /**
151
+ * An honest model descriptor for a chain node, derived from its member agents
152
+ * (which carry the real model that ran each phase — the owner itself often has no
153
+ * resolved model). One distinct model → that model; several → "N models"; none →
154
+ * undefined. Fixes the "model unknown" chain-detail readout.
155
+ */
156
+ function chainModelDescriptor(members) {
157
+ const models = new Set();
158
+ for (const node of members) {
159
+ if (typeof node.model === 'string' && node.model.length > 0)
160
+ models.add(node.model);
161
+ }
162
+ if (models.size === 0)
163
+ return undefined;
164
+ if (models.size === 1)
165
+ return [...models][0];
166
+ return `${models.size} models`;
167
+ }
168
+ /**
169
+ * Reprice a WRFC owner agent node for honest DISPLAY. The owner runs no LLM turn
170
+ * itself; at completion its usage is backfilled from aggregateChainUsage — a
171
+ * mixed-model rollup of its children — so pricing it with a single owner model is
172
+ * wrong and leaving it "unpriced" while its children priced fine is misleading.
173
+ * Instead adopt the chain node's per-child-summed cost (and its model descriptor).
174
+ *
175
+ * Returns the SAME node reference when no reprice applies (owner already priced, or
176
+ * the chain has no priced cost), so callers can skip untouched nodes. The owner is
177
+ * excluded from every leaf-sum (registry aggregateCost / isWrfcOwnerAgentNode), so
178
+ * adopting the chain total here can never double-count.
179
+ */
180
+ export function repriceWrfcOwnerNode(ownerNode, chainNode) {
181
+ if (ownerNode.costState !== 'unpriced')
182
+ return ownerNode;
183
+ if (chainNode.costUsd === null || chainNode.costUsd === undefined)
184
+ return ownerNode;
185
+ return {
186
+ ...ownerNode,
187
+ costUsd: chainNode.costUsd,
188
+ costState: chainNode.costState,
189
+ model: ownerNode.model ?? chainNode.model,
190
+ };
191
+ }
146
192
  /**
147
193
  * The subtask's currently-active member agent, i.e. whichever role is
148
194
  * driving its current phase. Undefined when the subtask has no phase
@@ -215,6 +261,7 @@ export function adaptChain(chain, memberNodes, now) {
215
261
  completedAt,
216
262
  elapsedMs: Math.max(0, (completedAt ?? now) - chain.createdAt),
217
263
  usage: sumUsage(memberNodes),
264
+ model: chainModelDescriptor(memberNodes),
218
265
  costUsd,
219
266
  costState,
220
267
  // Silent source: anchored to createdAt (no phase-transition timestamp).
@@ -1,6 +1,6 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
2
  /**
3
- * Live process registry (W2.1) — one queryable + subscribable aggregation
3
+ * Live process registry — one queryable + subscribable aggregation
4
4
  * surface over the already-composed runtime managers. ZERO new store state:
5
5
  * every query is an aggregate-on-read over the managers' in-memory maps, and
6
6
  * the only registry-owned mutable state is the agent activity side-table fed
@@ -49,7 +49,7 @@ export interface ProcessRegistryDeps {
49
49
  readonly agentManager: Pick<AgentManager, 'list' | 'cancel'>;
50
50
  readonly wrfcController: Pick<WrfcController, 'listChains'>;
51
51
  /**
52
- * Optional (Wave 4, wo701): folds workstream/phase/work-item nodes into
52
+ * Optional: folds workstream/phase/work-item nodes into
53
53
  * the fleet, nested workstream -> phase -> work-item, mirroring the
54
54
  * wrfc-chain/subtask nesting. Without this dep the registry degrades to
55
55
  * exactly today's behavior — no orchestration nodes, no new capability.
@@ -67,23 +67,23 @@ export interface ProcessRegistryDeps {
67
67
  readonly watcherRegistry: Pick<WatcherRegistry, 'list' | 'stopWatcher'>;
68
68
  readonly workflow: {
69
69
  readonly workflowManager: Pick<WorkflowManager, 'list' | 'cancel'>;
70
- /** `enable` (Wave 6, wo-F item d2) backs ProcessRegistry.resume() — the inverse of `disable`'s interrupt/pause. */
70
+ /** `enable` backs ProcessRegistry.resume() — the inverse of `disable`'s interrupt/pause. */
71
71
  readonly triggerManager: Pick<TriggerManager, 'list' | 'remove' | 'disable' | 'enable'>;
72
72
  readonly scheduleManager: Pick<ScheduleManager, 'list' | 'remove' | 'disable' | 'enable'>;
73
73
  };
74
74
  /** Optional: awaiting-approval derivation. Non-control-plane runtimes still build a fleet. */
75
75
  readonly approvalBroker?: Pick<ApprovalBroker, 'listApprovals'> | undefined;
76
- /** Optional: populates ProcessNode.sessionRef.sessionId (Wave-3 tab attach point). */
76
+ /** Optional: populates ProcessNode.sessionRef.sessionId (tab attach point). */
77
77
  readonly sessionBroker?: Pick<SharedSessionBroker, 'listSessions'> | undefined;
78
78
  /**
79
- * Optional: the repo source-tree code index (Wave-5 wo802, W5.3 Stage A).
79
+ * Optional: the repo source-tree code index (Stage A).
80
80
  * When present, its build/idle state surfaces as a single 'code-index'
81
81
  * ProcessNode. Without this dep the fleet degrades to exactly today's
82
82
  * behavior — zero code-index nodes, no new capability.
83
83
  */
84
84
  readonly codeIndexService?: CodeIndexProcessSource | undefined;
85
85
  /**
86
- * Optional (Wave 6, wo-F item d4): folds `/schedule` automation jobs
86
+ * Optional: folds `/schedule` automation jobs
87
87
  * (platform/automation, a SEPARATE subsystem from the workflow-tool's
88
88
  * ScheduleManager above) into the fleet as 'schedule'-kind nodes — see
89
89
  * adapters/automation.ts. Without this dep the fleet degrades to exactly
@@ -91,7 +91,7 @@ export interface ProcessRegistryDeps {
91
91
  */
92
92
  readonly automationManager?: Pick<AutomationManager, 'listJobs' | 'setEnabled' | 'removeJob'> | undefined;
93
93
  /**
94
- * Optional: backs `steer()` and the `steerable` capability (Wave-3). The
94
+ * Optional: backs `steer()` and the `steerable` capability. The
95
95
  * bus already exists in the composed runtime and already feeds every
96
96
  * in-process agent's per-turn inbox drain (orchestrator-runner.ts) — this
97
97
  * just hands the registry a narrow `send`-only pick of it. Without this
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/platform/runtime/fleet/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/platform/runtime/fleet/registry.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EAKV,eAAe,EACf,YAAY,EAEb,MAAM,YAAY,CAAC;AAoBpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAIzE,+FAA+F;AAC/F,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,QAAiB,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IAC7D,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC5D;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;IACjG,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC;IAC7E,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;IACxE,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;QACnE,4FAA4F;QAC5F,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;QACxF,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;KAC3F,CAAC;IACF,8FAA8F;IAC9F,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,GAAG,SAAS,CAAC;IAC5E,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;IAC/E;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC/D;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC;IAC1G;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAChE,qHAAqH;IACrH,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAClD,8FAA8F;IAC9F,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACtG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC9C;AAkDD,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe,CA0lBhF"}
@@ -1,6 +1,6 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
2
  import { adaptAgent } from './adapters/agent.js';
3
- import { activeSubtaskMemberAgentId, adaptChain, adaptSubtask } from './adapters/wrfc.js';
3
+ import { activeSubtaskMemberAgentId, adaptChain, adaptSubtask, repriceWrfcOwnerNode } from './adapters/wrfc.js';
4
4
  import { adaptWorkflow } from './adapters/workflow.js';
5
5
  import { adaptTrigger } from './adapters/trigger.js';
6
6
  import { adaptSchedule } from './adapters/schedule.js';
@@ -204,6 +204,9 @@ export function createProcessRegistry(deps) {
204
204
  agentNodeById.set(node.id, node);
205
205
  nodes.push(node);
206
206
  }
207
+ // Owner agent nodes to replace with a repriced copy after the chain loop
208
+ // (ProcessNode is readonly — collect overrides, apply in one pass at the end).
209
+ const ownerNodeOverrides = new Map();
207
210
  for (const chain of chains) {
208
211
  // Members exclude the owner: its usage is populated FROM phase children
209
212
  // at completion time, so including it would double-count (see wrfc.ts).
@@ -215,7 +218,18 @@ export function createProcessRegistry(deps) {
215
218
  if (node)
216
219
  memberNodes.push(node);
217
220
  }
218
- nodes.push(adaptChain(chain, memberNodes, capturedAt));
221
+ const chainNode = adaptChain(chain, memberNodes, capturedAt);
222
+ nodes.push(chainNode);
223
+ // Owner cost honesty: a WRFC owner runs no LLM turn itself, so its own model
224
+ // is often unresolved and it prices as "unpriced" even though its children
225
+ // priced fine. Adopt the chain's per-child-summed cost + model descriptor for
226
+ // the owner ROW. Excluded from every leaf-sum, so this never double-counts.
227
+ const ownerNode = agentNodeById.get(chain.ownerAgentId);
228
+ if (ownerNode) {
229
+ const repriced = repriceWrfcOwnerNode(ownerNode, chainNode);
230
+ if (repriced !== ownerNode)
231
+ ownerNodeOverrides.set(ownerNode.id, repriced);
232
+ }
219
233
  for (const subtask of chain.subtasks ?? []) {
220
234
  // Steerable only when the subtask's currently-active member agent is
221
235
  // both present in this snapshot and not terminal, AND a messageBus
@@ -230,7 +244,24 @@ export function createProcessRegistry(deps) {
230
244
  }
231
245
  }
232
246
  for (const workstream of workstreams) {
233
- nodes.push(adaptWorkstream(workstream, capturedAt));
247
+ // Resolve each item's active-agent in-flight usage ONCE up front, keyed
248
+ // by item id, so both the workstream rollup and the per-item nodes show
249
+ // live mid-phase usage instead of n/a until the phase boundary lands
250
+ // (DEBT-4 item 2). displayWorkItemUsage applies the overlay only while an
251
+ // item is 'in-phase', so this never double-counts committed usage.
252
+ const liveByItemId = new Map();
253
+ for (const item of workstream.items) {
254
+ const activeAgentId = activeWorkItemAgentId(item);
255
+ const activeAgentNode = activeAgentId ? agentNodeById.get(activeAgentId) : undefined;
256
+ if (activeAgentNode) {
257
+ liveByItemId.set(item.id, {
258
+ usage: activeAgentNode.usage,
259
+ costUsd: activeAgentNode.costUsd ?? null,
260
+ costState: activeAgentNode.costState,
261
+ });
262
+ }
263
+ }
264
+ nodes.push(adaptWorkstream(workstream, capturedAt, liveByItemId));
234
265
  for (const phase of workstream.phases) {
235
266
  nodes.push(adaptPhase(phase, workstream));
236
267
  }
@@ -244,7 +275,7 @@ export function createProcessRegistry(deps) {
244
275
  const parentId = item.currentPhaseId
245
276
  ? phaseNodeId(workstream.id, item.currentPhaseId)
246
277
  : workstreamNodeId(workstream.id);
247
- nodes.push(adaptWorkItem(item, workstream.id, parentId, { steerable: deps.messageBus !== undefined && memberLive }));
278
+ nodes.push(adaptWorkItem(item, workstream.id, parentId, { steerable: deps.messageBus !== undefined && memberLive, live: liveByItemId.get(item.id) }));
248
279
  }
249
280
  }
250
281
  for (const instance of deps.workflow.workflowManager.list()) {
@@ -272,6 +303,9 @@ export function createProcessRegistry(deps) {
272
303
  if (deps.codeIndexService) {
273
304
  nodes.push(adaptCodeIndex(deps.codeIndexService, capturedAt));
274
305
  }
306
+ if (ownerNodeOverrides.size > 0) {
307
+ return { capturedAt, nodes: nodes.map((node) => ownerNodeOverrides.get(node.id) ?? node) };
308
+ }
275
309
  return { capturedAt, nodes };
276
310
  }
277
311
  function query(filter) {
@@ -353,8 +387,8 @@ export function createProcessRegistry(deps) {
353
387
  return affected;
354
388
  }
355
389
  /**
356
- * Fire-and-forget an AutomationManager async control call (Wave 6, wo-F
357
- * item d4): the registry's own kill/interrupt/resume verbs are
390
+ * Fire-and-forget an AutomationManager async control call: the
391
+ * registry's own kill/interrupt/resume verbs are
358
392
  * synchronous, but AutomationManager.removeJob/setEnabled are Promises —
359
393
  * dispatch without awaiting rather than making every registry verb async,
360
394
  * but never let a rejection vanish silently. The next tick's assemble()
@@ -511,7 +545,7 @@ export function createProcessRegistry(deps) {
511
545
  }
512
546
  }
513
547
  /**
514
- * Wave 6 (wo-F item d2): re-arm a `paused` trigger/schedule via the owning
548
+ * Re-arm a `paused` trigger/schedule via the owning
515
549
  * manager's `enable()` — the inverse of interrupt()'s disable. Re-assemble
516
550
  * + dispatch-by-kind mirrors interrupt()/kill()'s own shape exactly (same
517
551
  * synchronous, no-owned-state pattern as every other control verb here).