@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
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-driven goal decomposition for the planner.
|
|
3
|
+
*
|
|
4
|
+
* This module is the model-decomposition counterpart to the deterministic
|
|
5
|
+
* heuristic path in `plan-proposal.ts`. Given a goal, it drives a bounded,
|
|
6
|
+
* READ-ONLY planning agent (through the injected `DecompositionRunner` seam —
|
|
7
|
+
* this module never imports the agent machinery, so it stays in `core` and is
|
|
8
|
+
* fully unit-testable with a stubbed runner), parses and STRICTLY validates
|
|
9
|
+
* the agent's structured output, and produces a `PlanProposal` tagged with
|
|
10
|
+
* honest provenance.
|
|
11
|
+
*
|
|
12
|
+
* Failure honesty is the whole point: a spawn error, a timeout/cancellation,
|
|
13
|
+
* or output that is still malformed after ONE repair attempt all fall back to
|
|
14
|
+
* the existing heuristic `singleItemProposal` path, tagged
|
|
15
|
+
* `decomposedBy: 'heuristic'` with a `fallbackReason`. The heuristic path is
|
|
16
|
+
* reused verbatim — `singleItemProposal`/`assemblePlanProposal` are never
|
|
17
|
+
* modified — so their existing byte-for-byte test expectations are preserved;
|
|
18
|
+
* provenance is layered on afterward.
|
|
19
|
+
*
|
|
20
|
+
* The module NEVER performs surgery on agent output to force it to validate:
|
|
21
|
+
* a proposal is accepted only when `assemblePlanProposal` reports ZERO issues
|
|
22
|
+
* (no dangling dependency, no dependency cycle, no unresolved phase). Anything
|
|
23
|
+
* short of that is one repair attempt and then an honest fallback — never a
|
|
24
|
+
* silent edit that drops or rewrites the agent's work items.
|
|
25
|
+
*/
|
|
26
|
+
import { AdaptivePlanner } from './adaptive-planner.js';
|
|
27
|
+
import { assemblePlanProposal, singleItemProposal, } from './plan-proposal.js';
|
|
28
|
+
/** Pull the first balanced JSON object out of arbitrary agent text (fenced or not). */
|
|
29
|
+
function extractJsonObject(text) {
|
|
30
|
+
const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
31
|
+
const haystack = fenced?.[1] ?? text;
|
|
32
|
+
const start = haystack.indexOf('{');
|
|
33
|
+
if (start === -1)
|
|
34
|
+
return null;
|
|
35
|
+
let depth = 0;
|
|
36
|
+
let inString = false;
|
|
37
|
+
let escaped = false;
|
|
38
|
+
for (let i = start; i < haystack.length; i++) {
|
|
39
|
+
const ch = haystack[i];
|
|
40
|
+
if (inString) {
|
|
41
|
+
if (escaped) {
|
|
42
|
+
escaped = false;
|
|
43
|
+
}
|
|
44
|
+
else if (ch === '\\') {
|
|
45
|
+
escaped = true;
|
|
46
|
+
}
|
|
47
|
+
else if (ch === '"') {
|
|
48
|
+
inString = false;
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (ch === '"') {
|
|
53
|
+
inString = true;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (ch === '{')
|
|
57
|
+
depth++;
|
|
58
|
+
else if (ch === '}') {
|
|
59
|
+
depth--;
|
|
60
|
+
if (depth === 0)
|
|
61
|
+
return haystack.slice(start, i + 1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function isNonEmptyString(value) {
|
|
67
|
+
return typeof value === 'string' && value.trim().length > 0;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parse + strictly validate a planning agent's output text into a
|
|
71
|
+
* `RawDecomposition` the assembler can consume. Never throws; every problem is
|
|
72
|
+
* accumulated into `errors` so a single repair prompt can address them all at
|
|
73
|
+
* once. Structural rejects: unparseable JSON, empty/absent items array, empty
|
|
74
|
+
* item title/brief, non-finite ordinal, empty phase title.
|
|
75
|
+
*/
|
|
76
|
+
export function parseDecomposition(text) {
|
|
77
|
+
const errors = [];
|
|
78
|
+
const json = extractJsonObject(text ?? '');
|
|
79
|
+
if (!json) {
|
|
80
|
+
return { ok: false, errors: ['Output did not contain a JSON object.'] };
|
|
81
|
+
}
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = JSON.parse(json);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return { ok: false, errors: [`Output was not valid JSON: ${err.message}`] };
|
|
88
|
+
}
|
|
89
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
90
|
+
return { ok: false, errors: ['Top-level value must be a JSON object.'] };
|
|
91
|
+
}
|
|
92
|
+
const obj = parsed;
|
|
93
|
+
const rawItems = obj.items;
|
|
94
|
+
if (!Array.isArray(rawItems) || rawItems.length === 0) {
|
|
95
|
+
return { ok: false, errors: ['"items" must be a non-empty array.'] };
|
|
96
|
+
}
|
|
97
|
+
// Validate phases (optional).
|
|
98
|
+
const rawPhases = Array.isArray(obj.phases) ? obj.phases : [];
|
|
99
|
+
rawPhases.forEach((p, i) => {
|
|
100
|
+
if (typeof p !== 'object' || p === null || !isNonEmptyString(p.title)) {
|
|
101
|
+
errors.push(`phases[${i}] must have a non-empty "title".`);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
// Validate items.
|
|
105
|
+
const items = [];
|
|
106
|
+
rawItems.forEach((raw, i) => {
|
|
107
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
108
|
+
errors.push(`items[${i}] must be an object.`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const item = raw;
|
|
112
|
+
if (!isNonEmptyString(item.title))
|
|
113
|
+
errors.push(`items[${i}].title must be a non-empty string.`);
|
|
114
|
+
if (!isNonEmptyString(item.brief))
|
|
115
|
+
errors.push(`items[${i}].brief must be a non-empty string.`);
|
|
116
|
+
if (typeof item.ordinal !== 'number' || !Number.isFinite(item.ordinal)) {
|
|
117
|
+
errors.push(`items[${i}].ordinal must be a finite number.`);
|
|
118
|
+
}
|
|
119
|
+
if (item.phase !== undefined && !isNonEmptyString(item.phase)) {
|
|
120
|
+
errors.push(`items[${i}].phase, when present, must be a non-empty string.`);
|
|
121
|
+
}
|
|
122
|
+
if (isNonEmptyString(item.title) && isNonEmptyString(item.brief) && typeof item.ordinal === 'number' && Number.isFinite(item.ordinal)) {
|
|
123
|
+
items.push({
|
|
124
|
+
title: item.title,
|
|
125
|
+
brief: item.brief,
|
|
126
|
+
ordinal: item.ordinal,
|
|
127
|
+
...(isNonEmptyString(item.phase) ? { phase: item.phase } : {}),
|
|
128
|
+
...(Array.isArray(item.dependsOn) ? { dependsOn: item.dependsOn.filter((d) => typeof d === 'string' || typeof d === 'number') } : {}),
|
|
129
|
+
...(isNonEmptyString(item.suggestedArchetype) ? { suggestedArchetype: item.suggestedArchetype } : {}),
|
|
130
|
+
...(Array.isArray(item.likelyFiles) ? { likelyFiles: item.likelyFiles.filter(isNonEmptyString) } : {}),
|
|
131
|
+
...(Array.isArray(item.verification) ? { verification: item.verification.filter(isNonEmptyString) } : {}),
|
|
132
|
+
...(typeof item.canRunConcurrently === 'boolean' ? { canRunConcurrently: item.canRunConcurrently } : {}),
|
|
133
|
+
...(typeof item.needsReview === 'boolean' ? { needsReview: item.needsReview } : {}),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (errors.length > 0) {
|
|
138
|
+
return { ok: false, errors };
|
|
139
|
+
}
|
|
140
|
+
const notes = [];
|
|
141
|
+
if (Array.isArray(obj.notes))
|
|
142
|
+
notes.push(...obj.notes.filter(isNonEmptyString));
|
|
143
|
+
if (Array.isArray(obj.risks))
|
|
144
|
+
notes.push(...obj.risks.filter(isNonEmptyString));
|
|
145
|
+
const output = {
|
|
146
|
+
items,
|
|
147
|
+
...(rawPhases.length > 0 ? { phases: rawPhases } : {}),
|
|
148
|
+
...(Array.isArray(obj.dependencies) ? { dependencies: obj.dependencies } : {}),
|
|
149
|
+
};
|
|
150
|
+
return { ok: true, raw: toRawDecomposition(output), ...(notes.length > 0 ? { notes } : {}), errors: [] };
|
|
151
|
+
}
|
|
152
|
+
const DEFAULT_PHASE_TITLE = 'Execute';
|
|
153
|
+
/**
|
|
154
|
+
* Map a validated `DecompositionAgentOutput` into the `RawDecomposition` shape
|
|
155
|
+
* `assemblePlanProposal` consumes. Items are ordered by `ordinal` (stable on
|
|
156
|
+
* ties). Every referenced phase is materialized so the assembler never has to
|
|
157
|
+
* synthesize an "Unphased" bucket — an unresolved phase from here would be a
|
|
158
|
+
* real bug, not agent sloppiness. Ordinal-based dependency references are
|
|
159
|
+
* resolved to titles so the assembler's title resolver handles them uniformly.
|
|
160
|
+
*/
|
|
161
|
+
export function toRawDecomposition(output) {
|
|
162
|
+
const ordered = [...output.items].sort((a, b) => a.ordinal - b.ordinal);
|
|
163
|
+
const ordinalToTitle = new Map();
|
|
164
|
+
for (const item of ordered) {
|
|
165
|
+
if (!ordinalToTitle.has(item.ordinal))
|
|
166
|
+
ordinalToTitle.set(item.ordinal, item.title);
|
|
167
|
+
}
|
|
168
|
+
const resolveRef = (ref) => {
|
|
169
|
+
if (typeof ref === 'number')
|
|
170
|
+
return ordinalToTitle.get(ref) ?? String(ref);
|
|
171
|
+
const asNum = Number(ref);
|
|
172
|
+
if (ref.trim() !== '' && Number.isFinite(asNum) && ordinalToTitle.has(asNum))
|
|
173
|
+
return ordinalToTitle.get(asNum);
|
|
174
|
+
return ref;
|
|
175
|
+
};
|
|
176
|
+
// Phase set: explicit phases first, then any item phase titles not covered,
|
|
177
|
+
// then the default shared phase if any item lacks one.
|
|
178
|
+
const phaseTitles = [];
|
|
179
|
+
const seenPhase = new Set();
|
|
180
|
+
const addPhase = (title) => {
|
|
181
|
+
const key = title.toLowerCase().trim();
|
|
182
|
+
if (!seenPhase.has(key)) {
|
|
183
|
+
seenPhase.add(key);
|
|
184
|
+
phaseTitles.push(title);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const explicit = new Map();
|
|
188
|
+
for (const p of output.phases ?? []) {
|
|
189
|
+
explicit.set(p.title.toLowerCase().trim(), p);
|
|
190
|
+
addPhase(p.title);
|
|
191
|
+
}
|
|
192
|
+
let needsDefault = false;
|
|
193
|
+
for (const item of ordered) {
|
|
194
|
+
if (item.phase)
|
|
195
|
+
addPhase(item.phase);
|
|
196
|
+
else
|
|
197
|
+
needsDefault = true;
|
|
198
|
+
}
|
|
199
|
+
if (needsDefault)
|
|
200
|
+
addPhase(DEFAULT_PHASE_TITLE);
|
|
201
|
+
const phases = phaseTitles.map((title) => {
|
|
202
|
+
const meta = explicit.get(title.toLowerCase().trim());
|
|
203
|
+
return meta?.description ? { title, description: meta.description } : { title };
|
|
204
|
+
});
|
|
205
|
+
// Accumulate dependencies: inline dependsOn plus explicit edges.
|
|
206
|
+
const depsByTitle = new Map();
|
|
207
|
+
const addDep = (from, to) => {
|
|
208
|
+
const key = from.toLowerCase().trim();
|
|
209
|
+
if (!depsByTitle.has(key))
|
|
210
|
+
depsByTitle.set(key, new Set());
|
|
211
|
+
depsByTitle.get(key).add(to);
|
|
212
|
+
};
|
|
213
|
+
for (const item of ordered) {
|
|
214
|
+
for (const dep of item.dependsOn ?? [])
|
|
215
|
+
addDep(item.title, resolveRef(dep));
|
|
216
|
+
}
|
|
217
|
+
for (const edge of output.dependencies ?? [])
|
|
218
|
+
addDep(resolveRef(edge.from), resolveRef(edge.to));
|
|
219
|
+
const workItems = ordered.map((item) => {
|
|
220
|
+
const deps = depsByTitle.get(item.title.toLowerCase().trim());
|
|
221
|
+
return {
|
|
222
|
+
title: item.title,
|
|
223
|
+
brief: item.brief,
|
|
224
|
+
phase: item.phase ?? DEFAULT_PHASE_TITLE,
|
|
225
|
+
...(deps && deps.size > 0 ? { dependsOn: [...deps] } : {}),
|
|
226
|
+
...(item.suggestedArchetype ? { suggestedArchetype: item.suggestedArchetype } : {}),
|
|
227
|
+
...(item.likelyFiles ? { likelyFiles: item.likelyFiles } : {}),
|
|
228
|
+
...(item.verification ? { verification: item.verification } : {}),
|
|
229
|
+
...(item.canRunConcurrently !== undefined ? { canRunConcurrently: item.canRunConcurrently } : {}),
|
|
230
|
+
...(item.needsReview !== undefined ? { needsReview: item.needsReview } : {}),
|
|
231
|
+
};
|
|
232
|
+
});
|
|
233
|
+
return { phases, workItems };
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
// Planner agent prompt
|
|
237
|
+
// ---------------------------------------------------------------------------
|
|
238
|
+
/**
|
|
239
|
+
* Build the system prompt for the read-only planning agent. It is explicit
|
|
240
|
+
* about the exact JSON contract and about the read-only posture (the agent's
|
|
241
|
+
* tool set already excludes write/edit/exec; this reinforces intent).
|
|
242
|
+
*/
|
|
243
|
+
export function buildPlannerSystemPrompt() {
|
|
244
|
+
return [
|
|
245
|
+
'You are a READ-ONLY planning agent. You may read, search, and analyze the codebase',
|
|
246
|
+
'to understand it, but you MUST NOT modify anything and you have no write/edit/exec tools.',
|
|
247
|
+
'',
|
|
248
|
+
'Decompose the given goal into an ordered set of work items. Respond with a SINGLE JSON',
|
|
249
|
+
'object and NOTHING else (no prose, no markdown outside a single optional ```json fence).',
|
|
250
|
+
'',
|
|
251
|
+
'Schema:',
|
|
252
|
+
'{',
|
|
253
|
+
' "phases": [{ "title": string, "description"?: string }], // optional; shared phase template',
|
|
254
|
+
' "items": [{',
|
|
255
|
+
' "title": string, // required, non-empty, unique',
|
|
256
|
+
' "brief": string, // required, non-empty: what this item does',
|
|
257
|
+
' "ordinal": number, // required: execution order (0-based or 1-based, ascending)',
|
|
258
|
+
' "phase"?: string, // phase title this item belongs to',
|
|
259
|
+
' "dependsOn"?: (string|number)[], // item titles or ordinals this item depends on',
|
|
260
|
+
' "suggestedArchetype"?: "engineer"|"reviewer"|"tester"|"researcher"|"integrator",',
|
|
261
|
+
' "likelyFiles"?: string[],',
|
|
262
|
+
' "verification"?: string[],',
|
|
263
|
+
' "canRunConcurrently"?: boolean,',
|
|
264
|
+
' "needsReview"?: boolean',
|
|
265
|
+
' }],',
|
|
266
|
+
' "dependencies"?: [{ "from": string|number, "to": string|number }], // "from depends on to"',
|
|
267
|
+
' "notes"?: string[],',
|
|
268
|
+
' "risks"?: string[]',
|
|
269
|
+
'}',
|
|
270
|
+
'',
|
|
271
|
+
'Rules: dependencies must reference real items and must be acyclic. Every brief must be',
|
|
272
|
+
'non-empty. Keep the decomposition honest — if the goal is genuinely a single unit of work,',
|
|
273
|
+
'return exactly one item.',
|
|
274
|
+
].join('\n');
|
|
275
|
+
}
|
|
276
|
+
function buildUserPrompt(request, repairErrors) {
|
|
277
|
+
const lines = [`Goal: ${request.goal}`, `Working directory: ${request.workingDir}`];
|
|
278
|
+
if (request.constraints?.capacity !== undefined)
|
|
279
|
+
lines.push(`Concurrency capacity: ${request.constraints.capacity}`);
|
|
280
|
+
if (request.constraints?.budgetUsd !== undefined)
|
|
281
|
+
lines.push(`Budget (USD): ${request.constraints.budgetUsd}`);
|
|
282
|
+
if (request.userContext)
|
|
283
|
+
lines.push('', 'Additional context:', request.userContext);
|
|
284
|
+
if (repairErrors && repairErrors.length > 0) {
|
|
285
|
+
lines.push('', 'Your previous response was rejected for these reasons. Fix ALL of them and respond again', 'with a single corrected JSON object:', ...repairErrors.map((e) => ` - ${e}`));
|
|
286
|
+
}
|
|
287
|
+
return lines.join('\n');
|
|
288
|
+
}
|
|
289
|
+
// ---------------------------------------------------------------------------
|
|
290
|
+
// The service
|
|
291
|
+
// ---------------------------------------------------------------------------
|
|
292
|
+
/**
|
|
293
|
+
* Decompose a goal into a `PlanProposal`, honestly tagged with provenance.
|
|
294
|
+
*
|
|
295
|
+
* Control flow:
|
|
296
|
+
* 1. `config.mode === 'heuristic'` → the configured heuristic path (no agent).
|
|
297
|
+
* 2. The planner's decompose gate declines → honest single-item (no agent).
|
|
298
|
+
* 3. No runner available → heuristic fallback (reason: no runtime).
|
|
299
|
+
* 4. Agent path: run → parse → strict-validate → (assemble; issues===0 ?
|
|
300
|
+
* accept : ONE repair attempt) → accept-or-fallback. Spawn error,
|
|
301
|
+
* cancellation (kill / wall-timeout / token ceiling), or still-invalid
|
|
302
|
+
* output after repair all fall back to the heuristic path with a reason.
|
|
303
|
+
*/
|
|
304
|
+
export async function decomposeGoal(request, planner, inputs, config, runner, deps = {}) {
|
|
305
|
+
const gate = planner.shouldDecompose(inputs);
|
|
306
|
+
const heuristicResult = (outcome) => {
|
|
307
|
+
const base = singleItemProposal(request.goal);
|
|
308
|
+
const fallbackReason = outcome.kind === 'fallback' ? outcome.reason : undefined;
|
|
309
|
+
const usage = outcome.kind === 'fallback' ? outcome.usage : undefined;
|
|
310
|
+
const elapsedMs = outcome.kind === 'fallback' ? outcome.elapsedMs : undefined;
|
|
311
|
+
const proposal = {
|
|
312
|
+
...base,
|
|
313
|
+
decomposedBy: 'heuristic',
|
|
314
|
+
...(fallbackReason ? { fallbackReason } : {}),
|
|
315
|
+
...(usage ? { agentUsage: usage } : {}),
|
|
316
|
+
...(elapsedMs !== undefined ? { elapsedMs } : {}),
|
|
317
|
+
};
|
|
318
|
+
deps.onOutcome?.(outcome);
|
|
319
|
+
return { proposal, gate, issues: [], outcome };
|
|
320
|
+
};
|
|
321
|
+
if (config.mode === 'heuristic') {
|
|
322
|
+
return heuristicResult({ kind: 'heuristic-configured' });
|
|
323
|
+
}
|
|
324
|
+
if (!gate.decompose) {
|
|
325
|
+
return heuristicResult({ kind: 'gate-declined', reasonCode: gate.reasonCode });
|
|
326
|
+
}
|
|
327
|
+
if (!runner) {
|
|
328
|
+
return heuristicResult({ kind: 'fallback', reason: 'no planning agent runtime available' });
|
|
329
|
+
}
|
|
330
|
+
const systemPrompt = buildPlannerSystemPrompt();
|
|
331
|
+
let lastUsage;
|
|
332
|
+
let totalElapsedMs = 0;
|
|
333
|
+
const runOnce = async (attempt, repairErrors) => {
|
|
334
|
+
const result = await runner.run({
|
|
335
|
+
goal: request.goal,
|
|
336
|
+
workingDir: request.workingDir,
|
|
337
|
+
systemPrompt,
|
|
338
|
+
userPrompt: buildUserPrompt(request, repairErrors),
|
|
339
|
+
bounds: config.bounds,
|
|
340
|
+
attempt,
|
|
341
|
+
});
|
|
342
|
+
lastUsage = result.usage ?? lastUsage;
|
|
343
|
+
totalElapsedMs += result.elapsedMs;
|
|
344
|
+
return result;
|
|
345
|
+
};
|
|
346
|
+
// --- initial attempt ---
|
|
347
|
+
let run;
|
|
348
|
+
try {
|
|
349
|
+
run = await runOnce('initial');
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
return heuristicResult({ kind: 'fallback', reason: `spawn error: ${err.message}`, usage: lastUsage, elapsedMs: totalElapsedMs });
|
|
353
|
+
}
|
|
354
|
+
if (run.status === 'cancelled') {
|
|
355
|
+
return heuristicResult({ kind: 'fallback', reason: `cancelled${run.detail ? ` (${run.detail})` : ''}`, usage: lastUsage, elapsedMs: totalElapsedMs });
|
|
356
|
+
}
|
|
357
|
+
if (run.status === 'failed') {
|
|
358
|
+
return heuristicResult({ kind: 'fallback', reason: `agent error: ${run.detail ?? 'unknown'}`, usage: lastUsage, elapsedMs: totalElapsedMs });
|
|
359
|
+
}
|
|
360
|
+
const accept = (proposal, issues, repaired) => {
|
|
361
|
+
const costUsd = lastUsage ? deps.estimateCostUsd?.(lastUsage) : undefined;
|
|
362
|
+
const decorated = {
|
|
363
|
+
...proposal,
|
|
364
|
+
decomposedBy: 'agent',
|
|
365
|
+
elapsedMs: totalElapsedMs,
|
|
366
|
+
...(lastUsage ? { agentUsage: lastUsage } : {}),
|
|
367
|
+
...(costUsd !== undefined ? { agentCostUsd: costUsd } : {}),
|
|
368
|
+
};
|
|
369
|
+
const outcome = {
|
|
370
|
+
kind: 'agent',
|
|
371
|
+
itemCount: decorated.workItems.length,
|
|
372
|
+
repaired,
|
|
373
|
+
...(lastUsage ? { usage: lastUsage } : {}),
|
|
374
|
+
...(costUsd !== undefined ? { costUsd } : {}),
|
|
375
|
+
elapsedMs: totalElapsedMs,
|
|
376
|
+
};
|
|
377
|
+
deps.onOutcome?.(outcome);
|
|
378
|
+
return { proposal: decorated, gate, issues, outcome };
|
|
379
|
+
};
|
|
380
|
+
// --- validate the initial output ---
|
|
381
|
+
const first = parseDecomposition(run.output);
|
|
382
|
+
if (first.ok && first.raw) {
|
|
383
|
+
const { proposal, issues } = assemblePlanProposal(request.goal, gate.strategy, first.raw);
|
|
384
|
+
if (issues.length === 0)
|
|
385
|
+
return accept(proposal, issues, false);
|
|
386
|
+
// Not clean — fall through to a single repair with the assembler's issues.
|
|
387
|
+
const repairErrors = issues.map((i) => i.message);
|
|
388
|
+
const repaired = await tryRepair(repairErrors);
|
|
389
|
+
if (repaired)
|
|
390
|
+
return repaired;
|
|
391
|
+
return heuristicResult({ kind: 'fallback', reason: `invalid agent decomposition after repair: ${issues.map((i) => i.kind).join(', ')}`, usage: lastUsage, elapsedMs: totalElapsedMs });
|
|
392
|
+
}
|
|
393
|
+
// Malformed structure — one repair attempt with the parser's errors.
|
|
394
|
+
const repaired = await tryRepair(first.errors);
|
|
395
|
+
if (repaired)
|
|
396
|
+
return repaired;
|
|
397
|
+
return heuristicResult({ kind: 'fallback', reason: `malformed agent output after repair: ${first.errors.slice(0, 3).join('; ')}`, usage: lastUsage, elapsedMs: totalElapsedMs });
|
|
398
|
+
// --- one repair attempt: returns an accepted result, or null to fall back ---
|
|
399
|
+
async function tryRepair(repairErrors) {
|
|
400
|
+
let repairRun;
|
|
401
|
+
try {
|
|
402
|
+
repairRun = await runOnce('repair', repairErrors);
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
if (repairRun.status !== 'completed')
|
|
408
|
+
return null;
|
|
409
|
+
const parsed = parseDecomposition(repairRun.output);
|
|
410
|
+
if (!parsed.ok || !parsed.raw)
|
|
411
|
+
return null;
|
|
412
|
+
const { proposal, issues } = assemblePlanProposal(request.goal, gate.strategy, parsed.raw);
|
|
413
|
+
if (issues.length !== 0)
|
|
414
|
+
return null;
|
|
415
|
+
return accept(proposal, issues, true);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan proposal types + pure assembler.
|
|
3
|
+
*
|
|
4
|
+
* This module turns a loose decomposition (produced by an LLM planning agent,
|
|
5
|
+
* or handed in directly by a caller) into a validated, typed `PlanProposal`.
|
|
6
|
+
* It is intentionally free of I/O and LLM calls: no filesystem access, no
|
|
7
|
+
* agent spawning, no network. It exists so `AdaptivePlanner` can stay a
|
|
8
|
+
* synchronous, deterministic, side-effect-free scorer while still producing
|
|
9
|
+
* a rich, structured artifact that an orchestration engine can render for
|
|
10
|
+
* human approval and (once approved) instantiate.
|
|
11
|
+
*
|
|
12
|
+
* A `PlanProposal` is DATA. It is never instantiated on its own — approval
|
|
13
|
+
* flows through the existing `ProjectPlanningState.executionApproved` gate
|
|
14
|
+
* (see `planProposalToPlanningState` below), and durable persistence reuses
|
|
15
|
+
* `ExecutionPlanManager` (see `planProposalToExecutionPlanItems` below).
|
|
16
|
+
* Neither adapter performs any I/O itself; they only shape data for callers
|
|
17
|
+
* that do.
|
|
18
|
+
*/
|
|
19
|
+
import type { ExecutionStrategy } from './adaptive-planner.js';
|
|
20
|
+
import type { PlanItem } from './execution-plan.js';
|
|
21
|
+
import type { ProjectPlanningState } from '../knowledge/project-planning/types.js';
|
|
22
|
+
/** Archetypes a work item can suggest for its executing agent. Open-ended by design. */
|
|
23
|
+
export type WorkItemArchetype = 'engineer' | 'reviewer' | 'tester' | 'researcher' | 'integrator' | string;
|
|
24
|
+
/**
|
|
25
|
+
* A single unit of work inside a proposal.
|
|
26
|
+
*
|
|
27
|
+
* Field shapes deliberately mirror three existing types so downstream bridges
|
|
28
|
+
* are near-1:1 maps rather than translations:
|
|
29
|
+
* - knowledge `ProjectPlanningTask` (approval-render bridge)
|
|
30
|
+
* - knowledge `ProjectWorkPlanTask` (phaseId/dependency naming)
|
|
31
|
+
* - core `PlanItem` (persistence bridge)
|
|
32
|
+
*/
|
|
33
|
+
export interface WorkItem {
|
|
34
|
+
id: string;
|
|
35
|
+
title: string;
|
|
36
|
+
brief: string;
|
|
37
|
+
phaseId: string;
|
|
38
|
+
dependsOn: string[];
|
|
39
|
+
suggestedArchetype?: WorkItemArchetype | undefined;
|
|
40
|
+
likelyFiles?: string[] | undefined;
|
|
41
|
+
verification?: string[] | undefined;
|
|
42
|
+
canRunConcurrently?: boolean | undefined;
|
|
43
|
+
needsReview?: boolean | undefined;
|
|
44
|
+
}
|
|
45
|
+
export interface Phase {
|
|
46
|
+
id: string;
|
|
47
|
+
title: string;
|
|
48
|
+
description?: string | undefined;
|
|
49
|
+
order: number;
|
|
50
|
+
}
|
|
51
|
+
/** Where a proposal's decomposition came from. */
|
|
52
|
+
export type PlanProposalSource = 'planner-agent' | 'single-item-fallback' | 'caller-supplied';
|
|
53
|
+
/**
|
|
54
|
+
* Honest provenance for how a proposal's work items were produced.
|
|
55
|
+
*
|
|
56
|
+
* - `'agent'` — a read-only planning agent decomposed the goal, and its
|
|
57
|
+
* output validated cleanly (possibly after one repair attempt).
|
|
58
|
+
* - `'heuristic'` — the deterministic single-item path produced the proposal,
|
|
59
|
+
* either because `planner.decomposition` is configured to `'heuristic'`, the
|
|
60
|
+
* planner's gate declined to decompose, or the agent path failed and fell
|
|
61
|
+
* back. `fallbackReason` is set only in the failure case, never when the
|
|
62
|
+
* heuristic path was chosen deliberately by config or gate.
|
|
63
|
+
*/
|
|
64
|
+
export type DecomposedBy = 'agent' | 'heuristic';
|
|
65
|
+
/** Token usage reported by a planning-decomposition agent run. */
|
|
66
|
+
export interface DecompositionAgentUsage {
|
|
67
|
+
readonly inputTokens: number;
|
|
68
|
+
readonly outputTokens: number;
|
|
69
|
+
readonly cacheReadTokens?: number | undefined;
|
|
70
|
+
readonly cacheWriteTokens?: number | undefined;
|
|
71
|
+
readonly totalTokens: number;
|
|
72
|
+
}
|
|
73
|
+
export interface PlanProposal {
|
|
74
|
+
id: string;
|
|
75
|
+
task: string;
|
|
76
|
+
strategy: ExecutionStrategy;
|
|
77
|
+
rationale: string;
|
|
78
|
+
phases: Phase[];
|
|
79
|
+
workItems: WorkItem[];
|
|
80
|
+
createdAt: number;
|
|
81
|
+
source: PlanProposalSource;
|
|
82
|
+
/**
|
|
83
|
+
* Provenance overlay set by the decomposition service (plan-decomposition.ts).
|
|
84
|
+
* Absent on proposals produced directly by `assemblePlanProposal` /
|
|
85
|
+
* `singleItemProposal`, which stay byte-compatible with pre-provenance tests.
|
|
86
|
+
*/
|
|
87
|
+
decomposedBy?: DecomposedBy | undefined;
|
|
88
|
+
/** Token usage of the planning agent (present when the agent path ran, even on fallback). */
|
|
89
|
+
agentUsage?: DecompositionAgentUsage | undefined;
|
|
90
|
+
/** Estimated dollar cost of the planning agent run, when a pricing lookup was available. */
|
|
91
|
+
agentCostUsd?: number | undefined;
|
|
92
|
+
/** Wall-clock time the planning agent ran, in ms (present when the agent path ran). */
|
|
93
|
+
elapsedMs?: number | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Why the agent path fell back to the heuristic path. Set ONLY on honest
|
|
96
|
+
* failure fallbacks (spawn error, timeout, cancellation, or output that was
|
|
97
|
+
* still malformed after one repair attempt) — never when `'heuristic'` was
|
|
98
|
+
* chosen by config or by the planner's decompose gate.
|
|
99
|
+
*/
|
|
100
|
+
fallbackReason?: string | undefined;
|
|
101
|
+
}
|
|
102
|
+
/** The loose JSON shape a planning agent (or a caller) emits, pre-validation. */
|
|
103
|
+
export interface RawDecompositionPhase {
|
|
104
|
+
title: string;
|
|
105
|
+
description?: string | undefined;
|
|
106
|
+
}
|
|
107
|
+
export interface RawDecompositionWorkItem {
|
|
108
|
+
title: string;
|
|
109
|
+
brief: string;
|
|
110
|
+
phase: string;
|
|
111
|
+
dependsOn?: string[] | undefined;
|
|
112
|
+
suggestedArchetype?: string | undefined;
|
|
113
|
+
likelyFiles?: string[] | undefined;
|
|
114
|
+
verification?: string[] | undefined;
|
|
115
|
+
canRunConcurrently?: boolean | undefined;
|
|
116
|
+
needsReview?: boolean | undefined;
|
|
117
|
+
}
|
|
118
|
+
export interface RawDecomposition {
|
|
119
|
+
phases: RawDecompositionPhase[];
|
|
120
|
+
workItems: RawDecompositionWorkItem[];
|
|
121
|
+
}
|
|
122
|
+
/** Kinds of honest-partial issues `assemblePlanProposal` can flag without throwing. */
|
|
123
|
+
export type PlanProposalIssueKind = 'dangling-dependency' | 'dependency-cycle' | 'unresolved-phase';
|
|
124
|
+
export interface PlanProposalIssue {
|
|
125
|
+
readonly kind: PlanProposalIssueKind;
|
|
126
|
+
readonly workItemTitle: string;
|
|
127
|
+
readonly message: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Turn a raw decomposition into a validated, typed `PlanProposal`.
|
|
131
|
+
*
|
|
132
|
+
* Never throws. Malformed input degrades to an honest partial result: an
|
|
133
|
+
* unresolved phase reference lands its work item in a synthesized "Unphased"
|
|
134
|
+
* bucket; an unresolved dependency reference is dropped; a dependency cycle
|
|
135
|
+
* is flagged but left in place (no silent edge removal). Every problem is
|
|
136
|
+
* reported via the returned `issues` list rather than an exception.
|
|
137
|
+
*
|
|
138
|
+
* Dependency resolution mirrors `ExecutionPlanManager.replaceItems` exactly:
|
|
139
|
+
* a dep that already looks like a UUID passes through unchecked, otherwise
|
|
140
|
+
* it is resolved by case-insensitive title match, otherwise it is dropped.
|
|
141
|
+
*
|
|
142
|
+
* `source` defaults to `'planner-agent'` (the expected majority caller —
|
|
143
|
+
* `AdaptivePlanner.proposeWorkstream`). Pass `'caller-supplied'` when a
|
|
144
|
+
* non-agent caller hands in its own decomposition directly.
|
|
145
|
+
*/
|
|
146
|
+
export declare function assemblePlanProposal(task: string, strategy: ExecutionStrategy, raw: RawDecomposition, source?: Extract<PlanProposalSource, 'planner-agent' | 'caller-supplied'>): {
|
|
147
|
+
proposal: PlanProposal;
|
|
148
|
+
issues: PlanProposalIssue[];
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* The honest fallback: one phase ("Execute"), one work item whose title and
|
|
152
|
+
* brief both equal the task text, no dependencies. Used whenever decomposition
|
|
153
|
+
* was not warranted (see `AdaptivePlanner.shouldDecompose`) or no raw
|
|
154
|
+
* decomposition is available yet.
|
|
155
|
+
*/
|
|
156
|
+
export declare function singleItemProposal(task: string): PlanProposal;
|
|
157
|
+
/**
|
|
158
|
+
* Project a `PlanProposal` into the existing `/plan approve` seam. This is
|
|
159
|
+
* data-only — no store is written here. The caller feeds the result into
|
|
160
|
+
* `ProjectPlanningService.upsertState` (or an equivalent), which is what
|
|
161
|
+
* actually persists it and evaluates readiness.
|
|
162
|
+
*
|
|
163
|
+
* Direction convention for the emitted `ProjectPlanningDependency` records
|
|
164
|
+
* (this type has no prior producer in the codebase to inherit a convention
|
|
165
|
+
* from, so it is fixed here): `fromTaskId` depends on `toTaskId`, i.e. the
|
|
166
|
+
* edge reads "fromTaskId depends on toTaskId" the same way `WorkItem.dependsOn`
|
|
167
|
+
* reads "this item depends on these ids".
|
|
168
|
+
*
|
|
169
|
+
* `ProjectPlanningTask` has no first-class phase concept, so phase
|
|
170
|
+
* membership is preserved in `metadata` rather than dropped silently.
|
|
171
|
+
*
|
|
172
|
+
* `executionApproved` is always `false` here — approval is a separate,
|
|
173
|
+
* explicit step owned by `/plan approve` (planning-runtime.ts), never implied
|
|
174
|
+
* by proposing.
|
|
175
|
+
*/
|
|
176
|
+
export declare function planProposalToPlanningState(proposal: PlanProposal): Partial<ProjectPlanningState>;
|
|
177
|
+
/**
|
|
178
|
+
* Project a `PlanProposal` into the plain items `ExecutionPlanManager` deals
|
|
179
|
+
* in. This is a deliberately lossy projection: `PlanItem` has no room for
|
|
180
|
+
* verification/likelyFiles/suggestedArchetype, and those stay in the
|
|
181
|
+
* full-fidelity `ProjectPlanningState` render above. It exists purely so a
|
|
182
|
+
* caller can hand a proposal's items to `ExecutionPlanManager` without
|
|
183
|
+
* re-deriving the phase/description/dependency shape by hand.
|
|
184
|
+
*
|
|
185
|
+
* Dependencies are expressed as WORK ITEM TITLES, not ids, because
|
|
186
|
+
* `ExecutionPlanManager.create()` does not resolve dependency references —
|
|
187
|
+
* only `ExecutionPlanManager.replaceItems()` does, by case-insensitive
|
|
188
|
+
* description match. The intended call sequence at instantiation is
|
|
189
|
+
* therefore:
|
|
190
|
+
*
|
|
191
|
+
* const plan = planManager.create(title, []);
|
|
192
|
+
* const { items } = planProposalToExecutionPlanItems(proposal);
|
|
193
|
+
* planManager.replaceItems(plan.id, items);
|
|
194
|
+
*
|
|
195
|
+
* which reuses `replaceItems`' existing dependency resolver end-to-end
|
|
196
|
+
* instead of re-implementing dependency resolution here. This module defines
|
|
197
|
+
* no scheduler of its own — ready-to-run item selection stays
|
|
198
|
+
* `ExecutionPlanManager.getNextItems`'s job.
|
|
199
|
+
*/
|
|
200
|
+
export declare function planProposalToExecutionPlanItems(proposal: PlanProposal): {
|
|
201
|
+
title: string;
|
|
202
|
+
items: Array<Omit<PlanItem, 'id' | 'status'>>;
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=plan-proposal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-proposal.d.ts","sourceRoot":"","sources":["../../../src/platform/core/plan-proposal.ts"],"names":[],"mappings":"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"}
|