@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
|
@@ -2,6 +2,64 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { dedupeSessionSurfaceKinds } from './session-broker-helpers.js';
|
|
3
3
|
import { upsertSessionParticipant } from './session-broker-state.js';
|
|
4
4
|
export const RESERVED_SHARED_SESSION_IDS = new Set(['', 'system']);
|
|
5
|
+
/**
|
|
6
|
+
* Metadata key under which a closed session records WHY it was closed. Kept in
|
|
7
|
+
* `metadata` (not a first-class field) so it rides the wire without a schema
|
|
8
|
+
* change and 0.38 readers ignore it. See {@link SharedSessionCloseReason}.
|
|
9
|
+
*/
|
|
10
|
+
export const SESSION_CLOSE_REASON_METADATA_KEY = 'closeReason';
|
|
11
|
+
/** Read the close reason off a record's metadata, or undefined when unset/unknown. */
|
|
12
|
+
export function readSessionCloseReason(session) {
|
|
13
|
+
const raw = session.metadata?.[SESSION_CLOSE_REASON_METADATA_KEY];
|
|
14
|
+
return raw === 'idle-reaped' || raw === 'user' || raw === 'surface' ? raw : undefined;
|
|
15
|
+
}
|
|
16
|
+
/** Stamp a close reason onto a metadata bag (returns a new object). */
|
|
17
|
+
export function withSessionCloseReason(metadata, reason) {
|
|
18
|
+
return { ...metadata, [SESSION_CLOSE_REASON_METADATA_KEY]: reason };
|
|
19
|
+
}
|
|
20
|
+
/** Strip any close reason from a metadata bag (returns a new object only if needed). */
|
|
21
|
+
export function withoutSessionCloseReason(metadata) {
|
|
22
|
+
if (!(SESSION_CLOSE_REASON_METADATA_KEY in metadata))
|
|
23
|
+
return metadata;
|
|
24
|
+
const next = { ...metadata };
|
|
25
|
+
delete next[SESSION_CLOSE_REASON_METADATA_KEY];
|
|
26
|
+
return next;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Metadata flag marking a session as SURFACE-MANAGED: a spine-registered surface
|
|
30
|
+
* (via `sessions.register`) owns turn execution and input collection for it. Set
|
|
31
|
+
* on every register/heartbeat. Steer/follow-up inputs to such a session (when no
|
|
32
|
+
* daemon agent is live) route to the surface as a queued input the surface
|
|
33
|
+
* collects — NOT a daemon executor spawn. Kept in metadata (open record) so it
|
|
34
|
+
* needs no schema change. Daemon-run origins (companion-task/automation, or a
|
|
35
|
+
* plain /task session) never call register and stay executor-routed.
|
|
36
|
+
*/
|
|
37
|
+
export const SESSION_SURFACE_MANAGED_METADATA_KEY = 'surfaceManaged';
|
|
38
|
+
/** How recently a participant must have been seen to count as a LIVE surface for
|
|
39
|
+
* steer/follow-up routing. A surface heartbeats via `sessions.register`; if the
|
|
40
|
+
* newest heartbeat is older than this, the surface is treated as gone and inputs
|
|
41
|
+
* fall back to the daemon executor path. */
|
|
42
|
+
export const SURFACE_ROUTE_FRESHNESS_MS = 2 * 60 * 1000;
|
|
43
|
+
export function isSurfaceManagedSession(session) {
|
|
44
|
+
return session.metadata?.[SESSION_SURFACE_MANAGED_METADATA_KEY] === true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* True when a participant OTHER than `exclude` (the current input's own surface)
|
|
48
|
+
* was seen within `freshnessMs`. Excluding the sender prevents a steer's own
|
|
49
|
+
* just-attached participant from making a surfaceless session look live.
|
|
50
|
+
*/
|
|
51
|
+
export function hasFreshSurfaceParticipant(session, now, freshnessMs, exclude) {
|
|
52
|
+
return session.participants.some((participant) => {
|
|
53
|
+
if (exclude?.surfaceId && participant.surfaceId === exclude.surfaceId)
|
|
54
|
+
return false;
|
|
55
|
+
return now - participant.lastSeenAt < freshnessMs;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Steer/follow-up to this session should route to a live surface (queue-for-surface)
|
|
59
|
+
* rather than spawn a daemon executor. */
|
|
60
|
+
export function shouldRouteInputToSurface(session, now, freshnessMs, exclude) {
|
|
61
|
+
return isSurfaceManagedSession(session) && hasFreshSurfaceParticipant(session, now, freshnessMs, exclude);
|
|
62
|
+
}
|
|
5
63
|
export function assertSharedSessionIdAllowed(id) {
|
|
6
64
|
if (id === undefined || !RESERVED_SHARED_SESSION_IDS.has(id))
|
|
7
65
|
return;
|
|
@@ -17,6 +75,7 @@ export function createSharedSessionRecord(input) {
|
|
|
17
75
|
return {
|
|
18
76
|
id: sessionId,
|
|
19
77
|
kind: input.kind ?? 'tui',
|
|
78
|
+
project: input.project?.trim() || 'unknown',
|
|
20
79
|
title: input.title?.trim() || input.routeBinding?.title || `Session ${sessionId}`,
|
|
21
80
|
status: 'active',
|
|
22
81
|
createdAt: now,
|
|
@@ -37,7 +96,56 @@ export function createSharedSessionRecord(input) {
|
|
|
37
96
|
},
|
|
38
97
|
};
|
|
39
98
|
}
|
|
40
|
-
|
|
99
|
+
/**
|
|
100
|
+
* The idempotent register/heartbeat control-flow with HONEST closed semantics:
|
|
101
|
+
* a brand-new id is created; an existing OPEN id adopts the participant; an
|
|
102
|
+
* existing CLOSED id records the heartbeat but stays closed (returning a conflict
|
|
103
|
+
* marker) UNLESS `reopen: true` is passed. A titled session is never renamed by
|
|
104
|
+
* the heartbeat (that rule lives in {@link attachSharedSessionParticipantAndRoute}).
|
|
105
|
+
*/
|
|
106
|
+
export async function registerSharedSession(ops, input) {
|
|
107
|
+
const existing = ops.getSession(input.sessionId);
|
|
108
|
+
if (!existing) {
|
|
109
|
+
const created = await ops.createSession({
|
|
110
|
+
id: input.sessionId,
|
|
111
|
+
...(input.kind !== undefined ? { kind: input.kind } : {}),
|
|
112
|
+
...(input.project !== undefined ? { project: input.project } : {}),
|
|
113
|
+
...(input.title !== undefined ? { title: input.title } : {}),
|
|
114
|
+
participant: input.participant,
|
|
115
|
+
});
|
|
116
|
+
return { record: created, reopened: false };
|
|
117
|
+
}
|
|
118
|
+
const attach = participantToAttachInput(input.participant, input.title);
|
|
119
|
+
if (existing.status === 'closed') {
|
|
120
|
+
// Reopen honesty: a session the SYSTEM reaper closed ('idle-reaped') reopens
|
|
121
|
+
// automatically on the next participant heartbeat — the surface never
|
|
122
|
+
// deliberately closed it, so re-registering is not a conflict. An explicit
|
|
123
|
+
// 'user'/'surface' close stays closed (honest conflict) unless reopen:true.
|
|
124
|
+
const systemReaped = readSessionCloseReason(existing) === 'idle-reaped';
|
|
125
|
+
if (input.reopen === true || systemReaped) {
|
|
126
|
+
const reopened = (await ops.reopenSession(existing.id)) ?? existing;
|
|
127
|
+
return { record: await ops.attachParticipant(reopened, attach), reopened: true };
|
|
128
|
+
}
|
|
129
|
+
return { record: await ops.attachParticipant(existing, attach), reopened: false, conflict: { status: 'closed' } };
|
|
130
|
+
}
|
|
131
|
+
return { record: await ops.attachParticipant(existing, attach), reopened: false };
|
|
132
|
+
}
|
|
133
|
+
export function participantToAttachInput(participant, title) {
|
|
134
|
+
return {
|
|
135
|
+
surfaceKind: participant.surfaceKind,
|
|
136
|
+
surfaceId: participant.surfaceId,
|
|
137
|
+
externalId: participant.externalId,
|
|
138
|
+
userId: participant.userId,
|
|
139
|
+
displayName: participant.displayName,
|
|
140
|
+
routeId: participant.routeId,
|
|
141
|
+
...(title ? { title } : {}),
|
|
142
|
+
body: '',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/** Close a session, recording WHY. Defaults to 'user' — the explicit close verb
|
|
146
|
+
* (daemon `sessions.close`) is a deliberate user/surface action, which does NOT
|
|
147
|
+
* auto-reopen on heartbeat. The reaper passes 'idle-reaped'. */
|
|
148
|
+
export function closeSharedSessionRecord(session, reason = 'user') {
|
|
41
149
|
const now = Date.now();
|
|
42
150
|
return {
|
|
43
151
|
...session,
|
|
@@ -45,6 +153,7 @@ export function closeSharedSessionRecord(session) {
|
|
|
45
153
|
activeAgentId: undefined,
|
|
46
154
|
updatedAt: now,
|
|
47
155
|
closedAt: now,
|
|
156
|
+
metadata: withSessionCloseReason(session.metadata, reason),
|
|
48
157
|
};
|
|
49
158
|
}
|
|
50
159
|
export function reopenSharedSessionRecord(session) {
|
|
@@ -53,6 +162,9 @@ export function reopenSharedSessionRecord(session) {
|
|
|
53
162
|
status: 'active',
|
|
54
163
|
updatedAt: Date.now(),
|
|
55
164
|
closedAt: undefined,
|
|
165
|
+
// A reopened session is no longer closed-for-any-reason; clear the marker so
|
|
166
|
+
// it never carries a stale close reason on the wire.
|
|
167
|
+
metadata: withoutSessionCloseReason(session.metadata),
|
|
56
168
|
};
|
|
57
169
|
}
|
|
58
170
|
export function bindSharedSessionAgent(session, agentId) {
|
|
@@ -65,6 +177,21 @@ export function bindSharedSessionAgent(session, agentId) {
|
|
|
65
177
|
lastActivityAt: now,
|
|
66
178
|
};
|
|
67
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* True when a session title is still the auto-generated placeholder (empty or
|
|
182
|
+
* `Session <id>`) and can be named by an incoming register/attach. A real,
|
|
183
|
+
* user-supplied title is never overwritten by this path.
|
|
184
|
+
*/
|
|
185
|
+
export function isPlaceholderSessionTitle(title, id) {
|
|
186
|
+
const trimmed = title.trim();
|
|
187
|
+
return trimmed.length === 0 || trimmed === `Session ${id}`;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Merge a participant + optional route onto a session. This is the HEARTBEAT
|
|
191
|
+
* path — it records the participant and advances lastSeenAt, but it must NOT by
|
|
192
|
+
* itself change lifecycle status (a closed session stays closed; reopening is an
|
|
193
|
+
* explicit verb) and must NOT overwrite a real title (only names a placeholder).
|
|
194
|
+
*/
|
|
68
195
|
export function attachSharedSessionParticipantAndRoute(input) {
|
|
69
196
|
const nextRouteIds = input.binding?.id
|
|
70
197
|
? [...new Set([...input.session.routeIds, input.binding.id])]
|
|
@@ -78,12 +205,23 @@ export function attachSharedSessionParticipantAndRoute(input) {
|
|
|
78
205
|
routeId: input.binding?.id,
|
|
79
206
|
lastSeenAt: Date.now(),
|
|
80
207
|
});
|
|
208
|
+
const incomingTitle = input.message.title?.trim();
|
|
209
|
+
const title = incomingTitle && isPlaceholderSessionTitle(input.session.title, input.session.id)
|
|
210
|
+
? incomingTitle
|
|
211
|
+
: input.session.title;
|
|
212
|
+
const now = Date.now();
|
|
81
213
|
return {
|
|
82
214
|
...input.session,
|
|
83
|
-
title
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
215
|
+
title,
|
|
216
|
+
// Status is intentionally preserved: the participant merge is a heartbeat and
|
|
217
|
+
// cannot flip a closed session back to active. Reopening is an explicit verb.
|
|
218
|
+
status: input.session.status,
|
|
219
|
+
updatedAt: now,
|
|
220
|
+
// A register heartbeat IS session activity: advance lastActivityAt (not only
|
|
221
|
+
// the participant's lastSeenAt) so the idle-empty reaper does not close a
|
|
222
|
+
// live, message-less surface session out from under a heartbeating participant.
|
|
223
|
+
lastActivityAt: now,
|
|
224
|
+
closedAt: input.session.closedAt,
|
|
87
225
|
routeIds: nextRouteIds,
|
|
88
226
|
participants,
|
|
89
227
|
surfaceKinds: dedupeSessionSurfaceKinds(participants),
|
|
@@ -92,3 +230,39 @@ export function attachSharedSessionParticipantAndRoute(input) {
|
|
|
92
230
|
},
|
|
93
231
|
};
|
|
94
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* The inverse of {@link attachSharedSessionParticipantAndRoute}: remove EVERY
|
|
235
|
+
* participant bound to `surfaceId` and unbind the route bindings those
|
|
236
|
+
* participants alone held. This is "detach != close != kill" — the session and
|
|
237
|
+
* all other participants keep running; the detached surface simply stops being a
|
|
238
|
+
* routing target (and, filtered by domain, stops receiving session updates).
|
|
239
|
+
*
|
|
240
|
+
* Route pruning is conservative: a routeId is dropped from the session only when
|
|
241
|
+
* NO surviving participant still references it, so detaching one surface never
|
|
242
|
+
* severs another surface's live binding.
|
|
243
|
+
*
|
|
244
|
+
* Returns `{ session, changed }`. `changed` is false when no participant matched
|
|
245
|
+
* `surfaceId` (the caller can treat a no-match detach as an idempotent no-op and
|
|
246
|
+
* skip persistence/emit). Status, title, and closedAt are preserved untouched —
|
|
247
|
+
* detach is never a lifecycle transition.
|
|
248
|
+
*/
|
|
249
|
+
export function detachSharedSessionParticipant(session, surfaceId) {
|
|
250
|
+
const remaining = session.participants.filter((participant) => participant.surfaceId !== surfaceId);
|
|
251
|
+
if (remaining.length === session.participants.length) {
|
|
252
|
+
return { session, changed: false };
|
|
253
|
+
}
|
|
254
|
+
const survivingRouteIds = new Set(remaining
|
|
255
|
+
.map((participant) => participant.routeId)
|
|
256
|
+
.filter((routeId) => typeof routeId === 'string'));
|
|
257
|
+
const routeIds = session.routeIds.filter((routeId) => survivingRouteIds.has(routeId));
|
|
258
|
+
return {
|
|
259
|
+
session: {
|
|
260
|
+
...session,
|
|
261
|
+
updatedAt: Date.now(),
|
|
262
|
+
participants: remaining,
|
|
263
|
+
surfaceKinds: dedupeSessionSurfaceKinds(remaining),
|
|
264
|
+
routeIds,
|
|
265
|
+
},
|
|
266
|
+
changed: true,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
@@ -9,11 +9,30 @@ export declare function loadSessionBrokerState(snapshot: SharedSessionStoreSnaps
|
|
|
9
9
|
readonly messages: Map<string, SharedSessionMessage[]>;
|
|
10
10
|
readonly inputs: Map<string, SharedSessionInputRecord[]>;
|
|
11
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Build the durable snapshot with a PER-SESSION message cap.
|
|
14
|
+
*
|
|
15
|
+
* `maxPersistedMessagesPerSession` bounds each session's retained bodies
|
|
16
|
+
* independently — NOT the flattened total. The old global slice-after-flatten
|
|
17
|
+
* behaviour silently dropped whole sessions' transcripts (the oldest ones) once
|
|
18
|
+
* the combined message count crossed the cap, while `messageCount` stayed
|
|
19
|
+
* inflated. Capping per session keeps every session's most recent bodies and,
|
|
20
|
+
* when a session IS truncated, stamps `retainedMessageCount` so the loss is
|
|
21
|
+
* honest rather than silent (see {@link SharedSessionRecord.retainedMessageCount}).
|
|
22
|
+
*/
|
|
12
23
|
export declare function createSessionBrokerSnapshot(state: {
|
|
13
24
|
readonly sessions: ReadonlyMap<string, SharedSessionRecord>;
|
|
14
25
|
readonly messages: ReadonlyMap<string, readonly SharedSessionMessage[]>;
|
|
15
26
|
readonly inputs: ReadonlyMap<string, readonly SharedSessionInputRecord[]>;
|
|
16
|
-
},
|
|
27
|
+
}, maxPersistedMessagesPerSession: number): SharedSessionStoreSnapshot;
|
|
17
28
|
export declare function upsertSessionParticipant(participants: readonly SharedSessionParticipant[], participant: SharedSessionParticipant): SharedSessionParticipant[];
|
|
29
|
+
/**
|
|
30
|
+
* Boot-time reconciliation of a freshly-loaded broker state (mutates in place):
|
|
31
|
+
* cancels inputs stuck in `spawned`/`delivered` from a prior run (agent state is
|
|
32
|
+
* unknown after a restart) and clears stale `activeAgentId` on every session.
|
|
33
|
+
* Returns the set of session ids whose input buckets changed so the caller can
|
|
34
|
+
* refresh their pending counts.
|
|
35
|
+
*/
|
|
36
|
+
export declare function reconcileSessionBrokerBoot(sessions: Map<string, SharedSessionRecord>, inputs: Map<string, SharedSessionInputRecord[]>): Set<string>;
|
|
18
37
|
export declare function countPendingSessionInputs(records: readonly SharedSessionInputRecord[]): number;
|
|
19
38
|
//# sourceMappingURL=session-broker-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-broker-state.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-broker-state.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA8Q9G,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,EAAE,CAE1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,EAAE,CAE5F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,EAAE,CAElG;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,GAAG;IAC/F,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;CAC1D,CAsCA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IACL,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,CAAC,CAAC;CAC3E,EACD,8BAA8B,EAAE,MAAM,GACrC,0BAA0B,CA2B5B;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,SAAS,wBAAwB,EAAE,EACjD,WAAW,EAAE,wBAAwB,GACpC,wBAAwB,EAAE,CAM5B;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAC9C,GAAG,CAAC,MAAM,CAAC,CAkBb;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,GAAG,MAAM,CAI9F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SHARED_SESSION_INPUT_INTENTS, SHARED_SESSION_INPUT_STATES, } from './session-intents.js';
|
|
2
2
|
import { isRecord } from '../utils/record-coerce.js';
|
|
3
|
-
const SESSION_KINDS = new Set(['tui', 'companion-task', 'companion-chat']);
|
|
3
|
+
const SESSION_KINDS = new Set(['tui', 'agent', 'webui', 'companion-task', 'companion-chat', 'automation']);
|
|
4
4
|
const SESSION_STATUSES = new Set(['active', 'closed']);
|
|
5
5
|
const MESSAGE_ROLES = new Set(['user', 'assistant', 'system']);
|
|
6
6
|
function isFiniteNumber(value) {
|
|
@@ -78,6 +78,7 @@ function normalizeSessionRecord(value, messages, inputs) {
|
|
|
78
78
|
validateOptionalNumber(value['updatedAt']);
|
|
79
79
|
validateOptionalNumber(value['lastActivityAt']);
|
|
80
80
|
validateOptionalNumber(value['messageCount']);
|
|
81
|
+
validateOptionalNumber(value['retainedMessageCount']);
|
|
81
82
|
validateOptionalNumber(value['pendingInputCount']);
|
|
82
83
|
validateOptionalNumber(value['lastMessageAt']);
|
|
83
84
|
validateOptionalNumber(value['closedAt']);
|
|
@@ -120,6 +121,7 @@ function normalizeSessionRecord(value, messages, inputs) {
|
|
|
120
121
|
kind: typeof value['kind'] === 'string' && SESSION_KINDS.has(value['kind'])
|
|
121
122
|
? value['kind']
|
|
122
123
|
: 'tui',
|
|
124
|
+
project: typeof value['project'] === 'string' && value['project'].length > 0 ? value['project'] : 'unknown',
|
|
123
125
|
title: typeof value['title'] === 'string' && value['title'].trim().length > 0 ? value['title'] : `Session ${id}`,
|
|
124
126
|
status: typeof value['status'] === 'string' && SESSION_STATUSES.has(value['status'])
|
|
125
127
|
? value['status']
|
|
@@ -130,6 +132,9 @@ function normalizeSessionRecord(value, messages, inputs) {
|
|
|
130
132
|
...(closedAt !== undefined ? { closedAt } : {}),
|
|
131
133
|
lastActivityAt,
|
|
132
134
|
messageCount: Math.max(isFiniteNumber(value['messageCount']) ? value['messageCount'] : 0, messages.length),
|
|
135
|
+
...(isFiniteNumber(value['retainedMessageCount']) && value['retainedMessageCount'] < Math.max(isFiniteNumber(value['messageCount']) ? value['messageCount'] : 0, messages.length)
|
|
136
|
+
? { retainedMessageCount: value['retainedMessageCount'] }
|
|
137
|
+
: {}),
|
|
133
138
|
pendingInputCount: Math.max(isFiniteNumber(value['pendingInputCount']) ? value['pendingInputCount'] : 0, countPendingSessionInputs(inputs)),
|
|
134
139
|
routeIds,
|
|
135
140
|
surfaceKinds,
|
|
@@ -284,12 +289,43 @@ export function loadSessionBrokerState(snapshot) {
|
|
|
284
289
|
}
|
|
285
290
|
return { sessions, messages, inputs };
|
|
286
291
|
}
|
|
287
|
-
|
|
288
|
-
|
|
292
|
+
/**
|
|
293
|
+
* Build the durable snapshot with a PER-SESSION message cap.
|
|
294
|
+
*
|
|
295
|
+
* `maxPersistedMessagesPerSession` bounds each session's retained bodies
|
|
296
|
+
* independently — NOT the flattened total. The old global slice-after-flatten
|
|
297
|
+
* behaviour silently dropped whole sessions' transcripts (the oldest ones) once
|
|
298
|
+
* the combined message count crossed the cap, while `messageCount` stayed
|
|
299
|
+
* inflated. Capping per session keeps every session's most recent bodies and,
|
|
300
|
+
* when a session IS truncated, stamps `retainedMessageCount` so the loss is
|
|
301
|
+
* honest rather than silent (see {@link SharedSessionRecord.retainedMessageCount}).
|
|
302
|
+
*/
|
|
303
|
+
export function createSessionBrokerSnapshot(state, maxPersistedMessagesPerSession) {
|
|
304
|
+
const cap = Math.max(1, maxPersistedMessagesPerSession);
|
|
305
|
+
const cappedMessages = [];
|
|
306
|
+
const retainedBySession = new Map();
|
|
307
|
+
for (const [sessionId, bucket] of state.messages.entries()) {
|
|
308
|
+
const retained = sortMessages(bucket).slice(-cap);
|
|
309
|
+
for (const message of retained)
|
|
310
|
+
cappedMessages.push(message);
|
|
311
|
+
retainedBySession.set(sessionId, retained.length);
|
|
312
|
+
}
|
|
289
313
|
const inputs = [...state.inputs.values()].flatMap((bucket) => bucket);
|
|
314
|
+
const sessions = sortSessions(state.sessions.values()).map((session) => {
|
|
315
|
+
const retained = retainedBySession.get(session.id) ?? 0;
|
|
316
|
+
if (retained < session.messageCount) {
|
|
317
|
+
return { ...session, retainedMessageCount: retained };
|
|
318
|
+
}
|
|
319
|
+
// Nothing pruned — drop any stale marker so the common case carries none.
|
|
320
|
+
if (session.retainedMessageCount !== undefined) {
|
|
321
|
+
const { retainedMessageCount: _drop, ...rest } = session;
|
|
322
|
+
return rest;
|
|
323
|
+
}
|
|
324
|
+
return session;
|
|
325
|
+
});
|
|
290
326
|
return {
|
|
291
|
-
sessions
|
|
292
|
-
messages: sortMessages(
|
|
327
|
+
sessions,
|
|
328
|
+
messages: sortMessages(cappedMessages),
|
|
293
329
|
inputs: sortInputs(inputs),
|
|
294
330
|
};
|
|
295
331
|
}
|
|
@@ -300,6 +336,32 @@ export function upsertSessionParticipant(participants, participant) {
|
|
|
300
336
|
participant,
|
|
301
337
|
];
|
|
302
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* Boot-time reconciliation of a freshly-loaded broker state (mutates in place):
|
|
341
|
+
* cancels inputs stuck in `spawned`/`delivered` from a prior run (agent state is
|
|
342
|
+
* unknown after a restart) and clears stale `activeAgentId` on every session.
|
|
343
|
+
* Returns the set of session ids whose input buckets changed so the caller can
|
|
344
|
+
* refresh their pending counts.
|
|
345
|
+
*/
|
|
346
|
+
export function reconcileSessionBrokerBoot(sessions, inputs) {
|
|
347
|
+
const restartReason = 'daemon restart — agent state unknown';
|
|
348
|
+
const changed = new Set();
|
|
349
|
+
for (const [sessionId, bucket] of inputs.entries()) {
|
|
350
|
+
for (let i = 0; i < bucket.length; i++) {
|
|
351
|
+
const entry = bucket[i];
|
|
352
|
+
if (entry.state === 'spawned' || entry.state === 'delivered') {
|
|
353
|
+
bucket[i] = { ...entry, state: 'cancelled', updatedAt: Date.now(), error: restartReason };
|
|
354
|
+
changed.add(sessionId);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
for (const [sessionId, session] of sessions.entries()) {
|
|
359
|
+
if (session.activeAgentId) {
|
|
360
|
+
sessions.set(sessionId, { ...session, activeAgentId: undefined, updatedAt: Date.now() });
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return changed;
|
|
364
|
+
}
|
|
303
365
|
export function countPendingSessionInputs(records) {
|
|
304
366
|
return records.filter((entry) => entry.state === 'queued' || entry.state === 'delivered' || entry.state === 'spawned').length;
|
|
305
367
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { PersistentStore } from '../state/persistent-store.js';
|
|
2
2
|
import type { RuntimeEventBus } from '../runtime/events/index.js';
|
|
3
3
|
import { RouteBindingManager } from '../channels/index.js';
|
|
4
|
-
import type { AutomationRouteBinding } from '../automation/routes.js';
|
|
5
4
|
import type { SharedSessionCompletion, SharedSessionContinuationRunner, SharedSessionInputRecord } from './session-intents.js';
|
|
6
|
-
import type { FindSharedSessionOptions,
|
|
5
|
+
import type { CreateSharedSessionInput, EnsureSharedSessionInput, FindSharedSessionOptions, ListSharedSessionsOptions, RegisterSharedSessionInput, SharedSessionMessage, SharedSessionRecord, SharedSessionRegisterResult, SharedSessionSubmission, SteerSharedSessionMessageInput, SubmitSharedSessionMessageInput } from './session-types.js';
|
|
7
6
|
import { type SharedSessionAgentStatusProvider, type SharedSessionEventPublisher, type SharedSessionMessageSender, type SharedSessionStoreSnapshot } from './session-broker-helpers.js';
|
|
8
7
|
export declare class SharedSessionBroker {
|
|
9
8
|
private readonly store;
|
|
@@ -22,10 +21,10 @@ export declare class SharedSessionBroker {
|
|
|
22
21
|
private readonly _idleEmptyMs;
|
|
23
22
|
/** Default idle threshold for sessions with content (ms). */
|
|
24
23
|
private readonly _idleLongMs;
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*/
|
|
24
|
+
/** Retention window (ms since closedAt) for CLOSED sessions; Infinity = retain forever. */
|
|
25
|
+
private readonly _deletionRetentionMs;
|
|
26
|
+
/** @param config idleEmptyMs (empty-session idle, default 10m), idleLongMs (default
|
|
27
|
+
* 24h), deletionRetentionMs (closed-session delete age, default Infinity = retain). */
|
|
29
28
|
constructor(config: {
|
|
30
29
|
readonly store?: PersistentStore<SharedSessionStoreSnapshot> | undefined;
|
|
31
30
|
readonly storePath?: string | undefined;
|
|
@@ -34,6 +33,7 @@ export declare class SharedSessionBroker {
|
|
|
34
33
|
readonly messageSender: SharedSessionMessageSender;
|
|
35
34
|
readonly idleEmptyMs?: number | undefined;
|
|
36
35
|
readonly idleLongMs?: number | undefined;
|
|
36
|
+
readonly deletionRetentionMs?: number | undefined;
|
|
37
37
|
});
|
|
38
38
|
setEventPublisher(publisher: SharedSessionEventPublisher | null): void;
|
|
39
39
|
/**
|
|
@@ -61,28 +61,43 @@ export declare class SharedSessionBroker {
|
|
|
61
61
|
attachRuntimeBus(bus: RuntimeEventBus, sessionResolver: (agentId: string) => string | null): () => void;
|
|
62
62
|
setContinuationRunner(runner: SharedSessionContinuationRunner | null): void;
|
|
63
63
|
start(): Promise<void>;
|
|
64
|
-
listSessions(limit?: number): SharedSessionRecord[];
|
|
64
|
+
listSessions(limit?: number, options?: ListSharedSessionsOptions): SharedSessionRecord[];
|
|
65
65
|
getSession(sessionId: string): SharedSessionRecord | null;
|
|
66
66
|
findPreferredSession(options?: FindSharedSessionOptions): Promise<SharedSessionRecord | null>;
|
|
67
|
-
ensureSession(input?:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}): Promise<SharedSessionRecord>;
|
|
67
|
+
ensureSession(input?: EnsureSharedSessionInput): Promise<SharedSessionRecord>;
|
|
68
|
+
/** Idempotent register/heartbeat; a brand-new session is born ALREADY
|
|
69
|
+
* surface-managed (avoids a create-then-patch race where a concurrent steer
|
|
70
|
+
* sees active-but-not-yet-managed and hits the executor path). */
|
|
71
|
+
register(input: RegisterSharedSessionInput): Promise<SharedSessionRegisterResult>;
|
|
72
|
+
private markSurfaceManaged;
|
|
74
73
|
getMessages(sessionId: string, limit?: number): SharedSessionMessage[];
|
|
75
74
|
getInputs(sessionId: string, limit?: number): SharedSessionInputRecord[];
|
|
76
|
-
createSession(input?:
|
|
77
|
-
readonly id?: string | undefined;
|
|
78
|
-
readonly title?: string | undefined;
|
|
79
|
-
readonly metadata?: Record<string, unknown> | undefined;
|
|
80
|
-
readonly routeBinding?: AutomationRouteBinding | undefined;
|
|
81
|
-
readonly participant?: SharedSessionParticipant | undefined;
|
|
82
|
-
readonly kind?: SharedSessionRecord['kind'] | undefined;
|
|
83
|
-
}): Promise<SharedSessionRecord>;
|
|
75
|
+
createSession(input?: CreateSharedSessionInput): Promise<SharedSessionRecord>;
|
|
84
76
|
closeSession(sessionId: string): Promise<SharedSessionRecord | null>;
|
|
85
77
|
reopenSession(sessionId: string): Promise<SharedSessionRecord | null>;
|
|
78
|
+
/**
|
|
79
|
+
* Permanently remove a shared session record and its queued messages/inputs
|
|
80
|
+
* from the home-scoped store (see CHANGELOG 1.0.0: a real hard-delete verb, distinct from
|
|
81
|
+
* `closeSession` — closed sessions are HISTORY and are never touched by this
|
|
82
|
+
* path unless explicitly asked). Requires the session to already be closed:
|
|
83
|
+
* deleting a still-active session returns `'active'` so the caller can
|
|
84
|
+
* surface an honest 409 (close it, then delete) rather than yanking a
|
|
85
|
+
* record out from under a live participant/agent. An unknown OR
|
|
86
|
+
* already-deleted id returns `'not-found'` — delete is not a 200-noop; a
|
|
87
|
+
* second delete of the same id is an honest 404 at the route layer.
|
|
88
|
+
*
|
|
89
|
+
* Emits `session-deleted` on the same `session-update` wire channel as
|
|
90
|
+
* close/reopen/detach so subscribers drop the row live.
|
|
91
|
+
*/
|
|
92
|
+
deleteSession(sessionId: string): Promise<'deleted' | 'not-found' | 'active'>;
|
|
93
|
+
/**
|
|
94
|
+
* Detach a surface's participant + route binding without closing or killing the
|
|
95
|
+
* session ("detach != close != kill"). Emits `session-detached`. Idempotent:
|
|
96
|
+
* unknown session -> null (404); closed session or no matching participant ->
|
|
97
|
+
* returned unchanged (a closed session emits no updates, so "stop receiving
|
|
98
|
+
* updates" is already satisfied). See {@link detachSharedSessionParticipant}.
|
|
99
|
+
*/
|
|
100
|
+
detachParticipant(sessionId: string, surfaceId: string): Promise<SharedSessionRecord | null>;
|
|
86
101
|
bindAgent(sessionId: string, agentId: string): Promise<SharedSessionRecord | null>;
|
|
87
102
|
submitMessage(input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission>;
|
|
88
103
|
steerMessage(input: SteerSharedSessionMessageInput): Promise<SharedSessionSubmission>;
|
|
@@ -113,27 +128,25 @@ export declare class SharedSessionBroker {
|
|
|
113
128
|
private publishUpdate;
|
|
114
129
|
private publishInputLifecycleEvent;
|
|
115
130
|
private handleIntent;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
131
|
+
/** Collection read for a live surface (see {@link filterSessionInputsSince}). */
|
|
132
|
+
getInputsSince(sessionId: string, options?: {
|
|
133
|
+
readonly state?: SharedSessionInputRecord['state'] | undefined;
|
|
134
|
+
readonly since?: number | undefined;
|
|
135
|
+
readonly limit?: number | undefined;
|
|
136
|
+
}): SharedSessionInputRecord[];
|
|
137
|
+
/** A live surface reports a collected input delivered (`consumed:false`) or
|
|
138
|
+
* consumed/completed (`consumed:true`); emits a session_update. Lifecycle rules
|
|
139
|
+
* live in {@link markSurfaceInputDelivered}. */
|
|
140
|
+
markInputDelivered(sessionId: string, inputId: string, options?: {
|
|
141
|
+
readonly consumed?: boolean | undefined;
|
|
142
|
+
}): Promise<SharedSessionInputRecord | null>;
|
|
120
143
|
private runQueuedFollowUp;
|
|
121
144
|
private sessionInputStore;
|
|
122
145
|
private messageStore;
|
|
123
146
|
private touch;
|
|
124
147
|
private refreshPendingInputCount;
|
|
125
|
-
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* Policy:
|
|
129
|
-
* - Sessions with messageCount === 0 AND no active agent AND idle longer than
|
|
130
|
-
* `_idleEmptyMs` (default 10min) are closed with reason `idle-empty`.
|
|
131
|
-
* - Sessions with messageCount > 0 AND no active agent AND idle longer than
|
|
132
|
-
* `_idleLongMs` (default 24h) are closed with reason `idle-long`.
|
|
133
|
-
*
|
|
134
|
-
* "Idle" is measured from `lastActivityAt` (updated on createInput/bindAgent/
|
|
135
|
-
* appendMessage). Sessions with an active agent are never GC'd.
|
|
136
|
-
*/
|
|
148
|
+
/** Periodic sweep: idle-close active sessions and (only under a finite retention
|
|
149
|
+
* window) delete closed ones. Full policy lives in {@link sweepSharedSessions}. */
|
|
137
150
|
private gcSweep;
|
|
138
151
|
}
|
|
139
152
|
//# sourceMappingURL=session-broker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-broker.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-broker.d.ts","sourceRoot":"","sources":["../../../src/platform/control-plane/session-broker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EACV,uBAAuB,EACvB,+BAA+B,EAE/B,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EAEzB,0BAA0B,EAC1B,oBAAoB,EAEpB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AAoDrC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmC;IACvE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IACxE,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,kBAAkB,CAAgD;IAC1E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAA+C;IAElE,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAE9C;2FACuF;gBAC3E,MAAM,EAAE;QAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,0BAA0B,CAAC,GAAG,SAAS,CAAC;QACzE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACxC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;QAC5C,QAAQ,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;QAC/D,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;QACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACnD;IAcD,iBAAiB,CAAC,SAAS,EAAE,2BAA2B,GAAG,IAAI,GAAG,IAAI;IAItE;;;;OAIG;IACH,iBAAiB,IAAI,MAAM;IAQ3B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;;;;;;;;;OAUG;IACH,gBAAgB,CACd,GAAG,EAAE,eAAe,EACpB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAClD,MAAM,IAAI;IAQb,qBAAqB,CAAC,MAAM,EAAE,+BAA+B,GAAG,IAAI,GAAG,IAAI;IAIrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B,YAAY,CAAC,KAAK,SAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,mBAAmB,EAAE;IAWzF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAInD,oBAAoB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAYjG,aAAa,CAAC,KAAK,GAAE,wBAA6B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuBvF;;sEAEkE;IAC5D,QAAQ,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC;YAczE,kBAAkB;IAchC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,oBAAoB,EAAE;IAInE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,wBAAwB,EAAE;IAK/D,aAAa,CAAC,KAAK,GAAE,wBAA6B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAajF,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAcpE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAW3E;;;;;;;;;;;;;OAaG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAcnF;;;;;;OAMG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAiB5F,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAiBlF,aAAa,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIvF,YAAY,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIrF,eAAe,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIzF,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IASxI;;;;;OAKG;IACG,sBAAsB,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;QACL,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;KACnE,GACA,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAcjC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IA4ChJ,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAiBzF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAiB9E,aAAa;YAiBb,yBAAyB;IAoBvC,OAAO,CAAC,oBAAoB;YAOd,cAAc;IAQ5B,OAAO,CAAC,qBAAqB;YAQf,OAAO;IAQrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,0BAA0B;YAiBpB,YAAY;IA8K1B,iFAAiF;IACjF,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAO,GACzJ,wBAAwB,EAAE;IAI7B;;oDAEgD;IAC1C,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAO,GACxD,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;YAY7B,iBAAiB;IAyB/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,wBAAwB;IAIhC;uFACmF;IACnF,OAAO,CAAC,OAAO;CAkBhB"}
|