@pellux/goodvibes-sdk 0.37.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts/artifacts/operator-contract.json +3171 -929
- 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 +21 -1
- package/dist/events/communication.d.ts.map +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/message-bus-core.d.ts +7 -0
- package/dist/platform/agents/message-bus-core.d.ts.map +1 -1
- package/dist/platform/agents/message-bus-core.js +2 -1
- package/dist/platform/agents/orchestrator-runner.d.ts +50 -1
- package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator-runner.js +172 -7
- package/dist/platform/agents/orchestrator.d.ts +78 -6
- package/dist/platform/agents/orchestrator.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator.js +95 -18
- 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 +192 -0
- package/dist/platform/agents/turn-knowledge-injection.d.ts.map +1 -0
- package/dist/platform/agents/turn-knowledge-injection.js +269 -0
- 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 +46 -0
- package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-controller.js +213 -32
- 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-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 +67 -20
- package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-manager.js +130 -144
- 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 +37 -4
- 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 +18 -0
- package/dist/platform/config/manager.d.ts.map +1 -1
- package/dist/platform/config/manager.js +36 -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-types.d.ts +13 -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 +6 -1
- package/dist/platform/control-plane/index.d.ts.map +1 -1
- package/dist/platform/control-plane/index.js +4 -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 +133 -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-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-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 +32 -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 +29 -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 +57 -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/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/adaptive-planner.d.ts +50 -0
- package/dist/platform/core/adaptive-planner.d.ts.map +1 -1
- package/dist/platform/core/adaptive-planner.js +49 -0
- 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 +2 -0
- package/dist/platform/core/index.d.ts.map +1 -1
- package/dist/platform/core/index.js +2 -0
- package/dist/platform/core/orchestrator-runtime.d.ts +31 -0
- 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 +35 -1
- package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-turn-loop.js +121 -3
- package/dist/platform/core/orchestrator.d.ts +67 -0
- package/dist/platform/core/orchestrator.d.ts.map +1 -1
- package/dist/platform/core/orchestrator.js +89 -1
- 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 +204 -0
- package/dist/platform/core/plan-proposal.d.ts.map +1 -0
- package/dist/platform/core/plan-proposal.js +296 -0
- 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 +63 -0
- package/dist/platform/daemon/boot.d.ts.map +1 -0
- package/dist/platform/daemon/boot.js +60 -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 +18 -6
- package/dist/platform/daemon/facade.d.ts.map +1 -1
- package/dist/platform/daemon/facade.js +50 -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 +1 -1
- package/dist/platform/daemon/http/router.d.ts.map +1 -1
- package/dist/platform/daemon/http/router.js +7 -22
- 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/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 +26 -0
- package/dist/platform/knowledge/knowledge-api.d.ts.map +1 -1
- package/dist/platform/knowledge/knowledge-api.js +11 -0
- 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 +22 -0
- package/dist/platform/orchestration/budget.d.ts.map +1 -0
- package/dist/platform/orchestration/budget.js +35 -0
- package/dist/platform/orchestration/cancellation.d.ts +31 -0
- package/dist/platform/orchestration/cancellation.d.ts.map +1 -0
- package/dist/platform/orchestration/cancellation.js +25 -0
- package/dist/platform/orchestration/controller-compat.d.ts +46 -0
- package/dist/platform/orchestration/controller-compat.d.ts.map +1 -0
- package/dist/platform/orchestration/controller-compat.js +27 -0
- package/dist/platform/orchestration/dirty-guard.d.ts +32 -0
- package/dist/platform/orchestration/dirty-guard.d.ts.map +1 -0
- package/dist/platform/orchestration/dirty-guard.js +147 -0
- package/dist/platform/orchestration/engine.d.ts +82 -0
- package/dist/platform/orchestration/engine.d.ts.map +1 -0
- package/dist/platform/orchestration/engine.js +623 -0
- package/dist/platform/orchestration/index.d.ts +20 -0
- package/dist/platform/orchestration/index.d.ts.map +1 -0
- package/dist/platform/orchestration/index.js +11 -0
- package/dist/platform/orchestration/persistence.d.ts +24 -0
- package/dist/platform/orchestration/persistence.d.ts.map +1 -0
- package/dist/platform/orchestration/persistence.js +179 -0
- package/dist/platform/orchestration/phase-runner.d.ts +114 -0
- package/dist/platform/orchestration/phase-runner.d.ts.map +1 -0
- package/dist/platform/orchestration/phase-runner.js +347 -0
- 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 +64 -0
- package/dist/platform/orchestration/scheduler.d.ts.map +1 -0
- package/dist/platform/orchestration/scheduler.js +73 -0
- package/dist/platform/orchestration/types.d.ts +535 -0
- package/dist/platform/orchestration/types.d.ts.map +1 -0
- package/dist/platform/orchestration/types.js +47 -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/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/communication.d.ts +11 -0
- package/dist/platform/runtime/emitters/communication.d.ts.map +1 -1
- package/dist/platform/runtime/emitters/communication.js +9 -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 +56 -1
- package/dist/platform/runtime/fleet/adapters/agent.d.ts +56 -0
- package/dist/platform/runtime/fleet/adapters/agent.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/agent.js +143 -0
- package/dist/platform/runtime/fleet/adapters/automation.d.ts +30 -0
- package/dist/platform/runtime/fleet/adapters/automation.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/automation.js +41 -0
- package/dist/platform/runtime/fleet/adapters/background-process.d.ts +12 -0
- package/dist/platform/runtime/fleet/adapters/background-process.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/background-process.js +46 -0
- package/dist/platform/runtime/fleet/adapters/code-index.d.ts +21 -0
- package/dist/platform/runtime/fleet/adapters/code-index.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/code-index.js +44 -0
- package/dist/platform/runtime/fleet/adapters/orchestration.d.ts +69 -0
- package/dist/platform/runtime/fleet/adapters/orchestration.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/orchestration.js +329 -0
- package/dist/platform/runtime/fleet/adapters/schedule.d.ts +14 -0
- package/dist/platform/runtime/fleet/adapters/schedule.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/schedule.js +28 -0
- package/dist/platform/runtime/fleet/adapters/trigger.d.ts +12 -0
- package/dist/platform/runtime/fleet/adapters/trigger.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/trigger.js +22 -0
- package/dist/platform/runtime/fleet/adapters/watcher.d.ts +13 -0
- package/dist/platform/runtime/fleet/adapters/watcher.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/watcher.js +47 -0
- package/dist/platform/runtime/fleet/adapters/workflow.d.ts +11 -0
- package/dist/platform/runtime/fleet/adapters/workflow.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/workflow.js +34 -0
- package/dist/platform/runtime/fleet/adapters/wrfc.d.ts +35 -0
- package/dist/platform/runtime/fleet/adapters/wrfc.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/adapters/wrfc.js +275 -0
- package/dist/platform/runtime/fleet/index.d.ts +10 -0
- package/dist/platform/runtime/fleet/index.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/index.js +6 -0
- package/dist/platform/runtime/fleet/registry.d.ts +113 -0
- package/dist/platform/runtime/fleet/registry.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/registry.js +664 -0
- package/dist/platform/runtime/fleet/types.d.ts +199 -0
- package/dist/platform/runtime/fleet/types.d.ts.map +1 -0
- package/dist/platform/runtime/fleet/types.js +2 -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/runtime-knowledge-api.d.ts +1 -1
- package/dist/platform/runtime/runtime-knowledge-api.d.ts.map +1 -1
- package/dist/platform/runtime/runtime-knowledge-api.js +1 -0
- package/dist/platform/runtime/services.d.ts +48 -0
- package/dist/platform/runtime/services.d.ts.map +1 -1
- package/dist/platform/runtime/services.js +95 -2
- 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.d.ts +49 -0
- package/dist/platform/state/code-index-chunking.d.ts.map +1 -0
- package/dist/platform/state/code-index-chunking.js +111 -0
- package/dist/platform/state/code-index-db.d.ts +53 -0
- package/dist/platform/state/code-index-db.d.ts.map +1 -0
- package/dist/platform/state/code-index-db.js +101 -0
- 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 +175 -0
- package/dist/platform/state/code-index-store.d.ts.map +1 -0
- package/dist/platform/state/code-index-store.js +620 -0
- package/dist/platform/state/index.d.ts +12 -2
- package/dist/platform/state/index.d.ts.map +1 -1
- package/dist/platform/state/index.js +6 -1
- package/dist/platform/state/knowledge-injection.d.ts +23 -0
- package/dist/platform/state/knowledge-injection.d.ts.map +1 -1
- package/dist/platform/state/knowledge-injection.js +34 -19
- package/dist/platform/state/memory-recall-contract.d.ts +63 -0
- package/dist/platform/state/memory-recall-contract.d.ts.map +1 -0
- package/dist/platform/state/memory-recall-contract.js +94 -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 +1 -13
- package/dist/platform/state/memory-vector-store.d.ts.map +1 -1
- package/dist/platform/state/memory-vector-store.js +18 -39
- 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 +25 -0
- package/dist/platform/state/sqlite-vec-loader.d.ts.map +1 -0
- package/dist/platform/state/sqlite-vec-loader.js +43 -0
- 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 +140 -1
- package/dist/platform/tools/agent/manager.d.ts.map +1 -1
- package/dist/platform/tools/agent/manager.js +143 -1
- 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 +161 -49
- package/dist/platform/tools/exec/schema.d.ts +3 -1
- 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 +7 -0
- package/dist/platform/tools/fetch/runtime.d.ts.map +1 -1
- package/dist/platform/tools/fetch/runtime.js +8 -6
- 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 +9 -3
- package/dist/platform/tools/registry.d.ts.map +1 -1
- package/dist/platform/tools/registry.js +9 -3
- 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 +14 -1
- package/dist/platform/types/tools.d.ts.map +1 -1
- package/dist/platform/version.js +1 -1
- package/package.json +29 -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
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { AgentInput } from './schema.js';
|
|
2
2
|
type BatchTask = NonNullable<AgentInput['tasks']>[number];
|
|
3
|
+
/**
|
|
4
|
+
* True when the text explicitly asks for a parallel / per-unit / separate-agent
|
|
5
|
+
* fan-out. Exported for the TUI collapse guard so both guards honour the same
|
|
6
|
+
* explicit-intent precedent.
|
|
7
|
+
*/
|
|
8
|
+
export declare function userRequestsParallelFanout(text: string | undefined): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* True when a constraint's text describes the agent topology (parallelism /
|
|
11
|
+
* spawn-count / separate-agent-per-unit) a fan-out collapse removes. Consulted by
|
|
12
|
+
* the WRFC controller — only for chains created via a collapse — to mark such a
|
|
13
|
+
* constraint system-unsatisfiable so it can never fail the review.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isFanoutShapeConstraintText(text: string | undefined): boolean;
|
|
3
16
|
export interface WrfcBatchPolicyDecision {
|
|
4
17
|
readonly kind: 'independent' | 'collapse-to-wrfc';
|
|
5
18
|
readonly reason?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrfc-batch-policy.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/wrfc-batch-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wrfc-batch-policy.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/agent/wrfc-batch-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,KAAK,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAiD1D;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAAC;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,0BAA0B,CAAC;IACxE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAIxF;AA0ED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAAC,EACrD,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAAE,CAwCnF;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAC5C,YAAY,EAAE,MAAM,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAAE,CAoBnF;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACxD,GAAG,0BAA0B,CA2B7B;AAoED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,uBAAuB,CAmLlF"}
|
|
@@ -12,6 +12,40 @@ const ROLE_ACTION_RE = /\b(?:test|tests|testing|review|reviews|reviewing|verify|
|
|
|
12
12
|
const IMPLEMENTATION_ACTION_RE = /\b(?:build|implement|create|add|write|fix|repair|update|refactor|change|modify|deliver|make)\b/i;
|
|
13
13
|
const DESIGN_ONLY_ACTION_RE = /\b(?:design|plan|outline|specify|propose|describe)\b/i;
|
|
14
14
|
const NO_WRITE_RE = /\b(?:do\s+not|don't|without)\s+(?:write|modify|edit|create|change)\s+(?:files?|code|source|implementation)\b|\bno[-\s]?write\b|\bread[-\s]?only\b/i;
|
|
15
|
+
/**
|
|
16
|
+
* High-precision detector for an EXPLICIT user request to run separate agents in
|
|
17
|
+
* parallel / one per unit of work. This is user intent, exactly like
|
|
18
|
+
* userProhibitsDelegation is (see wrfc-routing.ts): when the user asks for a
|
|
19
|
+
* parallel fan-out, the topology guard must not silently collapse it into one
|
|
20
|
+
* chain. Conservative by design — a plain "build X" never matches; only phrasings
|
|
21
|
+
* that name a parallel/per-item/separate-agent shape do.
|
|
22
|
+
*/
|
|
23
|
+
const PARALLEL_FANOUT_REQUEST_RE = /\b(?:in\s+parallel|concurrent(?:ly)?)\b|\b(?:separate|independent|dedicated|its?\s+own|one)\s+(?:sub[-\s]?)?agents?\b|\b(?:sub[-\s]?)?agents?\s+(?:in\s+parallel|per\b|for\s+each\b)|\b(?:one|a\s+separate|a\s+dedicated)\s+(?:sub[-\s]?)?agent\s+per\b|\bfan[-\s]?out\b|\bper[-\s]?file\s+(?:sub[-\s]?)?agents?\b/i;
|
|
24
|
+
/**
|
|
25
|
+
* Detects a constraint whose satisfaction depends on the agent TOPOLOGY the guard
|
|
26
|
+
* just removed — parallelism, spawn count, or per-unit separate-agent shape. Used
|
|
27
|
+
* ONLY in combination with a recorded fanoutCollapse (never as a blanket drop): a
|
|
28
|
+
* constraint matching this shape after a fan-out was collapsed cannot be satisfied
|
|
29
|
+
* by any fix agent, because the system removed its precondition.
|
|
30
|
+
*/
|
|
31
|
+
const FANOUT_SHAPE_CONSTRAINT_RE = /\b(?:in\s+parallel|parallel(?:ism|ly)?|concurrent(?:ly|cy)?)\b|\b(?:separate|independent|dedicated|distinct|individual|its?\s+own|one|multiple|several)\s+(?:sub[-\s]?)?agents?\b|\b(?:sub[-\s]?)?agents?\s+(?:in\s+parallel|per\b|for\s+each\b|running\s+concurrently)|\b(?:one|a\s+separate|a\s+dedicated|a\s+distinct)\s+(?:sub[-\s]?)?agent\s+per\b|\bfan[-\s]?out\b|\bper[-\s]?file\s+(?:sub[-\s]?)?agents?\b|\bspawn(?:ing)?\s+(?:a\s+)?(?:separate|multiple|several|\d+)\b/i;
|
|
32
|
+
/**
|
|
33
|
+
* True when the text explicitly asks for a parallel / per-unit / separate-agent
|
|
34
|
+
* fan-out. Exported for the TUI collapse guard so both guards honour the same
|
|
35
|
+
* explicit-intent precedent.
|
|
36
|
+
*/
|
|
37
|
+
export function userRequestsParallelFanout(text) {
|
|
38
|
+
return typeof text === 'string' && PARALLEL_FANOUT_REQUEST_RE.test(text);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* True when a constraint's text describes the agent topology (parallelism /
|
|
42
|
+
* spawn-count / separate-agent-per-unit) a fan-out collapse removes. Consulted by
|
|
43
|
+
* the WRFC controller — only for chains created via a collapse — to mark such a
|
|
44
|
+
* constraint system-unsatisfiable so it can never fail the review.
|
|
45
|
+
*/
|
|
46
|
+
export function isFanoutShapeConstraintText(text) {
|
|
47
|
+
return typeof text === 'string' && FANOUT_SHAPE_CONSTRAINT_RE.test(text);
|
|
48
|
+
}
|
|
15
49
|
export function isRootReviewRoleTemplate(template) {
|
|
16
50
|
return ROOT_REVIEW_ROLE_TEMPLATES.has((template ?? '').trim().toLowerCase());
|
|
17
51
|
}
|
|
@@ -238,6 +272,21 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
238
272
|
if (!wantsWrfc || implementationTaskIndexes.length <= 1) {
|
|
239
273
|
return { kind: 'independent' };
|
|
240
274
|
}
|
|
275
|
+
// Ruling (WO UX-A item 1): an explicit parallel / per-unit fan-out request is
|
|
276
|
+
// user intent, exactly like userProhibitsDelegation. When the user explicitly
|
|
277
|
+
// asked for separate agents in parallel and the batch is a set of independent
|
|
278
|
+
// implementation deliverables (NOT role-fragmentation — that branch is handled
|
|
279
|
+
// below), do NOT collapse: honour the request and let the deliverables fan out
|
|
280
|
+
// (each keeps its own reviewMode). This prevents the unsatisfiable-constraint
|
|
281
|
+
// billing loop at the source; the collapse paths below still carry a
|
|
282
|
+
// fanoutCollapse marker as defense-in-depth for the collapses that do happen.
|
|
283
|
+
const explicitParallel = userRequestsParallelFanout(normalizeTaskText(input.authoritativeTask) ?? normalizeTaskText(input.task));
|
|
284
|
+
if (explicitParallel) {
|
|
285
|
+
return {
|
|
286
|
+
kind: 'independent',
|
|
287
|
+
reason: `explicit parallel fan-out requested for ${implementationTaskIndexes.length} independent deliverables; honoring the request instead of collapsing into one chain`,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
241
290
|
const authoritativeTask = normalizeTaskText(input.authoritativeTask)
|
|
242
291
|
?? normalizeTaskText(input.task)
|
|
243
292
|
?? `Complete and integrate ${implementationTaskIndexes.length} reviewed deliverables.`;
|
|
@@ -280,6 +329,10 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
280
329
|
dangerously_disable_wrfc: false,
|
|
281
330
|
cohort: input.cohort,
|
|
282
331
|
wrfcSubtasks: implementationTaskIndexes.map((index) => normalizeCompoundSubtask(tasks[index], authoritativeTask)),
|
|
332
|
+
fanoutCollapse: {
|
|
333
|
+
requestedAgentCount: implementationTaskIndexes.length,
|
|
334
|
+
requestedShape: `${implementationTaskIndexes.length} separate implementation agents`,
|
|
335
|
+
},
|
|
283
336
|
};
|
|
284
337
|
return {
|
|
285
338
|
kind: 'collapse-to-wrfc',
|
|
@@ -344,6 +397,13 @@ export function evaluateWrfcBatchPolicy(input) {
|
|
|
344
397
|
parentNodeId: ownerTask.parentNodeId ?? input.parentNodeId,
|
|
345
398
|
dangerously_disable_wrfc: false,
|
|
346
399
|
cohort: input.cohort,
|
|
400
|
+
// A role-fragmentation collapse never honours "separate reviewer/tester roots"
|
|
401
|
+
// (those are lifecycle phases, not what the user asked for). But if the user
|
|
402
|
+
// ALSO asked for a parallel fan-out, record it so any parallelism/spawn-count
|
|
403
|
+
// constraint the collapse invalidated cannot fail the review.
|
|
404
|
+
...(userRequestsParallelFanout(normalizeTaskText(input.authoritativeTask) ?? normalizeTaskText(input.task))
|
|
405
|
+
? { fanoutCollapse: { requestedAgentCount: tasks.length, requestedShape: `${tasks.length} separate agents` } }
|
|
406
|
+
: {}),
|
|
347
407
|
};
|
|
348
408
|
return {
|
|
349
409
|
kind: 'collapse-to-wrfc',
|
|
@@ -18,5 +18,15 @@ export declare function isRetryableExecResult(result: ExecCommandResult, allowed
|
|
|
18
18
|
export declare function createExecTool(processManager: ProcessManager, options?: {
|
|
19
19
|
readonly featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null | undefined;
|
|
20
20
|
readonly overflowHandler?: OverflowHandler | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Default working directory used when a call omits the top-level
|
|
23
|
+
* working_dir (and no single command supplies one to promote). Callers
|
|
24
|
+
* register this tool with the session/project working directory they
|
|
25
|
+
* already have in hand (see tools/index.ts registerAllTools) so the
|
|
26
|
+
* parameter stays genuinely optional for the model instead of a
|
|
27
|
+
* mandatory-in-practice field that fails a call after the user has
|
|
28
|
+
* already approved it.
|
|
29
|
+
*/
|
|
30
|
+
readonly defaultWorkingDirectory?: string | undefined;
|
|
21
31
|
}): Tool;
|
|
22
32
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAqB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAA+B,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAqB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAA+B,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAykB/E;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAC3D,OAAO,CA8CT;AAsJD,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvD;;;;;;;;OAQG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClD,GACL,IAAI,CA8FN"}
|
|
@@ -30,11 +30,28 @@ function decodeCmd(cmdInput) {
|
|
|
30
30
|
return cmdInput.cmd;
|
|
31
31
|
throw new Error('Each command must have either cmd or cmd_base64');
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the effective working directory for an exec call.
|
|
35
|
+
*
|
|
36
|
+
* An explicit `working_dir` on the input always wins. Otherwise falls back to
|
|
37
|
+
* `defaultWorkingDirectory` — the session/tool-context working directory,
|
|
38
|
+
* threaded in by the caller (see createExecTool) — so a model that omits
|
|
39
|
+
* working_dir still runs in a sensible place instead of failing outright
|
|
40
|
+
* after the user has already approved the call (the approval card's
|
|
41
|
+
* "Directory" line is sourced from the same session working directory
|
|
42
|
+
* independently of this arg, so it was already showing the truth the whole
|
|
43
|
+
* time — see permissions/prompt.ts on the TUI side). Throws only when
|
|
44
|
+
* neither is available, which should not happen in practice since every
|
|
45
|
+
* tool-registration path supplies a defaultWorkingDirectory.
|
|
46
|
+
*/
|
|
47
|
+
function requireWorkingDirectory(input, defaultWorkingDirectory) {
|
|
48
|
+
const explicit = input.working_dir?.trim();
|
|
49
|
+
if (explicit)
|
|
50
|
+
return explicit;
|
|
51
|
+
if (defaultWorkingDirectory && defaultWorkingDirectory.trim().length > 0) {
|
|
52
|
+
return defaultWorkingDirectory;
|
|
36
53
|
}
|
|
37
|
-
|
|
54
|
+
throw new Error('exec requires an explicit working_dir');
|
|
38
55
|
}
|
|
39
56
|
function normalizeExecInput(input) {
|
|
40
57
|
const hasTopLevelWorkingDir = Boolean(input.working_dir?.trim());
|
|
@@ -107,6 +124,40 @@ function applyExpectations(result, expect, exitCode) {
|
|
|
107
124
|
function buildTimedOutResult(cmdStr, cwd, durationMs, progressFile) {
|
|
108
125
|
return { cmd: cmdStr, exit_code: null, stdout: '', stderr: '', success: false, timed_out: true, duration_ms: durationMs, cwd, ...(progressFile ? { progress_file: progressFile } : {}) };
|
|
109
126
|
}
|
|
127
|
+
/** Wave-4 cooperative cancellation (wo701): mirrors buildTimedOutResult's shape for the AbortSignal path. */
|
|
128
|
+
function buildCancelledResult(cmdStr, cwd, durationMs) {
|
|
129
|
+
return { cmd: cmdStr, exit_code: null, stdout: '', stderr: '', success: false, cancelled: true, duration_ms: durationMs, cwd };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Grace window for draining a killed child's stdout/stderr after a
|
|
133
|
+
* timeout/abort stop before returning regardless. Kept well under the
|
|
134
|
+
* cancellation-latency budget the cooperative-cancellation tests assert
|
|
135
|
+
* (< 5s).
|
|
136
|
+
*/
|
|
137
|
+
const POST_STOP_DRAIN_GRACE_MS = 500;
|
|
138
|
+
/**
|
|
139
|
+
* Wave-4 cooperative cancellation (wo701): after a timeout/abort kill the
|
|
140
|
+
* child has already been SIGKILL'd, but a grandchild that inherited the
|
|
141
|
+
* stdout/stderr pipe can hold it open, so reading those streams to EOF may
|
|
142
|
+
* never settle. Awaiting the full IO promise unbounded here could therefore
|
|
143
|
+
* block until the grandchild's own duration elapses (observed as a hang under
|
|
144
|
+
* loaded CI). A cancelled/timed-out result never depends on fully-drained
|
|
145
|
+
* content, so bound the wait to a short grace window and return regardless.
|
|
146
|
+
* The still-pending IO promise is defused so it can never surface as an
|
|
147
|
+
* unhandled rejection; the grace timer is unref'd so it cannot keep the event
|
|
148
|
+
* loop (or a test runner) alive.
|
|
149
|
+
*/
|
|
150
|
+
async function drainAfterStop(io, graceMs) {
|
|
151
|
+
const settled = io.then(() => undefined, () => undefined);
|
|
152
|
+
let timer;
|
|
153
|
+
const grace = new Promise((resolve) => {
|
|
154
|
+
timer = setTimeout(resolve, graceMs);
|
|
155
|
+
timer.unref?.();
|
|
156
|
+
});
|
|
157
|
+
await Promise.race([settled, grace]);
|
|
158
|
+
if (timer)
|
|
159
|
+
clearTimeout(timer);
|
|
160
|
+
}
|
|
110
161
|
function getProgressDirectory(workingDirectory) {
|
|
111
162
|
return join(workingDirectory, ...OVERFLOW_SUBDIR);
|
|
112
163
|
}
|
|
@@ -144,7 +195,7 @@ async function spawnBackground(processManager, cmd, cwd, env) {
|
|
|
144
195
|
function handleBgSpecialCommand(processManager, cmd) {
|
|
145
196
|
return processManager.handleCommand(cmd);
|
|
146
197
|
}
|
|
147
|
-
async function runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout) {
|
|
198
|
+
async function runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal) {
|
|
148
199
|
const guardResult = await guardExecCommand(cmdStr, DEFAULT_ALLOWED_CLASSES, featureFlags);
|
|
149
200
|
if (!guardResult.allowed) {
|
|
150
201
|
const denial = formatDenialResponse(guardResult, cmdStr);
|
|
@@ -163,18 +214,25 @@ async function runCommand(processManager, overflowHandler, featureFlags, cmdStr,
|
|
|
163
214
|
const timeoutMs = cmdInput.timeout_ms ?? globalTimeout;
|
|
164
215
|
const mergedEnv = { ...buildCleanEnv(), ...cmdInput.env };
|
|
165
216
|
const startTime = Date.now();
|
|
217
|
+
// Wave-4 cooperative cancellation (wo701) is wired for the foreground and
|
|
218
|
+
// progress-streamed paths (the common cases — progress auto-engages once
|
|
219
|
+
// timeout_ms exceeds PROGRESS_AUTO_THRESHOLD_MS, which the 120s default
|
|
220
|
+
// timeout always does). `until`-pattern commands are explicitly deferred
|
|
221
|
+
// (see the WO report) — the timeout kill-timer they already have still
|
|
222
|
+
// applies, just not an external AbortSignal.
|
|
166
223
|
if (cmdInput.until) {
|
|
167
224
|
return runUntil(processManager, overflowHandler, cmdStr, cmdInput, cwd, mergedEnv, timeoutMs, startTime);
|
|
168
225
|
}
|
|
169
226
|
const useProgress = cmdInput.progress === true || timeoutMs > PROGRESS_AUTO_THRESHOLD_MS;
|
|
170
227
|
if (useProgress) {
|
|
171
|
-
return runCommandWithProgress(processManager, overflowHandler, cmdStr, cmdInput, workingDirectory, cwd, mergedEnv, timeoutMs, startTime);
|
|
228
|
+
return runCommandWithProgress(processManager, overflowHandler, cmdStr, cmdInput, workingDirectory, cwd, mergedEnv, timeoutMs, startTime, signal);
|
|
172
229
|
}
|
|
173
230
|
const proc = Bun.spawn(['/bin/sh', '-c', cmdStr], { ...(cwd !== undefined ? { cwd } : {}), env: mergedEnv, stdout: 'pipe', stderr: 'pipe' });
|
|
174
231
|
let timedOut = false;
|
|
232
|
+
let cancelled = false;
|
|
175
233
|
let killTimer;
|
|
176
|
-
let
|
|
177
|
-
const
|
|
234
|
+
let stopResolve;
|
|
235
|
+
const stopSentinel = new Promise((res) => { stopResolve = res; });
|
|
178
236
|
killTimer = setTimeout(async () => {
|
|
179
237
|
timedOut = true;
|
|
180
238
|
try {
|
|
@@ -186,9 +244,31 @@ async function runCommand(processManager, overflowHandler, featureFlags, cmdStr,
|
|
|
186
244
|
// The process may have already exited before kill.
|
|
187
245
|
logger.debug('[ExecRuntime] kill on timeout failed (process may have exited)', { error: String(err) });
|
|
188
246
|
}
|
|
189
|
-
|
|
247
|
+
stopResolve();
|
|
190
248
|
}, timeoutMs);
|
|
191
249
|
killTimer.unref?.();
|
|
250
|
+
const onAbort = () => {
|
|
251
|
+
if (timedOut || cancelled)
|
|
252
|
+
return;
|
|
253
|
+
cancelled = true;
|
|
254
|
+
void (async () => {
|
|
255
|
+
try {
|
|
256
|
+
proc.kill('SIGTERM');
|
|
257
|
+
await sleep(200);
|
|
258
|
+
proc.kill('SIGKILL');
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
logger.debug('[ExecRuntime] kill on cancellation failed (process may have exited)', { error: String(err) });
|
|
262
|
+
}
|
|
263
|
+
stopResolve();
|
|
264
|
+
})();
|
|
265
|
+
};
|
|
266
|
+
if (signal) {
|
|
267
|
+
if (signal.aborted)
|
|
268
|
+
onAbort();
|
|
269
|
+
else
|
|
270
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
271
|
+
}
|
|
192
272
|
try {
|
|
193
273
|
const procPromise = Promise.all([
|
|
194
274
|
new Response(proc.stdout).text(),
|
|
@@ -198,20 +278,18 @@ async function runCommand(processManager, overflowHandler, featureFlags, cmdStr,
|
|
|
198
278
|
let procResult;
|
|
199
279
|
await Promise.race([
|
|
200
280
|
procPromise.then((r) => { procResult = r; }),
|
|
201
|
-
|
|
281
|
+
stopSentinel,
|
|
202
282
|
]);
|
|
203
283
|
clearTimeout(killTimer);
|
|
204
|
-
if (
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
return buildTimedOutResult(cmdStr, cwd, Date.now() - startTime);
|
|
284
|
+
if (signal)
|
|
285
|
+
signal.removeEventListener('abort', onAbort);
|
|
286
|
+
if (timedOut || cancelled) {
|
|
287
|
+
// Bounded drain: the child is already killed; never block past a short
|
|
288
|
+
// grace window on streams an orphaned grandchild may keep open.
|
|
289
|
+
await drainAfterStop(procPromise, POST_STOP_DRAIN_GRACE_MS);
|
|
290
|
+
return timedOut
|
|
291
|
+
? buildTimedOutResult(cmdStr, cwd, Date.now() - startTime)
|
|
292
|
+
: buildCancelledResult(cmdStr, cwd, Date.now() - startTime);
|
|
215
293
|
}
|
|
216
294
|
const [stdoutRaw, stderrRaw, exitCode] = procResult;
|
|
217
295
|
const stdoutResult = truncate(overflowHandler, stdoutRaw, 'stdout');
|
|
@@ -233,16 +311,19 @@ async function runCommand(processManager, overflowHandler, featureFlags, cmdStr,
|
|
|
233
311
|
}
|
|
234
312
|
catch (err) {
|
|
235
313
|
clearTimeout(killTimer);
|
|
314
|
+
if (signal)
|
|
315
|
+
signal.removeEventListener('abort', onAbort);
|
|
236
316
|
throw err;
|
|
237
317
|
}
|
|
238
318
|
}
|
|
239
|
-
async function runCommandWithProgress(_processManager, overflowHandler, cmdStr, cmdInput, workingDirectory, cwd, mergedEnv, timeoutMs, startTime) {
|
|
319
|
+
async function runCommandWithProgress(_processManager, overflowHandler, cmdStr, cmdInput, workingDirectory, cwd, mergedEnv, timeoutMs, startTime, signal) {
|
|
240
320
|
const progressFile = initProgressFile(cmdStr, workingDirectory);
|
|
241
321
|
const proc = Bun.spawn(['/bin/sh', '-c', cmdStr], { ...(cwd !== undefined ? { cwd } : {}), env: mergedEnv, stdout: 'pipe', stderr: 'pipe' });
|
|
242
322
|
let timedOut = false;
|
|
323
|
+
let cancelled = false;
|
|
243
324
|
let killTimer;
|
|
244
|
-
let
|
|
245
|
-
const
|
|
325
|
+
let stopResolve;
|
|
326
|
+
const stopSentinel = new Promise((res) => { stopResolve = res; });
|
|
246
327
|
killTimer = setTimeout(async () => {
|
|
247
328
|
timedOut = true;
|
|
248
329
|
try {
|
|
@@ -254,9 +335,32 @@ async function runCommandWithProgress(_processManager, overflowHandler, cmdStr,
|
|
|
254
335
|
logger.debug('[ExecRuntime] kill on streamed timeout failed (process may have exited)', { error: String(err) });
|
|
255
336
|
}
|
|
256
337
|
progressFile.append('# Timed out\n');
|
|
257
|
-
|
|
338
|
+
stopResolve();
|
|
258
339
|
}, timeoutMs);
|
|
259
340
|
killTimer.unref?.();
|
|
341
|
+
const onAbort = () => {
|
|
342
|
+
if (timedOut || cancelled)
|
|
343
|
+
return;
|
|
344
|
+
cancelled = true;
|
|
345
|
+
void (async () => {
|
|
346
|
+
try {
|
|
347
|
+
proc.kill('SIGTERM');
|
|
348
|
+
await sleep(200);
|
|
349
|
+
proc.kill('SIGKILL');
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
logger.debug('[ExecRuntime] kill on cancellation failed (process may have exited)', { error: String(err) });
|
|
353
|
+
}
|
|
354
|
+
progressFile.append('# Cancelled\n');
|
|
355
|
+
stopResolve();
|
|
356
|
+
})();
|
|
357
|
+
};
|
|
358
|
+
if (signal) {
|
|
359
|
+
if (signal.aborted)
|
|
360
|
+
onAbort();
|
|
361
|
+
else
|
|
362
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
363
|
+
}
|
|
260
364
|
let stdoutBuf = '';
|
|
261
365
|
let stderrBuf = '';
|
|
262
366
|
const warnings = [];
|
|
@@ -304,19 +408,18 @@ async function runCommandWithProgress(_processManager, overflowHandler, cmdStr,
|
|
|
304
408
|
}
|
|
305
409
|
};
|
|
306
410
|
const ioPromise = Promise.all([readStdout(), readStderr(), proc.exited]);
|
|
307
|
-
await Promise.race([ioPromise,
|
|
411
|
+
await Promise.race([ioPromise, stopSentinel]);
|
|
308
412
|
clearTimeout(killTimer);
|
|
309
|
-
if (
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
return { ...buildTimedOutResult(cmdStr, cwd, Date.now() - startTime, progressFile.path), stdout: stdoutBuf, stderr: stderrBuf };
|
|
413
|
+
if (signal)
|
|
414
|
+
signal.removeEventListener('abort', onAbort);
|
|
415
|
+
if (timedOut || cancelled) {
|
|
416
|
+
// Bounded drain: the child is already killed; never block past a short
|
|
417
|
+
// grace window on streams an orphaned grandchild may keep open. stdoutBuf/
|
|
418
|
+
// stderrBuf already hold whatever the background readers captured so far.
|
|
419
|
+
await drainAfterStop(ioPromise, POST_STOP_DRAIN_GRACE_MS);
|
|
420
|
+
return timedOut
|
|
421
|
+
? { ...buildTimedOutResult(cmdStr, cwd, Date.now() - startTime, progressFile.path), stdout: stdoutBuf, stderr: stderrBuf }
|
|
422
|
+
: { ...buildCancelledResult(cmdStr, cwd, Date.now() - startTime), stdout: stdoutBuf, stderr: stderrBuf, progress_file: progressFile.path };
|
|
320
423
|
}
|
|
321
424
|
const ioResult = await ioPromise.catch((error) => {
|
|
322
425
|
logger.warn('exec progress command IO collection failed', {
|
|
@@ -440,6 +543,10 @@ export function isRetryableExecResult(result, allowed) {
|
|
|
440
543
|
// Timed-out commands are never auto-retried — callers must decide
|
|
441
544
|
if (result.timed_out)
|
|
442
545
|
return false;
|
|
546
|
+
// Cancelled commands (Wave 4, wo701) must never be retried — retrying
|
|
547
|
+
// after an operator/engine kill would defeat the cancellation entirely.
|
|
548
|
+
if (result.cancelled)
|
|
549
|
+
return false;
|
|
443
550
|
const combined = `${result.stdout}\n${result.stderr}`;
|
|
444
551
|
// Terminal errors — always skip retry
|
|
445
552
|
const TERMINAL_PATTERNS = [
|
|
@@ -476,9 +583,9 @@ export function isRetryableExecResult(result, allowed) {
|
|
|
476
583
|
}
|
|
477
584
|
return false;
|
|
478
585
|
}
|
|
479
|
-
async function runWithRetry(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout) {
|
|
586
|
+
async function runWithRetry(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal) {
|
|
480
587
|
if (!cmdInput.retry) {
|
|
481
|
-
return runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout);
|
|
588
|
+
return runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal);
|
|
482
589
|
}
|
|
483
590
|
const maxRetries = Math.min(cmdInput.retry.max ?? 3, 10);
|
|
484
591
|
const delayMs = cmdInput.retry.delay_ms ?? 1000;
|
|
@@ -487,7 +594,7 @@ async function runWithRetry(processManager, overflowHandler, featureFlags, cmdSt
|
|
|
487
594
|
const retryOn = cmdInput.retry.on;
|
|
488
595
|
let lastResult;
|
|
489
596
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
490
|
-
lastResult = await runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout);
|
|
597
|
+
lastResult = await runCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal);
|
|
491
598
|
if (lastResult.success) {
|
|
492
599
|
return { ...lastResult, retries: attempt };
|
|
493
600
|
}
|
|
@@ -504,18 +611,21 @@ async function runWithRetry(processManager, overflowHandler, featureFlags, cmdSt
|
|
|
504
611
|
}
|
|
505
612
|
return { ...lastResult, retries: maxRetries };
|
|
506
613
|
}
|
|
507
|
-
async function executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout) {
|
|
614
|
+
async function executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal) {
|
|
508
615
|
const bgSpecial = handleBgSpecialCommand(processManager, cmdStr);
|
|
509
616
|
if (bgSpecial)
|
|
510
617
|
return bgSpecial;
|
|
511
618
|
if (cmdInput.background) {
|
|
619
|
+
// Background processes intentionally outlive this tool call — cancelling
|
|
620
|
+
// the caller's item/agent must not kill a process the user asked to
|
|
621
|
+
// detach, so `signal` is deliberately not threaded here.
|
|
512
622
|
return spawnBackground(processManager, cmdStr, resolveCwd(cmdInput.cwd, workingDirectory), cmdInput.env);
|
|
513
623
|
}
|
|
514
|
-
return runWithRetry(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout);
|
|
624
|
+
return runWithRetry(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal);
|
|
515
625
|
}
|
|
516
|
-
async function executeResolvedCommands(processManager, overflowHandler, featureFlags, resolvedCmds, parallel, workingDirectory, globalTimeout, failFast) {
|
|
626
|
+
async function executeResolvedCommands(processManager, overflowHandler, featureFlags, resolvedCmds, parallel, workingDirectory, globalTimeout, failFast, signal) {
|
|
517
627
|
if (parallel) {
|
|
518
|
-
return mapWithConcurrency(resolvedCmds, MAX_PARALLEL_EXEC_COMMANDS, ({ cmdStr, cmdInput }) => executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout));
|
|
628
|
+
return mapWithConcurrency(resolvedCmds, MAX_PARALLEL_EXEC_COMMANDS, ({ cmdStr, cmdInput }) => executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal));
|
|
519
629
|
}
|
|
520
630
|
const results = [];
|
|
521
631
|
let stopped = false;
|
|
@@ -524,7 +634,7 @@ async function executeResolvedCommands(processManager, overflowHandler, featureF
|
|
|
524
634
|
results.push({ cmd: cmdStr, exit_code: null, stdout: '', stderr: '', success: false, skipped: true });
|
|
525
635
|
continue;
|
|
526
636
|
}
|
|
527
|
-
const result = await executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout);
|
|
637
|
+
const result = await executeResolvedCommand(processManager, overflowHandler, featureFlags, cmdStr, cmdInput, workingDirectory, globalTimeout, signal);
|
|
528
638
|
results.push(result);
|
|
529
639
|
if (failFast && !result.success) {
|
|
530
640
|
stopped = true;
|
|
@@ -550,6 +660,7 @@ function formatResult(result, verbosity) {
|
|
|
550
660
|
stderr: firstStderr,
|
|
551
661
|
...(result.expectation_error && { expectation_error: result.expectation_error }),
|
|
552
662
|
...(result.timed_out && { timed_out: true }),
|
|
663
|
+
...(result.cancelled && { cancelled: true }),
|
|
553
664
|
...(result.process_id && { process_id: result.process_id, pid: result.pid }),
|
|
554
665
|
...(result.progress_file && { progress_file: result.progress_file }),
|
|
555
666
|
...(result.warnings && { warnings: result.warnings }),
|
|
@@ -567,6 +678,7 @@ function formatResult(result, verbosity) {
|
|
|
567
678
|
stderr: result.stderr,
|
|
568
679
|
...(result.expectation_error && { expectation_error: result.expectation_error }),
|
|
569
680
|
...(result.timed_out && { timed_out: true }),
|
|
681
|
+
...(result.cancelled && { cancelled: true }),
|
|
570
682
|
...(result.process_id && { process_id: result.process_id, pid: result.pid }),
|
|
571
683
|
...(result.stdout_truncated && { stdout_truncated: true }),
|
|
572
684
|
...(result.stderr_truncated && { stderr_truncated: true }),
|
|
@@ -593,7 +705,7 @@ export function createExecTool(processManager, options = {}) {
|
|
|
593
705
|
supportsProgress: true,
|
|
594
706
|
supportsStreamingOutput: true,
|
|
595
707
|
},
|
|
596
|
-
async execute(args) {
|
|
708
|
+
async execute(args, opts) {
|
|
597
709
|
try {
|
|
598
710
|
if (!Array.isArray(args['commands']) || args['commands'].length === 0) {
|
|
599
711
|
return { success: false, error: 'commands must be a non-empty array' };
|
|
@@ -602,7 +714,7 @@ export function createExecTool(processManager, options = {}) {
|
|
|
602
714
|
return { success: false, error: `Too many commands: maximum ${MAX_EXEC_COMMANDS} per exec call` };
|
|
603
715
|
}
|
|
604
716
|
const input = normalizeExecInput(args);
|
|
605
|
-
const workingDirectory = requireWorkingDirectory(input);
|
|
717
|
+
const workingDirectory = requireWorkingDirectory(input, options.defaultWorkingDirectory);
|
|
606
718
|
const verbosity = input.verbosity ?? 'standard';
|
|
607
719
|
const globalTimeout = input.timeout_ms ?? DEFAULT_TIMEOUT_MS;
|
|
608
720
|
const failFast = input.fail_fast === true || input.stop_on_error === true;
|
|
@@ -627,7 +739,7 @@ export function createExecTool(processManager, options = {}) {
|
|
|
627
739
|
}
|
|
628
740
|
resolvedCmds.push({ cmdStr, cmdInput });
|
|
629
741
|
}
|
|
630
|
-
const results = await executeResolvedCommands(processManager, overflowHandler, featureFlags, resolvedCmds, input.parallel === true, workingDirectory, globalTimeout, failFast);
|
|
742
|
+
const results = await executeResolvedCommands(processManager, overflowHandler, featureFlags, resolvedCmds, input.parallel === true, workingDirectory, globalTimeout, failFast, opts?.signal);
|
|
631
743
|
const formatted = results.map((r) => formatResult(r, verbosity));
|
|
632
744
|
const allSuccess = results.every((r) => r.success);
|
|
633
745
|
const responseData = formatted.length === 1 ? { ...formatted[0] } : { commands: formatted, total: formatted.length };
|
|
@@ -641,7 +753,7 @@ export function createExecTool(processManager, options = {}) {
|
|
|
641
753
|
const failed = results.filter((r) => !r.success);
|
|
642
754
|
const errorSummary = failed.length > 0
|
|
643
755
|
? `${failed.length} of ${results.length} command(s) failed: `
|
|
644
|
-
+ failed.map((r) => `'${r.cmd}'${r.skipped ? ' (skipped)' : ` exit ${r.exit_code}${r.timed_out ? ' (timed out)' : ''}`}`).join('; ')
|
|
756
|
+
+ failed.map((r) => `'${r.cmd}'${r.skipped ? ' (skipped)' : ` exit ${r.exit_code}${r.timed_out ? ' (timed out)' : r.cancelled ? ' (cancelled)' : ''}`}`).join('; ')
|
|
645
757
|
: undefined;
|
|
646
758
|
return {
|
|
647
759
|
success: allSuccess,
|
|
@@ -133,7 +133,7 @@ export declare const EXEC_TOOL_SCHEMA: {
|
|
|
133
133
|
};
|
|
134
134
|
readonly working_dir: {
|
|
135
135
|
readonly type: "string";
|
|
136
|
-
readonly description:
|
|
136
|
+
readonly description: string;
|
|
137
137
|
};
|
|
138
138
|
readonly timeout_ms: {
|
|
139
139
|
readonly type: "integer";
|
|
@@ -269,6 +269,8 @@ export interface ExecCommandResult {
|
|
|
269
269
|
expectation_error?: string | undefined;
|
|
270
270
|
/** Set when command exceeded timeout. */
|
|
271
271
|
timed_out?: boolean | undefined;
|
|
272
|
+
/** Set when an external AbortSignal cancelled the command (Wave 4, wo701 — orchestration engine cancellation). Never combined with timed_out. */
|
|
273
|
+
cancelled?: boolean | undefined;
|
|
272
274
|
/** Set when command ran in background. */
|
|
273
275
|
process_id?: string | undefined;
|
|
274
276
|
pid?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoNnB,CAAC;AAIX,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;IAC9C,0EAA0E;IAC1E,EAAE,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAID,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,iJAAiJ;IACjJ,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,uBAAuB;IACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACjC;AAGD,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -131,7 +131,8 @@ export const EXEC_TOOL_SCHEMA = {
|
|
|
131
131
|
},
|
|
132
132
|
working_dir: {
|
|
133
133
|
type: 'string',
|
|
134
|
-
description: 'Global working directory applied to all commands unless overridden per-command.'
|
|
134
|
+
description: 'Global working directory applied to all commands unless overridden per-command.'
|
|
135
|
+
+ ' Optional — defaults to the session\'s working directory when omitted.',
|
|
135
136
|
},
|
|
136
137
|
timeout_ms: {
|
|
137
138
|
type: 'integer',
|
|
@@ -6,6 +6,13 @@ import type { FeatureFlagManager } from '../../runtime/feature-flags/index.js';
|
|
|
6
6
|
export interface FetchRuntimeDeps {
|
|
7
7
|
readonly serviceRegistry?: Pick<ServiceRegistry, 'resolveAuth'> | null | undefined;
|
|
8
8
|
readonly featureFlags?: Pick<FeatureFlagManager, 'isEnabled'> | null | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Wave-4 cooperative cancellation (wo701): an externally-supplied signal,
|
|
11
|
+
* combined with each request's own per-URL timeout signal via
|
|
12
|
+
* `AbortSignal.any`. Optional and additive — omitted, behavior is
|
|
13
|
+
* unchanged from before this field existed.
|
|
14
|
+
*/
|
|
15
|
+
readonly signal?: AbortSignal | undefined;
|
|
9
16
|
}
|
|
10
17
|
interface CacheEntry {
|
|
11
18
|
data: FetchUrlResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/fetch/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAsF,MAAM,aAAa,CAAC;AAClI,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAM/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACnF,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/fetch/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAsF,MAAM,aAAa,CAAC;AAClI,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAUxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAM/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACnF,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACjF;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,eAAe,CAAK;IAE5B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAOtE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAiBxC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;CAkFpF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAE5G;AA0eD,wBAAgB,eAAe,CAC7B,IAAI,GAAE,gBAAqB,EAC3B,OAAO,sBAA4B,GAClC,IAAI,CAqCN"}
|
|
@@ -165,8 +165,9 @@ function encodeFormBodyData(bodyData) {
|
|
|
165
165
|
}
|
|
166
166
|
return params.toString();
|
|
167
167
|
}
|
|
168
|
-
async function fetchOneRaw(urlInput, headers, method, body, effectiveUrl, trustTierConfig, sanitizationEnabled) {
|
|
169
|
-
const { signal, dispose } = createTimeoutController(urlInput.timeout_ms ?? DEFAULT_TIMEOUT_MS);
|
|
168
|
+
async function fetchOneRaw(urlInput, headers, method, body, effectiveUrl, trustTierConfig, sanitizationEnabled, externalSignal) {
|
|
169
|
+
const { signal: timeoutSignal, dispose } = createTimeoutController(urlInput.timeout_ms ?? DEFAULT_TIMEOUT_MS);
|
|
170
|
+
const signal = externalSignal ? AbortSignal.any([timeoutSignal, externalSignal]) : timeoutSignal;
|
|
170
171
|
try {
|
|
171
172
|
return sanitizationEnabled
|
|
172
173
|
? await fetchWithValidatedRedirects({
|
|
@@ -353,14 +354,14 @@ async function fetchOne(urlInput, opts, runtime) {
|
|
|
353
354
|
const { headers, body: requestBody } = await prepareFetchRequest(urlInput, deps);
|
|
354
355
|
const startTime = performance.now();
|
|
355
356
|
try {
|
|
356
|
-
let response = await fetchOneRaw(urlInput, headers, method, requestBody, effectiveUrl, trustTierConfig, sanitizationEnabled);
|
|
357
|
+
let response = await fetchOneRaw(urlInput, headers, method, requestBody, effectiveUrl, trustTierConfig, sanitizationEnabled, deps.signal);
|
|
357
358
|
const retryOnAuth = urlInput.retry_on_auth ?? (urlInput.service !== undefined);
|
|
358
359
|
if (response.status === 401 && retryOnAuth && urlInput.service && !(requestBody instanceof FormData)) {
|
|
359
360
|
const refreshedHeaders = await deps.serviceRegistry?.resolveAuth(urlInput.service);
|
|
360
361
|
if (refreshedHeaders) {
|
|
361
362
|
const retryHeaders = { ...headers };
|
|
362
363
|
Object.assign(retryHeaders, refreshedHeaders);
|
|
363
|
-
response = await fetchOneRaw(urlInput, retryHeaders, method, requestBody, effectiveUrl, trustTierConfig, sanitizationEnabled);
|
|
364
|
+
response = await fetchOneRaw(urlInput, retryHeaders, method, requestBody, effectiveUrl, trustTierConfig, sanitizationEnabled, deps.signal);
|
|
364
365
|
}
|
|
365
366
|
}
|
|
366
367
|
const durationMs = Math.round(performance.now() - startTime);
|
|
@@ -503,13 +504,14 @@ export function createFetchTool(deps = {}, runtime = new FetchRuntimeService())
|
|
|
503
504
|
supportsProgress: true,
|
|
504
505
|
supportsStreamingOutput: true,
|
|
505
506
|
},
|
|
506
|
-
async execute(args) {
|
|
507
|
+
async execute(args, opts) {
|
|
507
508
|
if (!Array.isArray(args.urls) || args.urls.length === 0) {
|
|
508
509
|
return { success: false, error: 'Missing or empty "urls" array' };
|
|
509
510
|
}
|
|
510
511
|
try {
|
|
511
512
|
const input = { ...args, urls: args.urls };
|
|
512
|
-
const
|
|
513
|
+
const effectiveDeps = opts?.signal ? { ...deps, signal: opts.signal } : deps;
|
|
514
|
+
const output = await runtime.execute(input, effectiveDeps);
|
|
513
515
|
return { success: true, output: JSON.stringify(output) };
|
|
514
516
|
}
|
|
515
517
|
catch (err) {
|