@pellux/goodvibes-sdk 0.37.2 → 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 (555) 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/communication.d.ts +21 -1
  6. package/dist/events/communication.d.ts.map +1 -1
  7. package/dist/events/surfaces.d.ts +25 -3
  8. package/dist/events/surfaces.d.ts.map +1 -1
  9. package/dist/events/surfaces.js +22 -1
  10. package/dist/events/workflows.d.ts +7 -6
  11. package/dist/events/workflows.d.ts.map +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/platform/agents/archetypes.d.ts.map +1 -1
  15. package/dist/platform/agents/archetypes.js +7 -0
  16. package/dist/platform/agents/index.d.ts +1 -0
  17. package/dist/platform/agents/index.d.ts.map +1 -1
  18. package/dist/platform/agents/index.js +1 -0
  19. package/dist/platform/agents/message-bus-core.d.ts +7 -0
  20. package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
  21. package/dist/platform/agents/message-bus-core.js +2 -1
  22. package/dist/platform/agents/orchestrator-runner.d.ts +50 -1
  23. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  24. package/dist/platform/agents/orchestrator-runner.js +172 -7
  25. package/dist/platform/agents/orchestrator.d.ts +78 -6
  26. package/dist/platform/agents/orchestrator.d.ts.map +1 -1
  27. package/dist/platform/agents/orchestrator.js +95 -18
  28. package/dist/platform/agents/planner-decomposition-runner.d.ts +38 -0
  29. package/dist/platform/agents/planner-decomposition-runner.d.ts.map +1 -0
  30. package/dist/platform/agents/planner-decomposition-runner.js +113 -0
  31. package/dist/platform/agents/turn-knowledge-injection.d.ts +192 -0
  32. package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -0
  33. package/dist/platform/agents/turn-knowledge-injection.js +269 -0
  34. package/dist/platform/agents/worktree.d.ts +126 -8
  35. package/dist/platform/agents/worktree.d.ts.map +1 -1
  36. package/dist/platform/agents/worktree.js +240 -19
  37. package/dist/platform/agents/wrfc-controller.d.ts +46 -0
  38. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  39. package/dist/platform/agents/wrfc-controller.js +213 -32
  40. package/dist/platform/agents/wrfc-gate-runtime.d.ts +9 -0
  41. package/dist/platform/agents/wrfc-gate-runtime.d.ts.map +1 -1
  42. package/dist/platform/agents/wrfc-gate-runtime.js +7 -3
  43. package/dist/platform/agents/wrfc-gates.d.ts +1 -1
  44. package/dist/platform/agents/wrfc-gates.d.ts.map +1 -1
  45. package/dist/platform/agents/wrfc-gates.js +7 -1
  46. package/dist/platform/agents/wrfc-types.d.ts +23 -3
  47. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  48. package/dist/platform/automation/types.d.ts +9 -1
  49. package/dist/platform/automation/types.d.ts.map +1 -1
  50. package/dist/platform/calendar/calendar-api-shared.d.ts +25 -0
  51. package/dist/platform/calendar/calendar-api-shared.d.ts.map +1 -0
  52. package/dist/platform/calendar/calendar-api-shared.js +100 -0
  53. package/dist/platform/calendar/calendar-connector.d.ts +79 -0
  54. package/dist/platform/calendar/calendar-connector.d.ts.map +1 -0
  55. package/dist/platform/calendar/calendar-connector.js +155 -0
  56. package/dist/platform/calendar/google-calendar-api.d.ts +25 -0
  57. package/dist/platform/calendar/google-calendar-api.d.ts.map +1 -0
  58. package/dist/platform/calendar/google-calendar-api.js +89 -0
  59. package/dist/platform/calendar/http-fetch-adapter.d.ts +25 -0
  60. package/dist/platform/calendar/http-fetch-adapter.d.ts.map +1 -0
  61. package/dist/platform/calendar/http-fetch-adapter.js +25 -0
  62. package/dist/platform/calendar/ics-parser.d.ts +35 -0
  63. package/dist/platform/calendar/ics-parser.d.ts.map +1 -0
  64. package/dist/platform/calendar/ics-parser.js +236 -0
  65. package/dist/platform/calendar/index.d.ts +41 -0
  66. package/dist/platform/calendar/index.d.ts.map +1 -0
  67. package/dist/platform/calendar/index.js +49 -0
  68. package/dist/platform/calendar/merged-calendar-model.d.ts +67 -0
  69. package/dist/platform/calendar/merged-calendar-model.d.ts.map +1 -0
  70. package/dist/platform/calendar/merged-calendar-model.js +181 -0
  71. package/dist/platform/calendar/microsoft-graph-api.d.ts +25 -0
  72. package/dist/platform/calendar/microsoft-graph-api.d.ts.map +1 -0
  73. package/dist/platform/calendar/microsoft-graph-api.js +95 -0
  74. package/dist/platform/calendar/oauth-flow.d.ts +62 -0
  75. package/dist/platform/calendar/oauth-flow.d.ts.map +1 -0
  76. package/dist/platform/calendar/oauth-flow.js +305 -0
  77. package/dist/platform/calendar/oauth-providers.d.ts +43 -0
  78. package/dist/platform/calendar/oauth-providers.d.ts.map +1 -0
  79. package/dist/platform/calendar/oauth-providers.js +120 -0
  80. package/dist/platform/calendar/oauth-token-store.d.ts +72 -0
  81. package/dist/platform/calendar/oauth-token-store.d.ts.map +1 -0
  82. package/dist/platform/calendar/oauth-token-store.js +189 -0
  83. package/dist/platform/calendar/oauth-types.d.ts +274 -0
  84. package/dist/platform/calendar/oauth-types.d.ts.map +1 -0
  85. package/dist/platform/calendar/oauth-types.js +22 -0
  86. package/dist/platform/calendar/rrule.d.ts +39 -0
  87. package/dist/platform/calendar/rrule.d.ts.map +1 -0
  88. package/dist/platform/calendar/rrule.js +261 -0
  89. package/dist/platform/calendar/subscription-store.d.ts +118 -0
  90. package/dist/platform/calendar/subscription-store.d.ts.map +1 -0
  91. package/dist/platform/calendar/subscription-store.js +293 -0
  92. package/dist/platform/calendar/types.d.ts +170 -0
  93. package/dist/platform/calendar/types.d.ts.map +1 -0
  94. package/dist/platform/calendar/types.js +21 -0
  95. package/dist/platform/companion/companion-chat-attachments.d.ts +29 -0
  96. package/dist/platform/companion/companion-chat-attachments.d.ts.map +1 -0
  97. package/dist/platform/companion/companion-chat-attachments.js +121 -0
  98. package/dist/platform/companion/companion-chat-broker-bridge.d.ts +40 -0
  99. package/dist/platform/companion/companion-chat-broker-bridge.d.ts.map +1 -0
  100. package/dist/platform/companion/companion-chat-broker-bridge.js +14 -0
  101. package/dist/platform/companion/companion-chat-broker-sync.d.ts +38 -0
  102. package/dist/platform/companion/companion-chat-broker-sync.d.ts.map +1 -0
  103. package/dist/platform/companion/companion-chat-broker-sync.js +80 -0
  104. package/dist/platform/companion/companion-chat-gc.d.ts +63 -0
  105. package/dist/platform/companion/companion-chat-gc.d.ts.map +1 -0
  106. package/dist/platform/companion/companion-chat-gc.js +38 -0
  107. package/dist/platform/companion/companion-chat-manager.d.ts +67 -20
  108. package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
  109. package/dist/platform/companion/companion-chat-manager.js +130 -144
  110. package/dist/platform/companion/companion-chat-persistence.d.ts +9 -1
  111. package/dist/platform/companion/companion-chat-persistence.d.ts.map +1 -1
  112. package/dist/platform/companion/companion-chat-persistence.js +10 -2
  113. package/dist/platform/companion/companion-chat-routes.d.ts +2 -1
  114. package/dist/platform/companion/companion-chat-routes.d.ts.map +1 -1
  115. package/dist/platform/companion/companion-chat-routes.js +37 -4
  116. package/dist/platform/config/credential-status.d.ts +28 -0
  117. package/dist/platform/config/credential-status.d.ts.map +1 -0
  118. package/dist/platform/config/credential-status.js +75 -0
  119. package/dist/platform/config/index.d.ts +25 -0
  120. package/dist/platform/config/index.d.ts.map +1 -1
  121. package/dist/platform/config/index.js +18 -0
  122. package/dist/platform/config/manager.d.ts +18 -0
  123. package/dist/platform/config/manager.d.ts.map +1 -1
  124. package/dist/platform/config/manager.js +36 -2
  125. package/dist/platform/config/migrations.d.ts +48 -0
  126. package/dist/platform/config/migrations.d.ts.map +1 -0
  127. package/dist/platform/config/migrations.js +54 -0
  128. package/dist/platform/config/schema-domain-core.d.ts +10 -1
  129. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  130. package/dist/platform/config/schema-domain-core.js +46 -3
  131. package/dist/platform/config/schema-types.d.ts +13 -7
  132. package/dist/platform/config/schema-types.d.ts.map +1 -1
  133. package/dist/platform/config/schema.d.ts.map +1 -1
  134. package/dist/platform/config/schema.js +2 -0
  135. package/dist/platform/control-plane/approval-broker.d.ts +11 -0
  136. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  137. package/dist/platform/control-plane/approval-broker.js +17 -1
  138. package/dist/platform/control-plane/approval-hunk-apply.d.ts +77 -0
  139. package/dist/platform/control-plane/approval-hunk-apply.d.ts.map +1 -0
  140. package/dist/platform/control-plane/approval-hunk-apply.js +80 -0
  141. package/dist/platform/control-plane/gateway-disabled-response.d.ts +20 -0
  142. package/dist/platform/control-plane/gateway-disabled-response.d.ts.map +1 -0
  143. package/dist/platform/control-plane/gateway-disabled-response.js +24 -0
  144. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts +68 -0
  145. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts.map +1 -0
  146. package/dist/platform/control-plane/gateway-scope-enforcement.js +91 -0
  147. package/dist/platform/control-plane/gateway-utils.d.ts +17 -0
  148. package/dist/platform/control-plane/gateway-utils.d.ts.map +1 -1
  149. package/dist/platform/control-plane/gateway-utils.js +30 -0
  150. package/dist/platform/control-plane/gateway.d.ts +12 -2
  151. package/dist/platform/control-plane/gateway.d.ts.map +1 -1
  152. package/dist/platform/control-plane/gateway.js +27 -31
  153. package/dist/platform/control-plane/index.d.ts +6 -1
  154. package/dist/platform/control-plane/index.d.ts.map +1 -1
  155. package/dist/platform/control-plane/index.js +4 -0
  156. package/dist/platform/control-plane/invoke-input-validation.d.ts +56 -0
  157. package/dist/platform/control-plane/invoke-input-validation.d.ts.map +1 -0
  158. package/dist/platform/control-plane/invoke-input-validation.js +163 -0
  159. package/dist/platform/control-plane/method-catalog-admin.d.ts.map +1 -1
  160. package/dist/platform/control-plane/method-catalog-admin.js +12 -1
  161. package/dist/platform/control-plane/method-catalog-calendar.d.ts +16 -0
  162. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -1
  163. package/dist/platform/control-plane/method-catalog-calendar.js +21 -0
  164. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  165. package/dist/platform/control-plane/method-catalog-channels.js +32 -3
  166. package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
  167. package/dist/platform/control-plane/method-catalog-control-automation.js +19 -34
  168. package/dist/platform/control-plane/method-catalog-control-companion.d.ts +15 -0
  169. package/dist/platform/control-plane/method-catalog-control-companion.d.ts.map +1 -0
  170. package/dist/platform/control-plane/method-catalog-control-companion.js +133 -0
  171. package/dist/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
  172. package/dist/platform/control-plane/method-catalog-control-core.js +104 -122
  173. package/dist/platform/control-plane/method-catalog-control.d.ts.map +1 -1
  174. package/dist/platform/control-plane/method-catalog-control.js +4 -0
  175. package/dist/platform/control-plane/method-catalog-email.d.ts +17 -0
  176. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
  177. package/dist/platform/control-plane/method-catalog-email.js +21 -0
  178. package/dist/platform/control-plane/method-catalog-events.d.ts +28 -0
  179. package/dist/platform/control-plane/method-catalog-events.d.ts.map +1 -1
  180. package/dist/platform/control-plane/method-catalog-events.js +74 -1
  181. package/dist/platform/control-plane/method-catalog-fleet.d.ts +24 -0
  182. package/dist/platform/control-plane/method-catalog-fleet.d.ts.map +1 -0
  183. package/dist/platform/control-plane/method-catalog-fleet.js +65 -0
  184. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts +84 -0
  185. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts.map +1 -0
  186. package/dist/platform/control-plane/method-catalog-route-reconcile.js +103 -0
  187. package/dist/platform/control-plane/method-catalog-shared.d.ts +29 -0
  188. package/dist/platform/control-plane/method-catalog-shared.d.ts.map +1 -1
  189. package/dist/platform/control-plane/method-catalog.d.ts +9 -0
  190. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  191. package/dist/platform/control-plane/method-catalog.js +32 -3
  192. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts +8 -0
  193. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
  194. package/dist/platform/control-plane/operator-contract-schemas-admin.js +22 -1
  195. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts +18 -0
  196. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts.map +1 -0
  197. package/dist/platform/control-plane/operator-contract-schemas-fleet.js +182 -0
  198. package/dist/platform/control-plane/operator-contract-schemas-permissions.d.ts.map +1 -1
  199. package/dist/platform/control-plane/operator-contract-schemas-permissions.js +5 -0
  200. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts +29 -0
  201. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts.map +1 -1
  202. package/dist/platform/control-plane/operator-contract-schemas-runtime.js +57 -3
  203. package/dist/platform/control-plane/operator-contract-schemas.d.ts +1 -0
  204. package/dist/platform/control-plane/operator-contract-schemas.d.ts.map +1 -1
  205. package/dist/platform/control-plane/operator-contract-schemas.js +1 -0
  206. package/dist/platform/control-plane/operator-contract.d.ts.map +1 -1
  207. package/dist/platform/control-plane/operator-contract.js +8 -0
  208. package/dist/platform/control-plane/routes/checkpoints.d.ts +39 -0
  209. package/dist/platform/control-plane/routes/checkpoints.d.ts.map +1 -0
  210. package/dist/platform/control-plane/routes/checkpoints.js +166 -0
  211. package/dist/platform/control-plane/routes/fleet.d.ts +53 -0
  212. package/dist/platform/control-plane/routes/fleet.d.ts.map +1 -0
  213. package/dist/platform/control-plane/routes/fleet.js +153 -0
  214. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts +30 -0
  215. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts.map +1 -0
  216. package/dist/platform/control-plane/routes/gateway-verb-error.js +36 -0
  217. package/dist/platform/control-plane/routes/index.d.ts +0 -6
  218. package/dist/platform/control-plane/routes/index.d.ts.map +1 -1
  219. package/dist/platform/control-plane/routes/index.js +5 -5
  220. package/dist/platform/control-plane/routes/invocation-params.d.ts +23 -0
  221. package/dist/platform/control-plane/routes/invocation-params.d.ts.map +1 -0
  222. package/dist/platform/control-plane/routes/invocation-params.js +9 -0
  223. package/dist/platform/control-plane/routes/register-w3-s2.d.ts +26 -0
  224. package/dist/platform/control-plane/routes/register-w3-s2.d.ts.map +1 -0
  225. package/dist/platform/control-plane/routes/register-w3-s2.js +8 -0
  226. package/dist/platform/control-plane/routes/session-search.d.ts +37 -0
  227. package/dist/platform/control-plane/routes/session-search.d.ts.map +1 -0
  228. package/dist/platform/control-plane/routes/session-search.js +113 -0
  229. package/dist/platform/control-plane/session-broker-gc.d.ts +16 -0
  230. package/dist/platform/control-plane/session-broker-gc.d.ts.map +1 -1
  231. package/dist/platform/control-plane/session-broker-gc.js +23 -6
  232. package/dist/platform/control-plane/session-broker-helpers.d.ts +3 -3
  233. package/dist/platform/control-plane/session-broker-helpers.d.ts.map +1 -1
  234. package/dist/platform/control-plane/session-broker-inputs.d.ts +18 -0
  235. package/dist/platform/control-plane/session-broker-inputs.d.ts.map +1 -1
  236. package/dist/platform/control-plane/session-broker-inputs.js +34 -0
  237. package/dist/platform/control-plane/session-broker-sessions.d.ts +102 -3
  238. package/dist/platform/control-plane/session-broker-sessions.d.ts.map +1 -1
  239. package/dist/platform/control-plane/session-broker-sessions.js +179 -5
  240. package/dist/platform/control-plane/session-broker-state.d.ts +20 -1
  241. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  242. package/dist/platform/control-plane/session-broker-state.js +67 -5
  243. package/dist/platform/control-plane/session-broker.d.ts +51 -38
  244. package/dist/platform/control-plane/session-broker.d.ts.map +1 -1
  245. package/dist/platform/control-plane/session-broker.js +183 -75
  246. package/dist/platform/control-plane/session-store-importer.d.ts +57 -0
  247. package/dist/platform/control-plane/session-store-importer.d.ts.map +1 -0
  248. package/dist/platform/control-plane/session-store-importer.js +227 -0
  249. package/dist/platform/control-plane/session-types.d.ts +142 -7
  250. package/dist/platform/control-plane/session-types.d.ts.map +1 -1
  251. package/dist/platform/core/adaptive-planner.d.ts +50 -0
  252. package/dist/platform/core/adaptive-planner.d.ts.map +1 -1
  253. package/dist/platform/core/adaptive-planner.js +49 -0
  254. package/dist/platform/core/execution-plan.d.ts +43 -1
  255. package/dist/platform/core/execution-plan.d.ts.map +1 -1
  256. package/dist/platform/core/execution-plan.js +46 -10
  257. package/dist/platform/core/index.d.ts +2 -0
  258. package/dist/platform/core/index.d.ts.map +1 -1
  259. package/dist/platform/core/index.js +2 -0
  260. package/dist/platform/core/orchestrator-runtime.d.ts +31 -0
  261. package/dist/platform/core/orchestrator-runtime.d.ts.map +1 -1
  262. package/dist/platform/core/orchestrator-tool-runtime.d.ts +7 -0
  263. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  264. package/dist/platform/core/orchestrator-tool-runtime.js +10 -0
  265. package/dist/platform/core/orchestrator-turn-loop.d.ts +35 -1
  266. package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
  267. package/dist/platform/core/orchestrator-turn-loop.js +121 -3
  268. package/dist/platform/core/orchestrator.d.ts +67 -0
  269. package/dist/platform/core/orchestrator.d.ts.map +1 -1
  270. package/dist/platform/core/orchestrator.js +89 -1
  271. package/dist/platform/core/plan-decomposition.d.ts +196 -0
  272. package/dist/platform/core/plan-decomposition.d.ts.map +1 -0
  273. package/dist/platform/core/plan-decomposition.js +417 -0
  274. package/dist/platform/core/plan-proposal.d.ts +204 -0
  275. package/dist/platform/core/plan-proposal.d.ts.map +1 -0
  276. package/dist/platform/core/plan-proposal.js +296 -0
  277. package/dist/platform/core/wrfc-routing.d.ts +1 -0
  278. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  279. package/dist/platform/core/wrfc-routing.js +51 -1
  280. package/dist/platform/daemon/boot.d.ts +63 -0
  281. package/dist/platform/daemon/boot.d.ts.map +1 -0
  282. package/dist/platform/daemon/boot.js +60 -0
  283. package/dist/platform/daemon/cli.js +2 -1
  284. package/dist/platform/daemon/control-plane.d.ts.map +1 -1
  285. package/dist/platform/daemon/control-plane.js +50 -1
  286. package/dist/platform/daemon/facade-composition.d.ts.map +1 -1
  287. package/dist/platform/daemon/facade-composition.js +6 -0
  288. package/dist/platform/daemon/facade.d.ts +18 -6
  289. package/dist/platform/daemon/facade.d.ts.map +1 -1
  290. package/dist/platform/daemon/facade.js +50 -43
  291. package/dist/platform/daemon/http/router-route-contexts.d.ts +1 -0
  292. package/dist/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
  293. package/dist/platform/daemon/http/router-route-contexts.js +1 -0
  294. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts +13 -0
  295. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts.map +1 -0
  296. package/dist/platform/daemon/http/router-session-broker-adapter.js +27 -0
  297. package/dist/platform/daemon/http/router.d.ts +1 -1
  298. package/dist/platform/daemon/http/router.d.ts.map +1 -1
  299. package/dist/platform/daemon/http/router.js +7 -22
  300. package/dist/platform/daemon/http/runtime-route-types.d.ts +42 -4
  301. package/dist/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
  302. package/dist/platform/daemon/index.d.ts +2 -0
  303. package/dist/platform/daemon/index.d.ts.map +1 -1
  304. package/dist/platform/daemon/index.js +1 -0
  305. package/dist/platform/daemon/service-manager.d.ts +16 -0
  306. package/dist/platform/daemon/service-manager.d.ts.map +1 -1
  307. package/dist/platform/daemon/service-manager.js +79 -15
  308. package/dist/platform/intelligence/tree-sitter/service.d.ts.map +1 -1
  309. package/dist/platform/intelligence/tree-sitter/service.js +16 -2
  310. package/dist/platform/knowledge/browser-history/readers.d.ts.map +1 -1
  311. package/dist/platform/knowledge/browser-history/readers.js +15 -5
  312. package/dist/platform/knowledge/knowledge-api.d.ts +26 -0
  313. package/dist/platform/knowledge/knowledge-api.d.ts.map +1 -1
  314. package/dist/platform/knowledge/knowledge-api.js +11 -0
  315. package/dist/platform/knowledge/project-planning/service.d.ts +14 -1
  316. package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
  317. package/dist/platform/knowledge/project-planning/service.js +77 -0
  318. package/dist/platform/knowledge/project-planning/types.d.ts +32 -0
  319. package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
  320. package/dist/platform/orchestration/bookkeeping.d.ts +12 -0
  321. package/dist/platform/orchestration/bookkeeping.d.ts.map +1 -0
  322. package/dist/platform/orchestration/bookkeeping.js +91 -0
  323. package/dist/platform/orchestration/budget.d.ts +22 -0
  324. package/dist/platform/orchestration/budget.d.ts.map +1 -0
  325. package/dist/platform/orchestration/budget.js +35 -0
  326. package/dist/platform/orchestration/cancellation.d.ts +31 -0
  327. package/dist/platform/orchestration/cancellation.d.ts.map +1 -0
  328. package/dist/platform/orchestration/cancellation.js +25 -0
  329. package/dist/platform/orchestration/controller-compat.d.ts +46 -0
  330. package/dist/platform/orchestration/controller-compat.d.ts.map +1 -0
  331. package/dist/platform/orchestration/controller-compat.js +27 -0
  332. package/dist/platform/orchestration/dirty-guard.d.ts +32 -0
  333. package/dist/platform/orchestration/dirty-guard.d.ts.map +1 -0
  334. package/dist/platform/orchestration/dirty-guard.js +147 -0
  335. package/dist/platform/orchestration/engine.d.ts +82 -0
  336. package/dist/platform/orchestration/engine.d.ts.map +1 -0
  337. package/dist/platform/orchestration/engine.js +623 -0
  338. package/dist/platform/orchestration/index.d.ts +20 -0
  339. package/dist/platform/orchestration/index.d.ts.map +1 -0
  340. package/dist/platform/orchestration/index.js +11 -0
  341. package/dist/platform/orchestration/persistence.d.ts +24 -0
  342. package/dist/platform/orchestration/persistence.d.ts.map +1 -0
  343. package/dist/platform/orchestration/persistence.js +179 -0
  344. package/dist/platform/orchestration/phase-runner.d.ts +114 -0
  345. package/dist/platform/orchestration/phase-runner.d.ts.map +1 -0
  346. package/dist/platform/orchestration/phase-runner.js +347 -0
  347. package/dist/platform/orchestration/proposal-workstream.d.ts +56 -0
  348. package/dist/platform/orchestration/proposal-workstream.d.ts.map +1 -0
  349. package/dist/platform/orchestration/proposal-workstream.js +76 -0
  350. package/dist/platform/orchestration/scheduler.d.ts +64 -0
  351. package/dist/platform/orchestration/scheduler.d.ts.map +1 -0
  352. package/dist/platform/orchestration/scheduler.js +73 -0
  353. package/dist/platform/orchestration/types.d.ts +535 -0
  354. package/dist/platform/orchestration/types.d.ts.map +1 -0
  355. package/dist/platform/orchestration/types.js +47 -0
  356. package/dist/platform/orchestration/worktree-isolation.d.ts +33 -0
  357. package/dist/platform/orchestration/worktree-isolation.d.ts.map +1 -0
  358. package/dist/platform/orchestration/worktree-isolation.js +248 -0
  359. package/dist/platform/presentation/glyphs.d.ts +91 -0
  360. package/dist/platform/presentation/glyphs.d.ts.map +1 -0
  361. package/dist/platform/presentation/glyphs.js +93 -0
  362. package/dist/platform/presentation/index.d.ts +28 -0
  363. package/dist/platform/presentation/index.d.ts.map +1 -0
  364. package/dist/platform/presentation/index.js +27 -0
  365. package/dist/platform/presentation/thinking-phrases.d.ts +12 -0
  366. package/dist/platform/presentation/thinking-phrases.d.ts.map +1 -0
  367. package/dist/platform/presentation/thinking-phrases.js +32 -0
  368. package/dist/platform/presentation/tones.d.ts +121 -0
  369. package/dist/platform/presentation/tones.d.ts.map +1 -0
  370. package/dist/platform/presentation/tones.js +145 -0
  371. package/dist/platform/presentation/waiting-wording.d.ts +54 -0
  372. package/dist/platform/presentation/waiting-wording.d.ts.map +1 -0
  373. package/dist/platform/presentation/waiting-wording.js +51 -0
  374. package/dist/platform/providers/runtime-snapshot.d.ts.map +1 -1
  375. package/dist/platform/providers/runtime-snapshot.js +12 -2
  376. package/dist/platform/runtime/bootstrap-services.d.ts +62 -2
  377. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  378. package/dist/platform/runtime/bootstrap-services.js +217 -50
  379. package/dist/platform/runtime/daemon-version-compat.d.ts +39 -0
  380. package/dist/platform/runtime/daemon-version-compat.d.ts.map +1 -0
  381. package/dist/platform/runtime/daemon-version-compat.js +75 -0
  382. package/dist/platform/runtime/detached-daemon-runtime.d.ts +26 -0
  383. package/dist/platform/runtime/detached-daemon-runtime.d.ts.map +1 -0
  384. package/dist/platform/runtime/detached-daemon-runtime.js +49 -0
  385. package/dist/platform/runtime/emitters/communication.d.ts +11 -0
  386. package/dist/platform/runtime/emitters/communication.d.ts.map +1 -1
  387. package/dist/platform/runtime/emitters/communication.js +9 -0
  388. package/dist/platform/runtime/emitters/workflows.d.ts +1 -1
  389. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  390. package/dist/platform/runtime/events/index.d.ts +13 -0
  391. package/dist/platform/runtime/events/index.d.ts.map +1 -1
  392. package/dist/platform/runtime/events/index.js +13 -0
  393. package/dist/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  394. package/dist/platform/runtime/feature-flags/flags.js +56 -1
  395. package/dist/platform/runtime/fleet/adapters/agent.d.ts +56 -0
  396. package/dist/platform/runtime/fleet/adapters/agent.d.ts.map +1 -0
  397. package/dist/platform/runtime/fleet/adapters/agent.js +143 -0
  398. package/dist/platform/runtime/fleet/adapters/automation.d.ts +30 -0
  399. package/dist/platform/runtime/fleet/adapters/automation.d.ts.map +1 -0
  400. package/dist/platform/runtime/fleet/adapters/automation.js +41 -0
  401. package/dist/platform/runtime/fleet/adapters/background-process.d.ts +12 -0
  402. package/dist/platform/runtime/fleet/adapters/background-process.d.ts.map +1 -0
  403. package/dist/platform/runtime/fleet/adapters/background-process.js +46 -0
  404. package/dist/platform/runtime/fleet/adapters/code-index.d.ts +21 -0
  405. package/dist/platform/runtime/fleet/adapters/code-index.d.ts.map +1 -0
  406. package/dist/platform/runtime/fleet/adapters/code-index.js +44 -0
  407. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +69 -0
  408. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -0
  409. package/dist/platform/runtime/fleet/adapters/orchestration.js +329 -0
  410. package/dist/platform/runtime/fleet/adapters/schedule.d.ts +14 -0
  411. package/dist/platform/runtime/fleet/adapters/schedule.d.ts.map +1 -0
  412. package/dist/platform/runtime/fleet/adapters/schedule.js +28 -0
  413. package/dist/platform/runtime/fleet/adapters/trigger.d.ts +12 -0
  414. package/dist/platform/runtime/fleet/adapters/trigger.d.ts.map +1 -0
  415. package/dist/platform/runtime/fleet/adapters/trigger.js +22 -0
  416. package/dist/platform/runtime/fleet/adapters/watcher.d.ts +13 -0
  417. package/dist/platform/runtime/fleet/adapters/watcher.d.ts.map +1 -0
  418. package/dist/platform/runtime/fleet/adapters/watcher.js +47 -0
  419. package/dist/platform/runtime/fleet/adapters/workflow.d.ts +11 -0
  420. package/dist/platform/runtime/fleet/adapters/workflow.d.ts.map +1 -0
  421. package/dist/platform/runtime/fleet/adapters/workflow.js +34 -0
  422. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +35 -0
  423. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -0
  424. package/dist/platform/runtime/fleet/adapters/wrfc.js +275 -0
  425. package/dist/platform/runtime/fleet/index.d.ts +10 -0
  426. package/dist/platform/runtime/fleet/index.d.ts.map +1 -0
  427. package/dist/platform/runtime/fleet/index.js +6 -0
  428. package/dist/platform/runtime/fleet/registry.d.ts +113 -0
  429. package/dist/platform/runtime/fleet/registry.d.ts.map +1 -0
  430. package/dist/platform/runtime/fleet/registry.js +664 -0
  431. package/dist/platform/runtime/fleet/types.d.ts +199 -0
  432. package/dist/platform/runtime/fleet/types.d.ts.map +1 -0
  433. package/dist/platform/runtime/fleet/types.js +2 -0
  434. package/dist/platform/runtime/operator-client.d.ts +20 -2
  435. package/dist/platform/runtime/operator-client.d.ts.map +1 -1
  436. package/dist/platform/runtime/operator-client.js +11 -1
  437. package/dist/platform/runtime/provider-accounts/registry.d.ts.map +1 -1
  438. package/dist/platform/runtime/provider-accounts/registry.js +11 -1
  439. package/dist/platform/runtime/runtime-knowledge-api.d.ts +1 -1
  440. package/dist/platform/runtime/runtime-knowledge-api.d.ts.map +1 -1
  441. package/dist/platform/runtime/runtime-knowledge-api.js +1 -0
  442. package/dist/platform/runtime/services.d.ts +48 -0
  443. package/dist/platform/runtime/services.d.ts.map +1 -1
  444. package/dist/platform/runtime/services.js +95 -2
  445. package/dist/platform/runtime/session-spine/client.d.ts +234 -0
  446. package/dist/platform/runtime/session-spine/client.d.ts.map +1 -0
  447. package/dist/platform/runtime/session-spine/client.js +449 -0
  448. package/dist/platform/runtime/session-spine/index.d.ts +12 -0
  449. package/dist/platform/runtime/session-spine/index.d.ts.map +1 -0
  450. package/dist/platform/runtime/session-spine/index.js +11 -0
  451. package/dist/platform/runtime/session-spine/union-cache.d.ts +225 -0
  452. package/dist/platform/runtime/session-spine/union-cache.d.ts.map +1 -0
  453. package/dist/platform/runtime/session-spine/union-cache.js +333 -0
  454. package/dist/platform/runtime/shell-command-ops.d.ts +3 -1
  455. package/dist/platform/runtime/shell-command-ops.d.ts.map +1 -1
  456. package/dist/platform/runtime/transports/daemon-http-client-validators.d.ts.map +1 -1
  457. package/dist/platform/runtime/transports/daemon-http-client-validators.js +22 -0
  458. package/dist/platform/runtime/transports/daemon-http-client.d.ts.map +1 -1
  459. package/dist/platform/runtime/transports/daemon-http-client.js +25 -2
  460. package/dist/platform/runtime/transports/http-types.d.ts +9 -2
  461. package/dist/platform/runtime/transports/http-types.d.ts.map +1 -1
  462. package/dist/platform/state/canonical-memory.d.ts +95 -0
  463. package/dist/platform/state/canonical-memory.d.ts.map +1 -0
  464. package/dist/platform/state/canonical-memory.js +155 -0
  465. package/dist/platform/state/code-index-chunking.d.ts +49 -0
  466. package/dist/platform/state/code-index-chunking.d.ts.map +1 -0
  467. package/dist/platform/state/code-index-chunking.js +111 -0
  468. package/dist/platform/state/code-index-db.d.ts +53 -0
  469. package/dist/platform/state/code-index-db.d.ts.map +1 -0
  470. package/dist/platform/state/code-index-db.js +101 -0
  471. package/dist/platform/state/code-index-reindex.d.ts +73 -0
  472. package/dist/platform/state/code-index-reindex.d.ts.map +1 -0
  473. package/dist/platform/state/code-index-reindex.js +156 -0
  474. package/dist/platform/state/code-index-store.d.ts +175 -0
  475. package/dist/platform/state/code-index-store.d.ts.map +1 -0
  476. package/dist/platform/state/code-index-store.js +620 -0
  477. package/dist/platform/state/index.d.ts +12 -2
  478. package/dist/platform/state/index.d.ts.map +1 -1
  479. package/dist/platform/state/index.js +6 -1
  480. package/dist/platform/state/knowledge-injection.d.ts +23 -0
  481. package/dist/platform/state/knowledge-injection.d.ts.map +1 -1
  482. package/dist/platform/state/knowledge-injection.js +34 -19
  483. package/dist/platform/state/memory-recall-contract.d.ts +63 -0
  484. package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
  485. package/dist/platform/state/memory-recall-contract.js +94 -0
  486. package/dist/platform/state/memory-store.d.ts +2 -0
  487. package/dist/platform/state/memory-store.d.ts.map +1 -1
  488. package/dist/platform/state/memory-store.js +4 -0
  489. package/dist/platform/state/memory-vector-store.d.ts +1 -13
  490. package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
  491. package/dist/platform/state/memory-vector-store.js +18 -39
  492. package/dist/platform/state/sqlite-store.d.ts +2 -0
  493. package/dist/platform/state/sqlite-store.d.ts.map +1 -1
  494. package/dist/platform/state/sqlite-store.js +4 -0
  495. package/dist/platform/state/sqlite-vec-loader.d.ts +25 -0
  496. package/dist/platform/state/sqlite-vec-loader.d.ts.map +1 -0
  497. package/dist/platform/state/sqlite-vec-loader.js +43 -0
  498. package/dist/platform/state/vibe-projection.d.ts +67 -0
  499. package/dist/platform/state/vibe-projection.d.ts.map +1 -0
  500. package/dist/platform/state/vibe-projection.js +115 -0
  501. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  502. package/dist/platform/tools/agent/index.js +8 -0
  503. package/dist/platform/tools/agent/manager.d.ts +140 -1
  504. package/dist/platform/tools/agent/manager.d.ts.map +1 -1
  505. package/dist/platform/tools/agent/manager.js +143 -1
  506. package/dist/platform/tools/agent/schema.d.ts +26 -0
  507. package/dist/platform/tools/agent/schema.d.ts.map +1 -1
  508. package/dist/platform/tools/agent/schema.js +2 -2
  509. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +13 -0
  510. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
  511. package/dist/platform/tools/agent/wrfc-batch-policy.js +60 -0
  512. package/dist/platform/tools/exec/runtime.d.ts +10 -0
  513. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  514. package/dist/platform/tools/exec/runtime.js +161 -49
  515. package/dist/platform/tools/exec/schema.d.ts +3 -1
  516. package/dist/platform/tools/exec/schema.d.ts.map +1 -1
  517. package/dist/platform/tools/exec/schema.js +2 -1
  518. package/dist/platform/tools/fetch/runtime.d.ts +7 -0
  519. package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
  520. package/dist/platform/tools/fetch/runtime.js +8 -6
  521. package/dist/platform/tools/index.d.ts +2 -0
  522. package/dist/platform/tools/index.d.ts.map +1 -1
  523. package/dist/platform/tools/index.js +2 -0
  524. package/dist/platform/tools/registry.d.ts +9 -3
  525. package/dist/platform/tools/registry.d.ts.map +1 -1
  526. package/dist/platform/tools/registry.js +9 -3
  527. package/dist/platform/tools/state/index.d.ts +9 -0
  528. package/dist/platform/tools/state/index.d.ts.map +1 -1
  529. package/dist/platform/tools/state/index.js +60 -3
  530. package/dist/platform/types/foundation-contract.d.ts +1 -1
  531. package/dist/platform/types/foundation-contract.d.ts.map +1 -1
  532. package/dist/platform/types/index.d.ts +1 -1
  533. package/dist/platform/types/index.d.ts.map +1 -1
  534. package/dist/platform/types/tools.d.ts +14 -1
  535. package/dist/platform/types/tools.d.ts.map +1 -1
  536. package/dist/platform/version.js +1 -1
  537. package/package.json +29 -9
  538. package/dist/platform/control-plane/routes/automation.d.ts +0 -3
  539. package/dist/platform/control-plane/routes/automation.d.ts.map +0 -1
  540. package/dist/platform/control-plane/routes/automation.js +0 -63
  541. package/dist/platform/control-plane/routes/context.d.ts +0 -2
  542. package/dist/platform/control-plane/routes/context.d.ts.map +0 -1
  543. package/dist/platform/control-plane/routes/context.js +0 -1
  544. package/dist/platform/control-plane/routes/operator.d.ts +0 -8
  545. package/dist/platform/control-plane/routes/operator.d.ts.map +0 -1
  546. package/dist/platform/control-plane/routes/operator.js +0 -415
  547. package/dist/platform/control-plane/routes/remote.d.ts +0 -3
  548. package/dist/platform/control-plane/routes/remote.d.ts.map +0 -1
  549. package/dist/platform/control-plane/routes/remote.js +0 -35
  550. package/dist/platform/control-plane/routes/sessions.d.ts +0 -3
  551. package/dist/platform/control-plane/routes/sessions.d.ts.map +0 -1
  552. package/dist/platform/control-plane/routes/sessions.js +0 -43
  553. package/dist/platform/control-plane/routes/tasks.d.ts +0 -3
  554. package/dist/platform/control-plane/routes/tasks.d.ts.map +0 -1
  555. package/dist/platform/control-plane/routes/tasks.js +0 -22
@@ -0,0 +1,664 @@
1
+ /** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
2
+ import { adaptAgent } from './adapters/agent.js';
3
+ import { activeSubtaskMemberAgentId, adaptChain, adaptSubtask, repriceWrfcOwnerNode } from './adapters/wrfc.js';
4
+ import { adaptWorkflow } from './adapters/workflow.js';
5
+ import { adaptTrigger } from './adapters/trigger.js';
6
+ import { adaptSchedule } from './adapters/schedule.js';
7
+ import { adaptWatcher } from './adapters/watcher.js';
8
+ import { adaptBackgroundProcess } from './adapters/background-process.js';
9
+ import { adaptAutomationJob, isAutomationJobRaw } from './adapters/automation.js';
10
+ import { activeWorkItemAgentId, adaptPhase, adaptWorkItem, adaptWorkstream, phaseNodeId, workItemNodeId, workstreamNodeId, } from './adapters/orchestration.js';
11
+ import { adaptCodeIndex } from './adapters/code-index.js';
12
+ import { logger } from '../../utils/logger.js';
13
+ import { summarizeError } from '../../utils/error-display.js';
14
+ /** Default stalled threshold: running agent with no bus activity for this long → 'stalled'. */
15
+ export const DEFAULT_STALLED_THRESHOLD_MS = 20_000;
16
+ /** Default coalesced tick interval for subscriber notification. */
17
+ export const DEFAULT_TICK_INTERVAL_MS = 750;
18
+ /**
19
+ * TTL for a steer message, deliberately much larger than
20
+ * AgentMessageBus's own DEFAULT_TTL_MS (5 min, message-bus-core.ts). A
21
+ * steer queued against an agent mid long-running tool call (build, test
22
+ * suite) must survive the wait for that tool to return rather than
23
+ * silently expiring before the agent reaches its next turn boundary.
24
+ */
25
+ export const STEER_TTL_MS = 30 * 60 * 1000;
26
+ const defaultTimers = {
27
+ setInterval: (callback, intervalMs) => {
28
+ const handle = setInterval(callback, intervalMs);
29
+ // Unref at the creation site so a dangling tick never keeps the process
30
+ // alive if a consumer forgets to dispose. The registry also unrefs the
31
+ // returned handle via unrefHandle() for injected timer impls; this inline
32
+ // unref keeps the raw setInterval site self-contained (invariant guard).
33
+ handle.unref?.();
34
+ return handle;
35
+ },
36
+ clearInterval: (handle) => clearInterval(handle),
37
+ };
38
+ function unrefHandle(handle) {
39
+ if (handle !== null && typeof handle === 'object' && 'unref' in handle) {
40
+ const unref = handle.unref;
41
+ if (typeof unref === 'function')
42
+ unref.call(handle);
43
+ }
44
+ }
45
+ /**
46
+ * Change signature over the fields that constitute a MATERIAL change.
47
+ * Deliberately excludes elapsedMs/capturedAt/activity.at — continuously
48
+ * varying derived values must not wake subscribers every tick.
49
+ * Joined with an escaped NUL so no printable field value can collide.
50
+ */
51
+ function snapshotSignature(nodes) {
52
+ const parts = [];
53
+ for (const node of nodes) {
54
+ parts.push(node.id, node.kind, node.parentId ?? '', node.state, node.label, String(node.completedAt ?? ''), node.usage
55
+ ? `${node.usage.inputTokens}:${node.usage.outputTokens}:${node.usage.toolCallCount}:${node.usage.turnCount}`
56
+ : '', node.currentActivity ? `${node.currentActivity.kind}=${node.currentActivity.text}` : '', String(node.costUsd ?? ''), node.costState, node.sessionRef?.sessionId ?? '');
57
+ }
58
+ return parts.join('\u0000');
59
+ }
60
+ /** Create the live process registry over the already-composed managers. */
61
+ export function createProcessRegistry(deps) {
62
+ const now = deps.now ?? (() => Date.now());
63
+ const stalledThresholdMs = deps.stalledThresholdMs ?? DEFAULT_STALLED_THRESHOLD_MS;
64
+ const tickIntervalMs = deps.tickIntervalMs ?? DEFAULT_TICK_INTERVAL_MS;
65
+ const timers = deps.timers ?? defaultTimers;
66
+ // ── Activity side-table (the only liveness mechanism, registry-owned) ─────
67
+ const activity = new Map();
68
+ const busUnsubscribers = [];
69
+ let disposed = false;
70
+ function recordActivity(agentId, entry) {
71
+ activity.set(agentId, { ...entry, at: now() });
72
+ }
73
+ if (deps.runtimeBus) {
74
+ busUnsubscribers.push(deps.runtimeBus.onDomain('agents', (envelope) => {
75
+ const event = envelope.payload;
76
+ const prior = activity.get(event.agentId);
77
+ switch (event.type) {
78
+ case 'AGENT_SPAWNING':
79
+ recordActivity(event.agentId, { state: 'queued' });
80
+ break;
81
+ case 'AGENT_RUNNING':
82
+ case 'AGENT_AWAITING_MESSAGE':
83
+ case 'AGENT_FINALIZING':
84
+ recordActivity(event.agentId, { state: 'thinking', activity: prior?.activity });
85
+ break;
86
+ case 'AGENT_AWAITING_TOOL':
87
+ recordActivity(event.agentId, {
88
+ state: 'executing-tool',
89
+ activity: { kind: 'tool', text: event.tool, toolName: event.tool, at: now() },
90
+ });
91
+ break;
92
+ case 'AGENT_STREAM_DELTA':
93
+ recordActivity(event.agentId, { state: 'streaming', activity: prior?.activity });
94
+ break;
95
+ case 'AGENT_PROGRESS':
96
+ // progress is already `Turn N · ToolName` (orchestrator-runner).
97
+ recordActivity(event.agentId, {
98
+ state: 'executing-tool',
99
+ activity: { kind: 'phase', text: event.progress, at: now() },
100
+ });
101
+ break;
102
+ case 'AGENT_COMPLETED':
103
+ recordActivity(event.agentId, { state: 'done', activity: prior?.activity });
104
+ break;
105
+ case 'AGENT_FAILED':
106
+ recordActivity(event.agentId, { state: 'failed', activity: prior?.activity });
107
+ break;
108
+ default:
109
+ break;
110
+ }
111
+ }));
112
+ busUnsubscribers.push(deps.runtimeBus.on('STREAM_RETRY', (envelope) => {
113
+ const agentId = envelope.agentId;
114
+ if (!agentId)
115
+ return;
116
+ const prior = activity.get(agentId);
117
+ recordActivity(agentId, { state: 'retrying', activity: prior?.activity });
118
+ }));
119
+ }
120
+ // ── Query assembly (aggregate-on-read, all O(n) in-memory scans) ──────────
121
+ function collectPendingApprovals() {
122
+ const agentIds = new Set();
123
+ const sessionIds = new Set();
124
+ if (!deps.approvalBroker)
125
+ return { agentIds, sessionIds };
126
+ try {
127
+ for (const approval of deps.approvalBroker.listApprovals(200)) {
128
+ if (approval.status !== 'pending')
129
+ continue;
130
+ const metaAgentId = approval.metadata['agentId'];
131
+ if (typeof metaAgentId === 'string' && metaAgentId.length > 0)
132
+ agentIds.add(metaAgentId);
133
+ if (approval.sessionId)
134
+ sessionIds.add(approval.sessionId);
135
+ }
136
+ }
137
+ catch (error) {
138
+ logger.warn('[fleet] approval cross-reference failed', { error: summarizeError(error) });
139
+ }
140
+ return { agentIds, sessionIds };
141
+ }
142
+ function collectSessionBindings() {
143
+ const byAgentId = new Map();
144
+ if (!deps.sessionBroker)
145
+ return byAgentId;
146
+ try {
147
+ for (const session of deps.sessionBroker.listSessions(500)) {
148
+ if (session.activeAgentId)
149
+ byAgentId.set(session.activeAgentId, session.id);
150
+ if (session.lastAgentId && !byAgentId.has(session.lastAgentId)) {
151
+ byAgentId.set(session.lastAgentId, session.id);
152
+ }
153
+ }
154
+ }
155
+ catch (error) {
156
+ logger.warn('[fleet] session binding scan failed', { error: summarizeError(error) });
157
+ }
158
+ return byAgentId;
159
+ }
160
+ function assemble() {
161
+ const capturedAt = now();
162
+ const agents = deps.agentManager.list();
163
+ const chains = deps.wrfcController.listChains();
164
+ const chainIds = new Set(chains.map((chain) => chain.id));
165
+ const subtaskIds = new Set();
166
+ for (const chain of chains) {
167
+ for (const subtask of chain.subtasks ?? [])
168
+ subtaskIds.add(subtask.id);
169
+ }
170
+ const workstreams = deps.orchestrationEngine?.listWorkstreams() ?? [];
171
+ const workItemIds = new Set();
172
+ for (const workstream of workstreams) {
173
+ for (const item of workstream.items)
174
+ workItemIds.add(item.id);
175
+ }
176
+ const agentIds = new Set(agents.map((record) => record.id));
177
+ const agentIdByOrchestrationNodeId = new Map();
178
+ for (const record of agents) {
179
+ if (record.orchestrationNodeId)
180
+ agentIdByOrchestrationNodeId.set(record.orchestrationNodeId, record.id);
181
+ }
182
+ const { agentIds: pendingApprovalAgentIds, sessionIds: pendingApprovalSessionIds } = collectPendingApprovals();
183
+ const sessionIdByAgentId = collectSessionBindings();
184
+ const agentCtx = {
185
+ now: capturedAt,
186
+ stalledThresholdMs,
187
+ activity,
188
+ liveness: deps.runtimeBus !== undefined,
189
+ pendingApprovalAgentIds,
190
+ pendingApprovalSessionIds,
191
+ sessionIdByAgentId,
192
+ chainIds,
193
+ subtaskIds,
194
+ workItemIds,
195
+ agentIdByOrchestrationNodeId,
196
+ agentIds,
197
+ priceUsage: deps.priceUsage,
198
+ messageBusPresent: deps.messageBus !== undefined,
199
+ };
200
+ const nodes = [];
201
+ const agentNodeById = new Map();
202
+ for (const record of agents) {
203
+ const node = adaptAgent(record, agentCtx);
204
+ agentNodeById.set(node.id, node);
205
+ nodes.push(node);
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();
210
+ for (const chain of chains) {
211
+ // Members exclude the owner: its usage is populated FROM phase children
212
+ // at completion time, so including it would double-count (see wrfc.ts).
213
+ const memberNodes = [];
214
+ for (const agentId of chain.allAgentIds) {
215
+ if (agentId === chain.ownerAgentId)
216
+ continue;
217
+ const node = agentNodeById.get(agentId);
218
+ if (node)
219
+ memberNodes.push(node);
220
+ }
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
+ }
233
+ for (const subtask of chain.subtasks ?? []) {
234
+ // Steerable only when the subtask's currently-active member agent is
235
+ // both present in this snapshot and not terminal, AND a messageBus
236
+ // dep exists to actually deliver the steer.
237
+ const activeMemberId = activeSubtaskMemberAgentId(subtask);
238
+ const activeMemberNode = activeMemberId ? agentNodeById.get(activeMemberId) : undefined;
239
+ const memberLive = activeMemberNode !== undefined
240
+ && activeMemberNode.state !== 'done'
241
+ && activeMemberNode.state !== 'failed'
242
+ && activeMemberNode.state !== 'killed';
243
+ nodes.push(adaptSubtask(subtask, chain, { steerable: deps.messageBus !== undefined && memberLive }));
244
+ }
245
+ }
246
+ for (const workstream of workstreams) {
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));
265
+ for (const phase of workstream.phases) {
266
+ nodes.push(adaptPhase(phase, workstream));
267
+ }
268
+ for (const item of workstream.items) {
269
+ const activeAgentId = activeWorkItemAgentId(item);
270
+ const activeAgentNode = activeAgentId ? agentNodeById.get(activeAgentId) : undefined;
271
+ const memberLive = activeAgentNode !== undefined
272
+ && activeAgentNode.state !== 'done'
273
+ && activeAgentNode.state !== 'failed'
274
+ && activeAgentNode.state !== 'killed';
275
+ const parentId = item.currentPhaseId
276
+ ? phaseNodeId(workstream.id, item.currentPhaseId)
277
+ : workstreamNodeId(workstream.id);
278
+ nodes.push(adaptWorkItem(item, workstream.id, parentId, { steerable: deps.messageBus !== undefined && memberLive, live: liveByItemId.get(item.id) }));
279
+ }
280
+ }
281
+ for (const instance of deps.workflow.workflowManager.list()) {
282
+ nodes.push(adaptWorkflow(instance, capturedAt));
283
+ }
284
+ for (const trigger of deps.workflow.triggerManager.list()) {
285
+ nodes.push(adaptTrigger(trigger));
286
+ }
287
+ for (const schedule of deps.workflow.scheduleManager.list()) {
288
+ nodes.push(adaptSchedule(schedule));
289
+ }
290
+ if (deps.automationManager) {
291
+ for (const job of deps.automationManager.listJobs()) {
292
+ nodes.push(adaptAutomationJob(job));
293
+ }
294
+ }
295
+ for (const watcher of deps.watcherRegistry.list()) {
296
+ nodes.push(adaptWatcher(watcher, capturedAt));
297
+ }
298
+ for (const summary of deps.processManager.list()) {
299
+ const record = deps.processManager.getStatus(summary.id);
300
+ if (record)
301
+ nodes.push(adaptBackgroundProcess(record, capturedAt));
302
+ }
303
+ if (deps.codeIndexService) {
304
+ nodes.push(adaptCodeIndex(deps.codeIndexService, capturedAt));
305
+ }
306
+ if (ownerNodeOverrides.size > 0) {
307
+ return { capturedAt, nodes: nodes.map((node) => ownerNodeOverrides.get(node.id) ?? node) };
308
+ }
309
+ return { capturedAt, nodes };
310
+ }
311
+ function query(filter) {
312
+ const { capturedAt, nodes } = assemble();
313
+ let selected = nodes;
314
+ if (filter?.kinds && filter.kinds.length > 0) {
315
+ const kinds = new Set(filter.kinds);
316
+ selected = selected.filter((node) => kinds.has(node.kind));
317
+ }
318
+ if (filter?.states && filter.states.length > 0) {
319
+ const states = new Set(filter.states);
320
+ selected = selected.filter((node) => states.has(node.state));
321
+ }
322
+ return { capturedAt, nodes: selected };
323
+ }
324
+ function getNode(id) {
325
+ const { nodes } = assemble();
326
+ return nodes.find((node) => node.id === id) ?? null;
327
+ }
328
+ // ── Coalesced tick + subscription ──────────────────────────────────────────
329
+ const listeners = new Set();
330
+ let tickHandle = null;
331
+ let lastSignature = null;
332
+ function tick() {
333
+ if (listeners.size === 0)
334
+ return;
335
+ const snapshot = query();
336
+ const signature = snapshotSignature(snapshot.nodes);
337
+ if (signature === lastSignature)
338
+ return;
339
+ lastSignature = signature;
340
+ for (const listener of listeners) {
341
+ try {
342
+ listener(snapshot);
343
+ }
344
+ catch (error) {
345
+ logger.warn('[fleet] subscriber threw', { error: summarizeError(error) });
346
+ }
347
+ }
348
+ }
349
+ function startTicking() {
350
+ if (tickHandle !== null)
351
+ return;
352
+ tickHandle = timers.setInterval(tick, tickIntervalMs);
353
+ // Never pin the event loop: an idle runtime must be able to exit even if
354
+ // a consumer forgot to dispose (mirrors ScheduleManager.destroy hygiene).
355
+ unrefHandle(tickHandle);
356
+ }
357
+ function stopTicking() {
358
+ if (tickHandle === null)
359
+ return;
360
+ timers.clearInterval(tickHandle);
361
+ tickHandle = null;
362
+ lastSignature = null;
363
+ }
364
+ function subscribe(listener) {
365
+ if (disposed)
366
+ return () => undefined;
367
+ listeners.add(listener);
368
+ startTicking();
369
+ let active = true;
370
+ return () => {
371
+ if (!active)
372
+ return;
373
+ active = false;
374
+ listeners.delete(listener);
375
+ if (listeners.size === 0)
376
+ stopTicking();
377
+ };
378
+ }
379
+ // ── Control dispatch (existing manager paths only) ─────────────────────────
380
+ /** Cascade kill over member agents — always a hard kill, never an interrupt. */
381
+ function cancelAgents(agentIds) {
382
+ const affected = [];
383
+ for (const agentId of agentIds) {
384
+ if (agentId && deps.agentManager.cancel(agentId, 'kill'))
385
+ affected.push(agentId);
386
+ }
387
+ return affected;
388
+ }
389
+ /**
390
+ * Fire-and-forget an AutomationManager async control call (Wave 6, wo-F
391
+ * item d4): the registry's own kill/interrupt/resume verbs are
392
+ * synchronous, but AutomationManager.removeJob/setEnabled are Promises —
393
+ * dispatch without awaiting rather than making every registry verb async,
394
+ * but never let a rejection vanish silently. The next tick's assemble()
395
+ * reflects the real outcome once the promise settles (mirrors the
396
+ * existing TUI automation-control-panel's swallow-and-tick behavior).
397
+ */
398
+ function dispatchAutomationOp(op, jobId, promise) {
399
+ promise.catch((error) => {
400
+ logger.warn(`[fleet] automation job ${op} failed`, { jobId, error: summarizeError(error) });
401
+ });
402
+ }
403
+ /** Primitive per-kind kill. Returns the node ids actually acted on. */
404
+ function killNode(node) {
405
+ switch (node.kind) {
406
+ case 'agent':
407
+ return deps.agentManager.cancel(node.id, 'kill') ? [node.id] : [];
408
+ case 'background-process':
409
+ return deps.processManager.stop(node.id) ? [node.id] : [];
410
+ case 'watcher':
411
+ return deps.watcherRegistry.stopWatcher(node.id) !== null ? [node.id] : [];
412
+ case 'workflow':
413
+ return deps.workflow.workflowManager.cancel(node.id) ? [node.id] : [];
414
+ case 'trigger':
415
+ return deps.workflow.triggerManager.remove(node.id) ? [node.id] : [];
416
+ case 'schedule': {
417
+ if (isAutomationJobRaw(node.raw)) {
418
+ if (!deps.automationManager)
419
+ return [];
420
+ const jobId = node.raw.job.id;
421
+ dispatchAutomationOp('kill', jobId, deps.automationManager.removeJob(jobId));
422
+ return [node.id];
423
+ }
424
+ const entry = node.raw;
425
+ return deps.workflow.scheduleManager.remove(entry.name) ? [node.id] : [];
426
+ }
427
+ case 'wrfc-chain': {
428
+ // DERIVED, not native: WrfcController exposes no public cancel/abort,
429
+ // so chain kill cascades AgentManager.cancel over the member agents.
430
+ const chain = node.raw;
431
+ const affected = cancelAgents(chain.allAgentIds);
432
+ return affected.length > 0 ? [node.id, ...affected] : [];
433
+ }
434
+ case 'wrfc-subtask': {
435
+ const subtask = node.raw;
436
+ const affected = cancelAgents([subtask.engineerAgentId, subtask.reviewerAgentId, subtask.fixerAgentId]);
437
+ return affected.length > 0 ? [node.id, ...affected] : [];
438
+ }
439
+ case 'workstream': {
440
+ // DERIVED: no native single-call cancel, so kill cascades
441
+ // engine.kill(itemId) over every non-terminal item — routed through
442
+ // the engine (not a raw AgentManager.cancel cascade) so cooperative
443
+ // cancellation (AbortController -> exec/fetch signal) fires the same
444
+ // way it would for an engine-internal kill.
445
+ const workstream = node.raw;
446
+ if (!deps.orchestrationEngine)
447
+ return [];
448
+ const affected = [];
449
+ for (const item of workstream.items) {
450
+ if (deps.orchestrationEngine.kill(item.id))
451
+ affected.push(workItemNodeId(item.id));
452
+ }
453
+ return affected.length > 0 ? [node.id, ...affected] : [];
454
+ }
455
+ case 'work-item': {
456
+ const { item } = node.raw;
457
+ if (!deps.orchestrationEngine?.kill(item.id))
458
+ return [];
459
+ return [node.id];
460
+ }
461
+ case 'phase':
462
+ // Pure grouping node — not killable (see adaptPhase capabilities).
463
+ return [];
464
+ default:
465
+ return [];
466
+ }
467
+ }
468
+ function kill(id, opts) {
469
+ const { nodes } = assemble();
470
+ const target = nodes.find((node) => node.id === id);
471
+ if (!target)
472
+ return [];
473
+ const affected = new Set();
474
+ const targets = [target];
475
+ if (opts?.cascade) {
476
+ // Children first, depth-first, so leaves stop before their parents.
477
+ const byParent = new Map();
478
+ for (const node of nodes) {
479
+ if (!node.parentId)
480
+ continue;
481
+ const siblings = byParent.get(node.parentId) ?? [];
482
+ siblings.push(node);
483
+ byParent.set(node.parentId, siblings);
484
+ }
485
+ const stack = [target];
486
+ const descendants = [];
487
+ const seen = new Set([target.id]);
488
+ while (stack.length > 0) {
489
+ const current = stack.pop();
490
+ for (const child of byParent.get(current.id) ?? []) {
491
+ if (seen.has(child.id))
492
+ continue;
493
+ seen.add(child.id);
494
+ descendants.push(child);
495
+ stack.push(child);
496
+ }
497
+ }
498
+ targets.unshift(...descendants.reverse());
499
+ }
500
+ for (const node of targets) {
501
+ for (const affectedId of killNode(node))
502
+ affected.add(affectedId);
503
+ }
504
+ // Chain-kill consistency: under cascade, member agents are terminated by
505
+ // the descendant pass BEFORE the chain's own killNode runs, so its
506
+ // internal cancelAgents() call finds every member already cancelled
507
+ // (affected.length === 0 there) and omits 'chain:<id>' — even though the
508
+ // chain itself was the kill target and a termination did occur. Make the
509
+ // return value consistent across both cascade and non-cascade: include
510
+ // the chain id whenever the chain was targeted and either a termination
511
+ // occurred (any node above) or the chain was still live.
512
+ if (target.kind === 'wrfc-chain' && (affected.size > 0 || target.capabilities.killable)) {
513
+ affected.add(target.id);
514
+ }
515
+ return [...affected];
516
+ }
517
+ function interrupt(id) {
518
+ const { nodes } = assemble();
519
+ const target = nodes.find((node) => node.id === id);
520
+ if (!target)
521
+ return false;
522
+ switch (target.kind) {
523
+ case 'agent':
524
+ return deps.agentManager.cancel(target.id, 'interrupt');
525
+ case 'trigger':
526
+ return deps.workflow.triggerManager.disable(target.id);
527
+ case 'schedule': {
528
+ if (isAutomationJobRaw(target.raw)) {
529
+ if (!deps.automationManager)
530
+ return false;
531
+ const jobId = target.raw.job.id;
532
+ dispatchAutomationOp('pause', jobId, deps.automationManager.setEnabled(jobId, false));
533
+ return true;
534
+ }
535
+ const entry = target.raw;
536
+ return deps.workflow.scheduleManager.disable(entry.name);
537
+ }
538
+ case 'work-item': {
539
+ const { item } = target.raw;
540
+ const agentId = activeWorkItemAgentId(item);
541
+ return agentId ? deps.agentManager.cancel(agentId, 'interrupt') : false;
542
+ }
543
+ default:
544
+ return false;
545
+ }
546
+ }
547
+ /**
548
+ * Wave 6 (wo-F item d2): re-arm a `paused` trigger/schedule via the owning
549
+ * manager's `enable()` — the inverse of interrupt()'s disable. Re-assemble
550
+ * + dispatch-by-kind mirrors interrupt()/kill()'s own shape exactly (same
551
+ * synchronous, no-owned-state pattern as every other control verb here).
552
+ * Honest refusal (false, never throws) for anything not currently
553
+ * resumable: not found, already armed, terminal, or a kind with no
554
+ * enable-based pause/resume cycle at all (e.g. an agent).
555
+ */
556
+ function resume(id) {
557
+ const { nodes } = assemble();
558
+ const target = nodes.find((node) => node.id === id);
559
+ if (!target || !target.capabilities.resumable)
560
+ return false;
561
+ switch (target.kind) {
562
+ case 'trigger':
563
+ return deps.workflow.triggerManager.enable(target.id);
564
+ case 'schedule': {
565
+ if (isAutomationJobRaw(target.raw)) {
566
+ if (!deps.automationManager)
567
+ return false;
568
+ const jobId = target.raw.job.id;
569
+ dispatchAutomationOp('resume', jobId, deps.automationManager.setEnabled(jobId, true));
570
+ return true;
571
+ }
572
+ const entry = target.raw;
573
+ return deps.workflow.scheduleManager.enable(entry.name);
574
+ }
575
+ default:
576
+ return false;
577
+ }
578
+ }
579
+ /**
580
+ * Queue a human message onto a live in-process agent's inbox (or the
581
+ * current live member agent of a wrfc-subtask). Mirrors interrupt()/kill()
582
+ * dispatch shape: re-assemble, find the target, switch on kind.
583
+ *
584
+ * Honest refusal for anything that cannot take mid-run input: no
585
+ * messageBus dep, a terminal/non-conversational kind, or a wrfc-chain
586
+ * (coordinate FSM, no conversation loop of its own — steer its member
587
+ * subtask instead).
588
+ */
589
+ function steer(id, text) {
590
+ const { nodes } = assemble();
591
+ const target = nodes.find((node) => node.id === id);
592
+ if (!target)
593
+ return { queued: false, reason: 'no such process' };
594
+ if (!deps.messageBus) {
595
+ return { queued: false, reason: 'steering is unavailable: no message bus configured' };
596
+ }
597
+ switch (target.kind) {
598
+ case 'agent': {
599
+ if (!target.capabilities.steerable) {
600
+ return { queued: false, reason: 'agent is not active and cannot be steered' };
601
+ }
602
+ const messageId = crypto.randomUUID();
603
+ const sent = deps.messageBus.send('operator', target.id, text, {
604
+ kind: 'steer',
605
+ ttlMs: STEER_TTL_MS,
606
+ id: messageId,
607
+ });
608
+ return sent ? { queued: true, messageId } : { queued: false, reason: 'steering message was blocked' };
609
+ }
610
+ case 'wrfc-subtask': {
611
+ const subtask = target.raw;
612
+ const agentId = activeSubtaskMemberAgentId(subtask);
613
+ if (!agentId || !target.capabilities.steerable) {
614
+ return { queued: false, reason: 'no live member agent to steer for this subtask' };
615
+ }
616
+ const messageId = crypto.randomUUID();
617
+ const sent = deps.messageBus.send('operator', agentId, text, {
618
+ kind: 'steer',
619
+ ttlMs: STEER_TTL_MS,
620
+ id: messageId,
621
+ });
622
+ return sent ? { queued: true, messageId } : { queued: false, reason: 'steering message was blocked' };
623
+ }
624
+ case 'wrfc-chain':
625
+ return { queued: false, reason: 'steer a member agent, not the chain' };
626
+ case 'work-item': {
627
+ const { item } = target.raw;
628
+ const agentId = activeWorkItemAgentId(item);
629
+ if (!agentId || !target.capabilities.steerable) {
630
+ return { queued: false, reason: 'no live agent to steer for this work item' };
631
+ }
632
+ const messageId = crypto.randomUUID();
633
+ const sent = deps.messageBus.send('operator', agentId, text, {
634
+ kind: 'steer',
635
+ ttlMs: STEER_TTL_MS,
636
+ id: messageId,
637
+ });
638
+ return sent ? { queued: true, messageId } : { queued: false, reason: 'steering message was blocked' };
639
+ }
640
+ case 'workstream':
641
+ return { queued: false, reason: 'steer a work item, not the workstream' };
642
+ default:
643
+ return { queued: false, reason: `${target.kind} cannot take steering input` };
644
+ }
645
+ }
646
+ function dispose() {
647
+ if (disposed)
648
+ return;
649
+ disposed = true;
650
+ stopTicking();
651
+ for (const unsubscribe of busUnsubscribers) {
652
+ try {
653
+ unsubscribe();
654
+ }
655
+ catch (error) {
656
+ logger.warn('[fleet] bus unsubscribe failed on dispose', { error: summarizeError(error) });
657
+ }
658
+ }
659
+ busUnsubscribers.length = 0;
660
+ listeners.clear();
661
+ activity.clear();
662
+ }
663
+ return { query, getNode, subscribe, interrupt, kill, resume, steer, dispose };
664
+ }