@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,68 @@
1
+ /**
2
+ * webui-serving.ts
3
+ *
4
+ * Two opt-in capabilities that let a browser-hosted web UI reach the daemon:
5
+ *
6
+ * 1. Same-origin bundle serving (PRIMARY). When `controlPlane.webui.serve` is
7
+ * on, the daemon serves a configured build directory at `/` so the bundle
8
+ * and the API share an origin — the browser's same-origin policy is then a
9
+ * non-issue. This is wire-compatible with `tailscale serve`, which fronts
10
+ * the single daemon origin over HTTPS: bundle + API arrive same-origin.
11
+ * The bundle is public (served without a token); the app itself
12
+ * token-authenticates its API calls, so no wire data leaks from serving
13
+ * static files.
14
+ *
15
+ * 2. Cross-origin request support (SECONDARY). When `controlPlane.cors.enabled`
16
+ * is on, OPTIONS preflight is answered and Access-Control-Allow-* headers
17
+ * are emitted ONLY for origins on the explicit `controlPlane.cors.allowedOrigins`
18
+ * allowlist (the Vite dev server, a deliberately separate origin, etc.).
19
+ * There is no wildcard: the matched origin is echoed back, credentials are
20
+ * allowlist-gated, and `Vary: Origin` is always set so caches stay correct.
21
+ *
22
+ * BOTH default OFF. With both off the daemon behaves exactly as before: no bundle
23
+ * is served and no Access-Control-Allow-Origin is ever emitted. The loopback
24
+ * default posture is unchanged; these capabilities are explicit opt-ins, never
25
+ * auto-enabled by network host mode.
26
+ */
27
+ import type { ConfigManager } from '../../config/manager.js';
28
+ /** Resolved, per-request view of the two opt-in serving capabilities. */
29
+ export interface WebuiServingPosture {
30
+ /** True when the daemon should serve the configured bundle directory at `/`. */
31
+ readonly serveBundle: boolean;
32
+ /** Absolute or working-dir-relative bundle directory; empty string when unset. */
33
+ readonly bundleDir: string;
34
+ /** Cross-origin request support (OPTIONS preflight + Access-Control-Allow-*). */
35
+ readonly cors: {
36
+ readonly enabled: boolean;
37
+ /** Explicit origin allowlist. Never wildcarded; empty means "refuse every origin". */
38
+ readonly allowedOrigins: readonly string[];
39
+ };
40
+ /** OpenAI-compatible path prefix (reserved so bundle serving never shadows it). */
41
+ readonly openaiPathPrefix: string;
42
+ }
43
+ /** Read the current serving posture from config. Cheap; called per request. */
44
+ export declare function resolveWebuiServingPosture(configManager: ConfigManager): WebuiServingPosture;
45
+ /**
46
+ * Answer a CORS preflight (OPTIONS). Emits Access-Control-Allow-* only for an
47
+ * allowlisted origin; a non-allowlisted origin is refused honestly (403, no
48
+ * Access-Control-Allow-Origin) so the browser preflight fails cleanly.
49
+ */
50
+ export declare function handleCorsPreflight(req: Request, posture: WebuiServingPosture): Response;
51
+ /**
52
+ * Decorate an actual (non-preflight) response with CORS headers when the request
53
+ * carries an allowlisted Origin. `Vary: Origin` is always added while CORS is
54
+ * enabled so caches never serve an allow-origin to the wrong origin. A
55
+ * non-allowlisted origin gets Vary but NO Access-Control-Allow-Origin — the
56
+ * browser then blocks the read honestly.
57
+ */
58
+ export declare function applyCorsHeaders(req: Request, response: Response, posture: WebuiServingPosture): Response;
59
+ /**
60
+ * Serve a file from the configured bundle directory, with SPA fallback to
61
+ * index.html for navigation routes. Returns null when serving is disabled, the
62
+ * request is not a GET/HEAD, or the path is a reserved API route — in every
63
+ * "null" case the caller continues with normal daemon routing, so behavior is
64
+ * unchanged when the capability is off. Path traversal outside the bundle
65
+ * directory is refused with 403.
66
+ */
67
+ export declare function serveWebuiBundle(req: Request, posture: WebuiServingPosture): Promise<Response | null>;
68
+ //# sourceMappingURL=webui-serving.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webui-serving.d.ts","sourceRoot":"","sources":["../../../../src/platform/daemon/http/webui-serving.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,sFAAsF;QACtF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5C,CAAC;IACF,mFAAmF;IACnF,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAOD,+EAA+E;AAC/E,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,aAAa,GAAG,mBAAmB,CAY5F;AAmBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CA8BxF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CAUzG;AA+ED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuC3G"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * webui-serving.ts
3
+ *
4
+ * Two opt-in capabilities that let a browser-hosted web UI reach the daemon:
5
+ *
6
+ * 1. Same-origin bundle serving (PRIMARY). When `controlPlane.webui.serve` is
7
+ * on, the daemon serves a configured build directory at `/` so the bundle
8
+ * and the API share an origin — the browser's same-origin policy is then a
9
+ * non-issue. This is wire-compatible with `tailscale serve`, which fronts
10
+ * the single daemon origin over HTTPS: bundle + API arrive same-origin.
11
+ * The bundle is public (served without a token); the app itself
12
+ * token-authenticates its API calls, so no wire data leaks from serving
13
+ * static files.
14
+ *
15
+ * 2. Cross-origin request support (SECONDARY). When `controlPlane.cors.enabled`
16
+ * is on, OPTIONS preflight is answered and Access-Control-Allow-* headers
17
+ * are emitted ONLY for origins on the explicit `controlPlane.cors.allowedOrigins`
18
+ * allowlist (the Vite dev server, a deliberately separate origin, etc.).
19
+ * There is no wildcard: the matched origin is echoed back, credentials are
20
+ * allowlist-gated, and `Vary: Origin` is always set so caches stay correct.
21
+ *
22
+ * BOTH default OFF. With both off the daemon behaves exactly as before: no bundle
23
+ * is served and no Access-Control-Allow-Origin is ever emitted. The loopback
24
+ * default posture is unchanged; these capabilities are explicit opt-ins, never
25
+ * auto-enabled by network host mode.
26
+ */
27
+ import { resolve, sep } from 'node:path';
28
+ import { readStringList } from '../helpers.js';
29
+ function readConfig(configManager, key) {
30
+ const getter = configManager.get;
31
+ return typeof getter === 'function' ? getter.call(configManager, key) : undefined;
32
+ }
33
+ /** Read the current serving posture from config. Cheap; called per request. */
34
+ export function resolveWebuiServingPosture(configManager) {
35
+ const serveBundle = readConfig(configManager, 'controlPlane.webui.serve') === true;
36
+ const bundleDirRaw = readConfig(configManager, 'controlPlane.webui.bundleDir');
37
+ const corsEnabled = readConfig(configManager, 'controlPlane.cors.enabled') === true;
38
+ const allowedOrigins = readStringList(readConfig(configManager, 'controlPlane.cors.allowedOrigins')) ?? [];
39
+ const openaiPrefixRaw = readConfig(configManager, 'controlPlane.openaiCompatible.pathPrefix');
40
+ return {
41
+ serveBundle,
42
+ bundleDir: typeof bundleDirRaw === 'string' ? bundleDirRaw.trim() : '',
43
+ cors: { enabled: corsEnabled, allowedOrigins },
44
+ openaiPathPrefix: typeof openaiPrefixRaw === 'string' && openaiPrefixRaw.trim() ? openaiPrefixRaw.trim() : '/v1',
45
+ };
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // CORS (secondary path)
49
+ // ---------------------------------------------------------------------------
50
+ /** Append a token to an existing Vary header without duplicating it. */
51
+ function appendVary(existing, token) {
52
+ if (!existing)
53
+ return token;
54
+ const parts = existing.split(',').map((p) => p.trim()).filter(Boolean);
55
+ if (parts.some((p) => p.toLowerCase() === token.toLowerCase()))
56
+ return existing;
57
+ return [...parts, token].join(', ');
58
+ }
59
+ /** True when the origin is on the explicit allowlist (exact match, no wildcard). */
60
+ function isOriginAllowed(origin, allowlist) {
61
+ return allowlist.includes(origin);
62
+ }
63
+ /**
64
+ * Answer a CORS preflight (OPTIONS). Emits Access-Control-Allow-* only for an
65
+ * allowlisted origin; a non-allowlisted origin is refused honestly (403, no
66
+ * Access-Control-Allow-Origin) so the browser preflight fails cleanly.
67
+ */
68
+ export function handleCorsPreflight(req, posture) {
69
+ const origin = req.headers.get('origin');
70
+ // A preflight with no Origin is not a browser CORS preflight — answer 204 with
71
+ // no allow-origin (nothing to grant); never emit a wildcard.
72
+ if (origin === null) {
73
+ return new Response(null, { status: 204, headers: { Vary: 'Origin' } });
74
+ }
75
+ if (!isOriginAllowed(origin, posture.cors.allowedOrigins)) {
76
+ return Response.json({ error: 'ORIGIN_NOT_ALLOWED', code: 'ORIGIN_NOT_ALLOWED', message: 'Origin is not on controlPlane.cors.allowedOrigins.' }, { status: 403, headers: { Vary: 'Origin' } });
77
+ }
78
+ // Echo the requested headers when present, otherwise a safe default that always
79
+ // includes Authorization so the bearer-token API flow works cross-origin.
80
+ const requestedHeaders = req.headers.get('access-control-request-headers');
81
+ const allowHeaders = requestedHeaders && requestedHeaders.trim()
82
+ ? requestedHeaders
83
+ : 'Authorization, Content-Type';
84
+ return new Response(null, {
85
+ status: 204,
86
+ headers: {
87
+ 'Access-Control-Allow-Origin': origin,
88
+ 'Access-Control-Allow-Credentials': 'true',
89
+ 'Access-Control-Allow-Methods': 'GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS',
90
+ 'Access-Control-Allow-Headers': allowHeaders,
91
+ 'Access-Control-Max-Age': '600',
92
+ Vary: 'Origin',
93
+ },
94
+ });
95
+ }
96
+ /**
97
+ * Decorate an actual (non-preflight) response with CORS headers when the request
98
+ * carries an allowlisted Origin. `Vary: Origin` is always added while CORS is
99
+ * enabled so caches never serve an allow-origin to the wrong origin. A
100
+ * non-allowlisted origin gets Vary but NO Access-Control-Allow-Origin — the
101
+ * browser then blocks the read honestly.
102
+ */
103
+ export function applyCorsHeaders(req, response, posture) {
104
+ const origin = req.headers.get('origin');
105
+ if (origin === null)
106
+ return response;
107
+ const headers = new Headers(response.headers);
108
+ headers.set('Vary', appendVary(headers.get('Vary'), 'Origin'));
109
+ if (isOriginAllowed(origin, posture.cors.allowedOrigins)) {
110
+ headers.set('Access-Control-Allow-Origin', origin);
111
+ headers.set('Access-Control-Allow-Credentials', 'true');
112
+ }
113
+ return new Response(response.body, { status: response.status, statusText: response.statusText, headers });
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Static bundle serving (primary path)
117
+ // ---------------------------------------------------------------------------
118
+ /** Extension → content type for the common web-bundle asset kinds. */
119
+ const CONTENT_TYPES = {
120
+ html: 'text/html; charset=utf-8',
121
+ js: 'text/javascript; charset=utf-8',
122
+ mjs: 'text/javascript; charset=utf-8',
123
+ css: 'text/css; charset=utf-8',
124
+ json: 'application/json; charset=utf-8',
125
+ map: 'application/json; charset=utf-8',
126
+ svg: 'image/svg+xml',
127
+ png: 'image/png',
128
+ jpg: 'image/jpeg',
129
+ jpeg: 'image/jpeg',
130
+ gif: 'image/gif',
131
+ webp: 'image/webp',
132
+ avif: 'image/avif',
133
+ ico: 'image/x-icon',
134
+ woff: 'font/woff',
135
+ woff2: 'font/woff2',
136
+ ttf: 'font/ttf',
137
+ wasm: 'application/wasm',
138
+ txt: 'text/plain; charset=utf-8',
139
+ webmanifest: 'application/manifest+json',
140
+ };
141
+ function extensionOf(pathname) {
142
+ const base = pathname.slice(pathname.lastIndexOf('/') + 1);
143
+ const dot = base.lastIndexOf('.');
144
+ return dot > 0 ? base.slice(dot + 1).toLowerCase() : '';
145
+ }
146
+ function contentTypeFor(pathname) {
147
+ return CONTENT_TYPES[extensionOf(pathname)] ?? 'application/octet-stream';
148
+ }
149
+ /** True when a path belongs to the daemon API/route surface and must never be
150
+ * served as a static file (API routes keep precedence). Boundary-aware so a SPA
151
+ * route like `/tasks` is not mistaken for the daemon's `/task` route. */
152
+ function isReservedApiPath(pathname, openaiPrefix) {
153
+ const reserved = ['/api', '/login', '/webhook', '/task', openaiPrefix];
154
+ return reserved.some((base) => pathname === base || pathname.startsWith(`${base}/`));
155
+ }
156
+ /** True when the request looks like an SPA navigation (HTML document) rather than
157
+ * a fetch for a concrete asset — used to decide whether the index.html fallback
158
+ * applies. A missing concrete asset must 404, not return the HTML shell. */
159
+ function isNavigationRequest(req, pathname) {
160
+ if (extensionOf(pathname) === '')
161
+ return true;
162
+ return (req.headers.get('accept') ?? '').includes('text/html');
163
+ }
164
+ function cacheControlFor(pathname, isShell) {
165
+ if (isShell || extensionOf(pathname) === 'html')
166
+ return 'no-cache';
167
+ if (pathname.includes('/assets/'))
168
+ return 'public, max-age=31536000, immutable';
169
+ return 'public, max-age=3600';
170
+ }
171
+ async function fileResponse(req, file, pathname, isShell) {
172
+ const headers = {
173
+ 'Content-Type': contentTypeFor(pathname),
174
+ 'Cache-Control': cacheControlFor(pathname, isShell),
175
+ };
176
+ if (req.method === 'HEAD') {
177
+ const size = await file.size;
178
+ return new Response(null, { status: 200, headers: { ...headers, 'Content-Length': String(size) } });
179
+ }
180
+ return new Response(file, { status: 200, headers });
181
+ }
182
+ /**
183
+ * Serve a file from the configured bundle directory, with SPA fallback to
184
+ * index.html for navigation routes. Returns null when serving is disabled, the
185
+ * request is not a GET/HEAD, or the path is a reserved API route — in every
186
+ * "null" case the caller continues with normal daemon routing, so behavior is
187
+ * unchanged when the capability is off. Path traversal outside the bundle
188
+ * directory is refused with 403.
189
+ */
190
+ export async function serveWebuiBundle(req, posture) {
191
+ if (!posture.serveBundle || !posture.bundleDir)
192
+ return null;
193
+ if (req.method !== 'GET' && req.method !== 'HEAD')
194
+ return null;
195
+ const url = new URL(req.url);
196
+ let pathname;
197
+ try {
198
+ pathname = decodeURIComponent(url.pathname);
199
+ }
200
+ catch {
201
+ return new Response('Bad Request', { status: 400 });
202
+ }
203
+ if (pathname.includes('\0'))
204
+ return new Response('Bad Request', { status: 400 });
205
+ if (isReservedApiPath(pathname, posture.openaiPathPrefix))
206
+ return null;
207
+ const root = resolve(posture.bundleDir);
208
+ const relative = pathname === '/' ? 'index.html' : pathname.replace(/^\/+/, '');
209
+ const resolved = resolve(root, relative);
210
+ // Reject anything that escapes the bundle root (path traversal).
211
+ if (resolved !== root && !resolved.startsWith(root + sep)) {
212
+ return new Response('Forbidden', { status: 403 });
213
+ }
214
+ const file = Bun.file(resolved);
215
+ if (await file.exists()) {
216
+ const isShell = resolved === resolve(root, 'index.html');
217
+ // Derive the content type from the resolved file path, not the request path —
218
+ // a `GET /` serves index.html and must answer text/html, not octet-stream.
219
+ return fileResponse(req, file, resolved, isShell);
220
+ }
221
+ // SPA fallback: an unknown navigation route serves the app shell; a missing
222
+ // concrete asset is an honest 404 (never the HTML shell in a JS/CSS request).
223
+ if (isNavigationRequest(req, pathname)) {
224
+ const indexFile = Bun.file(resolve(root, 'index.html'));
225
+ if (await indexFile.exists()) {
226
+ return fileResponse(req, indexFile, '/index.html', true);
227
+ }
228
+ }
229
+ return new Response('Not Found', { status: 404 });
230
+ }
@@ -1,4 +1,6 @@
1
1
  export { DaemonServer } from './server.js';
2
+ export { bootDaemon } from './boot.js';
3
+ export type { BootDaemonOptions, BootedDaemon } from './boot.js';
2
4
  export { HttpListener } from './http-listener.js';
3
5
  export { PlatformServiceManager } from './service-manager.js';
4
6
  export type { ManagedServiceStatus } from './service-manager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { DaemonServer } from './server.js';
2
+ export { bootDaemon } from './boot.js';
2
3
  export { HttpListener } from './http-listener.js';
3
4
  export { PlatformServiceManager } from './service-manager.js';
4
5
  export { isPortAvailable, requirePortAvailable } from './port-check.js';
@@ -12,6 +12,8 @@ export interface ManagedServiceDefinition {
12
12
  }
13
13
  export interface ManagedServiceStatus {
14
14
  readonly platform: ManagedServicePlatform;
15
+ /** The resolved service name (`service.serviceName` config, else the built-in default) — so a CLI/consumer never has to hardcode it. */
16
+ readonly serviceName: string;
15
17
  readonly path: string;
16
18
  readonly installed: boolean;
17
19
  readonly autostart: boolean;
@@ -67,6 +69,20 @@ export declare class PlatformServiceManager {
67
69
  private startManual;
68
70
  private stopManual;
69
71
  private runPlatformAction;
72
+ /**
73
+ * Resolves `running` (+ `pid` when known) for `status()`. Only the manual
74
+ * platform's `startManual` ever writes the pid file (`start()` branches on
75
+ * `platform === 'manual'` before ever calling `runPlatformAction`), so for
76
+ * systemd/launchd the pid file is permanently absent and a pid-file-only
77
+ * check would report `running: false` for a genuinely active unit. systemd
78
+ * and launchd are queried live instead, through the same injected
79
+ * `actionRunner` used by start/stop/restart (never a raw exec bypassing it,
80
+ * so tests can fake the query deterministically).
81
+ */
82
+ private queryRunning;
83
+ private queryPlatformRunning;
84
+ /** Runs a service-management query/action through the injected actionRunner when present, else a real spawnSync — the single choke point start/stop/restart/status share. */
85
+ private runQuery;
70
86
  private readPid;
71
87
  private isPidRunning;
72
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/service-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../../src/platform/daemon/service-manager.ts"],"names":[],"mappings":"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"}
@@ -200,6 +200,7 @@ export class PlatformServiceManager {
200
200
  const definition = this.resolveDefinition();
201
201
  return {
202
202
  platform,
203
+ serviceName,
203
204
  path,
204
205
  installed: false,
205
206
  autostart: false,
@@ -212,15 +213,11 @@ export class PlatformServiceManager {
212
213
  };
213
214
  }
214
215
  const installed = existsSync(path);
215
- const pidPath = pidFilePath(platform, this.workingDirectory, this.surfaceRoot);
216
- const pid = existsSync(pidPath) ? this.readPid(pidPath) : undefined;
217
- const running = pid !== undefined ? this.isPidRunning(pid) : false;
218
- if (!running && existsSync(pidPath)) {
219
- rmSync(pidPath, { force: true });
220
- }
216
+ const { running, pid } = this.queryRunning(platform, serviceName);
221
217
  const definition = this.resolveDefinition();
222
218
  return {
223
219
  platform,
220
+ serviceName,
224
221
  path,
225
222
  installed,
226
223
  autostart: Boolean(this.configManager.get('service.autostart')),
@@ -361,29 +358,96 @@ export class PlatformServiceManager {
361
358
  runPlatformAction(platform, action) {
362
359
  const serviceName = resolveServiceName(this.configManager, this.defaultServiceName);
363
360
  const path = definitionPath(platform, serviceName, this.getPaths(), this.surfaceRoot);
364
- const command = platform === 'systemd'
365
- ? ['systemctl', '--user', action === 'start' ? 'enable' : action, ...(action === 'start' ? ['--now'] : []), `${serviceName}.service`]
361
+ // Each step is an argv plus a bestEffort flag. launchd has no native restart
362
+ // verb, so restart is an honest unload-then-load; the unload is best-effort
363
+ // (the agent may simply not be loaded yet), mirroring suggestedCommands()'
364
+ // human-facing `launchctl unload <path> || true`.
365
+ const steps = platform === 'systemd'
366
+ ? [{ argv: ['systemctl', '--user', action === 'start' ? 'enable' : action, ...(action === 'start' ? ['--now'] : []), `${serviceName}.service`] }]
366
367
  : platform === 'launchd'
367
- ? ['launchctl', action === 'stop' ? 'unload' : 'load', path]
368
+ ? action === 'restart'
369
+ ? [
370
+ { argv: ['launchctl', 'unload', path], bestEffort: true },
371
+ { argv: ['launchctl', 'load', path] },
372
+ ]
373
+ : [{ argv: ['launchctl', action === 'stop' ? 'unload' : 'load', path] }]
368
374
  : platform === 'windows'
369
- ? ['schtasks', action === 'start' ? '/Run' : action === 'stop' ? '/End' : '/Run', '/TN', serviceName]
375
+ ? [{ argv: ['schtasks', action === 'start' ? '/Run' : action === 'stop' ? '/End' : '/Run', '/TN', serviceName] }]
370
376
  : [];
371
- if (command.length === 0) {
377
+ if (steps.length === 0) {
372
378
  return {
373
379
  ...this.status(),
374
380
  lastAction: action,
375
381
  actionError: `Unsupported platform action: ${platform}`,
376
382
  };
377
383
  }
378
- const result = this.actionRunner
379
- ? this.actionRunner(command[0], command.slice(1))
380
- : spawnSync(command[0], command.slice(1), { stdio: 'pipe', encoding: 'utf-8' });
384
+ let actionError;
385
+ for (const step of steps) {
386
+ const argv = step.argv;
387
+ const result = this.runQuery(argv[0], argv.slice(1));
388
+ if ((result.status ?? 1) !== 0 && !step.bestEffort) {
389
+ actionError = ((result.stderr ?? '') || (result.stdout ?? '') || `command exited with ${result.status}`).trim();
390
+ break;
391
+ }
392
+ }
381
393
  return {
382
394
  ...this.status(),
383
395
  lastAction: action,
384
- ...((result.status ?? 1) === 0 ? {} : { actionError: ((result.stderr ?? '') || (result.stdout ?? '') || `command exited with ${result.status}`).trim() }),
396
+ ...(actionError === undefined ? {} : { actionError }),
385
397
  };
386
398
  }
399
+ /**
400
+ * Resolves `running` (+ `pid` when known) for `status()`. Only the manual
401
+ * platform's `startManual` ever writes the pid file (`start()` branches on
402
+ * `platform === 'manual'` before ever calling `runPlatformAction`), so for
403
+ * systemd/launchd the pid file is permanently absent and a pid-file-only
404
+ * check would report `running: false` for a genuinely active unit. systemd
405
+ * and launchd are queried live instead, through the same injected
406
+ * `actionRunner` used by start/stop/restart (never a raw exec bypassing it,
407
+ * so tests can fake the query deterministically).
408
+ */
409
+ queryRunning(platform, serviceName) {
410
+ if (platform === 'systemd' || platform === 'launchd') {
411
+ return this.queryPlatformRunning(platform, serviceName);
412
+ }
413
+ const pidPath = pidFilePath(platform, this.workingDirectory, this.surfaceRoot);
414
+ const pid = existsSync(pidPath) ? this.readPid(pidPath) : undefined;
415
+ const running = pid !== undefined ? this.isPidRunning(pid) : false;
416
+ if (!running && existsSync(pidPath)) {
417
+ rmSync(pidPath, { force: true });
418
+ }
419
+ return running ? { running, pid } : { running };
420
+ }
421
+ queryPlatformRunning(platform, serviceName) {
422
+ if (platform === 'systemd') {
423
+ const result = this.runQuery('systemctl', ['--user', 'is-active', `${serviceName}.service`]);
424
+ const state = (result.stdout ?? '').trim();
425
+ return { running: (result.status ?? 1) === 0 && state === 'active' };
426
+ }
427
+ // launchd: no single-job query is used here — `launchctl list <label>` prints
428
+ // a plist dump on modern macOS, not a stable parseable field. Instead run the
429
+ // plain `launchctl list` (same command this module's suggestedCommands()
430
+ // already tells operators to run: `launchctl list | grep <name>`) and find the
431
+ // job's own tabular line: `<pid-or-dash>\t<last-exit-status>\t<label>`. No
432
+ // matching line = not loaded = not running; a `-` PID column = loaded but
433
+ // stopped; a numeric PID = running.
434
+ const result = this.runQuery('launchctl', ['list']);
435
+ const match = (result.stdout ?? '')
436
+ .split('\n')
437
+ .map((line) => line.trim().split(/\s+/))
438
+ .find((fields) => fields[fields.length - 1] === serviceName);
439
+ if (!match)
440
+ return { running: false };
441
+ const pidToken = match[0];
442
+ const pid = pidToken && /^\d+$/.test(pidToken) ? Number(pidToken) : undefined;
443
+ return pid !== undefined ? { running: true, pid } : { running: false };
444
+ }
445
+ /** Runs a service-management query/action through the injected actionRunner when present, else a real spawnSync — the single choke point start/stop/restart/status share. */
446
+ runQuery(command, args) {
447
+ return this.actionRunner
448
+ ? this.actionRunner(command, args)
449
+ : spawnSync(command, args, { stdio: 'pipe', encoding: 'utf-8' });
450
+ }
387
451
  readPid(path) {
388
452
  const raw = readFileSync(path, 'utf-8').trim();
389
453
  const pid = Number.parseInt(raw, 10);
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/platform/intelligence/tree-sitter/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAU,QAAQ,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAalD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,SAAS,CAAsC;IACvD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBjC;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAuB5D;;;OAGG;IACG,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA+CvB,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQlC;;;OAGG;IACH,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,UAAU,EAAE;IAYf,sCAAsC;IACtC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,2BAA2B;IAC3B,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/platform/intelligence/tree-sitter/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAU,QAAQ,EAAS,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAyBlD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,SAAS,CAAsC;IACvD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAwB5D;;;OAGG;IACG,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA+CvB,gEAAgE;IAChE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQlC;;;OAGG;IACH,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAClB,UAAU,EAAE;IAYf,sCAAsC;IACtC,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,2BAA2B;IAC3B,IAAI,eAAe,IAAI,MAAM,EAAE,CAE9B;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAahB"}
@@ -9,9 +9,20 @@
9
9
  import { Parser, Language, Query, Tree } from 'web-tree-sitter';
10
10
  import { logger } from '../../utils/logger.js';
11
11
  import { detectLanguage } from './languages.js';
12
- import { TREE_SITTER_WASM, GRAMMAR_WASM } from './embedded-wasm.js';
13
12
  import { summarizeError } from '../../utils/error-display.js';
14
13
  const MAX_CACHE_SIZE = 100;
14
+ // The embedded-wasm module uses Bun's `with { type: 'file' }` import attribute,
15
+ // which is invalid under any non-Bun runtime (Node throws
16
+ // ERR_IMPORT_ATTRIBUTE_UNSUPPORTED the instant the module is evaluated). Loading
17
+ // it lazily keeps it OUT of the static import graph of `platform/runtime` etc.,
18
+ // so a Node consumer (or the release install-smoke check) can import those
19
+ // surfaces without ever evaluating it. It is only pulled when tree-sitter
20
+ // actually initializes / loads a grammar — a Bun-only code path — so real Bun
21
+ // behavior is unchanged.
22
+ let embeddedWasmPromise = null;
23
+ function loadEmbeddedWasm() {
24
+ return (embeddedWasmPromise ??= import('./embedded-wasm.js'));
25
+ }
15
26
  export class TreeSitterService {
16
27
  parser = null;
17
28
  initialized = false;
@@ -31,7 +42,9 @@ export class TreeSitterService {
31
42
  try {
32
43
  // TREE_SITTER_WASM is the embedded WASM path from embedded-wasm.ts.
33
44
  // In compiled binaries it resolves to the embedded file; in dev mode
34
- // it resolves to the absolute filesystem path. Both work.
45
+ // it resolves to the absolute filesystem path. Both work. Loaded lazily
46
+ // (see loadEmbeddedWasm) so this Bun-only module stays off the static graph.
47
+ const { TREE_SITTER_WASM } = await loadEmbeddedWasm();
35
48
  await Parser.init({
36
49
  locateFile: (_path) => TREE_SITTER_WASM,
37
50
  });
@@ -56,6 +69,7 @@ export class TreeSitterService {
56
69
  return cached;
57
70
  // Look up the embedded WASM path. If not present, the grammar package is
58
71
  // not installed — return null rather than throwing.
72
+ const { GRAMMAR_WASM } = await loadEmbeddedWasm();
59
73
  const wasmPath = GRAMMAR_WASM[langId];
60
74
  if (!wasmPath) {
61
75
  logger.warn('TreeSitterService: grammar WASM not embedded', { langId });
@@ -1 +1 @@
1
- {"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../../../src/platform/knowledge/browser-history/readers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,SAAS,CAAC;CACxE;AA8YD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,uBAAuB,EAChC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAclC"}
1
+ {"version":3,"file":"readers.d.ts","sourceRoot":"","sources":["../../../../src/platform/knowledge/browser-history/readers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAGV,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAiBpB,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,GAAG,SAAS,CAAC;CACxE;AA8YD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,uBAAuB,EAChC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAclC"}
@@ -1,8 +1,18 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { Database } from 'bun:sqlite';
2
+ import { createRequire } from 'node:module';
3
3
  import bplistParserDefault from 'bplist-parser';
4
4
  import { copyLockedBrowserSqlite } from './locked-db.js';
5
5
  const bplistParser = bplistParserDefault;
6
+ // bun:sqlite is a Bun-only builtin; a static import makes this module unloadable
7
+ // under any non-Bun runtime (Node's ESM linker rejects the `bun:` scheme at link
8
+ // time, breaking the release install-smoke check and any Node import of the
9
+ // surfaces that transitively reach this module). Resolve the Database constructor
10
+ // lazily via require so the `bun:` specifier stays off the static import graph —
11
+ // it is only pulled on the Bun-only code path that opens a browser database.
12
+ let bunDatabaseCtor = null;
13
+ function bunSqliteDatabase() {
14
+ return (bunDatabaseCtor ??= createRequire(import.meta.url)('bun:sqlite').Database);
15
+ }
6
16
  const CHROMIUM_EPOCH_OFFSET_MS = 11_644_473_600_000;
7
17
  const MAC_ABSOLUTE_TIME_OFFSET_S = 978_307_200;
8
18
  function chromiumMicrosToMs(micros) {
@@ -65,7 +75,7 @@ async function readChromiumHistory(profile, options) {
65
75
  const since = typeof options.sinceMs === 'number' ? msToChromiumMicros(options.sinceMs) : 0;
66
76
  const copy = await copyLockedBrowserSqlite(profile.historyPath);
67
77
  try {
68
- const db = new Database(copy.copiedDbPath, { readonly: true });
78
+ const db = new (bunSqliteDatabase())(copy.copiedDbPath, { readonly: true });
69
79
  try {
70
80
  const urlRows = db.query('SELECT id, url, title, visit_count FROM urls').all();
71
81
  const urlMap = new Map(urlRows.map((row) => [row.id, row]));
@@ -153,7 +163,7 @@ async function readGeckoHistory(profile, options) {
153
163
  return [];
154
164
  const copy = await copyLockedBrowserSqlite(profile.historyPath);
155
165
  try {
156
- const db = new Database(copy.copiedDbPath, { readonly: true });
166
+ const db = new (bunSqliteDatabase())(copy.copiedDbPath, { readonly: true });
157
167
  try {
158
168
  const since = typeof options.sinceMs === 'number' ? Math.floor(options.sinceMs * 1000) : 0;
159
169
  const rows = db.query(`SELECT p.id AS place_id, p.url, p.title, p.visit_count, h.visit_date, h.visit_type
@@ -218,7 +228,7 @@ async function readGeckoBookmarks(profile, options) {
218
228
  return [];
219
229
  const copy = await copyLockedBrowserSqlite(path);
220
230
  try {
221
- const db = new Database(copy.copiedDbPath, { readonly: true });
231
+ const db = new (bunSqliteDatabase())(copy.copiedDbPath, { readonly: true });
222
232
  try {
223
233
  const rows = db.query('SELECT id, type, parent, title, fk, dateAdded FROM moz_bookmarks ORDER BY id').all();
224
234
  const places = db.query('SELECT id, url, title FROM moz_places').all();
@@ -262,7 +272,7 @@ async function readWebKitHistory(profile, options) {
262
272
  return [];
263
273
  const copy = await copyLockedBrowserSqlite(profile.historyPath);
264
274
  try {
265
- const db = new Database(copy.copiedDbPath, { readonly: true });
275
+ const db = new (bunSqliteDatabase())(copy.copiedDbPath, { readonly: true });
266
276
  try {
267
277
  if (profile.browser === 'epiphany') {
268
278
  const since = typeof options.sinceMs === 'number' ? Math.floor(options.sinceMs / 1000) : 0;
@@ -75,7 +75,7 @@ export interface MemoryApi {
75
75
  export type MemoryApiRegistry = Pick<MemoryRegistry, 'add' | 'doctor' | 'delete' | 'exportBundle' | 'get' | 'getAll' | 'importBundle' | 'link' | 'linksFor' | 'rebuildVectors' | 'rebuildVectorsAsync' | 'review' | 'reviewQueue' | 'search' | 'searchSemantic' | 'update' | 'vectorStats'>;
76
76
  /**
77
77
  * memory-api-parallel query surface for the repo source-tree code index
78
- * (Wave-5 wo802, W5.3 Stage A). Deliberately NOT folded into MemoryApi:
78
+ * (Stage A, see CHANGELOG 0.38.0). Deliberately NOT folded into MemoryApi:
79
79
  * CodeContextResult/CodeIndexStats are a different record shape than
80
80
  * MemoryRecord, and code-index retrieval carries no cls/reviewState/trustTier
81
81
  * provenance semantics — see createCodeIndexApi / createMemoryApi below.