@pellux/goodvibes-sdk 0.38.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (559) hide show
  1. package/dist/contracts/artifacts/operator-contract.json +4468 -916
  2. package/dist/daemon.d.ts +2 -0
  3. package/dist/daemon.d.ts.map +1 -1
  4. package/dist/daemon.js +4 -0
  5. package/dist/events/communication.d.ts +1 -1
  6. package/dist/events/surfaces.d.ts +25 -3
  7. package/dist/events/surfaces.d.ts.map +1 -1
  8. package/dist/events/surfaces.js +22 -1
  9. package/dist/events/workflows.d.ts +7 -6
  10. package/dist/events/workflows.d.ts.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/platform/agents/archetypes.d.ts.map +1 -1
  14. package/dist/platform/agents/archetypes.js +7 -0
  15. package/dist/platform/agents/index.d.ts +1 -0
  16. package/dist/platform/agents/index.d.ts.map +1 -1
  17. package/dist/platform/agents/index.js +1 -0
  18. package/dist/platform/agents/orchestrator-runner.d.ts +16 -3
  19. package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
  20. package/dist/platform/agents/orchestrator-runner.js +20 -6
  21. package/dist/platform/agents/orchestrator.d.ts +42 -10
  22. package/dist/platform/agents/orchestrator.d.ts.map +1 -1
  23. package/dist/platform/agents/orchestrator.js +68 -20
  24. package/dist/platform/agents/planner-decomposition-runner.d.ts +38 -0
  25. package/dist/platform/agents/planner-decomposition-runner.d.ts.map +1 -0
  26. package/dist/platform/agents/planner-decomposition-runner.js +113 -0
  27. package/dist/platform/agents/turn-knowledge-injection.d.ts +88 -3
  28. package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -1
  29. package/dist/platform/agents/turn-knowledge-injection.js +147 -30
  30. package/dist/platform/agents/worktree.d.ts +126 -8
  31. package/dist/platform/agents/worktree.d.ts.map +1 -1
  32. package/dist/platform/agents/worktree.js +240 -19
  33. package/dist/platform/agents/wrfc-controller.d.ts +24 -1
  34. package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
  35. package/dist/platform/agents/wrfc-controller.js +161 -35
  36. package/dist/platform/agents/wrfc-gate-runtime.d.ts +9 -0
  37. package/dist/platform/agents/wrfc-gate-runtime.d.ts.map +1 -1
  38. package/dist/platform/agents/wrfc-gate-runtime.js +7 -3
  39. package/dist/platform/agents/wrfc-gates.d.ts +1 -1
  40. package/dist/platform/agents/wrfc-gates.d.ts.map +1 -1
  41. package/dist/platform/agents/wrfc-gates.js +7 -1
  42. package/dist/platform/agents/wrfc-types.d.ts +23 -3
  43. package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
  44. package/dist/platform/automation/types.d.ts +9 -1
  45. package/dist/platform/automation/types.d.ts.map +1 -1
  46. package/dist/platform/calendar/calendar-api-shared.d.ts +25 -0
  47. package/dist/platform/calendar/calendar-api-shared.d.ts.map +1 -0
  48. package/dist/platform/calendar/calendar-api-shared.js +100 -0
  49. package/dist/platform/calendar/calendar-connector.d.ts +79 -0
  50. package/dist/platform/calendar/calendar-connector.d.ts.map +1 -0
  51. package/dist/platform/calendar/calendar-connector.js +155 -0
  52. package/dist/platform/calendar/google-calendar-api.d.ts +25 -0
  53. package/dist/platform/calendar/google-calendar-api.d.ts.map +1 -0
  54. package/dist/platform/calendar/google-calendar-api.js +89 -0
  55. package/dist/platform/calendar/http-fetch-adapter.d.ts +25 -0
  56. package/dist/platform/calendar/http-fetch-adapter.d.ts.map +1 -0
  57. package/dist/platform/calendar/http-fetch-adapter.js +25 -0
  58. package/dist/platform/calendar/ics-parser.d.ts +35 -0
  59. package/dist/platform/calendar/ics-parser.d.ts.map +1 -0
  60. package/dist/platform/calendar/ics-parser.js +236 -0
  61. package/dist/platform/calendar/index.d.ts +41 -0
  62. package/dist/platform/calendar/index.d.ts.map +1 -0
  63. package/dist/platform/calendar/index.js +49 -0
  64. package/dist/platform/calendar/merged-calendar-model.d.ts +67 -0
  65. package/dist/platform/calendar/merged-calendar-model.d.ts.map +1 -0
  66. package/dist/platform/calendar/merged-calendar-model.js +181 -0
  67. package/dist/platform/calendar/microsoft-graph-api.d.ts +25 -0
  68. package/dist/platform/calendar/microsoft-graph-api.d.ts.map +1 -0
  69. package/dist/platform/calendar/microsoft-graph-api.js +95 -0
  70. package/dist/platform/calendar/oauth-flow.d.ts +62 -0
  71. package/dist/platform/calendar/oauth-flow.d.ts.map +1 -0
  72. package/dist/platform/calendar/oauth-flow.js +305 -0
  73. package/dist/platform/calendar/oauth-providers.d.ts +43 -0
  74. package/dist/platform/calendar/oauth-providers.d.ts.map +1 -0
  75. package/dist/platform/calendar/oauth-providers.js +120 -0
  76. package/dist/platform/calendar/oauth-token-store.d.ts +72 -0
  77. package/dist/platform/calendar/oauth-token-store.d.ts.map +1 -0
  78. package/dist/platform/calendar/oauth-token-store.js +189 -0
  79. package/dist/platform/calendar/oauth-types.d.ts +274 -0
  80. package/dist/platform/calendar/oauth-types.d.ts.map +1 -0
  81. package/dist/platform/calendar/oauth-types.js +22 -0
  82. package/dist/platform/calendar/rrule.d.ts +39 -0
  83. package/dist/platform/calendar/rrule.d.ts.map +1 -0
  84. package/dist/platform/calendar/rrule.js +261 -0
  85. package/dist/platform/calendar/subscription-store.d.ts +118 -0
  86. package/dist/platform/calendar/subscription-store.d.ts.map +1 -0
  87. package/dist/platform/calendar/subscription-store.js +293 -0
  88. package/dist/platform/calendar/types.d.ts +170 -0
  89. package/dist/platform/calendar/types.d.ts.map +1 -0
  90. package/dist/platform/calendar/types.js +21 -0
  91. package/dist/platform/companion/companion-chat-attachments.d.ts +29 -0
  92. package/dist/platform/companion/companion-chat-attachments.d.ts.map +1 -0
  93. package/dist/platform/companion/companion-chat-attachments.js +121 -0
  94. package/dist/platform/companion/companion-chat-branching.d.ts +66 -0
  95. package/dist/platform/companion/companion-chat-branching.d.ts.map +1 -0
  96. package/dist/platform/companion/companion-chat-branching.js +142 -0
  97. package/dist/platform/companion/companion-chat-broker-bridge.d.ts +40 -0
  98. package/dist/platform/companion/companion-chat-broker-bridge.d.ts.map +1 -0
  99. package/dist/platform/companion/companion-chat-broker-bridge.js +14 -0
  100. package/dist/platform/companion/companion-chat-broker-sync.d.ts +38 -0
  101. package/dist/platform/companion/companion-chat-broker-sync.d.ts.map +1 -0
  102. package/dist/platform/companion/companion-chat-broker-sync.js +80 -0
  103. package/dist/platform/companion/companion-chat-gc.d.ts +63 -0
  104. package/dist/platform/companion/companion-chat-gc.d.ts.map +1 -0
  105. package/dist/platform/companion/companion-chat-gc.js +38 -0
  106. package/dist/platform/companion/companion-chat-manager.d.ts +91 -23
  107. package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
  108. package/dist/platform/companion/companion-chat-manager.js +195 -223
  109. package/dist/platform/companion/companion-chat-persistence.d.ts +9 -1
  110. package/dist/platform/companion/companion-chat-persistence.d.ts.map +1 -1
  111. package/dist/platform/companion/companion-chat-persistence.js +10 -2
  112. package/dist/platform/companion/companion-chat-routes.d.ts +2 -1
  113. package/dist/platform/companion/companion-chat-routes.d.ts.map +1 -1
  114. package/dist/platform/companion/companion-chat-routes.js +113 -4
  115. package/dist/platform/companion/companion-chat-turn-execution.d.ts +61 -0
  116. package/dist/platform/companion/companion-chat-turn-execution.d.ts.map +1 -0
  117. package/dist/platform/companion/companion-chat-turn-execution.js +107 -0
  118. package/dist/platform/companion/companion-chat-types.d.ts +67 -0
  119. package/dist/platform/companion/companion-chat-types.d.ts.map +1 -1
  120. package/dist/platform/config/credential-status.d.ts +28 -0
  121. package/dist/platform/config/credential-status.d.ts.map +1 -0
  122. package/dist/platform/config/credential-status.js +75 -0
  123. package/dist/platform/config/index.d.ts +25 -0
  124. package/dist/platform/config/index.d.ts.map +1 -1
  125. package/dist/platform/config/index.js +18 -0
  126. package/dist/platform/config/manager.d.ts +9 -0
  127. package/dist/platform/config/manager.d.ts.map +1 -1
  128. package/dist/platform/config/manager.js +21 -2
  129. package/dist/platform/config/migrations.d.ts +48 -0
  130. package/dist/platform/config/migrations.d.ts.map +1 -0
  131. package/dist/platform/config/migrations.js +54 -0
  132. package/dist/platform/config/schema-domain-core.d.ts +10 -1
  133. package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
  134. package/dist/platform/config/schema-domain-core.js +46 -3
  135. package/dist/platform/config/schema-domain-runtime.d.ts +8 -0
  136. package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
  137. package/dist/platform/config/schema-domain-runtime.js +32 -0
  138. package/dist/platform/config/schema-types.d.ts +21 -7
  139. package/dist/platform/config/schema-types.d.ts.map +1 -1
  140. package/dist/platform/config/schema.d.ts.map +1 -1
  141. package/dist/platform/config/schema.js +2 -0
  142. package/dist/platform/control-plane/approval-broker.d.ts +11 -0
  143. package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
  144. package/dist/platform/control-plane/approval-broker.js +17 -1
  145. package/dist/platform/control-plane/approval-hunk-apply.d.ts +77 -0
  146. package/dist/platform/control-plane/approval-hunk-apply.d.ts.map +1 -0
  147. package/dist/platform/control-plane/approval-hunk-apply.js +80 -0
  148. package/dist/platform/control-plane/gateway-disabled-response.d.ts +20 -0
  149. package/dist/platform/control-plane/gateway-disabled-response.d.ts.map +1 -0
  150. package/dist/platform/control-plane/gateway-disabled-response.js +24 -0
  151. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts +68 -0
  152. package/dist/platform/control-plane/gateway-scope-enforcement.d.ts.map +1 -0
  153. package/dist/platform/control-plane/gateway-scope-enforcement.js +91 -0
  154. package/dist/platform/control-plane/gateway-utils.d.ts +17 -0
  155. package/dist/platform/control-plane/gateway-utils.d.ts.map +1 -1
  156. package/dist/platform/control-plane/gateway-utils.js +30 -0
  157. package/dist/platform/control-plane/gateway.d.ts +12 -2
  158. package/dist/platform/control-plane/gateway.d.ts.map +1 -1
  159. package/dist/platform/control-plane/gateway.js +27 -31
  160. package/dist/platform/control-plane/index.d.ts +8 -1
  161. package/dist/platform/control-plane/index.d.ts.map +1 -1
  162. package/dist/platform/control-plane/index.js +8 -0
  163. package/dist/platform/control-plane/invoke-input-validation.d.ts +56 -0
  164. package/dist/platform/control-plane/invoke-input-validation.d.ts.map +1 -0
  165. package/dist/platform/control-plane/invoke-input-validation.js +163 -0
  166. package/dist/platform/control-plane/method-catalog-admin.d.ts.map +1 -1
  167. package/dist/platform/control-plane/method-catalog-admin.js +12 -1
  168. package/dist/platform/control-plane/method-catalog-calendar.d.ts +16 -0
  169. package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -1
  170. package/dist/platform/control-plane/method-catalog-calendar.js +21 -0
  171. package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
  172. package/dist/platform/control-plane/method-catalog-channels.js +32 -3
  173. package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
  174. package/dist/platform/control-plane/method-catalog-control-automation.js +19 -34
  175. package/dist/platform/control-plane/method-catalog-control-companion.d.ts +15 -0
  176. package/dist/platform/control-plane/method-catalog-control-companion.d.ts.map +1 -0
  177. package/dist/platform/control-plane/method-catalog-control-companion.js +176 -0
  178. package/dist/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
  179. package/dist/platform/control-plane/method-catalog-control-core.js +104 -122
  180. package/dist/platform/control-plane/method-catalog-control.d.ts.map +1 -1
  181. package/dist/platform/control-plane/method-catalog-control.js +4 -0
  182. package/dist/platform/control-plane/method-catalog-email.d.ts +17 -0
  183. package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
  184. package/dist/platform/control-plane/method-catalog-email.js +21 -0
  185. package/dist/platform/control-plane/method-catalog-events.d.ts +28 -0
  186. package/dist/platform/control-plane/method-catalog-events.d.ts.map +1 -1
  187. package/dist/platform/control-plane/method-catalog-events.js +74 -1
  188. package/dist/platform/control-plane/method-catalog-fleet.d.ts +24 -0
  189. package/dist/platform/control-plane/method-catalog-fleet.d.ts.map +1 -0
  190. package/dist/platform/control-plane/method-catalog-fleet.js +65 -0
  191. package/dist/platform/control-plane/method-catalog-push.d.ts +30 -0
  192. package/dist/platform/control-plane/method-catalog-push.d.ts.map +1 -0
  193. package/dist/platform/control-plane/method-catalog-push.js +80 -0
  194. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts +84 -0
  195. package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts.map +1 -0
  196. package/dist/platform/control-plane/method-catalog-route-reconcile.js +103 -0
  197. package/dist/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
  198. package/dist/platform/control-plane/method-catalog-runtime.js +83 -1
  199. package/dist/platform/control-plane/method-catalog-shared.d.ts +29 -0
  200. package/dist/platform/control-plane/method-catalog-shared.d.ts.map +1 -1
  201. package/dist/platform/control-plane/method-catalog.d.ts +9 -0
  202. package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
  203. package/dist/platform/control-plane/method-catalog.js +34 -3
  204. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts +8 -0
  205. package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
  206. package/dist/platform/control-plane/operator-contract-schemas-admin.js +22 -1
  207. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts +18 -0
  208. package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts.map +1 -0
  209. package/dist/platform/control-plane/operator-contract-schemas-fleet.js +182 -0
  210. package/dist/platform/control-plane/operator-contract-schemas-permissions.d.ts.map +1 -1
  211. package/dist/platform/control-plane/operator-contract-schemas-permissions.js +5 -0
  212. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts +37 -0
  213. package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts.map +1 -1
  214. package/dist/platform/control-plane/operator-contract-schemas-runtime.js +100 -3
  215. package/dist/platform/control-plane/operator-contract-schemas.d.ts +1 -0
  216. package/dist/platform/control-plane/operator-contract-schemas.d.ts.map +1 -1
  217. package/dist/platform/control-plane/operator-contract-schemas.js +1 -0
  218. package/dist/platform/control-plane/operator-contract.d.ts.map +1 -1
  219. package/dist/platform/control-plane/operator-contract.js +8 -0
  220. package/dist/platform/control-plane/routes/checkpoints.d.ts +39 -0
  221. package/dist/platform/control-plane/routes/checkpoints.d.ts.map +1 -0
  222. package/dist/platform/control-plane/routes/checkpoints.js +166 -0
  223. package/dist/platform/control-plane/routes/fleet.d.ts +53 -0
  224. package/dist/platform/control-plane/routes/fleet.d.ts.map +1 -0
  225. package/dist/platform/control-plane/routes/fleet.js +153 -0
  226. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts +30 -0
  227. package/dist/platform/control-plane/routes/gateway-verb-error.d.ts.map +1 -0
  228. package/dist/platform/control-plane/routes/gateway-verb-error.js +36 -0
  229. package/dist/platform/control-plane/routes/index.d.ts +0 -6
  230. package/dist/platform/control-plane/routes/index.d.ts.map +1 -1
  231. package/dist/platform/control-plane/routes/index.js +5 -5
  232. package/dist/platform/control-plane/routes/invocation-params.d.ts +23 -0
  233. package/dist/platform/control-plane/routes/invocation-params.d.ts.map +1 -0
  234. package/dist/platform/control-plane/routes/invocation-params.js +9 -0
  235. package/dist/platform/control-plane/routes/push.d.ts +26 -0
  236. package/dist/platform/control-plane/routes/push.d.ts.map +1 -0
  237. package/dist/platform/control-plane/routes/push.js +104 -0
  238. package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts +31 -0
  239. package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts.map +1 -0
  240. package/dist/platform/control-plane/routes/register-gateway-verb-groups.js +16 -0
  241. package/dist/platform/control-plane/routes/register-w3-s2.d.ts +26 -0
  242. package/dist/platform/control-plane/routes/register-w3-s2.d.ts.map +1 -0
  243. package/dist/platform/control-plane/routes/register-w3-s2.js +8 -0
  244. package/dist/platform/control-plane/routes/session-search.d.ts +37 -0
  245. package/dist/platform/control-plane/routes/session-search.d.ts.map +1 -0
  246. package/dist/platform/control-plane/routes/session-search.js +113 -0
  247. package/dist/platform/control-plane/session-broker-gc.d.ts +16 -0
  248. package/dist/platform/control-plane/session-broker-gc.d.ts.map +1 -1
  249. package/dist/platform/control-plane/session-broker-gc.js +23 -6
  250. package/dist/platform/control-plane/session-broker-helpers.d.ts +3 -3
  251. package/dist/platform/control-plane/session-broker-helpers.d.ts.map +1 -1
  252. package/dist/platform/control-plane/session-broker-inputs.d.ts +18 -0
  253. package/dist/platform/control-plane/session-broker-inputs.d.ts.map +1 -1
  254. package/dist/platform/control-plane/session-broker-inputs.js +34 -0
  255. package/dist/platform/control-plane/session-broker-sessions.d.ts +102 -3
  256. package/dist/platform/control-plane/session-broker-sessions.d.ts.map +1 -1
  257. package/dist/platform/control-plane/session-broker-sessions.js +179 -5
  258. package/dist/platform/control-plane/session-broker-state.d.ts +20 -1
  259. package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
  260. package/dist/platform/control-plane/session-broker-state.js +67 -5
  261. package/dist/platform/control-plane/session-broker.d.ts +51 -38
  262. package/dist/platform/control-plane/session-broker.d.ts.map +1 -1
  263. package/dist/platform/control-plane/session-broker.js +183 -75
  264. package/dist/platform/control-plane/session-store-importer.d.ts +57 -0
  265. package/dist/platform/control-plane/session-store-importer.d.ts.map +1 -0
  266. package/dist/platform/control-plane/session-store-importer.js +227 -0
  267. package/dist/platform/control-plane/session-types.d.ts +142 -7
  268. package/dist/platform/control-plane/session-types.d.ts.map +1 -1
  269. package/dist/platform/core/execution-plan.d.ts +43 -1
  270. package/dist/platform/core/execution-plan.d.ts.map +1 -1
  271. package/dist/platform/core/execution-plan.js +46 -10
  272. package/dist/platform/core/index.d.ts +1 -0
  273. package/dist/platform/core/index.d.ts.map +1 -1
  274. package/dist/platform/core/index.js +1 -0
  275. package/dist/platform/core/orchestrator-runtime.d.ts +23 -3
  276. package/dist/platform/core/orchestrator-runtime.d.ts.map +1 -1
  277. package/dist/platform/core/orchestrator-tool-runtime.d.ts +7 -0
  278. package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
  279. package/dist/platform/core/orchestrator-tool-runtime.js +10 -0
  280. package/dist/platform/core/orchestrator-turn-loop.d.ts +13 -6
  281. package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
  282. package/dist/platform/core/orchestrator-turn-loop.js +29 -22
  283. package/dist/platform/core/orchestrator.d.ts +16 -10
  284. package/dist/platform/core/orchestrator.d.ts.map +1 -1
  285. package/dist/platform/core/orchestrator.js +23 -8
  286. package/dist/platform/core/plan-decomposition.d.ts +196 -0
  287. package/dist/platform/core/plan-decomposition.d.ts.map +1 -0
  288. package/dist/platform/core/plan-decomposition.js +417 -0
  289. package/dist/platform/core/plan-proposal.d.ts +39 -0
  290. package/dist/platform/core/plan-proposal.d.ts.map +1 -1
  291. package/dist/platform/core/wrfc-routing.d.ts +1 -0
  292. package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
  293. package/dist/platform/core/wrfc-routing.js +51 -1
  294. package/dist/platform/daemon/boot.d.ts +69 -0
  295. package/dist/platform/daemon/boot.d.ts.map +1 -0
  296. package/dist/platform/daemon/boot.js +61 -0
  297. package/dist/platform/daemon/cli.js +2 -1
  298. package/dist/platform/daemon/control-plane.d.ts.map +1 -1
  299. package/dist/platform/daemon/control-plane.js +50 -1
  300. package/dist/platform/daemon/facade-composition.d.ts.map +1 -1
  301. package/dist/platform/daemon/facade-composition.js +6 -0
  302. package/dist/platform/daemon/facade.d.ts +15 -6
  303. package/dist/platform/daemon/facade.d.ts.map +1 -1
  304. package/dist/platform/daemon/facade.js +48 -43
  305. package/dist/platform/daemon/http/router-route-contexts.d.ts +1 -0
  306. package/dist/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
  307. package/dist/platform/daemon/http/router-route-contexts.js +1 -0
  308. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts +13 -0
  309. package/dist/platform/daemon/http/router-session-broker-adapter.d.ts.map +1 -0
  310. package/dist/platform/daemon/http/router-session-broker-adapter.js +27 -0
  311. package/dist/platform/daemon/http/router.d.ts +2 -1
  312. package/dist/platform/daemon/http/router.d.ts.map +1 -1
  313. package/dist/platform/daemon/http/router.js +42 -40
  314. package/dist/platform/daemon/http/runtime-route-types.d.ts +42 -4
  315. package/dist/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
  316. package/dist/platform/daemon/http/webui-serving.d.ts +68 -0
  317. package/dist/platform/daemon/http/webui-serving.d.ts.map +1 -0
  318. package/dist/platform/daemon/http/webui-serving.js +230 -0
  319. package/dist/platform/daemon/index.d.ts +2 -0
  320. package/dist/platform/daemon/index.d.ts.map +1 -1
  321. package/dist/platform/daemon/index.js +1 -0
  322. package/dist/platform/daemon/service-manager.d.ts +16 -0
  323. package/dist/platform/daemon/service-manager.d.ts.map +1 -1
  324. package/dist/platform/daemon/service-manager.js +79 -15
  325. package/dist/platform/intelligence/tree-sitter/service.d.ts.map +1 -1
  326. package/dist/platform/intelligence/tree-sitter/service.js +16 -2
  327. package/dist/platform/knowledge/browser-history/readers.d.ts.map +1 -1
  328. package/dist/platform/knowledge/browser-history/readers.js +15 -5
  329. package/dist/platform/knowledge/knowledge-api.d.ts +1 -1
  330. package/dist/platform/knowledge/project-planning/service.d.ts +14 -1
  331. package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
  332. package/dist/platform/knowledge/project-planning/service.js +77 -0
  333. package/dist/platform/knowledge/project-planning/types.d.ts +32 -0
  334. package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
  335. package/dist/platform/orchestration/bookkeeping.d.ts +12 -0
  336. package/dist/platform/orchestration/bookkeeping.d.ts.map +1 -0
  337. package/dist/platform/orchestration/bookkeeping.js +91 -0
  338. package/dist/platform/orchestration/budget.d.ts +2 -2
  339. package/dist/platform/orchestration/cancellation.d.ts +2 -2
  340. package/dist/platform/orchestration/controller-compat.d.ts +16 -3
  341. package/dist/platform/orchestration/controller-compat.d.ts.map +1 -1
  342. package/dist/platform/orchestration/controller-compat.js +18 -4
  343. package/dist/platform/orchestration/dirty-guard.js +1 -1
  344. package/dist/platform/orchestration/engine.d.ts +26 -1
  345. package/dist/platform/orchestration/engine.d.ts.map +1 -1
  346. package/dist/platform/orchestration/engine.js +229 -25
  347. package/dist/platform/orchestration/index.d.ts +6 -4
  348. package/dist/platform/orchestration/index.d.ts.map +1 -1
  349. package/dist/platform/orchestration/index.js +3 -2
  350. package/dist/platform/orchestration/persistence.d.ts.map +1 -1
  351. package/dist/platform/orchestration/persistence.js +6 -3
  352. package/dist/platform/orchestration/phase-runner.d.ts +33 -6
  353. package/dist/platform/orchestration/phase-runner.d.ts.map +1 -1
  354. package/dist/platform/orchestration/phase-runner.js +98 -25
  355. package/dist/platform/orchestration/proposal-workstream.d.ts +56 -0
  356. package/dist/platform/orchestration/proposal-workstream.d.ts.map +1 -0
  357. package/dist/platform/orchestration/proposal-workstream.js +76 -0
  358. package/dist/platform/orchestration/scheduler.d.ts +20 -1
  359. package/dist/platform/orchestration/scheduler.d.ts.map +1 -1
  360. package/dist/platform/orchestration/scheduler.js +16 -0
  361. package/dist/platform/orchestration/types.d.ts +289 -4
  362. package/dist/platform/orchestration/types.d.ts.map +1 -1
  363. package/dist/platform/orchestration/types.js +32 -0
  364. package/dist/platform/orchestration/worktree-isolation.d.ts +33 -0
  365. package/dist/platform/orchestration/worktree-isolation.d.ts.map +1 -0
  366. package/dist/platform/orchestration/worktree-isolation.js +248 -0
  367. package/dist/platform/presentation/glyphs.d.ts +91 -0
  368. package/dist/platform/presentation/glyphs.d.ts.map +1 -0
  369. package/dist/platform/presentation/glyphs.js +93 -0
  370. package/dist/platform/presentation/index.d.ts +28 -0
  371. package/dist/platform/presentation/index.d.ts.map +1 -0
  372. package/dist/platform/presentation/index.js +27 -0
  373. package/dist/platform/presentation/thinking-phrases.d.ts +12 -0
  374. package/dist/platform/presentation/thinking-phrases.d.ts.map +1 -0
  375. package/dist/platform/presentation/thinking-phrases.js +32 -0
  376. package/dist/platform/presentation/tones.d.ts +121 -0
  377. package/dist/platform/presentation/tones.d.ts.map +1 -0
  378. package/dist/platform/presentation/tones.js +145 -0
  379. package/dist/platform/presentation/waiting-wording.d.ts +54 -0
  380. package/dist/platform/presentation/waiting-wording.d.ts.map +1 -0
  381. package/dist/platform/presentation/waiting-wording.js +51 -0
  382. package/dist/platform/providers/runtime-snapshot.d.ts.map +1 -1
  383. package/dist/platform/providers/runtime-snapshot.js +12 -2
  384. package/dist/platform/push/delivery.d.ts +48 -0
  385. package/dist/platform/push/delivery.d.ts.map +1 -0
  386. package/dist/platform/push/delivery.js +117 -0
  387. package/dist/platform/push/encryption.d.ts +41 -0
  388. package/dist/platform/push/encryption.d.ts.map +1 -0
  389. package/dist/platform/push/encryption.js +82 -0
  390. package/dist/platform/push/index.d.ts +17 -0
  391. package/dist/platform/push/index.d.ts.map +1 -0
  392. package/dist/platform/push/index.js +10 -0
  393. package/dist/platform/push/service.d.ts +75 -0
  394. package/dist/platform/push/service.d.ts.map +1 -0
  395. package/dist/platform/push/service.js +95 -0
  396. package/dist/platform/push/subscription-store.d.ts +50 -0
  397. package/dist/platform/push/subscription-store.d.ts.map +1 -0
  398. package/dist/platform/push/subscription-store.js +123 -0
  399. package/dist/platform/push/types.d.ts +68 -0
  400. package/dist/platform/push/types.d.ts.map +1 -0
  401. package/dist/platform/push/types.js +13 -0
  402. package/dist/platform/push/vapid.d.ts +54 -0
  403. package/dist/platform/push/vapid.d.ts.map +1 -0
  404. package/dist/platform/push/vapid.js +113 -0
  405. package/dist/platform/runtime/bootstrap-services.d.ts +62 -2
  406. package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
  407. package/dist/platform/runtime/bootstrap-services.js +217 -50
  408. package/dist/platform/runtime/daemon-version-compat.d.ts +39 -0
  409. package/dist/platform/runtime/daemon-version-compat.d.ts.map +1 -0
  410. package/dist/platform/runtime/daemon-version-compat.js +75 -0
  411. package/dist/platform/runtime/detached-daemon-runtime.d.ts +26 -0
  412. package/dist/platform/runtime/detached-daemon-runtime.d.ts.map +1 -0
  413. package/dist/platform/runtime/detached-daemon-runtime.js +49 -0
  414. package/dist/platform/runtime/emitters/workflows.d.ts +1 -1
  415. package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
  416. package/dist/platform/runtime/events/index.d.ts +13 -0
  417. package/dist/platform/runtime/events/index.d.ts.map +1 -1
  418. package/dist/platform/runtime/events/index.js +13 -0
  419. package/dist/platform/runtime/feature-flags/flags.d.ts.map +1 -1
  420. package/dist/platform/runtime/feature-flags/flags.js +39 -1
  421. package/dist/platform/runtime/fleet/adapters/agent.d.ts +2 -2
  422. package/dist/platform/runtime/fleet/adapters/agent.d.ts.map +1 -1
  423. package/dist/platform/runtime/fleet/adapters/agent.js +4 -4
  424. package/dist/platform/runtime/fleet/adapters/automation.d.ts +1 -1
  425. package/dist/platform/runtime/fleet/adapters/automation.js +1 -1
  426. package/dist/platform/runtime/fleet/adapters/code-index.d.ts +1 -1
  427. package/dist/platform/runtime/fleet/adapters/code-index.js +1 -1
  428. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +40 -18
  429. package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -1
  430. package/dist/platform/runtime/fleet/adapters/orchestration.js +138 -34
  431. package/dist/platform/runtime/fleet/adapters/schedule.d.ts +4 -4
  432. package/dist/platform/runtime/fleet/adapters/schedule.js +4 -4
  433. package/dist/platform/runtime/fleet/adapters/trigger.d.ts +3 -4
  434. package/dist/platform/runtime/fleet/adapters/trigger.d.ts.map +1 -1
  435. package/dist/platform/runtime/fleet/adapters/trigger.js +3 -4
  436. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +13 -0
  437. package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -1
  438. package/dist/platform/runtime/fleet/adapters/wrfc.js +49 -2
  439. package/dist/platform/runtime/fleet/registry.d.ts +7 -7
  440. package/dist/platform/runtime/fleet/registry.d.ts.map +1 -1
  441. package/dist/platform/runtime/fleet/registry.js +41 -7
  442. package/dist/platform/runtime/fleet/types.d.ts +9 -9
  443. package/dist/platform/runtime/fleet/types.d.ts.map +1 -1
  444. package/dist/platform/runtime/memory-spine/client.d.ts +127 -0
  445. package/dist/platform/runtime/memory-spine/client.d.ts.map +1 -0
  446. package/dist/platform/runtime/memory-spine/client.js +113 -0
  447. package/dist/platform/runtime/memory-spine/index.d.ts +11 -0
  448. package/dist/platform/runtime/memory-spine/index.d.ts.map +1 -0
  449. package/dist/platform/runtime/memory-spine/index.js +10 -0
  450. package/dist/platform/runtime/operator-client.d.ts +20 -2
  451. package/dist/platform/runtime/operator-client.d.ts.map +1 -1
  452. package/dist/platform/runtime/operator-client.js +11 -1
  453. package/dist/platform/runtime/provider-accounts/registry.d.ts.map +1 -1
  454. package/dist/platform/runtime/provider-accounts/registry.js +11 -1
  455. package/dist/platform/runtime/services.d.ts +11 -9
  456. package/dist/platform/runtime/services.d.ts.map +1 -1
  457. package/dist/platform/runtime/services.js +24 -9
  458. package/dist/platform/runtime/session-spine/client.d.ts +234 -0
  459. package/dist/platform/runtime/session-spine/client.d.ts.map +1 -0
  460. package/dist/platform/runtime/session-spine/client.js +449 -0
  461. package/dist/platform/runtime/session-spine/index.d.ts +12 -0
  462. package/dist/platform/runtime/session-spine/index.d.ts.map +1 -0
  463. package/dist/platform/runtime/session-spine/index.js +11 -0
  464. package/dist/platform/runtime/session-spine/union-cache.d.ts +225 -0
  465. package/dist/platform/runtime/session-spine/union-cache.d.ts.map +1 -0
  466. package/dist/platform/runtime/session-spine/union-cache.js +333 -0
  467. package/dist/platform/runtime/shell-command-ops.d.ts +3 -1
  468. package/dist/platform/runtime/shell-command-ops.d.ts.map +1 -1
  469. package/dist/platform/runtime/transports/daemon-http-client-validators.d.ts.map +1 -1
  470. package/dist/platform/runtime/transports/daemon-http-client-validators.js +22 -0
  471. package/dist/platform/runtime/transports/daemon-http-client.d.ts.map +1 -1
  472. package/dist/platform/runtime/transports/daemon-http-client.js +25 -2
  473. package/dist/platform/runtime/transports/http-types.d.ts +9 -2
  474. package/dist/platform/runtime/transports/http-types.d.ts.map +1 -1
  475. package/dist/platform/state/canonical-memory.d.ts +95 -0
  476. package/dist/platform/state/canonical-memory.d.ts.map +1 -0
  477. package/dist/platform/state/canonical-memory.js +155 -0
  478. package/dist/platform/state/code-index-chunking.js +1 -1
  479. package/dist/platform/state/code-index-db.d.ts +1 -1
  480. package/dist/platform/state/code-index-reindex.d.ts +73 -0
  481. package/dist/platform/state/code-index-reindex.d.ts.map +1 -0
  482. package/dist/platform/state/code-index-reindex.js +156 -0
  483. package/dist/platform/state/code-index-store.d.ts.map +1 -1
  484. package/dist/platform/state/code-index-store.js +11 -3
  485. package/dist/platform/state/index.d.ts +8 -0
  486. package/dist/platform/state/index.d.ts.map +1 -1
  487. package/dist/platform/state/index.js +4 -0
  488. package/dist/platform/state/memory-recall-contract.d.ts +118 -0
  489. package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
  490. package/dist/platform/state/memory-recall-contract.js +170 -0
  491. package/dist/platform/state/memory-registry.d.ts +8 -0
  492. package/dist/platform/state/memory-registry.d.ts.map +1 -1
  493. package/dist/platform/state/memory-registry.js +10 -0
  494. package/dist/platform/state/memory-store.d.ts +2 -0
  495. package/dist/platform/state/memory-store.d.ts.map +1 -1
  496. package/dist/platform/state/memory-store.js +4 -0
  497. package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
  498. package/dist/platform/state/memory-vector-store.js +14 -3
  499. package/dist/platform/state/sqlite-store.d.ts +2 -0
  500. package/dist/platform/state/sqlite-store.d.ts.map +1 -1
  501. package/dist/platform/state/sqlite-store.js +4 -0
  502. package/dist/platform/state/sqlite-vec-loader.d.ts +1 -1
  503. package/dist/platform/state/sqlite-vec-loader.js +1 -1
  504. package/dist/platform/state/vibe-projection.d.ts +67 -0
  505. package/dist/platform/state/vibe-projection.d.ts.map +1 -0
  506. package/dist/platform/state/vibe-projection.js +115 -0
  507. package/dist/platform/tools/agent/index.d.ts.map +1 -1
  508. package/dist/platform/tools/agent/index.js +8 -0
  509. package/dist/platform/tools/agent/manager.d.ts +22 -10
  510. package/dist/platform/tools/agent/manager.d.ts.map +1 -1
  511. package/dist/platform/tools/agent/manager.js +13 -7
  512. package/dist/platform/tools/agent/schema.d.ts +26 -0
  513. package/dist/platform/tools/agent/schema.d.ts.map +1 -1
  514. package/dist/platform/tools/agent/schema.js +2 -2
  515. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +13 -0
  516. package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
  517. package/dist/platform/tools/agent/wrfc-batch-policy.js +60 -0
  518. package/dist/platform/tools/exec/runtime.d.ts +10 -0
  519. package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
  520. package/dist/platform/tools/exec/runtime.js +27 -10
  521. package/dist/platform/tools/exec/schema.d.ts +2 -2
  522. package/dist/platform/tools/exec/schema.d.ts.map +1 -1
  523. package/dist/platform/tools/exec/schema.js +2 -1
  524. package/dist/platform/tools/fetch/runtime.d.ts +1 -1
  525. package/dist/platform/tools/index.d.ts +2 -0
  526. package/dist/platform/tools/index.d.ts.map +1 -1
  527. package/dist/platform/tools/index.js +2 -0
  528. package/dist/platform/tools/registry.d.ts +1 -1
  529. package/dist/platform/tools/registry.js +1 -1
  530. package/dist/platform/tools/state/index.d.ts +9 -0
  531. package/dist/platform/tools/state/index.d.ts.map +1 -1
  532. package/dist/platform/tools/state/index.js +60 -3
  533. package/dist/platform/types/foundation-contract.d.ts +1 -1
  534. package/dist/platform/types/foundation-contract.d.ts.map +1 -1
  535. package/dist/platform/types/index.d.ts +1 -1
  536. package/dist/platform/types/index.d.ts.map +1 -1
  537. package/dist/platform/types/tools.d.ts +1 -1
  538. package/dist/platform/utils/request-body.d.ts.map +1 -1
  539. package/dist/platform/utils/request-body.js +50 -5
  540. package/dist/platform/version.js +1 -1
  541. package/package.json +25 -9
  542. package/dist/platform/control-plane/routes/automation.d.ts +0 -3
  543. package/dist/platform/control-plane/routes/automation.d.ts.map +0 -1
  544. package/dist/platform/control-plane/routes/automation.js +0 -63
  545. package/dist/platform/control-plane/routes/context.d.ts +0 -2
  546. package/dist/platform/control-plane/routes/context.d.ts.map +0 -1
  547. package/dist/platform/control-plane/routes/context.js +0 -1
  548. package/dist/platform/control-plane/routes/operator.d.ts +0 -8
  549. package/dist/platform/control-plane/routes/operator.d.ts.map +0 -1
  550. package/dist/platform/control-plane/routes/operator.js +0 -415
  551. package/dist/platform/control-plane/routes/remote.d.ts +0 -3
  552. package/dist/platform/control-plane/routes/remote.d.ts.map +0 -1
  553. package/dist/platform/control-plane/routes/remote.js +0 -35
  554. package/dist/platform/control-plane/routes/sessions.d.ts +0 -3
  555. package/dist/platform/control-plane/routes/sessions.d.ts.map +0 -1
  556. package/dist/platform/control-plane/routes/sessions.js +0 -43
  557. package/dist/platform/control-plane/routes/tasks.d.ts +0 -3
  558. package/dist/platform/control-plane/routes/tasks.d.ts.map +0 -1
  559. package/dist/platform/control-plane/routes/tasks.js +0 -22
@@ -0,0 +1,121 @@
1
+ /**
2
+ * tones.ts — the canonical UI tone-token table, hoisted from `goodvibes-tui`
3
+ * src/renderer/ui-primitives.ts (UI_TONES + DIFF_TONES + SPINNER_FRAMES) and
4
+ * src/renderer/theme.ts (resolveUiTones / UI_TONES_LIGHT).
5
+ *
6
+ * TONE_TOKENS mirrors the TUI's UI_TONES shape byte-for-byte (the TUI is the
7
+ * reference, and its dark values are the accepted baseline — this keeps a
8
+ * future TUI swap onto this module a no-op). resolveTones(mode) is the single
9
+ * mode-resolved read path: 'dark' returns TONE_TOKENS itself (so a byte-identity
10
+ * check against the constant is trivially true), 'light' returns the inverted
11
+ * chrome/accent variant tuned for legibility on a light terminal background.
12
+ *
13
+ * This module is PURE data — no fs, no terminal I/O, no process globals.
14
+ * Painting stays renderer-owned; this module owns only the token values and
15
+ * the mode-resolution function.
16
+ */
17
+ /** Background mode — dark is the safe default until a caller's own bg-probe lands. */
18
+ export type ThemeMode = 'dark' | 'light';
19
+ /** The dark-mode (reference) tone-token table. */
20
+ export declare const TONE_TOKENS: {
21
+ readonly fg: {
22
+ readonly primary: "#e2e8f0";
23
+ readonly secondary: "#cbd5e1";
24
+ readonly muted: "#94a3b8";
25
+ readonly dim: "#475569";
26
+ readonly inverse: "#0f172a";
27
+ /** Empty-state / placeholder foreground. */
28
+ readonly empty: "#334155";
29
+ };
30
+ readonly bg: {
31
+ readonly base: "#11131a";
32
+ readonly surface: "#161a22";
33
+ readonly title: "#0f172a";
34
+ readonly section: "#18202b";
35
+ readonly summary: "#1b2430";
36
+ readonly selected: "#223049";
37
+ readonly input: "#1e293b";
38
+ readonly warning: "#2b2116";
39
+ readonly error: "#2a161b";
40
+ readonly success: "#14241b";
41
+ /** Fullscreen/shell footer background. */
42
+ readonly footer: "#111827";
43
+ };
44
+ readonly state: {
45
+ readonly info: "#38bdf8";
46
+ readonly good: "#22c55e";
47
+ readonly warn: "#f59e0b";
48
+ readonly bad: "#ef4444";
49
+ readonly blocked: "#f97316";
50
+ readonly active: "#60a5fa";
51
+ /** Canonical reasoning/thinking purple. */
52
+ readonly reasoning: "#a855f7";
53
+ };
54
+ readonly accent: {
55
+ readonly browser: "#7dd3fc";
56
+ readonly control: "#22d3ee";
57
+ readonly inspector: "#c4b5fd";
58
+ readonly workflow: "#fbbf24";
59
+ readonly conversation: "#93c5fd";
60
+ /** Neon brand accent — header/splash/thinking gradient only. */
61
+ readonly brand: "#00ffff";
62
+ readonly gradientStart: "#00ffff";
63
+ readonly gradientEnd: "#d000ff";
64
+ };
65
+ /** Canonical border stroke color for fullscreen/panel chrome. */
66
+ readonly border: "#64748b";
67
+ /**
68
+ * Persistent-chrome foregrounds — header / footer / live-thinking rows that
69
+ * paint onto the TRANSPARENT terminal background (bg:''), NOT onto the
70
+ * opaque dark modal/panel surfaces that fg.* and state.* serve. In light
71
+ * mode this chrome sits on a light terminal and must invert toward dark to
72
+ * stay legible, which is why it carries its own role instead of reusing
73
+ * fg.muted/fg.dim (tuned light-on-dark for the opaque boxes). Dark values
74
+ * here are byte-identical to the tokens they mirror (fg.muted, fg.dim,
75
+ * state.warn, state.bad), so dark-mode chrome is unchanged by this table
76
+ * existing.
77
+ */
78
+ readonly chrome: {
79
+ /** Secondary chrome text (header conversation title). == fg.muted (dark). */
80
+ readonly label: "#94a3b8";
81
+ /** Faint chrome text (version, provider, header rule, clean git). == fg.dim (dark). */
82
+ readonly faint: "#475569";
83
+ /** Warn accent on terminal bg (dirty git, pending risk). == state.warn (dark). */
84
+ readonly warn: "#f59e0b";
85
+ /** Alert accent on terminal bg (DANGER banner, shell risk). == state.bad (dark). */
86
+ readonly bad: "#ef4444";
87
+ /** Success accent on terminal bg (tool-call checkmark status). == state.good (dark). */
88
+ readonly good: "#22c55e";
89
+ /** Remote-risk accent on terminal bg (risk:remote marker, plain status). */
90
+ readonly remote: "#a78bfa";
91
+ };
92
+ };
93
+ /**
94
+ * Diff surface accent color shared across diff-rendering surfaces (conversation
95
+ * diff view, file diff panel, git panel inline diff).
96
+ */
97
+ export declare const DIFF_TONES: {
98
+ readonly add: "#00ff88";
99
+ readonly del: "#ff4444";
100
+ readonly hunk: "#88aaff";
101
+ };
102
+ /** Single spinner-frame source. */
103
+ export declare const SPINNER_FRAMES: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
104
+ /** Recursively widen the `as const` literal leaves of TONE_TOKENS to `string`
105
+ * so the light variant can assign different colour values without fighting
106
+ * TypeScript's literal-type inference. */
107
+ type DeepWidenToString<T> = T extends string ? string : {
108
+ [K in keyof T]: DeepWidenToString<T[K]>;
109
+ };
110
+ /** The mode-resolved shape returned by resolveTones — same keys as TONE_TOKENS,
111
+ * widened from literal string types to `string` so light values can differ. */
112
+ export type ToneTokens = DeepWidenToString<typeof TONE_TOKENS>;
113
+ /**
114
+ * resolveTones — return the tone-token table for the given background mode.
115
+ * 'dark' returns TONE_TOKENS itself (byte-identical, same object reference) so
116
+ * a consumer that has not wired mode detection can call resolveTones('dark')
117
+ * as the safe default with zero behavior change.
118
+ */
119
+ export declare function resolveTones(mode: ThemeMode): Readonly<ToneTokens>;
120
+ export {};
121
+ //# sourceMappingURL=tones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tones.d.ts","sourceRoot":"","sources":["../../../src/platform/presentation/tones.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,sFAAsF;AACtF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,kDAAkD;AAClD,eAAO,MAAM,WAAW;;;;;;;QAOpB,4CAA4C;;;;;;;;;;;;;;QAc5C,0CAA0C;;;;;;;;;;QAU1C,2CAA2C;;;;;;;;;QAS3C,gEAAgE;;;;;IAKlE,iEAAiE;;IAEjE;;;;;;;;;;OAUG;;QAED,6EAA6E;;QAE7E,uFAAuF;;QAEvF,kFAAkF;;QAElF,oFAAoF;;QAEpF,wFAAwF;;QAExF,4EAA4E;;;CAGtE,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,cAAc,6DAA8D,CAAC;AAE1F;;0CAE0C;AAC1C,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAEpG;+EAC+E;AAC/E,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAAC;AAuC/D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAElE"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * tones.ts — the canonical UI tone-token table, hoisted from `goodvibes-tui`
3
+ * src/renderer/ui-primitives.ts (UI_TONES + DIFF_TONES + SPINNER_FRAMES) and
4
+ * src/renderer/theme.ts (resolveUiTones / UI_TONES_LIGHT).
5
+ *
6
+ * TONE_TOKENS mirrors the TUI's UI_TONES shape byte-for-byte (the TUI is the
7
+ * reference, and its dark values are the accepted baseline — this keeps a
8
+ * future TUI swap onto this module a no-op). resolveTones(mode) is the single
9
+ * mode-resolved read path: 'dark' returns TONE_TOKENS itself (so a byte-identity
10
+ * check against the constant is trivially true), 'light' returns the inverted
11
+ * chrome/accent variant tuned for legibility on a light terminal background.
12
+ *
13
+ * This module is PURE data — no fs, no terminal I/O, no process globals.
14
+ * Painting stays renderer-owned; this module owns only the token values and
15
+ * the mode-resolution function.
16
+ */
17
+ /** The dark-mode (reference) tone-token table. */
18
+ export const TONE_TOKENS = {
19
+ fg: {
20
+ primary: '#e2e8f0',
21
+ secondary: '#cbd5e1',
22
+ muted: '#94a3b8',
23
+ dim: '#475569',
24
+ inverse: '#0f172a',
25
+ /** Empty-state / placeholder foreground. */
26
+ empty: '#334155',
27
+ },
28
+ bg: {
29
+ base: '#11131a',
30
+ surface: '#161a22',
31
+ title: '#0f172a',
32
+ section: '#18202b',
33
+ summary: '#1b2430',
34
+ selected: '#223049',
35
+ input: '#1e293b',
36
+ warning: '#2b2116',
37
+ error: '#2a161b',
38
+ success: '#14241b',
39
+ /** Fullscreen/shell footer background. */
40
+ footer: '#111827',
41
+ },
42
+ state: {
43
+ info: '#38bdf8',
44
+ good: '#22c55e',
45
+ warn: '#f59e0b',
46
+ bad: '#ef4444',
47
+ blocked: '#f97316',
48
+ active: '#60a5fa',
49
+ /** Canonical reasoning/thinking purple. */
50
+ reasoning: '#a855f7',
51
+ },
52
+ accent: {
53
+ browser: '#7dd3fc',
54
+ control: '#22d3ee',
55
+ inspector: '#c4b5fd',
56
+ workflow: '#fbbf24',
57
+ conversation: '#93c5fd',
58
+ /** Neon brand accent — header/splash/thinking gradient only. */
59
+ brand: '#00ffff',
60
+ gradientStart: '#00ffff',
61
+ gradientEnd: '#d000ff',
62
+ },
63
+ /** Canonical border stroke color for fullscreen/panel chrome. */
64
+ border: '#64748b',
65
+ /**
66
+ * Persistent-chrome foregrounds — header / footer / live-thinking rows that
67
+ * paint onto the TRANSPARENT terminal background (bg:''), NOT onto the
68
+ * opaque dark modal/panel surfaces that fg.* and state.* serve. In light
69
+ * mode this chrome sits on a light terminal and must invert toward dark to
70
+ * stay legible, which is why it carries its own role instead of reusing
71
+ * fg.muted/fg.dim (tuned light-on-dark for the opaque boxes). Dark values
72
+ * here are byte-identical to the tokens they mirror (fg.muted, fg.dim,
73
+ * state.warn, state.bad), so dark-mode chrome is unchanged by this table
74
+ * existing.
75
+ */
76
+ chrome: {
77
+ /** Secondary chrome text (header conversation title). == fg.muted (dark). */
78
+ label: '#94a3b8',
79
+ /** Faint chrome text (version, provider, header rule, clean git). == fg.dim (dark). */
80
+ faint: '#475569',
81
+ /** Warn accent on terminal bg (dirty git, pending risk). == state.warn (dark). */
82
+ warn: '#f59e0b',
83
+ /** Alert accent on terminal bg (DANGER banner, shell risk). == state.bad (dark). */
84
+ bad: '#ef4444',
85
+ /** Success accent on terminal bg (tool-call checkmark status). == state.good (dark). */
86
+ good: '#22c55e',
87
+ /** Remote-risk accent on terminal bg (risk:remote marker, plain status). */
88
+ remote: '#a78bfa',
89
+ },
90
+ };
91
+ /**
92
+ * Diff surface accent color shared across diff-rendering surfaces (conversation
93
+ * diff view, file diff panel, git panel inline diff).
94
+ */
95
+ export const DIFF_TONES = {
96
+ add: '#00ff88',
97
+ del: '#ff4444',
98
+ hunk: '#88aaff',
99
+ };
100
+ /** Single spinner-frame source. */
101
+ export const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
102
+ //
103
+ // Light variant — inverts the chrome group (and the two accents/state roles
104
+ // with no light-appropriate dark equivalent: state.info/reasoning,
105
+ // accent.brand/gradientStart/gradientEnd) toward dark-on-light legibility.
106
+ // Every other role has no light-specific value yet and is carried over from
107
+ // TONE_TOKENS unchanged (spread below) — this mirrors the TUI's UI_TONES_LIGHT
108
+ // exactly, including which roles it leaves untouched.
109
+ //
110
+ const TONE_TOKENS_LIGHT = {
111
+ ...TONE_TOKENS,
112
+ state: {
113
+ ...TONE_TOKENS.state,
114
+ info: '#0369a1',
115
+ reasoning: '#7c3aed',
116
+ },
117
+ accent: {
118
+ ...TONE_TOKENS.accent,
119
+ brand: '#0077aa',
120
+ gradientStart: '#0077aa',
121
+ gradientEnd: '#7c3aed',
122
+ },
123
+ chrome: {
124
+ ...TONE_TOKENS.chrome,
125
+ label: '#64748b',
126
+ faint: '#94a3b8',
127
+ warn: '#b45309',
128
+ bad: '#dc2626',
129
+ good: '#15803d',
130
+ remote: '#6d28d9',
131
+ },
132
+ };
133
+ Object.freeze(TONE_TOKENS_LIGHT.state);
134
+ Object.freeze(TONE_TOKENS_LIGHT.accent);
135
+ Object.freeze(TONE_TOKENS_LIGHT.chrome);
136
+ Object.freeze(TONE_TOKENS_LIGHT);
137
+ /**
138
+ * resolveTones — return the tone-token table for the given background mode.
139
+ * 'dark' returns TONE_TOKENS itself (byte-identical, same object reference) so
140
+ * a consumer that has not wired mode detection can call resolveTones('dark')
141
+ * as the safe default with zero behavior change.
142
+ */
143
+ export function resolveTones(mode) {
144
+ return mode === 'light' ? TONE_TOKENS_LIGHT : TONE_TOKENS;
145
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * waiting-wording.ts — the honest waiting-state WORDING contract, extracted
3
+ * from `goodvibes-tui` src/renderer/ui-factory.ts:554-584 (the phrase-selection
4
+ * branch inside createThinkingFragment; the companion :522-552
5
+ * computeStallInfo/computeRenderStallInfo signal computation stays
6
+ * renderer-local — each renderer has its own stream-metrics shape to derive
7
+ * a WaitingState from).
8
+ *
9
+ * The split this hoists is a DATA/pure-function contract: a renderer decides
10
+ * WHICH state it is in (from its own approval/stall/reconnect signals, in the
11
+ * TUI's precedence order — approval beats reconnect beats pre-first-token
12
+ * beats stalled beats thinking) and calls waitingPhrase(state, ctx) for the
13
+ * exact wording. Neither renderer should carry its own copy of these five
14
+ * strings/rotation — that duplication is exactly what the renderer/input parity audit found
15
+ * (the agent's ui-factory.ts:308-313 was rotating-only, with no honest
16
+ * stall/reconnect/approval split at all).
17
+ *
18
+ * PURE — no fs, no terminal I/O, no timers. Gradient color, spinner glyph,
19
+ * tok/s and elapsed-time suffixes stay renderer-owned (ui-factory.ts's
20
+ * createThinkingFragment composes those around the phrase this returns).
21
+ */
22
+ /**
23
+ * The five honest waiting states, in the TUI's precedence order:
24
+ * - 'approval' — a card is waiting on the USER; the turn is not
25
+ * stalled and the provider is not at fault.
26
+ * - 'reconnecting' — the transport is retrying after a drop.
27
+ * - 'pre-first-token' — no delta yet this turn; normal for reasoning models
28
+ * that think before emitting (NOT "stalled" — that
29
+ * would wrongly blame the provider for ordinary
30
+ * pre-token latency).
31
+ * - 'stalled' — silence AFTER the stream had already started
32
+ * producing tokens.
33
+ * - 'thinking' — the ordinary case: tokens are flowing at a normal
34
+ * cadence, show a rotating whimsical phrase.
35
+ */
36
+ export type WaitingState = 'approval' | 'reconnecting' | 'pre-first-token' | 'stalled' | 'thinking';
37
+ /** Inputs waitingPhrase needs for the states that carry numbers. Fields
38
+ * unused by the selected state are ignored. */
39
+ export interface WaitingPhraseContext {
40
+ /** 'reconnecting' — the current retry attempt number. */
41
+ readonly reconnectAttempt?: number;
42
+ /** 'reconnecting' — the configured maximum retry attempts. */
43
+ readonly reconnectMaxAttempts?: number;
44
+ /** 'pre-first-token' / 'stalled' — elapsed silence since the last delta, in ms. */
45
+ readonly msSinceLastDelta?: number;
46
+ /** 'thinking' — the render frame counter driving the phrase rotation. */
47
+ readonly frame?: number;
48
+ }
49
+ /**
50
+ * waitingPhrase — the state -> wording mapping, golden-matched against the
51
+ * TUI's ui-factory.ts:554-584 output for identical inputs.
52
+ */
53
+ export declare function waitingPhrase(state: WaitingState, ctx?: WaitingPhraseContext): string;
54
+ //# sourceMappingURL=waiting-wording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiting-wording.d.ts","sourceRoot":"","sources":["../../../src/platform/presentation/waiting-wording.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpG;+CAC+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,GAAE,oBAAyB,GAAG,MAAM,CAqBzF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * waiting-wording.ts — the honest waiting-state WORDING contract, extracted
3
+ * from `goodvibes-tui` src/renderer/ui-factory.ts:554-584 (the phrase-selection
4
+ * branch inside createThinkingFragment; the companion :522-552
5
+ * computeStallInfo/computeRenderStallInfo signal computation stays
6
+ * renderer-local — each renderer has its own stream-metrics shape to derive
7
+ * a WaitingState from).
8
+ *
9
+ * The split this hoists is a DATA/pure-function contract: a renderer decides
10
+ * WHICH state it is in (from its own approval/stall/reconnect signals, in the
11
+ * TUI's precedence order — approval beats reconnect beats pre-first-token
12
+ * beats stalled beats thinking) and calls waitingPhrase(state, ctx) for the
13
+ * exact wording. Neither renderer should carry its own copy of these five
14
+ * strings/rotation — that duplication is exactly what the renderer/input parity audit found
15
+ * (the agent's ui-factory.ts:308-313 was rotating-only, with no honest
16
+ * stall/reconnect/approval split at all).
17
+ *
18
+ * PURE — no fs, no terminal I/O, no timers. Gradient color, spinner glyph,
19
+ * tok/s and elapsed-time suffixes stay renderer-owned (ui-factory.ts's
20
+ * createThinkingFragment composes those around the phrase this returns).
21
+ */
22
+ import { THINKING_PHRASES } from './thinking-phrases.js';
23
+ /** Frame cadence the 'thinking' rotation advances at (frames tick at 80ms in
24
+ * the TUI, so ~30s per phrase) — the TUI's PHRASE_ROTATION_FRAMES verbatim. */
25
+ const PHRASE_ROTATION_FRAMES = 375;
26
+ /**
27
+ * waitingPhrase — the state -> wording mapping, golden-matched against the
28
+ * TUI's ui-factory.ts:554-584 output for identical inputs.
29
+ */
30
+ export function waitingPhrase(state, ctx = {}) {
31
+ switch (state) {
32
+ case 'approval':
33
+ // An approval card is waiting on the user — blame-free, precedence over
34
+ // stall/reconnect framing: waiting on the user is the true state.
35
+ return 'Waiting for your approval';
36
+ case 'reconnecting':
37
+ return `Reconnecting (attempt ${ctx.reconnectAttempt ?? 0}/${ctx.reconnectMaxAttempts ?? 0})...`;
38
+ case 'pre-first-token':
39
+ return `Waiting for model ${Math.floor((ctx.msSinceLastDelta ?? 0) / 1000)}s...`;
40
+ case 'stalled':
41
+ return `Stalled ${Math.floor((ctx.msSinceLastDelta ?? 0) / 1000)}s...`;
42
+ case 'thinking': {
43
+ const frame = ctx.frame ?? 0;
44
+ const phraseIndex = Math.floor(frame / PHRASE_ROTATION_FRAMES) % THINKING_PHRASES.length;
45
+ // phraseIndex is always in [0, THINKING_PHRASES.length) — the modulo above
46
+ // guarantees an in-bounds index; the non-null assertion only satisfies
47
+ // noUncheckedIndexedAccess and is never actually unsound.
48
+ return THINKING_PHRASES[phraseIndex];
49
+ }
50
+ }
51
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-snapshot.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/runtime-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGvE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;CAC/D;AAiED,wBAAsB,4BAA4B,CAChD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,GAC/K,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAG7C;AAED,wBAAsB,0BAA0B,CAC9C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,EAC9J,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAEzC;AAED,wBAAsB,wBAAwB,CAC5C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,EAC9J,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAiBvC"}
1
+ {"version":3,"file":"runtime-snapshot.d.ts","sourceRoot":"","sources":["../../../src/platform/providers/runtime-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAmB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGvE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;CAC/D;AA0ED,wBAAsB,4BAA4B,CAChD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,GAC/K,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAG7C;AAED,wBAAsB,0BAA0B,CAC9C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,EAC9J,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAEzC;AAED,wBAAsB,wBAAwB,CAC5C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,eAAe,GAAG,iBAAiB,GAAG,YAAY,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC,EAC9J,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAiBvC"}
@@ -41,14 +41,24 @@ async function buildSnapshotForProvider(providerRegistry, providerId) {
41
41
  models: { models: provider.models },
42
42
  usage: { streaming: true, toolCalling: true, parallelTools: false },
43
43
  };
44
- const currentModel = providerRegistry.getCurrentModel();
44
+ // Read-only display path: never let an unresolved current model (e.g. a fresh
45
+ // isolated home whose pricing catalog has not hydrated, so the configured
46
+ // default has no materialized definition) turn this snapshot into a 500. Treat
47
+ // an unresolvable current model as "no provider is active" rather than throwing.
48
+ let currentModel;
49
+ try {
50
+ currentModel = providerRegistry.getCurrentModel();
51
+ }
52
+ catch {
53
+ currentModel = null;
54
+ }
45
55
  const models = providerRegistry
46
56
  .listModels()
47
57
  .filter((model) => model.provider === providerId)
48
58
  .map((model) => toModelSnapshot(model, providerRegistry));
49
59
  return {
50
60
  providerId,
51
- active: currentModel.provider === providerId,
61
+ active: currentModel?.provider === providerId,
52
62
  modelCount: models.length,
53
63
  runtime: resolvedRuntime,
54
64
  models,
@@ -0,0 +1,48 @@
1
+ /**
2
+ * push/delivery.ts
3
+ *
4
+ * The single place a push message is actually encrypted and sent. Every send —
5
+ * a `push.subscriptions.verify` test, or an approval/completion fan-out — flows
6
+ * through `deliverToSubscription`, so the honesty rules live in one spot:
7
+ *
8
+ * - A push service that answers 404/410 means the browser subscription is gone;
9
+ * the record is pruned and the receipt says `pruned`, never a fake success.
10
+ * - Any other non-2xx (or a transport error) is reported as `failed` with the
11
+ * status/reason, never swallowed into a success.
12
+ * - The request carries the RFC 8188 `Content-Encoding: aes128gcm` body plus
13
+ * the `TTL`, `Urgency`, and VAPID `Authorization` headers a push service
14
+ * requires.
15
+ *
16
+ * The endpoint is whatever the browser registered. In tests that is a local
17
+ * HTTP sink; in production it is the browser vendor's push service. This module
18
+ * never contacts a hard-coded external service of its own.
19
+ */
20
+ import type { VapidManager } from './vapid.js';
21
+ import type { PushSubscriptionStore } from './subscription-store.js';
22
+ import type { PushDeliveryReceipt, PushMessage, StoredPushSubscription } from './types.js';
23
+ /** The `fetch` slice used to POST an encrypted payload. Injectable for tests. */
24
+ export type PushTransport = (url: string, init: {
25
+ method: string;
26
+ headers: Record<string, string>;
27
+ body: Buffer;
28
+ }) => Promise<{
29
+ status: number;
30
+ }>;
31
+ export interface DeliveryDeps {
32
+ readonly vapid: VapidManager;
33
+ readonly store: PushSubscriptionStore;
34
+ readonly transport?: PushTransport | undefined;
35
+ }
36
+ /**
37
+ * Encrypt and send one message to one subscription, prune-on-gone, and return
38
+ * an honest receipt. The subscription's `lastOutcome` is stamped either way.
39
+ */
40
+ export declare function deliverToSubscription(subscription: StoredPushSubscription, message: PushMessage, deps: DeliveryDeps): Promise<PushDeliveryReceipt>;
41
+ /**
42
+ * Fan one message out to every stored subscription, delivering (and pruning) in
43
+ * sequence. Returns one receipt per subscription — an empty array when there
44
+ * are no subscriptions at all (the honest "nobody to notify" result, not a
45
+ * silent success).
46
+ */
47
+ export declare function deliverToAll(message: PushMessage, deps: DeliveryDeps): Promise<PushDeliveryReceipt[]>;
48
+ //# sourceMappingURL=delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/platform/push/delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAgCjC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,sBAAsB,EACpC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAyD9B;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAOhC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * push/delivery.ts
3
+ *
4
+ * The single place a push message is actually encrypted and sent. Every send —
5
+ * a `push.subscriptions.verify` test, or an approval/completion fan-out — flows
6
+ * through `deliverToSubscription`, so the honesty rules live in one spot:
7
+ *
8
+ * - A push service that answers 404/410 means the browser subscription is gone;
9
+ * the record is pruned and the receipt says `pruned`, never a fake success.
10
+ * - Any other non-2xx (or a transport error) is reported as `failed` with the
11
+ * status/reason, never swallowed into a success.
12
+ * - The request carries the RFC 8188 `Content-Encoding: aes128gcm` body plus
13
+ * the `TTL`, `Urgency`, and VAPID `Authorization` headers a push service
14
+ * requires.
15
+ *
16
+ * The endpoint is whatever the browser registered. In tests that is a local
17
+ * HTTP sink; in production it is the browser vendor's push service. This module
18
+ * never contacts a hard-coded external service of its own.
19
+ */
20
+ import { encryptPushPayload } from './encryption.js';
21
+ const DEFAULT_TTL_SECONDS = 24 * 60 * 60;
22
+ const GONE_STATUSES = new Set([404, 410]);
23
+ function defaultTransport() {
24
+ return async (url, init) => {
25
+ // Re-wrap over a plain ArrayBuffer so the body matches fetch's BodyInit.
26
+ const res = await fetch(url, {
27
+ method: init.method,
28
+ headers: init.headers,
29
+ body: new Uint8Array(init.body),
30
+ });
31
+ return { status: res.status };
32
+ };
33
+ }
34
+ function endpointOrigin(endpoint) {
35
+ try {
36
+ return new URL(endpoint).origin;
37
+ }
38
+ catch {
39
+ return 'invalid';
40
+ }
41
+ }
42
+ function messagePlaintext(message) {
43
+ return Buffer.from(JSON.stringify({ title: message.title, body: message.body, data: message.data ?? {} }), 'utf8');
44
+ }
45
+ /**
46
+ * Encrypt and send one message to one subscription, prune-on-gone, and return
47
+ * an honest receipt. The subscription's `lastOutcome` is stamped either way.
48
+ */
49
+ export async function deliverToSubscription(subscription, message, deps) {
50
+ const origin = endpointOrigin(subscription.endpoint);
51
+ const transport = deps.transport ?? defaultTransport();
52
+ let httpStatus;
53
+ try {
54
+ const encrypted = encryptPushPayload(subscription.keys, messagePlaintext(message));
55
+ const authorization = await deps.vapid.buildAuthorizationHeader(subscription.endpoint);
56
+ const headers = {
57
+ 'content-encoding': encrypted.contentEncoding,
58
+ 'content-type': 'application/octet-stream',
59
+ ttl: String(message.ttlSeconds ?? DEFAULT_TTL_SECONDS),
60
+ urgency: message.urgency ?? 'normal',
61
+ authorization,
62
+ };
63
+ const result = await transport(subscription.endpoint, {
64
+ method: 'POST',
65
+ headers,
66
+ body: encrypted.body,
67
+ });
68
+ httpStatus = result.status;
69
+ }
70
+ catch (error) {
71
+ await deps.store.recordOutcome(subscription.id, 'failed');
72
+ return {
73
+ subscriptionId: subscription.id,
74
+ endpointOrigin: origin,
75
+ outcome: 'failed',
76
+ detail: `delivery request failed: ${error instanceof Error ? error.message : String(error)}`,
77
+ };
78
+ }
79
+ if (httpStatus >= 200 && httpStatus < 300) {
80
+ await deps.store.recordOutcome(subscription.id, 'delivered');
81
+ return { subscriptionId: subscription.id, endpointOrigin: origin, outcome: 'delivered', httpStatus };
82
+ }
83
+ if (GONE_STATUSES.has(httpStatus)) {
84
+ // The subscription is gone at the push service — prune it (delete means
85
+ // delete) and report the prune with the status that proved it dead.
86
+ await deps.store.remove(subscription.id);
87
+ return {
88
+ subscriptionId: subscription.id,
89
+ endpointOrigin: origin,
90
+ outcome: 'pruned',
91
+ httpStatus,
92
+ detail: `push endpoint reported ${httpStatus} gone; subscription removed`,
93
+ };
94
+ }
95
+ await deps.store.recordOutcome(subscription.id, 'failed');
96
+ return {
97
+ subscriptionId: subscription.id,
98
+ endpointOrigin: origin,
99
+ outcome: 'failed',
100
+ httpStatus,
101
+ detail: `push service returned ${httpStatus}`,
102
+ };
103
+ }
104
+ /**
105
+ * Fan one message out to every stored subscription, delivering (and pruning) in
106
+ * sequence. Returns one receipt per subscription — an empty array when there
107
+ * are no subscriptions at all (the honest "nobody to notify" result, not a
108
+ * silent success).
109
+ */
110
+ export async function deliverToAll(message, deps) {
111
+ const subscriptions = await deps.store.all();
112
+ const receipts = [];
113
+ for (const subscription of subscriptions) {
114
+ receipts.push(await deliverToSubscription(subscription, message, deps));
115
+ }
116
+ return receipts;
117
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * push/encryption.ts
3
+ *
4
+ * Browser-push payload encryption, implemented with Node's built-in crypto
5
+ * (node:crypto) — no third-party web-push dependency. This is the daemon-side
6
+ * (Node/Bun) delivery path only; nothing here is imported by the runtime-neutral
7
+ * or browser bundles (see scripts/browser-compat-check.ts).
8
+ *
9
+ * Two standards are combined here, exactly as a browser Push service expects:
10
+ *
11
+ * - RFC 8291 (Message Encryption for Web Push): derive a shared secret from an
12
+ * ephemeral P-256 keypair and the subscription's public key + auth secret.
13
+ * - RFC 8188 (aes128gcm content encoding): expand that secret into a
14
+ * content-encryption key + nonce and encrypt one record, then frame it with
15
+ * the salt / record-size / sender-public-key header the receiver reads back.
16
+ *
17
+ * The output Buffer is the raw request body sent to the subscription endpoint
18
+ * with `Content-Encoding: aes128gcm`.
19
+ */
20
+ /** The subscription's own key material, base64url-encoded (browser PushSubscription shape). */
21
+ export interface SubscriptionKeyMaterial {
22
+ /** The receiver's public key — 65-byte uncompressed P-256 point, base64url. */
23
+ readonly p256dh: string;
24
+ /** The receiver's 16-byte authentication secret, base64url. */
25
+ readonly auth: string;
26
+ }
27
+ export interface EncryptedPushPayload {
28
+ /** The aes128gcm request body: header || ciphertext || GCM tag. */
29
+ readonly body: Buffer;
30
+ /** Always `aes128gcm` — the value for the Content-Encoding request header. */
31
+ readonly contentEncoding: 'aes128gcm';
32
+ }
33
+ /**
34
+ * Encrypt `plaintext` for a subscription's key material.
35
+ *
36
+ * A fresh ephemeral sender keypair and salt are generated per call (RFC 8291
37
+ * requires this — the same salt/key pair must never encrypt two messages), so
38
+ * the result is non-deterministic by design.
39
+ */
40
+ export declare function encryptPushPayload(keys: SubscriptionKeyMaterial, plaintext: Buffer): EncryptedPushPayload;
41
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/platform/push/encryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,+FAA+F;AAC/F,MAAM,WAAW,uBAAuB;IACtC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC;CACvC;AAyBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,uBAAuB,EAC7B,SAAS,EAAE,MAAM,GAChB,oBAAoB,CA2CtB"}