@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.
- package/dist/contracts/artifacts/operator-contract.json +4468 -916
- package/dist/daemon.d.ts +2 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +4 -0
- package/dist/events/communication.d.ts +1 -1
- package/dist/events/surfaces.d.ts +25 -3
- package/dist/events/surfaces.d.ts.map +1 -1
- package/dist/events/surfaces.js +22 -1
- package/dist/events/workflows.d.ts +7 -6
- package/dist/events/workflows.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/platform/agents/archetypes.d.ts.map +1 -1
- package/dist/platform/agents/archetypes.js +7 -0
- package/dist/platform/agents/index.d.ts +1 -0
- package/dist/platform/agents/index.d.ts.map +1 -1
- package/dist/platform/agents/index.js +1 -0
- package/dist/platform/agents/orchestrator-runner.d.ts +16 -3
- package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator-runner.js +20 -6
- package/dist/platform/agents/orchestrator.d.ts +42 -10
- package/dist/platform/agents/orchestrator.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator.js +68 -20
- package/dist/platform/agents/planner-decomposition-runner.d.ts +38 -0
- package/dist/platform/agents/planner-decomposition-runner.d.ts.map +1 -0
- package/dist/platform/agents/planner-decomposition-runner.js +113 -0
- package/dist/platform/agents/turn-knowledge-injection.d.ts +88 -3
- package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -1
- package/dist/platform/agents/turn-knowledge-injection.js +147 -30
- package/dist/platform/agents/worktree.d.ts +126 -8
- package/dist/platform/agents/worktree.d.ts.map +1 -1
- package/dist/platform/agents/worktree.js +240 -19
- package/dist/platform/agents/wrfc-controller.d.ts +24 -1
- package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-controller.js +161 -35
- package/dist/platform/agents/wrfc-gate-runtime.d.ts +9 -0
- package/dist/platform/agents/wrfc-gate-runtime.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-gate-runtime.js +7 -3
- package/dist/platform/agents/wrfc-gates.d.ts +1 -1
- package/dist/platform/agents/wrfc-gates.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-gates.js +7 -1
- package/dist/platform/agents/wrfc-types.d.ts +23 -3
- package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
- package/dist/platform/automation/types.d.ts +9 -1
- package/dist/platform/automation/types.d.ts.map +1 -1
- package/dist/platform/calendar/calendar-api-shared.d.ts +25 -0
- package/dist/platform/calendar/calendar-api-shared.d.ts.map +1 -0
- package/dist/platform/calendar/calendar-api-shared.js +100 -0
- package/dist/platform/calendar/calendar-connector.d.ts +79 -0
- package/dist/platform/calendar/calendar-connector.d.ts.map +1 -0
- package/dist/platform/calendar/calendar-connector.js +155 -0
- package/dist/platform/calendar/google-calendar-api.d.ts +25 -0
- package/dist/platform/calendar/google-calendar-api.d.ts.map +1 -0
- package/dist/platform/calendar/google-calendar-api.js +89 -0
- package/dist/platform/calendar/http-fetch-adapter.d.ts +25 -0
- package/dist/platform/calendar/http-fetch-adapter.d.ts.map +1 -0
- package/dist/platform/calendar/http-fetch-adapter.js +25 -0
- package/dist/platform/calendar/ics-parser.d.ts +35 -0
- package/dist/platform/calendar/ics-parser.d.ts.map +1 -0
- package/dist/platform/calendar/ics-parser.js +236 -0
- package/dist/platform/calendar/index.d.ts +41 -0
- package/dist/platform/calendar/index.d.ts.map +1 -0
- package/dist/platform/calendar/index.js +49 -0
- package/dist/platform/calendar/merged-calendar-model.d.ts +67 -0
- package/dist/platform/calendar/merged-calendar-model.d.ts.map +1 -0
- package/dist/platform/calendar/merged-calendar-model.js +181 -0
- package/dist/platform/calendar/microsoft-graph-api.d.ts +25 -0
- package/dist/platform/calendar/microsoft-graph-api.d.ts.map +1 -0
- package/dist/platform/calendar/microsoft-graph-api.js +95 -0
- package/dist/platform/calendar/oauth-flow.d.ts +62 -0
- package/dist/platform/calendar/oauth-flow.d.ts.map +1 -0
- package/dist/platform/calendar/oauth-flow.js +305 -0
- package/dist/platform/calendar/oauth-providers.d.ts +43 -0
- package/dist/platform/calendar/oauth-providers.d.ts.map +1 -0
- package/dist/platform/calendar/oauth-providers.js +120 -0
- package/dist/platform/calendar/oauth-token-store.d.ts +72 -0
- package/dist/platform/calendar/oauth-token-store.d.ts.map +1 -0
- package/dist/platform/calendar/oauth-token-store.js +189 -0
- package/dist/platform/calendar/oauth-types.d.ts +274 -0
- package/dist/platform/calendar/oauth-types.d.ts.map +1 -0
- package/dist/platform/calendar/oauth-types.js +22 -0
- package/dist/platform/calendar/rrule.d.ts +39 -0
- package/dist/platform/calendar/rrule.d.ts.map +1 -0
- package/dist/platform/calendar/rrule.js +261 -0
- package/dist/platform/calendar/subscription-store.d.ts +118 -0
- package/dist/platform/calendar/subscription-store.d.ts.map +1 -0
- package/dist/platform/calendar/subscription-store.js +293 -0
- package/dist/platform/calendar/types.d.ts +170 -0
- package/dist/platform/calendar/types.d.ts.map +1 -0
- package/dist/platform/calendar/types.js +21 -0
- package/dist/platform/companion/companion-chat-attachments.d.ts +29 -0
- package/dist/platform/companion/companion-chat-attachments.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-attachments.js +121 -0
- package/dist/platform/companion/companion-chat-branching.d.ts +66 -0
- package/dist/platform/companion/companion-chat-branching.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-branching.js +142 -0
- package/dist/platform/companion/companion-chat-broker-bridge.d.ts +40 -0
- package/dist/platform/companion/companion-chat-broker-bridge.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-broker-bridge.js +14 -0
- package/dist/platform/companion/companion-chat-broker-sync.d.ts +38 -0
- package/dist/platform/companion/companion-chat-broker-sync.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-broker-sync.js +80 -0
- package/dist/platform/companion/companion-chat-gc.d.ts +63 -0
- package/dist/platform/companion/companion-chat-gc.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-gc.js +38 -0
- package/dist/platform/companion/companion-chat-manager.d.ts +91 -23
- package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-manager.js +195 -223
- package/dist/platform/companion/companion-chat-persistence.d.ts +9 -1
- package/dist/platform/companion/companion-chat-persistence.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-persistence.js +10 -2
- package/dist/platform/companion/companion-chat-routes.d.ts +2 -1
- package/dist/platform/companion/companion-chat-routes.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-routes.js +113 -4
- package/dist/platform/companion/companion-chat-turn-execution.d.ts +61 -0
- package/dist/platform/companion/companion-chat-turn-execution.d.ts.map +1 -0
- package/dist/platform/companion/companion-chat-turn-execution.js +107 -0
- package/dist/platform/companion/companion-chat-types.d.ts +67 -0
- package/dist/platform/companion/companion-chat-types.d.ts.map +1 -1
- package/dist/platform/config/credential-status.d.ts +28 -0
- package/dist/platform/config/credential-status.d.ts.map +1 -0
- package/dist/platform/config/credential-status.js +75 -0
- package/dist/platform/config/index.d.ts +25 -0
- package/dist/platform/config/index.d.ts.map +1 -1
- package/dist/platform/config/index.js +18 -0
- package/dist/platform/config/manager.d.ts +9 -0
- package/dist/platform/config/manager.d.ts.map +1 -1
- package/dist/platform/config/manager.js +21 -2
- package/dist/platform/config/migrations.d.ts +48 -0
- package/dist/platform/config/migrations.d.ts.map +1 -0
- package/dist/platform/config/migrations.js +54 -0
- package/dist/platform/config/schema-domain-core.d.ts +10 -1
- package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-core.js +46 -3
- package/dist/platform/config/schema-domain-runtime.d.ts +8 -0
- package/dist/platform/config/schema-domain-runtime.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-runtime.js +32 -0
- package/dist/platform/config/schema-types.d.ts +21 -7
- package/dist/platform/config/schema-types.d.ts.map +1 -1
- package/dist/platform/config/schema.d.ts.map +1 -1
- package/dist/platform/config/schema.js +2 -0
- package/dist/platform/control-plane/approval-broker.d.ts +11 -0
- package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
- package/dist/platform/control-plane/approval-broker.js +17 -1
- package/dist/platform/control-plane/approval-hunk-apply.d.ts +77 -0
- package/dist/platform/control-plane/approval-hunk-apply.d.ts.map +1 -0
- package/dist/platform/control-plane/approval-hunk-apply.js +80 -0
- package/dist/platform/control-plane/gateway-disabled-response.d.ts +20 -0
- package/dist/platform/control-plane/gateway-disabled-response.d.ts.map +1 -0
- package/dist/platform/control-plane/gateway-disabled-response.js +24 -0
- package/dist/platform/control-plane/gateway-scope-enforcement.d.ts +68 -0
- package/dist/platform/control-plane/gateway-scope-enforcement.d.ts.map +1 -0
- package/dist/platform/control-plane/gateway-scope-enforcement.js +91 -0
- package/dist/platform/control-plane/gateway-utils.d.ts +17 -0
- package/dist/platform/control-plane/gateway-utils.d.ts.map +1 -1
- package/dist/platform/control-plane/gateway-utils.js +30 -0
- package/dist/platform/control-plane/gateway.d.ts +12 -2
- package/dist/platform/control-plane/gateway.d.ts.map +1 -1
- package/dist/platform/control-plane/gateway.js +27 -31
- package/dist/platform/control-plane/index.d.ts +8 -1
- package/dist/platform/control-plane/index.d.ts.map +1 -1
- package/dist/platform/control-plane/index.js +8 -0
- package/dist/platform/control-plane/invoke-input-validation.d.ts +56 -0
- package/dist/platform/control-plane/invoke-input-validation.d.ts.map +1 -0
- package/dist/platform/control-plane/invoke-input-validation.js +163 -0
- package/dist/platform/control-plane/method-catalog-admin.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-admin.js +12 -1
- package/dist/platform/control-plane/method-catalog-calendar.d.ts +16 -0
- package/dist/platform/control-plane/method-catalog-calendar.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-calendar.js +21 -0
- package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-channels.js +32 -3
- package/dist/platform/control-plane/method-catalog-control-automation.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-control-automation.js +19 -34
- package/dist/platform/control-plane/method-catalog-control-companion.d.ts +15 -0
- package/dist/platform/control-plane/method-catalog-control-companion.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-control-companion.js +176 -0
- package/dist/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-control-core.js +104 -122
- package/dist/platform/control-plane/method-catalog-control.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-control.js +4 -0
- package/dist/platform/control-plane/method-catalog-email.d.ts +17 -0
- package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-email.js +21 -0
- package/dist/platform/control-plane/method-catalog-events.d.ts +28 -0
- package/dist/platform/control-plane/method-catalog-events.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-events.js +74 -1
- package/dist/platform/control-plane/method-catalog-fleet.d.ts +24 -0
- package/dist/platform/control-plane/method-catalog-fleet.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-fleet.js +65 -0
- package/dist/platform/control-plane/method-catalog-push.d.ts +30 -0
- package/dist/platform/control-plane/method-catalog-push.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-push.js +80 -0
- package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts +84 -0
- package/dist/platform/control-plane/method-catalog-route-reconcile.d.ts.map +1 -0
- package/dist/platform/control-plane/method-catalog-route-reconcile.js +103 -0
- package/dist/platform/control-plane/method-catalog-runtime.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-runtime.js +83 -1
- package/dist/platform/control-plane/method-catalog-shared.d.ts +29 -0
- package/dist/platform/control-plane/method-catalog-shared.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog.d.ts +9 -0
- package/dist/platform/control-plane/method-catalog.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog.js +34 -3
- package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts +8 -0
- package/dist/platform/control-plane/operator-contract-schemas-admin.d.ts.map +1 -1
- package/dist/platform/control-plane/operator-contract-schemas-admin.js +22 -1
- package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts +18 -0
- package/dist/platform/control-plane/operator-contract-schemas-fleet.d.ts.map +1 -0
- package/dist/platform/control-plane/operator-contract-schemas-fleet.js +182 -0
- package/dist/platform/control-plane/operator-contract-schemas-permissions.d.ts.map +1 -1
- package/dist/platform/control-plane/operator-contract-schemas-permissions.js +5 -0
- package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts +37 -0
- package/dist/platform/control-plane/operator-contract-schemas-runtime.d.ts.map +1 -1
- package/dist/platform/control-plane/operator-contract-schemas-runtime.js +100 -3
- package/dist/platform/control-plane/operator-contract-schemas.d.ts +1 -0
- package/dist/platform/control-plane/operator-contract-schemas.d.ts.map +1 -1
- package/dist/platform/control-plane/operator-contract-schemas.js +1 -0
- package/dist/platform/control-plane/operator-contract.d.ts.map +1 -1
- package/dist/platform/control-plane/operator-contract.js +8 -0
- package/dist/platform/control-plane/routes/checkpoints.d.ts +39 -0
- package/dist/platform/control-plane/routes/checkpoints.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/checkpoints.js +166 -0
- package/dist/platform/control-plane/routes/fleet.d.ts +53 -0
- package/dist/platform/control-plane/routes/fleet.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/fleet.js +153 -0
- package/dist/platform/control-plane/routes/gateway-verb-error.d.ts +30 -0
- package/dist/platform/control-plane/routes/gateway-verb-error.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/gateway-verb-error.js +36 -0
- package/dist/platform/control-plane/routes/index.d.ts +0 -6
- package/dist/platform/control-plane/routes/index.d.ts.map +1 -1
- package/dist/platform/control-plane/routes/index.js +5 -5
- package/dist/platform/control-plane/routes/invocation-params.d.ts +23 -0
- package/dist/platform/control-plane/routes/invocation-params.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/invocation-params.js +9 -0
- package/dist/platform/control-plane/routes/push.d.ts +26 -0
- package/dist/platform/control-plane/routes/push.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/push.js +104 -0
- package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts +31 -0
- package/dist/platform/control-plane/routes/register-gateway-verb-groups.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/register-gateway-verb-groups.js +16 -0
- package/dist/platform/control-plane/routes/register-w3-s2.d.ts +26 -0
- package/dist/platform/control-plane/routes/register-w3-s2.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/register-w3-s2.js +8 -0
- package/dist/platform/control-plane/routes/session-search.d.ts +37 -0
- package/dist/platform/control-plane/routes/session-search.d.ts.map +1 -0
- package/dist/platform/control-plane/routes/session-search.js +113 -0
- package/dist/platform/control-plane/session-broker-gc.d.ts +16 -0
- package/dist/platform/control-plane/session-broker-gc.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-gc.js +23 -6
- package/dist/platform/control-plane/session-broker-helpers.d.ts +3 -3
- package/dist/platform/control-plane/session-broker-helpers.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-inputs.d.ts +18 -0
- package/dist/platform/control-plane/session-broker-inputs.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-inputs.js +34 -0
- package/dist/platform/control-plane/session-broker-sessions.d.ts +102 -3
- package/dist/platform/control-plane/session-broker-sessions.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-sessions.js +179 -5
- package/dist/platform/control-plane/session-broker-state.d.ts +20 -1
- package/dist/platform/control-plane/session-broker-state.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker-state.js +67 -5
- package/dist/platform/control-plane/session-broker.d.ts +51 -38
- package/dist/platform/control-plane/session-broker.d.ts.map +1 -1
- package/dist/platform/control-plane/session-broker.js +183 -75
- package/dist/platform/control-plane/session-store-importer.d.ts +57 -0
- package/dist/platform/control-plane/session-store-importer.d.ts.map +1 -0
- package/dist/platform/control-plane/session-store-importer.js +227 -0
- package/dist/platform/control-plane/session-types.d.ts +142 -7
- package/dist/platform/control-plane/session-types.d.ts.map +1 -1
- package/dist/platform/core/execution-plan.d.ts +43 -1
- package/dist/platform/core/execution-plan.d.ts.map +1 -1
- package/dist/platform/core/execution-plan.js +46 -10
- package/dist/platform/core/index.d.ts +1 -0
- package/dist/platform/core/index.d.ts.map +1 -1
- package/dist/platform/core/index.js +1 -0
- package/dist/platform/core/orchestrator-runtime.d.ts +23 -3
- package/dist/platform/core/orchestrator-runtime.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-tool-runtime.d.ts +7 -0
- package/dist/platform/core/orchestrator-tool-runtime.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-tool-runtime.js +10 -0
- package/dist/platform/core/orchestrator-turn-loop.d.ts +13 -6
- package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-turn-loop.js +29 -22
- package/dist/platform/core/orchestrator.d.ts +16 -10
- package/dist/platform/core/orchestrator.d.ts.map +1 -1
- package/dist/platform/core/orchestrator.js +23 -8
- package/dist/platform/core/plan-decomposition.d.ts +196 -0
- package/dist/platform/core/plan-decomposition.d.ts.map +1 -0
- package/dist/platform/core/plan-decomposition.js +417 -0
- package/dist/platform/core/plan-proposal.d.ts +39 -0
- package/dist/platform/core/plan-proposal.d.ts.map +1 -1
- package/dist/platform/core/wrfc-routing.d.ts +1 -0
- package/dist/platform/core/wrfc-routing.d.ts.map +1 -1
- package/dist/platform/core/wrfc-routing.js +51 -1
- package/dist/platform/daemon/boot.d.ts +69 -0
- package/dist/platform/daemon/boot.d.ts.map +1 -0
- package/dist/platform/daemon/boot.js +61 -0
- package/dist/platform/daemon/cli.js +2 -1
- package/dist/platform/daemon/control-plane.d.ts.map +1 -1
- package/dist/platform/daemon/control-plane.js +50 -1
- package/dist/platform/daemon/facade-composition.d.ts.map +1 -1
- package/dist/platform/daemon/facade-composition.js +6 -0
- package/dist/platform/daemon/facade.d.ts +15 -6
- package/dist/platform/daemon/facade.d.ts.map +1 -1
- package/dist/platform/daemon/facade.js +48 -43
- package/dist/platform/daemon/http/router-route-contexts.d.ts +1 -0
- package/dist/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
- package/dist/platform/daemon/http/router-route-contexts.js +1 -0
- package/dist/platform/daemon/http/router-session-broker-adapter.d.ts +13 -0
- package/dist/platform/daemon/http/router-session-broker-adapter.d.ts.map +1 -0
- package/dist/platform/daemon/http/router-session-broker-adapter.js +27 -0
- package/dist/platform/daemon/http/router.d.ts +2 -1
- package/dist/platform/daemon/http/router.d.ts.map +1 -1
- package/dist/platform/daemon/http/router.js +42 -40
- package/dist/platform/daemon/http/runtime-route-types.d.ts +42 -4
- package/dist/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
- package/dist/platform/daemon/http/webui-serving.d.ts +68 -0
- package/dist/platform/daemon/http/webui-serving.d.ts.map +1 -0
- package/dist/platform/daemon/http/webui-serving.js +230 -0
- package/dist/platform/daemon/index.d.ts +2 -0
- package/dist/platform/daemon/index.d.ts.map +1 -1
- package/dist/platform/daemon/index.js +1 -0
- package/dist/platform/daemon/service-manager.d.ts +16 -0
- package/dist/platform/daemon/service-manager.d.ts.map +1 -1
- package/dist/platform/daemon/service-manager.js +79 -15
- package/dist/platform/intelligence/tree-sitter/service.d.ts.map +1 -1
- package/dist/platform/intelligence/tree-sitter/service.js +16 -2
- package/dist/platform/knowledge/browser-history/readers.d.ts.map +1 -1
- package/dist/platform/knowledge/browser-history/readers.js +15 -5
- package/dist/platform/knowledge/knowledge-api.d.ts +1 -1
- package/dist/platform/knowledge/project-planning/service.d.ts +14 -1
- package/dist/platform/knowledge/project-planning/service.d.ts.map +1 -1
- package/dist/platform/knowledge/project-planning/service.js +77 -0
- package/dist/platform/knowledge/project-planning/types.d.ts +32 -0
- package/dist/platform/knowledge/project-planning/types.d.ts.map +1 -1
- package/dist/platform/orchestration/bookkeeping.d.ts +12 -0
- package/dist/platform/orchestration/bookkeeping.d.ts.map +1 -0
- package/dist/platform/orchestration/bookkeeping.js +91 -0
- package/dist/platform/orchestration/budget.d.ts +2 -2
- package/dist/platform/orchestration/cancellation.d.ts +2 -2
- package/dist/platform/orchestration/controller-compat.d.ts +16 -3
- package/dist/platform/orchestration/controller-compat.d.ts.map +1 -1
- package/dist/platform/orchestration/controller-compat.js +18 -4
- package/dist/platform/orchestration/dirty-guard.js +1 -1
- package/dist/platform/orchestration/engine.d.ts +26 -1
- package/dist/platform/orchestration/engine.d.ts.map +1 -1
- package/dist/platform/orchestration/engine.js +229 -25
- package/dist/platform/orchestration/index.d.ts +6 -4
- package/dist/platform/orchestration/index.d.ts.map +1 -1
- package/dist/platform/orchestration/index.js +3 -2
- package/dist/platform/orchestration/persistence.d.ts.map +1 -1
- package/dist/platform/orchestration/persistence.js +6 -3
- package/dist/platform/orchestration/phase-runner.d.ts +33 -6
- package/dist/platform/orchestration/phase-runner.d.ts.map +1 -1
- package/dist/platform/orchestration/phase-runner.js +98 -25
- package/dist/platform/orchestration/proposal-workstream.d.ts +56 -0
- package/dist/platform/orchestration/proposal-workstream.d.ts.map +1 -0
- package/dist/platform/orchestration/proposal-workstream.js +76 -0
- package/dist/platform/orchestration/scheduler.d.ts +20 -1
- package/dist/platform/orchestration/scheduler.d.ts.map +1 -1
- package/dist/platform/orchestration/scheduler.js +16 -0
- package/dist/platform/orchestration/types.d.ts +289 -4
- package/dist/platform/orchestration/types.d.ts.map +1 -1
- package/dist/platform/orchestration/types.js +32 -0
- package/dist/platform/orchestration/worktree-isolation.d.ts +33 -0
- package/dist/platform/orchestration/worktree-isolation.d.ts.map +1 -0
- package/dist/platform/orchestration/worktree-isolation.js +248 -0
- package/dist/platform/presentation/glyphs.d.ts +91 -0
- package/dist/platform/presentation/glyphs.d.ts.map +1 -0
- package/dist/platform/presentation/glyphs.js +93 -0
- package/dist/platform/presentation/index.d.ts +28 -0
- package/dist/platform/presentation/index.d.ts.map +1 -0
- package/dist/platform/presentation/index.js +27 -0
- package/dist/platform/presentation/thinking-phrases.d.ts +12 -0
- package/dist/platform/presentation/thinking-phrases.d.ts.map +1 -0
- package/dist/platform/presentation/thinking-phrases.js +32 -0
- package/dist/platform/presentation/tones.d.ts +121 -0
- package/dist/platform/presentation/tones.d.ts.map +1 -0
- package/dist/platform/presentation/tones.js +145 -0
- package/dist/platform/presentation/waiting-wording.d.ts +54 -0
- package/dist/platform/presentation/waiting-wording.d.ts.map +1 -0
- package/dist/platform/presentation/waiting-wording.js +51 -0
- package/dist/platform/providers/runtime-snapshot.d.ts.map +1 -1
- package/dist/platform/providers/runtime-snapshot.js +12 -2
- package/dist/platform/push/delivery.d.ts +48 -0
- package/dist/platform/push/delivery.d.ts.map +1 -0
- package/dist/platform/push/delivery.js +117 -0
- package/dist/platform/push/encryption.d.ts +41 -0
- package/dist/platform/push/encryption.d.ts.map +1 -0
- package/dist/platform/push/encryption.js +82 -0
- package/dist/platform/push/index.d.ts +17 -0
- package/dist/platform/push/index.d.ts.map +1 -0
- package/dist/platform/push/index.js +10 -0
- package/dist/platform/push/service.d.ts +75 -0
- package/dist/platform/push/service.d.ts.map +1 -0
- package/dist/platform/push/service.js +95 -0
- package/dist/platform/push/subscription-store.d.ts +50 -0
- package/dist/platform/push/subscription-store.d.ts.map +1 -0
- package/dist/platform/push/subscription-store.js +123 -0
- package/dist/platform/push/types.d.ts +68 -0
- package/dist/platform/push/types.d.ts.map +1 -0
- package/dist/platform/push/types.js +13 -0
- package/dist/platform/push/vapid.d.ts +54 -0
- package/dist/platform/push/vapid.d.ts.map +1 -0
- package/dist/platform/push/vapid.js +113 -0
- package/dist/platform/runtime/bootstrap-services.d.ts +62 -2
- package/dist/platform/runtime/bootstrap-services.d.ts.map +1 -1
- package/dist/platform/runtime/bootstrap-services.js +217 -50
- package/dist/platform/runtime/daemon-version-compat.d.ts +39 -0
- package/dist/platform/runtime/daemon-version-compat.d.ts.map +1 -0
- package/dist/platform/runtime/daemon-version-compat.js +75 -0
- package/dist/platform/runtime/detached-daemon-runtime.d.ts +26 -0
- package/dist/platform/runtime/detached-daemon-runtime.d.ts.map +1 -0
- package/dist/platform/runtime/detached-daemon-runtime.js +49 -0
- package/dist/platform/runtime/emitters/workflows.d.ts +1 -1
- package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
- package/dist/platform/runtime/events/index.d.ts +13 -0
- package/dist/platform/runtime/events/index.d.ts.map +1 -1
- package/dist/platform/runtime/events/index.js +13 -0
- package/dist/platform/runtime/feature-flags/flags.d.ts.map +1 -1
- package/dist/platform/runtime/feature-flags/flags.js +39 -1
- package/dist/platform/runtime/fleet/adapters/agent.d.ts +2 -2
- package/dist/platform/runtime/fleet/adapters/agent.d.ts.map +1 -1
- package/dist/platform/runtime/fleet/adapters/agent.js +4 -4
- package/dist/platform/runtime/fleet/adapters/automation.d.ts +1 -1
- package/dist/platform/runtime/fleet/adapters/automation.js +1 -1
- package/dist/platform/runtime/fleet/adapters/code-index.d.ts +1 -1
- package/dist/platform/runtime/fleet/adapters/code-index.js +1 -1
- package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +40 -18
- package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -1
- package/dist/platform/runtime/fleet/adapters/orchestration.js +138 -34
- package/dist/platform/runtime/fleet/adapters/schedule.d.ts +4 -4
- package/dist/platform/runtime/fleet/adapters/schedule.js +4 -4
- package/dist/platform/runtime/fleet/adapters/trigger.d.ts +3 -4
- package/dist/platform/runtime/fleet/adapters/trigger.d.ts.map +1 -1
- package/dist/platform/runtime/fleet/adapters/trigger.js +3 -4
- package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +13 -0
- package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -1
- package/dist/platform/runtime/fleet/adapters/wrfc.js +49 -2
- package/dist/platform/runtime/fleet/registry.d.ts +7 -7
- package/dist/platform/runtime/fleet/registry.d.ts.map +1 -1
- package/dist/platform/runtime/fleet/registry.js +41 -7
- package/dist/platform/runtime/fleet/types.d.ts +9 -9
- package/dist/platform/runtime/fleet/types.d.ts.map +1 -1
- package/dist/platform/runtime/memory-spine/client.d.ts +127 -0
- package/dist/platform/runtime/memory-spine/client.d.ts.map +1 -0
- package/dist/platform/runtime/memory-spine/client.js +113 -0
- package/dist/platform/runtime/memory-spine/index.d.ts +11 -0
- package/dist/platform/runtime/memory-spine/index.d.ts.map +1 -0
- package/dist/platform/runtime/memory-spine/index.js +10 -0
- package/dist/platform/runtime/operator-client.d.ts +20 -2
- package/dist/platform/runtime/operator-client.d.ts.map +1 -1
- package/dist/platform/runtime/operator-client.js +11 -1
- package/dist/platform/runtime/provider-accounts/registry.d.ts.map +1 -1
- package/dist/platform/runtime/provider-accounts/registry.js +11 -1
- package/dist/platform/runtime/services.d.ts +11 -9
- package/dist/platform/runtime/services.d.ts.map +1 -1
- package/dist/platform/runtime/services.js +24 -9
- package/dist/platform/runtime/session-spine/client.d.ts +234 -0
- package/dist/platform/runtime/session-spine/client.d.ts.map +1 -0
- package/dist/platform/runtime/session-spine/client.js +449 -0
- package/dist/platform/runtime/session-spine/index.d.ts +12 -0
- package/dist/platform/runtime/session-spine/index.d.ts.map +1 -0
- package/dist/platform/runtime/session-spine/index.js +11 -0
- package/dist/platform/runtime/session-spine/union-cache.d.ts +225 -0
- package/dist/platform/runtime/session-spine/union-cache.d.ts.map +1 -0
- package/dist/platform/runtime/session-spine/union-cache.js +333 -0
- package/dist/platform/runtime/shell-command-ops.d.ts +3 -1
- package/dist/platform/runtime/shell-command-ops.d.ts.map +1 -1
- package/dist/platform/runtime/transports/daemon-http-client-validators.d.ts.map +1 -1
- package/dist/platform/runtime/transports/daemon-http-client-validators.js +22 -0
- package/dist/platform/runtime/transports/daemon-http-client.d.ts.map +1 -1
- package/dist/platform/runtime/transports/daemon-http-client.js +25 -2
- package/dist/platform/runtime/transports/http-types.d.ts +9 -2
- package/dist/platform/runtime/transports/http-types.d.ts.map +1 -1
- package/dist/platform/state/canonical-memory.d.ts +95 -0
- package/dist/platform/state/canonical-memory.d.ts.map +1 -0
- package/dist/platform/state/canonical-memory.js +155 -0
- package/dist/platform/state/code-index-chunking.js +1 -1
- package/dist/platform/state/code-index-db.d.ts +1 -1
- package/dist/platform/state/code-index-reindex.d.ts +73 -0
- package/dist/platform/state/code-index-reindex.d.ts.map +1 -0
- package/dist/platform/state/code-index-reindex.js +156 -0
- package/dist/platform/state/code-index-store.d.ts.map +1 -1
- package/dist/platform/state/code-index-store.js +11 -3
- package/dist/platform/state/index.d.ts +8 -0
- package/dist/platform/state/index.d.ts.map +1 -1
- package/dist/platform/state/index.js +4 -0
- package/dist/platform/state/memory-recall-contract.d.ts +118 -0
- package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
- package/dist/platform/state/memory-recall-contract.js +170 -0
- package/dist/platform/state/memory-registry.d.ts +8 -0
- package/dist/platform/state/memory-registry.d.ts.map +1 -1
- package/dist/platform/state/memory-registry.js +10 -0
- package/dist/platform/state/memory-store.d.ts +2 -0
- package/dist/platform/state/memory-store.d.ts.map +1 -1
- package/dist/platform/state/memory-store.js +4 -0
- package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
- package/dist/platform/state/memory-vector-store.js +14 -3
- package/dist/platform/state/sqlite-store.d.ts +2 -0
- package/dist/platform/state/sqlite-store.d.ts.map +1 -1
- package/dist/platform/state/sqlite-store.js +4 -0
- package/dist/platform/state/sqlite-vec-loader.d.ts +1 -1
- package/dist/platform/state/sqlite-vec-loader.js +1 -1
- package/dist/platform/state/vibe-projection.d.ts +67 -0
- package/dist/platform/state/vibe-projection.d.ts.map +1 -0
- package/dist/platform/state/vibe-projection.js +115 -0
- package/dist/platform/tools/agent/index.d.ts.map +1 -1
- package/dist/platform/tools/agent/index.js +8 -0
- package/dist/platform/tools/agent/manager.d.ts +22 -10
- package/dist/platform/tools/agent/manager.d.ts.map +1 -1
- package/dist/platform/tools/agent/manager.js +13 -7
- package/dist/platform/tools/agent/schema.d.ts +26 -0
- package/dist/platform/tools/agent/schema.d.ts.map +1 -1
- package/dist/platform/tools/agent/schema.js +2 -2
- package/dist/platform/tools/agent/wrfc-batch-policy.d.ts +13 -0
- package/dist/platform/tools/agent/wrfc-batch-policy.d.ts.map +1 -1
- package/dist/platform/tools/agent/wrfc-batch-policy.js +60 -0
- package/dist/platform/tools/exec/runtime.d.ts +10 -0
- package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
- package/dist/platform/tools/exec/runtime.js +27 -10
- package/dist/platform/tools/exec/schema.d.ts +2 -2
- package/dist/platform/tools/exec/schema.d.ts.map +1 -1
- package/dist/platform/tools/exec/schema.js +2 -1
- package/dist/platform/tools/fetch/runtime.d.ts +1 -1
- package/dist/platform/tools/index.d.ts +2 -0
- package/dist/platform/tools/index.d.ts.map +1 -1
- package/dist/platform/tools/index.js +2 -0
- package/dist/platform/tools/registry.d.ts +1 -1
- package/dist/platform/tools/registry.js +1 -1
- package/dist/platform/tools/state/index.d.ts +9 -0
- package/dist/platform/tools/state/index.d.ts.map +1 -1
- package/dist/platform/tools/state/index.js +60 -3
- package/dist/platform/types/foundation-contract.d.ts +1 -1
- package/dist/platform/types/foundation-contract.d.ts.map +1 -1
- package/dist/platform/types/index.d.ts +1 -1
- package/dist/platform/types/index.d.ts.map +1 -1
- package/dist/platform/types/tools.d.ts +1 -1
- package/dist/platform/utils/request-body.d.ts.map +1 -1
- package/dist/platform/utils/request-body.js +50 -5
- package/dist/platform/version.js +1 -1
- package/package.json +25 -9
- package/dist/platform/control-plane/routes/automation.d.ts +0 -3
- package/dist/platform/control-plane/routes/automation.d.ts.map +0 -1
- package/dist/platform/control-plane/routes/automation.js +0 -63
- package/dist/platform/control-plane/routes/context.d.ts +0 -2
- package/dist/platform/control-plane/routes/context.d.ts.map +0 -1
- package/dist/platform/control-plane/routes/context.js +0 -1
- package/dist/platform/control-plane/routes/operator.d.ts +0 -8
- package/dist/platform/control-plane/routes/operator.d.ts.map +0 -1
- package/dist/platform/control-plane/routes/operator.js +0 -415
- package/dist/platform/control-plane/routes/remote.d.ts +0 -3
- package/dist/platform/control-plane/routes/remote.d.ts.map +0 -1
- package/dist/platform/control-plane/routes/remote.js +0 -35
- package/dist/platform/control-plane/routes/sessions.d.ts +0 -3
- package/dist/platform/control-plane/routes/sessions.d.ts.map +0 -1
- package/dist/platform/control-plane/routes/sessions.js +0 -43
- package/dist/platform/control-plane/routes/tasks.d.ts +0 -3
- package/dist/platform/control-plane/routes/tasks.d.ts.map +0 -1
- 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
|
|
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
|
-
|
|
365
|
-
|
|
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
|
-
?
|
|
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 (
|
|
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
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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
|
-
...(
|
|
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;
|
|
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;
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
* (
|
|
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.
|