@pellux/goodvibes-sdk 0.38.0 → 1.0.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 (474) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +3171 -929
  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/surfaces.d.ts +25 -3
  6. package/dist/events/surfaces.d.ts.map +1 -1
  7. package/dist/events/surfaces.js +22 -1
  8. package/dist/events/workflows.d.ts +7 -6
  9. package/dist/events/workflows.d.ts.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/platform/agents/archetypes.d.ts.map +1 -1
  13. package/dist/platform/agents/archetypes.js +7 -0
  14. package/dist/platform/agents/index.d.ts +1 -0
  15. package/dist/platform/agents/index.d.ts.map +1 -1
  16. package/dist/platform/agents/index.js +1 -0
  17. package/dist/platform/agents/orchestrator-runner.d.ts +13 -0
  18. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  19. package/dist/platform/agents/orchestrator-runner.js +14 -0
  20. package/dist/platform/agents/orchestrator.d.ts +38 -6
  21. package/dist/platform/agents/orchestrator.d.ts.map +1 -1
  22. package/dist/platform/agents/orchestrator.js +66 -18
  23. package/dist/platform/agents/planner-decomposition-runner.d.ts +38 -0
  24. package/dist/platform/agents/planner-decomposition-runner.d.ts.map +1 -0
  25. package/dist/platform/agents/planner-decomposition-runner.js +113 -0
  26. package/dist/platform/agents/turn-knowledge-injection.d.ts +88 -3
  27. package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -1
  28. package/dist/platform/agents/turn-knowledge-injection.js +147 -30
  29. package/dist/platform/agents/worktree.d.ts +126 -8
  30. package/dist/platform/agents/worktree.d.ts.map +1 -1
  31. package/dist/platform/agents/worktree.js +240 -19
  32. package/dist/platform/agents/wrfc-controller.d.ts +23 -0
  33. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  34. package/dist/platform/agents/wrfc-controller.js +158 -32
  35. package/dist/platform/agents/wrfc-gate-runtime.d.ts +9 -0
  36. package/dist/platform/agents/wrfc-gate-runtime.d.ts.map +1 -1
  37. package/dist/platform/agents/wrfc-gate-runtime.js +7 -3
  38. package/dist/platform/agents/wrfc-gates.d.ts +1 -1
  39. package/dist/platform/agents/wrfc-gates.d.ts.map +1 -1
  40. package/dist/platform/agents/wrfc-gates.js +7 -1
  41. package/dist/platform/agents/wrfc-types.d.ts +23 -3
  42. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  43. package/dist/platform/automation/types.d.ts +9 -1
  44. package/dist/platform/automation/types.d.ts.map +1 -1
  45. package/dist/platform/calendar/calendar-api-shared.d.ts +25 -0
  46. package/dist/platform/calendar/calendar-api-shared.d.ts.map +1 -0
  47. package/dist/platform/calendar/calendar-api-shared.js +100 -0
  48. package/dist/platform/calendar/calendar-connector.d.ts +79 -0
  49. package/dist/platform/calendar/calendar-connector.d.ts.map +1 -0
  50. package/dist/platform/calendar/calendar-connector.js +155 -0
  51. package/dist/platform/calendar/google-calendar-api.d.ts +25 -0
  52. package/dist/platform/calendar/google-calendar-api.d.ts.map +1 -0
  53. package/dist/platform/calendar/google-calendar-api.js +89 -0
  54. package/dist/platform/calendar/http-fetch-adapter.d.ts +25 -0
  55. package/dist/platform/calendar/http-fetch-adapter.d.ts.map +1 -0
  56. package/dist/platform/calendar/http-fetch-adapter.js +25 -0
  57. package/dist/platform/calendar/ics-parser.d.ts +35 -0
  58. package/dist/platform/calendar/ics-parser.d.ts.map +1 -0
  59. package/dist/platform/calendar/ics-parser.js +236 -0
  60. package/dist/platform/calendar/index.d.ts +41 -0
  61. package/dist/platform/calendar/index.d.ts.map +1 -0
  62. package/dist/platform/calendar/index.js +49 -0
  63. package/dist/platform/calendar/merged-calendar-model.d.ts +67 -0
  64. package/dist/platform/calendar/merged-calendar-model.d.ts.map +1 -0
  65. package/dist/platform/calendar/merged-calendar-model.js +181 -0
  66. package/dist/platform/calendar/microsoft-graph-api.d.ts +25 -0
  67. package/dist/platform/calendar/microsoft-graph-api.d.ts.map +1 -0
  68. package/dist/platform/calendar/microsoft-graph-api.js +95 -0
  69. package/dist/platform/calendar/oauth-flow.d.ts +62 -0
  70. package/dist/platform/calendar/oauth-flow.d.ts.map +1 -0
  71. package/dist/platform/calendar/oauth-flow.js +305 -0
  72. package/dist/platform/calendar/oauth-providers.d.ts +43 -0
  73. package/dist/platform/calendar/oauth-providers.d.ts.map +1 -0
  74. package/dist/platform/calendar/oauth-providers.js +120 -0
  75. package/dist/platform/calendar/oauth-token-store.d.ts +72 -0
  76. package/dist/platform/calendar/oauth-token-store.d.ts.map +1 -0
  77. package/dist/platform/calendar/oauth-token-store.js +189 -0
  78. package/dist/platform/calendar/oauth-types.d.ts +274 -0
  79. package/dist/platform/calendar/oauth-types.d.ts.map +1 -0
  80. package/dist/platform/calendar/oauth-types.js +22 -0
  81. package/dist/platform/calendar/rrule.d.ts +39 -0
  82. package/dist/platform/calendar/rrule.d.ts.map +1 -0
  83. package/dist/platform/calendar/rrule.js +261 -0
  84. package/dist/platform/calendar/subscription-store.d.ts +118 -0
  85. package/dist/platform/calendar/subscription-store.d.ts.map +1 -0
  86. package/dist/platform/calendar/subscription-store.js +293 -0
  87. package/dist/platform/calendar/types.d.ts +170 -0
  88. package/dist/platform/calendar/types.d.ts.map +1 -0
  89. package/dist/platform/calendar/types.js +21 -0
  90. package/dist/platform/companion/companion-chat-attachments.d.ts +29 -0
  91. package/dist/platform/companion/companion-chat-attachments.d.ts.map +1 -0
  92. package/dist/platform/companion/companion-chat-attachments.js +121 -0
  93. package/dist/platform/companion/companion-chat-broker-bridge.d.ts +40 -0
  94. package/dist/platform/companion/companion-chat-broker-bridge.d.ts.map +1 -0
  95. package/dist/platform/companion/companion-chat-broker-bridge.js +14 -0
  96. package/dist/platform/companion/companion-chat-broker-sync.d.ts +38 -0
  97. package/dist/platform/companion/companion-chat-broker-sync.d.ts.map +1 -0
  98. package/dist/platform/companion/companion-chat-broker-sync.js +80 -0
  99. package/dist/platform/companion/companion-chat-gc.d.ts +63 -0
  100. package/dist/platform/companion/companion-chat-gc.d.ts.map +1 -0
  101. package/dist/platform/companion/companion-chat-gc.js +38 -0
  102. package/dist/platform/companion/companion-chat-manager.d.ts +67 -20
  103. package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
  104. package/dist/platform/companion/companion-chat-manager.js +130 -144
  105. package/dist/platform/companion/companion-chat-persistence.d.ts +9 -1
  106. package/dist/platform/companion/companion-chat-persistence.d.ts.map +1 -1
  107. package/dist/platform/companion/companion-chat-persistence.js +10 -2
  108. package/dist/platform/companion/companion-chat-routes.d.ts +2 -1
  109. package/dist/platform/companion/companion-chat-routes.d.ts.map +1 -1
  110. package/dist/platform/companion/companion-chat-routes.js +37 -4
  111. package/dist/platform/config/credential-status.d.ts +28 -0
  112. package/dist/platform/config/credential-status.d.ts.map +1 -0
  113. package/dist/platform/config/credential-status.js +75 -0
  114. package/dist/platform/config/index.d.ts +25 -0
  115. package/dist/platform/config/index.d.ts.map +1 -1
  116. package/dist/platform/config/index.js +18 -0
  117. package/dist/platform/config/manager.d.ts +9 -0
  118. package/dist/platform/config/manager.d.ts.map +1 -1
  119. package/dist/platform/config/manager.js +21 -2
  120. package/dist/platform/config/migrations.d.ts +48 -0
  121. package/dist/platform/config/migrations.d.ts.map +1 -0
  122. package/dist/platform/config/migrations.js +54 -0
  123. package/dist/platform/config/schema-domain-core.d.ts +10 -1
  124. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  125. package/dist/platform/config/schema-domain-core.js +46 -3
  126. package/dist/platform/config/schema-types.d.ts +13 -7
  127. package/dist/platform/config/schema-types.d.ts.map +1 -1
  128. package/dist/platform/config/schema.d.ts.map +1 -1
  129. package/dist/platform/config/schema.js +2 -0
  130. package/dist/platform/control-plane/approval-broker.d.ts +11 -0
  131. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  132. package/dist/platform/control-plane/approval-broker.js +17 -1
  133. package/dist/platform/control-plane/approval-hunk-apply.d.ts +77 -0
  134. package/dist/platform/control-plane/approval-hunk-apply.d.ts.map +1 -0
  135. package/dist/platform/control-plane/approval-hunk-apply.js +80 -0
  136. package/dist/platform/control-plane/gateway-disabled-response.d.ts +20 -0
  137. package/dist/platform/control-plane/gateway-disabled-response.d.ts.map +1 -0
  138. package/dist/platform/control-plane/gateway-disabled-response.js +24 -0
  139. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts +68 -0
  140. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts.map +1 -0
  141. package/dist/platform/control-plane/gateway-scope-enforcement.js +91 -0
  142. package/dist/platform/control-plane/gateway-utils.d.ts +17 -0
  143. package/dist/platform/control-plane/gateway-utils.d.ts.map +1 -1
  144. package/dist/platform/control-plane/gateway-utils.js +30 -0
  145. package/dist/platform/control-plane/gateway.d.ts +12 -2
  146. package/dist/platform/control-plane/gateway.d.ts.map +1 -1
  147. package/dist/platform/control-plane/gateway.js +27 -31
  148. package/dist/platform/control-plane/index.d.ts +6 -1
  149. package/dist/platform/control-plane/index.d.ts.map +1 -1
  150. package/dist/platform/control-plane/index.js +4 -0
  151. package/dist/platform/control-plane/invoke-input-validation.d.ts +56 -0
  152. package/dist/platform/control-plane/invoke-input-validation.d.ts.map +1 -0
  153. package/dist/platform/control-plane/invoke-input-validation.js +163 -0
  154. package/dist/platform/control-plane/method-catalog-admin.d.ts.map +1 -1
  155. package/dist/platform/control-plane/method-catalog-admin.js +12 -1
  156. package/dist/platform/control-plane/method-catalog-calendar.d.ts +16 -0
  157. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -1
  158. package/dist/platform/control-plane/method-catalog-calendar.js +21 -0
  159. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  160. package/dist/platform/control-plane/method-catalog-channels.js +32 -3
  161. package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
  162. package/dist/platform/control-plane/method-catalog-control-automation.js +19 -34
  163. package/dist/platform/control-plane/method-catalog-control-companion.d.ts +15 -0
  164. package/dist/platform/control-plane/method-catalog-control-companion.d.ts.map +1 -0
  165. package/dist/platform/control-plane/method-catalog-control-companion.js +133 -0
  166. package/dist/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
  167. package/dist/platform/control-plane/method-catalog-control-core.js +104 -122
  168. package/dist/platform/control-plane/method-catalog-control.d.ts.map +1 -1
  169. package/dist/platform/control-plane/method-catalog-control.js +4 -0
  170. package/dist/platform/control-plane/method-catalog-email.d.ts +17 -0
  171. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
  172. package/dist/platform/control-plane/method-catalog-email.js +21 -0
  173. package/dist/platform/control-plane/method-catalog-events.d.ts +28 -0
  174. package/dist/platform/control-plane/method-catalog-events.d.ts.map +1 -1
  175. package/dist/platform/control-plane/method-catalog-events.js +74 -1
  176. package/dist/platform/control-plane/method-catalog-fleet.d.ts +24 -0
  177. package/dist/platform/control-plane/method-catalog-fleet.d.ts.map +1 -0
  178. package/dist/platform/control-plane/method-catalog-fleet.js +65 -0
  179. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts +84 -0
  180. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts.map +1 -0
  181. package/dist/platform/control-plane/method-catalog-route-reconcile.js +103 -0
  182. package/dist/platform/control-plane/method-catalog-shared.d.ts +29 -0
  183. package/dist/platform/control-plane/method-catalog-shared.d.ts.map +1 -1
  184. package/dist/platform/control-plane/method-catalog.d.ts +9 -0
  185. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  186. package/dist/platform/control-plane/method-catalog.js +32 -3
  187. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts +8 -0
  188. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
  189. package/dist/platform/control-plane/operator-contract-schemas-admin.js +22 -1
  190. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts +18 -0
  191. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts.map +1 -0
  192. package/dist/platform/control-plane/operator-contract-schemas-fleet.js +182 -0
  193. package/dist/platform/control-plane/operator-contract-schemas-permissions.d.ts.map +1 -1
  194. package/dist/platform/control-plane/operator-contract-schemas-permissions.js +5 -0
  195. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts +29 -0
  196. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts.map +1 -1
  197. package/dist/platform/control-plane/operator-contract-schemas-runtime.js +57 -3
  198. package/dist/platform/control-plane/operator-contract-schemas.d.ts +1 -0
  199. package/dist/platform/control-plane/operator-contract-schemas.d.ts.map +1 -1
  200. package/dist/platform/control-plane/operator-contract-schemas.js +1 -0
  201. package/dist/platform/control-plane/operator-contract.d.ts.map +1 -1
  202. package/dist/platform/control-plane/operator-contract.js +8 -0
  203. package/dist/platform/control-plane/routes/checkpoints.d.ts +39 -0
  204. package/dist/platform/control-plane/routes/checkpoints.d.ts.map +1 -0
  205. package/dist/platform/control-plane/routes/checkpoints.js +166 -0
  206. package/dist/platform/control-plane/routes/fleet.d.ts +53 -0
  207. package/dist/platform/control-plane/routes/fleet.d.ts.map +1 -0
  208. package/dist/platform/control-plane/routes/fleet.js +153 -0
  209. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts +30 -0
  210. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts.map +1 -0
  211. package/dist/platform/control-plane/routes/gateway-verb-error.js +36 -0
  212. package/dist/platform/control-plane/routes/index.d.ts +0 -6
  213. package/dist/platform/control-plane/routes/index.d.ts.map +1 -1
  214. package/dist/platform/control-plane/routes/index.js +5 -5
  215. package/dist/platform/control-plane/routes/invocation-params.d.ts +23 -0
  216. package/dist/platform/control-plane/routes/invocation-params.d.ts.map +1 -0
  217. package/dist/platform/control-plane/routes/invocation-params.js +9 -0
  218. package/dist/platform/control-plane/routes/register-w3-s2.d.ts +26 -0
  219. package/dist/platform/control-plane/routes/register-w3-s2.d.ts.map +1 -0
  220. package/dist/platform/control-plane/routes/register-w3-s2.js +8 -0
  221. package/dist/platform/control-plane/routes/session-search.d.ts +37 -0
  222. package/dist/platform/control-plane/routes/session-search.d.ts.map +1 -0
  223. package/dist/platform/control-plane/routes/session-search.js +113 -0
  224. package/dist/platform/control-plane/session-broker-gc.d.ts +16 -0
  225. package/dist/platform/control-plane/session-broker-gc.d.ts.map +1 -1
  226. package/dist/platform/control-plane/session-broker-gc.js +23 -6
  227. package/dist/platform/control-plane/session-broker-helpers.d.ts +3 -3
  228. package/dist/platform/control-plane/session-broker-helpers.d.ts.map +1 -1
  229. package/dist/platform/control-plane/session-broker-inputs.d.ts +18 -0
  230. package/dist/platform/control-plane/session-broker-inputs.d.ts.map +1 -1
  231. package/dist/platform/control-plane/session-broker-inputs.js +34 -0
  232. package/dist/platform/control-plane/session-broker-sessions.d.ts +102 -3
  233. package/dist/platform/control-plane/session-broker-sessions.d.ts.map +1 -1
  234. package/dist/platform/control-plane/session-broker-sessions.js +179 -5
  235. package/dist/platform/control-plane/session-broker-state.d.ts +20 -1
  236. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  237. package/dist/platform/control-plane/session-broker-state.js +67 -5
  238. package/dist/platform/control-plane/session-broker.d.ts +51 -38
  239. package/dist/platform/control-plane/session-broker.d.ts.map +1 -1
  240. package/dist/platform/control-plane/session-broker.js +183 -75
  241. package/dist/platform/control-plane/session-store-importer.d.ts +57 -0
  242. package/dist/platform/control-plane/session-store-importer.d.ts.map +1 -0
  243. package/dist/platform/control-plane/session-store-importer.js +227 -0
  244. package/dist/platform/control-plane/session-types.d.ts +142 -7
  245. package/dist/platform/control-plane/session-types.d.ts.map +1 -1
  246. package/dist/platform/core/execution-plan.d.ts +43 -1
  247. package/dist/platform/core/execution-plan.d.ts.map +1 -1
  248. package/dist/platform/core/execution-plan.js +46 -10
  249. package/dist/platform/core/index.d.ts +1 -0
  250. package/dist/platform/core/index.d.ts.map +1 -1
  251. package/dist/platform/core/index.js +1 -0
  252. package/dist/platform/core/orchestrator-runtime.d.ts +21 -1
  253. package/dist/platform/core/orchestrator-runtime.d.ts.map +1 -1
  254. package/dist/platform/core/orchestrator-tool-runtime.d.ts +7 -0
  255. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  256. package/dist/platform/core/orchestrator-tool-runtime.js +10 -0
  257. package/dist/platform/core/orchestrator-turn-loop.d.ts +8 -1
  258. package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
  259. package/dist/platform/core/orchestrator-turn-loop.js +6 -0
  260. package/dist/platform/core/orchestrator.d.ts +6 -0
  261. package/dist/platform/core/orchestrator.d.ts.map +1 -1
  262. package/dist/platform/core/orchestrator.js +15 -0
  263. package/dist/platform/core/plan-decomposition.d.ts +196 -0
  264. package/dist/platform/core/plan-decomposition.d.ts.map +1 -0
  265. package/dist/platform/core/plan-decomposition.js +417 -0
  266. package/dist/platform/core/plan-proposal.d.ts +39 -0
  267. package/dist/platform/core/plan-proposal.d.ts.map +1 -1
  268. package/dist/platform/core/wrfc-routing.d.ts +1 -0
  269. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  270. package/dist/platform/core/wrfc-routing.js +51 -1
  271. package/dist/platform/daemon/boot.d.ts +63 -0
  272. package/dist/platform/daemon/boot.d.ts.map +1 -0
  273. package/dist/platform/daemon/boot.js +60 -0
  274. package/dist/platform/daemon/cli.js +2 -1
  275. package/dist/platform/daemon/control-plane.d.ts.map +1 -1
  276. package/dist/platform/daemon/control-plane.js +50 -1
  277. package/dist/platform/daemon/facade-composition.d.ts.map +1 -1
  278. package/dist/platform/daemon/facade-composition.js +6 -0
  279. package/dist/platform/daemon/facade.d.ts +18 -6
  280. package/dist/platform/daemon/facade.d.ts.map +1 -1
  281. package/dist/platform/daemon/facade.js +50 -43
  282. package/dist/platform/daemon/http/router-route-contexts.d.ts +1 -0
  283. package/dist/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
  284. package/dist/platform/daemon/http/router-route-contexts.js +1 -0
  285. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts +13 -0
  286. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts.map +1 -0
  287. package/dist/platform/daemon/http/router-session-broker-adapter.js +27 -0
  288. package/dist/platform/daemon/http/router.d.ts +1 -1
  289. package/dist/platform/daemon/http/router.d.ts.map +1 -1
  290. package/dist/platform/daemon/http/router.js +7 -22
  291. package/dist/platform/daemon/http/runtime-route-types.d.ts +42 -4
  292. package/dist/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
  293. package/dist/platform/daemon/index.d.ts +2 -0
  294. package/dist/platform/daemon/index.d.ts.map +1 -1
  295. package/dist/platform/daemon/index.js +1 -0
  296. package/dist/platform/daemon/service-manager.d.ts +16 -0
  297. package/dist/platform/daemon/service-manager.d.ts.map +1 -1
  298. package/dist/platform/daemon/service-manager.js +79 -15
  299. package/dist/platform/intelligence/tree-sitter/service.d.ts.map +1 -1
  300. package/dist/platform/intelligence/tree-sitter/service.js +16 -2
  301. package/dist/platform/knowledge/browser-history/readers.d.ts.map +1 -1
  302. package/dist/platform/knowledge/browser-history/readers.js +15 -5
  303. package/dist/platform/knowledge/project-planning/service.d.ts +14 -1
  304. package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
  305. package/dist/platform/knowledge/project-planning/service.js +77 -0
  306. package/dist/platform/knowledge/project-planning/types.d.ts +32 -0
  307. package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
  308. package/dist/platform/orchestration/bookkeeping.d.ts +12 -0
  309. package/dist/platform/orchestration/bookkeeping.d.ts.map +1 -0
  310. package/dist/platform/orchestration/bookkeeping.js +91 -0
  311. package/dist/platform/orchestration/controller-compat.d.ts +14 -0
  312. package/dist/platform/orchestration/controller-compat.d.ts.map +1 -1
  313. package/dist/platform/orchestration/controller-compat.js +18 -4
  314. package/dist/platform/orchestration/engine.d.ts +26 -1
  315. package/dist/platform/orchestration/engine.d.ts.map +1 -1
  316. package/dist/platform/orchestration/engine.js +226 -21
  317. package/dist/platform/orchestration/index.d.ts +6 -4
  318. package/dist/platform/orchestration/index.d.ts.map +1 -1
  319. package/dist/platform/orchestration/index.js +3 -2
  320. package/dist/platform/orchestration/persistence.d.ts.map +1 -1
  321. package/dist/platform/orchestration/persistence.js +4 -1
  322. package/dist/platform/orchestration/phase-runner.d.ts +29 -2
  323. package/dist/platform/orchestration/phase-runner.d.ts.map +1 -1
  324. package/dist/platform/orchestration/phase-runner.js +98 -25
  325. package/dist/platform/orchestration/proposal-workstream.d.ts +56 -0
  326. package/dist/platform/orchestration/proposal-workstream.d.ts.map +1 -0
  327. package/dist/platform/orchestration/proposal-workstream.js +76 -0
  328. package/dist/platform/orchestration/scheduler.d.ts +19 -0
  329. package/dist/platform/orchestration/scheduler.d.ts.map +1 -1
  330. package/dist/platform/orchestration/scheduler.js +16 -0
  331. package/dist/platform/orchestration/types.d.ts +286 -1
  332. package/dist/platform/orchestration/types.d.ts.map +1 -1
  333. package/dist/platform/orchestration/types.js +32 -0
  334. package/dist/platform/orchestration/worktree-isolation.d.ts +33 -0
  335. package/dist/platform/orchestration/worktree-isolation.d.ts.map +1 -0
  336. package/dist/platform/orchestration/worktree-isolation.js +248 -0
  337. package/dist/platform/presentation/glyphs.d.ts +91 -0
  338. package/dist/platform/presentation/glyphs.d.ts.map +1 -0
  339. package/dist/platform/presentation/glyphs.js +93 -0
  340. package/dist/platform/presentation/index.d.ts +28 -0
  341. package/dist/platform/presentation/index.d.ts.map +1 -0
  342. package/dist/platform/presentation/index.js +27 -0
  343. package/dist/platform/presentation/thinking-phrases.d.ts +12 -0
  344. package/dist/platform/presentation/thinking-phrases.d.ts.map +1 -0
  345. package/dist/platform/presentation/thinking-phrases.js +32 -0
  346. package/dist/platform/presentation/tones.d.ts +121 -0
  347. package/dist/platform/presentation/tones.d.ts.map +1 -0
  348. package/dist/platform/presentation/tones.js +145 -0
  349. package/dist/platform/presentation/waiting-wording.d.ts +54 -0
  350. package/dist/platform/presentation/waiting-wording.d.ts.map +1 -0
  351. package/dist/platform/presentation/waiting-wording.js +51 -0
  352. package/dist/platform/providers/runtime-snapshot.d.ts.map +1 -1
  353. package/dist/platform/providers/runtime-snapshot.js +12 -2
  354. package/dist/platform/runtime/bootstrap-services.d.ts +62 -2
  355. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  356. package/dist/platform/runtime/bootstrap-services.js +217 -50
  357. package/dist/platform/runtime/daemon-version-compat.d.ts +39 -0
  358. package/dist/platform/runtime/daemon-version-compat.d.ts.map +1 -0
  359. package/dist/platform/runtime/daemon-version-compat.js +75 -0
  360. package/dist/platform/runtime/detached-daemon-runtime.d.ts +26 -0
  361. package/dist/platform/runtime/detached-daemon-runtime.d.ts.map +1 -0
  362. package/dist/platform/runtime/detached-daemon-runtime.js +49 -0
  363. package/dist/platform/runtime/emitters/workflows.d.ts +1 -1
  364. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  365. package/dist/platform/runtime/events/index.d.ts +13 -0
  366. package/dist/platform/runtime/events/index.d.ts.map +1 -1
  367. package/dist/platform/runtime/events/index.js +13 -0
  368. package/dist/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  369. package/dist/platform/runtime/feature-flags/flags.js +39 -1
  370. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +40 -18
  371. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -1
  372. package/dist/platform/runtime/fleet/adapters/orchestration.js +138 -34
  373. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +13 -0
  374. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -1
  375. package/dist/platform/runtime/fleet/adapters/wrfc.js +48 -1
  376. package/dist/platform/runtime/fleet/registry.d.ts.map +1 -1
  377. package/dist/platform/runtime/fleet/registry.js +38 -4
  378. package/dist/platform/runtime/operator-client.d.ts +20 -2
  379. package/dist/platform/runtime/operator-client.d.ts.map +1 -1
  380. package/dist/platform/runtime/operator-client.js +11 -1
  381. package/dist/platform/runtime/provider-accounts/registry.d.ts.map +1 -1
  382. package/dist/platform/runtime/provider-accounts/registry.js +11 -1
  383. package/dist/platform/runtime/services.d.ts +9 -7
  384. package/dist/platform/runtime/services.d.ts.map +1 -1
  385. package/dist/platform/runtime/services.js +19 -4
  386. package/dist/platform/runtime/session-spine/client.d.ts +234 -0
  387. package/dist/platform/runtime/session-spine/client.d.ts.map +1 -0
  388. package/dist/platform/runtime/session-spine/client.js +449 -0
  389. package/dist/platform/runtime/session-spine/index.d.ts +12 -0
  390. package/dist/platform/runtime/session-spine/index.d.ts.map +1 -0
  391. package/dist/platform/runtime/session-spine/index.js +11 -0
  392. package/dist/platform/runtime/session-spine/union-cache.d.ts +225 -0
  393. package/dist/platform/runtime/session-spine/union-cache.d.ts.map +1 -0
  394. package/dist/platform/runtime/session-spine/union-cache.js +333 -0
  395. package/dist/platform/runtime/shell-command-ops.d.ts +3 -1
  396. package/dist/platform/runtime/shell-command-ops.d.ts.map +1 -1
  397. package/dist/platform/runtime/transports/daemon-http-client-validators.d.ts.map +1 -1
  398. package/dist/platform/runtime/transports/daemon-http-client-validators.js +22 -0
  399. package/dist/platform/runtime/transports/daemon-http-client.d.ts.map +1 -1
  400. package/dist/platform/runtime/transports/daemon-http-client.js +25 -2
  401. package/dist/platform/runtime/transports/http-types.d.ts +9 -2
  402. package/dist/platform/runtime/transports/http-types.d.ts.map +1 -1
  403. package/dist/platform/state/canonical-memory.d.ts +95 -0
  404. package/dist/platform/state/canonical-memory.d.ts.map +1 -0
  405. package/dist/platform/state/canonical-memory.js +155 -0
  406. package/dist/platform/state/code-index-reindex.d.ts +73 -0
  407. package/dist/platform/state/code-index-reindex.d.ts.map +1 -0
  408. package/dist/platform/state/code-index-reindex.js +156 -0
  409. package/dist/platform/state/code-index-store.d.ts.map +1 -1
  410. package/dist/platform/state/code-index-store.js +10 -2
  411. package/dist/platform/state/index.d.ts +8 -0
  412. package/dist/platform/state/index.d.ts.map +1 -1
  413. package/dist/platform/state/index.js +4 -0
  414. package/dist/platform/state/memory-recall-contract.d.ts +63 -0
  415. package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
  416. package/dist/platform/state/memory-recall-contract.js +94 -0
  417. package/dist/platform/state/memory-store.d.ts +2 -0
  418. package/dist/platform/state/memory-store.d.ts.map +1 -1
  419. package/dist/platform/state/memory-store.js +4 -0
  420. package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
  421. package/dist/platform/state/memory-vector-store.js +13 -2
  422. package/dist/platform/state/sqlite-store.d.ts +2 -0
  423. package/dist/platform/state/sqlite-store.d.ts.map +1 -1
  424. package/dist/platform/state/sqlite-store.js +4 -0
  425. package/dist/platform/state/vibe-projection.d.ts +67 -0
  426. package/dist/platform/state/vibe-projection.d.ts.map +1 -0
  427. package/dist/platform/state/vibe-projection.js +115 -0
  428. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  429. package/dist/platform/tools/agent/index.js +8 -0
  430. package/dist/platform/tools/agent/manager.d.ts +12 -0
  431. package/dist/platform/tools/agent/manager.d.ts.map +1 -1
  432. package/dist/platform/tools/agent/manager.js +6 -0
  433. package/dist/platform/tools/agent/schema.d.ts +26 -0
  434. package/dist/platform/tools/agent/schema.d.ts.map +1 -1
  435. package/dist/platform/tools/agent/schema.js +2 -2
  436. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +13 -0
  437. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
  438. package/dist/platform/tools/agent/wrfc-batch-policy.js +60 -0
  439. package/dist/platform/tools/exec/runtime.d.ts +10 -0
  440. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  441. package/dist/platform/tools/exec/runtime.js +22 -5
  442. package/dist/platform/tools/exec/schema.d.ts +1 -1
  443. package/dist/platform/tools/exec/schema.d.ts.map +1 -1
  444. package/dist/platform/tools/exec/schema.js +2 -1
  445. package/dist/platform/tools/index.d.ts +2 -0
  446. package/dist/platform/tools/index.d.ts.map +1 -1
  447. package/dist/platform/tools/index.js +2 -0
  448. package/dist/platform/tools/state/index.d.ts +9 -0
  449. package/dist/platform/tools/state/index.d.ts.map +1 -1
  450. package/dist/platform/tools/state/index.js +60 -3
  451. package/dist/platform/types/foundation-contract.d.ts +1 -1
  452. package/dist/platform/types/foundation-contract.d.ts.map +1 -1
  453. package/dist/platform/types/index.d.ts +1 -1
  454. package/dist/platform/types/index.d.ts.map +1 -1
  455. package/dist/platform/version.js +1 -1
  456. package/package.json +21 -9
  457. package/dist/platform/control-plane/routes/automation.d.ts +0 -3
  458. package/dist/platform/control-plane/routes/automation.d.ts.map +0 -1
  459. package/dist/platform/control-plane/routes/automation.js +0 -63
  460. package/dist/platform/control-plane/routes/context.d.ts +0 -2
  461. package/dist/platform/control-plane/routes/context.d.ts.map +0 -1
  462. package/dist/platform/control-plane/routes/context.js +0 -1
  463. package/dist/platform/control-plane/routes/operator.d.ts +0 -8
  464. package/dist/platform/control-plane/routes/operator.d.ts.map +0 -1
  465. package/dist/platform/control-plane/routes/operator.js +0 -415
  466. package/dist/platform/control-plane/routes/remote.d.ts +0 -3
  467. package/dist/platform/control-plane/routes/remote.d.ts.map +0 -1
  468. package/dist/platform/control-plane/routes/remote.js +0 -35
  469. package/dist/platform/control-plane/routes/sessions.d.ts +0 -3
  470. package/dist/platform/control-plane/routes/sessions.d.ts.map +0 -1
  471. package/dist/platform/control-plane/routes/sessions.js +0 -43
  472. package/dist/platform/control-plane/routes/tasks.d.ts +0 -3
  473. package/dist/platform/control-plane/routes/tasks.d.ts.map +0 -1
  474. package/dist/platform/control-plane/routes/tasks.js +0 -22
@@ -207,6 +207,26 @@ export const FEATURE_FLAGS = [
207
207
  tier: 9,
208
208
  runtimeToggleable: true,
209
209
  },
210
+ {
211
+ id: 'agent-passive-code-injection',
212
+ name: 'Agent Passive Code Injection',
213
+ description: 'Enables per-turn passive retrieval from the repo SOURCE-TREE CODE INDEX (CodeIndexStore) '
214
+ + 'alongside project-memory knowledge, sharing the SAME token budget and relevance floor. '
215
+ + 'When the query would benefit and the index is built, similarity-ranked code chunks are '
216
+ + 'injected as untrusted reference pointers, each recorded on the turn injection record with '
217
+ + 'source=code-index and its honest match label (semantic/lexical). Never injects from an '
218
+ + 'empty or provider-mismatched index, or from a hashed-only (no real semantic) provider — '
219
+ + 'the store exposes each of those and the turn record states which. '
220
+ + 'DEFAULT OFF (unlike agent-passive-knowledge-injection, which defaults on): code injection '
221
+ + 'is a newer, higher-variance signal than reviewed project memory — code chunks carry no '
222
+ + 'review/trust provenance and a weak similarity match can pull in a plausibly-worded but '
223
+ + 'wrong chunk — so this first landing is opt-in, earned on by the same hard-budget + '
224
+ + 'honest-record discipline before it becomes a default. Also respects the embedder’s '
225
+ + 'storage.codeIndexEnabled setting; disable either to revert to memory-only injection.',
226
+ defaultState: 'disabled',
227
+ tier: 9,
228
+ runtimeToggleable: true,
229
+ },
210
230
  {
211
231
  id: 'output-schema-fingerprint',
212
232
  name: 'Output Schema Fingerprints',
@@ -323,11 +343,29 @@ export const FEATURE_FLAGS = [
323
343
  runtimeToggleable: true,
324
344
  },
325
345
  {
346
+ // NOTE: control-plane-gateway is the ONE tier-10 flag that defaults ON (One-Platform
347
+ // Wave 1). A stock daemon (no config) must be able to stream companion chat over SSE;
348
+ // leaving this OFF made a fresh daemon return 503 on the live-stream path (the W1
349
+ // "stock daemon is dead" bug).
350
+ //
351
+ // HONEST SURFACE STATEMENT: flipping this default ON DOES expose surface — just not
352
+ // an UNAUTHENTICATED one. Concretely it turns on: (1) the auth-gated streaming surface
353
+ // — SSE `/api/control-plane/events`, the companion-chat `.../events` stream, and the WS
354
+ // control channel — every one of which returns 401 before any principal is resolved
355
+ // (daemon-sdk/control-routes.ts), and per-channel scopes are enforced on the fan-out
356
+ // (e.g. read:sessions on session-update); and (2) the inert pre-auth login shell — the
357
+ // handful of unauthenticated bootstrap endpoints that carry NO session/runtime data and
358
+ // exist only to establish auth. The default bind stays loopback and the 60/min + 5/min
359
+ // rate limiters are unchanged. It remains runtimeToggleable, so an operator who wants a
360
+ // request/response-only daemon can turn it back off via config
361
+ // (`flags: { 'control-plane-gateway': 'disabled' }`), which the manager honours over
362
+ // this default. Do NOT generalise this to the other tier-10 siblings (slack/discord/web
363
+ // surfaces, delivery-engine, etc.) — they stay OFF until individually validated.
326
364
  id: 'control-plane-gateway',
327
365
  name: 'Control-Plane Gateway',
328
366
  description: 'Enables the shared gateway/control-plane host that serves state snapshots, live streams, '
329
367
  + 'and authenticated automation control APIs to terminal hosts and remote clients.',
330
- defaultState: 'disabled',
368
+ defaultState: 'enabled',
331
369
  tier: 10,
332
370
  runtimeToggleable: true,
333
371
  },
@@ -1,19 +1,30 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ import type { Phase, WorkItem, WorkItemUsage, Workstream } from '../../../orchestration/types.js';
3
+ import type { ProcessCostState, ProcessNode, ProcessUsage } from '../types.js';
4
+ import { workItemNodeId } from './agent.js';
2
5
  /**
3
- * Orchestration-engine fleet adapters (Wave 4, wo701) 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.
6
+ * Live in-flight usage of a work-item's currently-active agent, read from that
7
+ * agent's fleet node at snapshot time (DEBT-4 item 2). Overlaid onto the
8
+ * item's phase-boundary-committed `item.usage` so a RUNNING phase shows real,
9
+ * growing numbers instead of n/a until it completes.
13
10
  */
14
- import type { Phase, WorkItem, Workstream } from '../../../orchestration/types.js';
15
- import type { ProcessNode } from '../types.js';
16
- import { workItemNodeId } from './agent.js';
11
+ export interface LiveItemUsage {
12
+ readonly usage?: ProcessUsage | undefined;
13
+ readonly costUsd?: number | null | undefined;
14
+ readonly costState?: ProcessCostState | undefined;
15
+ }
16
+ /**
17
+ * The usage the fleet DISPLAYS for a work-item: its committed phase-boundary
18
+ * total, plus — only while it is actively 'in-phase' — the live in-flight
19
+ * usage of its current agent. The overlay is applied ONLY for an 'in-phase'
20
+ * item, which is exactly the window in which `item.usage` does NOT yet include
21
+ * the running phase (the engine folds that in at completion — see
22
+ * runItemPhase), so committed + live never double-counts and the two hand off
23
+ * atomically at the phase boundary. Because both operands only ever grow and
24
+ * merge through {@link mergeWorkItemUsage}, presence is MONOTONE: once usage
25
+ * has appeared for an item it never blinks back to n/a (DEBT-4 item 2).
26
+ */
27
+ export declare function displayWorkItemUsage(item: WorkItem, live: LiveItemUsage | undefined): WorkItemUsage;
17
28
  /** Workstream node ids are namespaced to avoid colliding with agent/process ids. */
18
29
  export declare function workstreamNodeId(workstreamId: string): string;
19
30
  /**
@@ -25,9 +36,16 @@ export declare function phaseNodeId(workstreamId: string, phaseId: string): stri
25
36
  export { workItemNodeId };
26
37
  /** The work-item's currently-active agent, i.e. the one driving its live phase run. Undefined once terminal or between phases. */
27
38
  export declare function activeWorkItemAgentId(item: WorkItem): string | undefined;
28
- /** WorkItem -> ProcessNode. Delegates interruptible/killable/steerable to its currently-active agent, mirroring adaptSubtask. */
39
+ /**
40
+ * WorkItem -> ProcessNode. Delegates interruptible/killable/steerable to its
41
+ * currently-active agent, mirroring adaptSubtask. `opts.live` supplies the
42
+ * currently-active agent's in-flight usage so a running phase shows real,
43
+ * growing numbers instead of n/a until it completes (DEBT-4 item 2); omit it
44
+ * (or pass undefined) for the committed-only view.
45
+ */
29
46
  export declare function adaptWorkItem(item: WorkItem, workstreamId: string, parentId: string, opts: {
30
47
  steerable: boolean;
48
+ live?: LiveItemUsage | undefined;
31
49
  }): ProcessNode;
32
50
  /**
33
51
  * Phase -> ProcessNode. Deliberately reports NO usage/cost (mirrors
@@ -39,9 +57,13 @@ export declare function adaptWorkItem(item: WorkItem, workstreamId: string, pare
39
57
  */
40
58
  export declare function adaptPhase(phase: Phase, workstream: Workstream): ProcessNode;
41
59
  /**
42
- * Workstream -> ProcessNode. Root node (no parentId). Sums every item's
43
- * usage/cost exactly once (never through an intermediate phase bucket see
44
- * adaptPhase) so this total can never double-count.
60
+ * Workstream -> ProcessNode. Root node (no parentId). Sums every item's DISPLAY
61
+ * usage/cost (committed total + any live in-flight overlay, resolved once per
62
+ * item) exactly once never through an intermediate phase bucket (see
63
+ * adaptPhase) — so this total can never double-count and never shows n/a while
64
+ * an item is actively producing usage (DEBT-4 item 2). `liveByItemId` supplies
65
+ * the active agents' in-flight usage keyed by item id; omit it for the
66
+ * committed-only view.
45
67
  */
46
- export declare function adaptWorkstream(workstream: Workstream, now: number): ProcessNode;
68
+ export declare function adaptWorkstream(workstream: Workstream, now: number, liveByItemId?: ReadonlyMap<string, LiveItemUsage>): ProcessNode;
47
69
  //# sourceMappingURL=orchestration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/orchestration.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,kIAAkI;AAClI,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAExE;AA6FD,iIAAiI;AACjI,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,CA6C/H;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,WAAW,CAuB5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA+BhF"}
1
+ {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/fleet/adapters/orchestration.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAerF,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACnD;AA2CD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAOnG;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,kIAAkI;AAClI,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAExE;AA0GD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GAAG,WAAW,CAqDjK;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,WAAW,CAuB5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,WAAW,CAgCnI"}
@@ -1,5 +1,77 @@
1
1
  /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ /**
3
+ * Orchestration-engine fleet adapters (Wave 4, wo701) — 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,
@@ -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':
@@ -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 +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,mHAAmH;QACnH,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,sFAAsF;IACtF,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) {