@moretea-labs/forge 1.8.0 → 1.8.1
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/AGENTS.md +70 -7
- package/CHANGELOG.md +14 -0
- package/CLAUDE.md +17 -2
- package/CONTRIBUTING.md +3 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/adapters/chatgpt/browser-delivery-host.ts +7 -1
- package/adapters/chatgpt/browser-delivery-runtime.ts +529 -56
- package/adapters/chatgpt/controller-binding-store.ts +101 -22
- package/adapters/chatgpt/controller-round-host.ts +15 -25
- package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
- package/adapters/chatgpt/provider-delivery.ts +228 -1
- package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
- package/adapters/computer/chatgpt-extension-target.ts +463 -0
- package/adapters/computer/chatgpt-target-router.ts +103 -0
- package/adapters/computer/chrome-extension/background.js +385 -0
- package/adapters/computer/chrome-extension/content.js +378 -0
- package/adapters/computer/chrome-extension/core.js +24 -0
- package/adapters/computer/chrome-extension/manifest.json +30 -0
- package/adapters/computer/desktop-operator-discovery.ts +11 -31
- package/adapters/computer/interaction-target-authority.ts +142 -18
- package/adapters/mcp/auth.ts +0 -1
- package/adapters/mcp/instructions.ts +5 -4
- package/adapters/mcp/multi-repository.ts +3 -19
- package/adapters/mcp/oauth.ts +73 -0
- package/adapters/mcp/paths.ts +4 -1
- package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
- package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
- package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +411 -73
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
- package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
- package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +8 -42
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
- package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
- package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
- package/adapters/mcp/runtime-gateway/router.ts +18 -504
- package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
- package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
- package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
- package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
- package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +246 -0
- package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
- package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
- package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
- package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
- package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +263 -0
- package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
- package/adapters/mcp/server.ts +67 -23
- package/adapters/mcp/setup.ts +1 -3
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
- package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
- package/adapters/mcp/toolset-names.ts +5 -0
- package/adapters/mcp/toolset.ts +6 -5
- package/adapters/mcp/transports/http-observation.ts +365 -0
- package/adapters/mcp/transports/http.ts +154 -677
- package/adapters/mcp/transports/oauth-http.ts +322 -0
- package/adapters/mcp/transports/session-registry.ts +6 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
- package/assets/plugin-registry.v1.json +6 -4
- package/assets/reference-configs/agentic-development-flow.md +25 -0
- package/assets/reference-configs/global-working-rules.md +19 -0
- package/assets/skill-version.json +2 -2
- package/docs/architecture/CURRENT.md +111 -41
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
- package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
- package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
- package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +221 -0
- package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
- package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
- package/docs/architecture/domains/verification.md +1 -0
- package/docs/architecture/domains/workflow-engine.md +6 -0
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/forge-plugin-management.md +2 -2
- package/docs/operations/controller-performance-and-502.md +17 -0
- package/docs/operations/controller-reliability-runbook.md +2 -2
- package/docs/operations/features.md +1 -1
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +2 -0
- package/docs/operations/releasing.md +2 -0
- package/docs/operations/standalone-disaster-recovery.md +14 -6
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +25 -14
- package/packages/kernel/cognition/api/index.ts +6 -0
- package/packages/kernel/cognition/application/activation-service.ts +451 -0
- package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
- package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
- package/packages/kernel/cognition/application/memory-service.ts +64 -0
- package/packages/kernel/cognition/domain/learning.ts +106 -0
- package/packages/kernel/cognition/domain/memory.ts +254 -0
- package/packages/kernel/controller/api/index.ts +1 -0
- package/packages/kernel/controller/application/continuation-service.ts +281 -0
- package/packages/kernel/controller/application/controller-round-service.ts +12 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
- package/packages/kernel/controller/domain/controller-round.ts +4 -1
- package/packages/kernel/controller/domain/execution-quality.ts +3 -1
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +297 -71
- package/packages/kernel/controller/ports/controller-host.ts +2 -0
- package/packages/kernel/identity/api/index.ts +10 -0
- package/packages/kernel/identity/domain/activity-projection.ts +43 -0
- package/packages/kernel/identity/domain/capability-broker.ts +60 -0
- package/packages/kernel/identity/domain/grant.ts +72 -0
- package/packages/kernel/identity/domain/owned-resource.ts +116 -0
- package/packages/kernel/identity/domain/user-request.ts +93 -0
- package/packages/kernel/identity/infrastructure/activity-projection-store.ts +77 -0
- package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
- package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
- package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
- package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
- package/packages/kernel/scheduler/api/index.ts +0 -2
- package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
- package/packages/kernel/scheduler/application/settlement.ts +0 -15
- package/packages/kernel/scheduler/domain/schedule.ts +87 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +153 -133
- package/packages/kernel/work/api/index.ts +3 -2
- package/packages/kernel/work/application/work-service.ts +17 -42
- package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
- package/packages/kernel/work/domain/engineering-design.ts +10 -5
- package/packages/kernel/work/domain/engineering-profile.ts +8 -12
- package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
- package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
- package/packages/kernel/work/domain/implementation-review.ts +14 -331
- package/packages/kernel/work/domain/objective-graph.ts +119 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
- package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
- package/packages/kernel/work/domain/state-machine.ts +25 -63
- package/packages/kernel/work/domain/types.ts +57 -51
- package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
- package/packages/kernel/work/ports/work-contract-store.ts +5 -2
- package/packages/plugin-runtime/browser/session-authority.ts +2 -1
- package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
- package/packages/plugin-runtime/computer/conversation-target.ts +143 -0
- package/packages/plugin-runtime/computer/index.ts +2 -0
- package/packages/plugin-runtime/computer/target-authority.ts +26 -1
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
- package/packages/protocols/computer/contract.ts +27 -1
- package/scripts/activate-source-baseline.ts +7 -9
- package/scripts/canary-controller-semantic-wait.ts +12 -24
- package/scripts/check-mcp-compatibility.ts +48 -136
- package/scripts/check-runtime-architecture.mjs +622 -217
- package/scripts/forge-local-recovery-helper.mjs +93 -15
- package/scripts/lib/project-init-lib.sh +3 -0
- package/scripts/open-source-audit-allowlist.txt +1 -2
- package/scripts/run-bounded-command.mjs +5 -0
- package/scripts/run-governed-gate.ts +0 -1
- package/scripts/run-mobile-monitor-bridge.ts +0 -1
- package/scripts/smoke-control-plane-failure-domain.ts +94 -0
- package/scripts/smoke-mcp-http-runtime.ts +5 -0
- package/scripts/smoke-runtime-recovery.ts +12 -43
- package/scripts/smoke-schedule-engine.ts +23 -15
- package/scripts/smoke-unattended-transport-recovery.ts +223 -0
- package/scripts/smoke-user-request-continuation-restart.ts +232 -0
- package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +92 -0
- package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
- package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
- package/scripts/smoke-workflow-supervisor.ts +103 -0
- package/scripts/verify-forge-runtime.sh +2 -1
- package/src/cli/agent-jobs/executor-health.ts +11 -34
- package/src/cli/agent-jobs/integration.ts +18 -49
- package/src/cli/agent-jobs/job-manager.ts +7 -3
- package/src/cli/commands/brain-assistant.ts +27 -13
- package/src/cli/commands/brain.ts +13 -15
- package/src/cli/commands/chatgpt.ts +1 -163
- package/src/cli/commands/recovery.ts +135 -121
- package/src/cli/commands/runtime.ts +3 -3
- package/src/cli/commands/setup-profile.ts +8 -0
- package/src/cli/controller/check-runner.ts +13 -2
- package/src/cli/controller/completion-backlog.ts +3 -3
- package/src/cli/controller/completion-orchestrator.ts +4 -43
- package/src/cli/controller/completion-target.ts +3 -72
- package/src/cli/controller/context/source-materializer.ts +81 -100
- package/src/cli/controller/context-pack.ts +10 -8
- package/src/cli/controller/execution-completion.ts +4 -7
- package/src/cli/controller/execution-policy.ts +36 -153
- package/src/cli/controller/governance.ts +2 -3
- package/src/cli/controller/issue-store.ts +4 -99
- package/src/cli/controller/launch-agents.ts +59 -18
- package/src/cli/controller/operational-plan.ts +24 -51
- package/src/cli/controller/runtime-config.ts +5 -1
- package/src/cli/controller/stuck-state-migration.ts +2 -3
- package/src/cli/controller/systemd-user.ts +39 -1
- package/src/cli/editing/edit-session.ts +1 -7
- package/src/cli/local-bridge/console-automations.ts +18 -13
- package/src/cli/local-bridge/console-view-models.ts +3 -12
- package/src/cli/local-bridge/facade-api.ts +64 -191
- package/src/cli/local-bridge/server.ts +24 -147
- package/src/cli/local-bridge/types.ts +0 -1
- package/src/cli/mcp/oauth-client-retirement.ts +74 -0
- package/src/cli/repositories/command-executor.ts +29 -23
- package/src/cli/repositories/command-scope.ts +35 -16
- package/src/cli/repositories/controller-home.ts +48 -0
- package/src/cli/repositories/ephemeral-workspace.ts +20 -30
- package/src/cli/repositories/git-command-executor.ts +2 -2
- package/src/cli/repositories/registry.ts +77 -11
- package/src/cli/repositories/structured-git.ts +62 -2
- package/src/cli/repository/session-cache.ts +92 -6
- package/src/runtime/context/assistant-context.ts +20 -7
- package/src/runtime/context/assistant-work-context.ts +89 -27
- package/src/runtime/context/automatic-learning.ts +565 -0
- package/src/runtime/context/cognitive-attention.ts +173 -0
- package/src/runtime/context/cognitive-skill-canary.ts +158 -0
- package/src/runtime/context/context-closure.ts +46 -9
- package/src/runtime/context/context-pack-process.ts +103 -0
- package/src/runtime/context/context-plane.ts +1 -9
- package/src/runtime/context/direct-controller-learning.ts +298 -0
- package/src/runtime/context/semantic-navigation-contract.ts +9 -0
- package/src/runtime/context/semantic-navigation.ts +6 -34
- package/src/runtime/context/typescript-navigation-process.ts +145 -0
- package/src/runtime/context/typescript-navigation.ts +89 -3
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +212 -9
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
- package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
- package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
- package/src/runtime/control-plane/execution/session-store.ts +31 -1
- package/src/runtime/control-plane/execution/validation.ts +6 -8
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
- package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
- package/src/runtime/control-plane/execution/work-delivery-service.ts +497 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
- package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
- package/src/runtime/control-plane/execution/work-handle-authority.ts +188 -109
- package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
- package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
- package/src/runtime/control-plane/execution/work-operation-service.ts +43 -27
- package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
- package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +173 -186
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
- package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/capability-registry.ts +362 -37
- package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
- package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
- package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
- package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
- package/src/runtime/control-plane/facade/index.ts +0 -1
- package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
- package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
- package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
- package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
- package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
- package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
- package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
- package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
- package/src/runtime/control-plane/facade/types.ts +49 -108
- package/src/runtime/control-plane/facade/work-continuation.ts +8 -8
- package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
- package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +239 -112
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
- package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
- package/src/runtime/control-plane/governance/access-policy.ts +19 -2
- package/src/runtime/control-plane/governance/authorization.ts +20 -3
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -300
- package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
- package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
- package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
- package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
- package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
- package/src/runtime/control-plane/release-retention.ts +135 -47
- package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
- package/src/runtime/control-plane/runtime-cleanup.ts +290 -21
- package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
- package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
- package/src/runtime/diagnostics/incident-repair.ts +313 -146
- package/src/runtime/diagnostics/mcp-timing.ts +114 -0
- package/src/runtime/evidence/artifact-store.ts +158 -40
- package/src/runtime/evidence/evidence-store.ts +112 -8
- package/src/runtime/evidence/output-handle-index.ts +225 -0
- package/src/runtime/evidence/result-store.ts +158 -44
- package/src/runtime/execution/jobs/store.ts +3 -4
- package/src/runtime/execution/managed-workspace.ts +57 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
- package/src/runtime/execution/process-runtime/check-result.ts +105 -1
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
- package/src/runtime/execution/process-runtime/command-facade.ts +79 -27
- package/src/runtime/execution/process-runtime/gc.ts +15 -2
- package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
- package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
- package/src/runtime/execution/process-runtime/index.ts +3 -0
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
- package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
- package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
- package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
- package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
- package/src/runtime/execution/process-runtime/runtime.ts +35 -2
- package/src/runtime/execution/process-runtime/store.ts +30 -2
- package/src/runtime/execution/process-runtime/types.ts +6 -1
- package/src/runtime/execution/workers/executor.ts +2 -6
- package/src/runtime/platform/service-inventory.ts +130 -0
- package/src/runtime/platform/service-manager.ts +8 -0
- package/src/runtime/plugins/action-application.ts +85 -28
- package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
- package/src/runtime/plugins/browser-adapter.ts +757 -34
- package/src/runtime/plugins/browser-automation-service.ts +23 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
- package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
- package/src/runtime/plugins/browser-native-session-service.ts +63 -13
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime.ts +14 -1
- package/src/runtime/plugins/browser-session-authority.ts +2 -2
- package/src/runtime/plugins/browser-session-store.ts +46 -76
- package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
- package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +219 -0
- package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
- package/src/runtime/plugins/computer-registration.ts +222 -11
- package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
- package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
- package/src/runtime/plugins/external-adapter.ts +42 -6
- package/src/runtime/plugins/external-registration.ts +21 -1
- package/src/runtime/plugins/gmail-adapter.ts +23 -2
- package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
- package/src/runtime/plugins/google-shared.ts +14 -7
- package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
- package/src/runtime/plugins/ios-adapter.ts +1 -1
- package/src/runtime/plugins/lightweight-action.ts +208 -2
- package/src/runtime/plugins/local-system-adapter.ts +12 -2
- package/src/runtime/plugins/managed-process-adapter.ts +12 -5
- package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
- package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +602 -428
- package/src/runtime/plugins/types.ts +20 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
- package/src/runtime/projections/invalidation.ts +7 -3
- package/src/runtime/projections/materialized-view.ts +80 -36
- package/src/runtime/recovery/actions.ts +3 -3
- package/src/runtime/recovery/capability-action-application.ts +46 -45
- package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
- package/src/runtime/recovery/maintenance-executor.ts +374 -123
- package/src/runtime/recovery/store.ts +29 -11
- package/src/runtime/release/release-coordinator.ts +296 -0
- package/src/runtime/release/release-session.ts +716 -0
- package/src/runtime/release/release-state-migration.ts +25 -0
- package/src/runtime/resources/leases/store.ts +56 -25
- package/src/runtime/root/computer-composition.ts +191 -6
- package/src/runtime/root/controller-progression-composition.ts +192 -0
- package/src/runtime/root/controller-round-composition.ts +20 -1
- package/src/runtime/root/deployment-topology.ts +106 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/known-good-recovery.ts +184 -0
- package/src/runtime/root/local-bridge.ts +0 -1
- package/src/runtime/root/mcp-transport.ts +111 -18
- package/src/runtime/root/ownership.ts +261 -9
- package/src/runtime/root/package-connector-service.ts +105 -19
- package/src/runtime/root/package-runtime-release.ts +117 -18
- package/src/runtime/root/package-runtime-service.ts +17 -11
- package/src/runtime/root/release-execution-canary.ts +44 -12
- package/src/runtime/root/release-loader.ts +90 -8
- package/src/runtime/root/release-manifest.ts +80 -6
- package/src/runtime/root/release-materialize.ts +372 -28
- package/src/runtime/root/release-store.ts +395 -36
- package/src/runtime/root/runtime-lane.ts +191 -0
- package/src/runtime/root/runtime.ts +159 -27
- package/src/runtime/root/scheduled-controller-composition.ts +28 -3
- package/src/runtime/root/service-runner.ts +2 -2
- package/src/runtime/root/service.ts +36 -33
- package/src/runtime/root/status.ts +48 -0
- package/src/runtime/root/types.ts +32 -3
- package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
- package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
- package/src/runtime/root/write-fence.ts +50 -2
- package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
- package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
- package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
- package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
- package/src/runtime/shared/process-environment.ts +20 -9
- package/src/runtime/shared/response-budget.ts +1 -3
- package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
- package/src/runtime/standalone-recovery/core.ts +3702 -342
- package/src/runtime/standalone-recovery/entry.ts +469 -39
- package/src/runtime/standalone-recovery/installer.ts +262 -148
- package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
- package/src/runtime/standalone-recovery/operation-lock.ts +1 -1
- package/src/runtime/standalone-recovery/performance.ts +54 -16
- package/src/runtime/standalone-recovery/release.ts +53 -5
- package/src/runtime/standalone-recovery/service-labels.ts +5 -2
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
- package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +10 -3
- package/src/runtime/workflow/schedules/engine.ts +138 -172
- package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
- package/src/runtime/workflows/runtime.ts +15 -19
- package/src/testing/test-governance.ts +5 -1
- package/supervisor/chatgpt-conversation.ts +23 -0
- package/supervisor/client.ts +201 -0
- package/supervisor/control-plane.ts +868 -0
- package/supervisor/entry.ts +15 -0
- package/supervisor/forge-validators.ts +80 -0
- package/supervisor/index.ts +5 -0
- package/supervisor/native-browser-adapter.ts +786 -0
- package/supervisor/native-messaging/host.ts +39 -0
- package/supervisor/native-messaging/manifest.ts +26 -0
- package/supervisor/native-messaging/protocol.ts +27 -0
- package/supervisor/paths.ts +18 -0
- package/supervisor/protocol.ts +202 -0
- package/supervisor/server.ts +404 -0
- package/supervisor/store.ts +1451 -0
- package/supervisor/tsconfig.json +8 -0
- package/supervisor/types.ts +255 -0
- package/adapters/chatgpt/controller-host.ts +0 -119
- package/adapters/mcp/controller-round-compatibility.ts +0 -184
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
- package/packages/kernel/progression/api/index.ts +0 -2
- package/packages/kernel/progression/application/projector.ts +0 -211
- package/packages/kernel/progression/domain/types.ts +0 -116
- package/packages/kernel/progression/index.ts +0 -1
- package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
- package/packages/kernel/scheduler/domain/continuation.ts +0 -38
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
- package/packages/kernel/work/domain/admission-policy.ts +0 -34
- package/scripts/benchmark-background-check-overlap.ts +0 -228
- package/scripts/benchmark-computer-hotpath.ts +0 -255
- package/scripts/benchmark-controller-hotpath.ts +0 -212
- package/scripts/benchmark-controller-round2.ts +0 -191
- package/scripts/benchmark-ios-agent-device.ts +0 -511
- package/scripts/benchmark-mcp-host.sh +0 -117
- package/scripts/benchmark-mcp-transport.ts +0 -169
- package/scripts/benchmark-operational-memory-activation.ts +0 -235
- package/scripts/benchmark-operational-shadow.ts +0 -28
- package/scripts/benchmark-quality-harness.ts +0 -146
- package/scripts/benchmark-route-session-concurrency.ts +0 -915
- package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
- package/scripts/benchmark-thin-harness.ts +0 -251
- package/scripts/benchmark-typescript-navigation.ts +0 -186
- package/scripts/benchmark-work-efficiency.ts +0 -334
- package/scripts/build-controller-ui.ts +0 -28
- package/scripts/check-npm-release.sh +0 -32
- package/scripts/check-public-release-surface.sh +0 -19
- package/scripts/check-release-published.sh +0 -57
- package/scripts/check-release-readiness.sh +0 -37
- package/scripts/check-release-version.mjs +0 -74
- package/scripts/check-tarball-install-smoke.sh +0 -150
- package/scripts/package-source-archive.sh +0 -147
- package/scripts/public-release-files.txt +0 -39
- package/scripts/public-release.ts +0 -174
- package/scripts/publish-release-tarball.sh +0 -27
- package/scripts/route-nl-vs-ts-eval.ts +0 -679
- package/scripts/stage-runtime-release.ts +0 -44
- package/src/cli/controller/progress.ts +0 -656
- package/src/cli/controller/work-mode.ts +0 -181
- package/src/cli/local-bridge/console-assets.ts +0 -17
- package/src/cli/local-bridge/dashboard.ts +0 -17
- package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
- package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
- package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
- package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
- package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
- package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/styles.css +0 -28
- package/src/cli/local-bridge/frontend/src/types.ts +0 -15
- package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
- package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
- package/src/cli/local-bridge/ui-dist/app.css +0 -1
- package/src/cli/local-bridge/ui-dist/app.js +0 -11228
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
- package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
- package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
- package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
- package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
- package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
- package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
- package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
- package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
- package/src/runtime/control-plane/routing/index.ts +0 -1
- package/src/runtime/control-plane/routing/route-policy.ts +0 -401
- package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
|
@@ -325,7 +325,7 @@ export function runSelfHealingLoop(ctx: SelfHealingContext, input: SelfHealingIn
|
|
|
325
325
|
if (operation === 'verify') {
|
|
326
326
|
return buildFacadeResult({
|
|
327
327
|
status: 'ok',
|
|
328
|
-
summary: 'Self-healing verification
|
|
328
|
+
summary: 'Self-healing verification is a maintenance observation; run registered repository checks through run_check when code verification is needed.',
|
|
329
329
|
data: {
|
|
330
330
|
operation: 'verify',
|
|
331
331
|
dryRun,
|
|
@@ -333,64 +333,29 @@ export function runSelfHealingLoop(ctx: SelfHealingContext, input: SelfHealingIn
|
|
|
333
333
|
},
|
|
334
334
|
suggestedNextActions: validateSuggestedNextActions([
|
|
335
335
|
verificationSuggestion(input.workId),
|
|
336
|
-
{
|
|
337
|
-
label: 'Run work verify if work_id known',
|
|
338
|
-
tool: 'rh_work',
|
|
339
|
-
operation: 'verify',
|
|
340
|
-
payload: { work_id: input.workId },
|
|
341
|
-
risk: 'workspace_write',
|
|
342
|
-
confidence: input.workId ? 'medium' : 'low',
|
|
343
|
-
},
|
|
344
336
|
]).actions,
|
|
345
337
|
});
|
|
346
338
|
}
|
|
347
339
|
|
|
348
340
|
if (operation === 'handoff') {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
repoId: ctx.repoId,
|
|
352
|
-
workId: input.workId,
|
|
353
|
-
title: 'Self-healing needs judgement',
|
|
354
|
-
severity: 'needs_review',
|
|
355
|
-
creationReason: 'repeated_infrastructure_failure',
|
|
356
|
-
reason: 'Self-healing could not safely complete without ChatGPT or user decision.',
|
|
357
|
-
summary: issues.map((issue) => issue.summary).join(' | ').slice(0, 500) || 'Manual recovery decision required.',
|
|
358
|
-
currentState: {
|
|
359
|
-
repoId: ctx.repoId,
|
|
360
|
-
workId: input.workId,
|
|
361
|
-
statusSummary: 'self-healing handoff pending',
|
|
362
|
-
},
|
|
363
|
-
attemptedActions: ['self_healing_diagnose', 'self_healing_repair'],
|
|
364
|
-
evidenceRefs: [],
|
|
365
|
-
blockingDecision: 'Choose bounded metadata repair, external lifecycle handoff, retry later, or re-scope work.',
|
|
366
|
-
recommendedDecision: 'Prefer safe dry-run repairs; Runtime lifecycle changes belong to the external lifecycle owner.',
|
|
367
|
-
recommendedPrompt: 'Review self-healing handoff and choose repair or stop.',
|
|
368
|
-
suggestedNextActions: [
|
|
369
|
-
{
|
|
370
|
-
label: 'Diagnose again (dry-run)',
|
|
371
|
-
tool: 'rh_work',
|
|
372
|
-
operation: 'repair',
|
|
373
|
-
payload: { repair_operation: 'diagnose', dry_run: true },
|
|
374
|
-
risk: 'readonly',
|
|
375
|
-
},
|
|
376
|
-
],
|
|
377
|
-
});
|
|
378
|
-
|
|
341
|
+
// Infrastructure recovery is internal execution state. Escalate only when a
|
|
342
|
+
// concrete user authorization or product decision has actually been found.
|
|
379
343
|
return buildFacadeResult({
|
|
380
344
|
status: 'blocked',
|
|
381
|
-
summary:
|
|
345
|
+
summary: 'Self-healing could not safely complete automatically; keep the exact Work blocked for bounded internal recovery rather than escalating infrastructure failure to the user.',
|
|
382
346
|
data: {
|
|
383
347
|
operation: 'handoff',
|
|
384
|
-
|
|
348
|
+
internalRecoveryRequired: true,
|
|
385
349
|
isAcceptanceFailure: false,
|
|
386
350
|
},
|
|
387
351
|
suggestedNextActions: [
|
|
388
352
|
{
|
|
389
|
-
label: '
|
|
390
|
-
tool: '
|
|
391
|
-
operation: '
|
|
392
|
-
payload: {
|
|
393
|
-
risk: '
|
|
353
|
+
label: 'Diagnose again (dry-run)',
|
|
354
|
+
tool: 'rh_work',
|
|
355
|
+
operation: 'repair',
|
|
356
|
+
payload: { repair_operation: 'diagnose', dry_run: true, work_id: input.workId },
|
|
357
|
+
risk: 'workspace_write',
|
|
358
|
+
confidence: 'low',
|
|
394
359
|
},
|
|
395
360
|
],
|
|
396
361
|
});
|
|
@@ -541,14 +506,14 @@ export function runSelfHealingLoop(ctx: SelfHealingContext, input: SelfHealingIn
|
|
|
541
506
|
},
|
|
542
507
|
suggestedNextActions: validateSuggestedNextActions([
|
|
543
508
|
verificationSuggestion(input.workId),
|
|
544
|
-
{
|
|
545
|
-
label: '
|
|
546
|
-
tool: 'rh_work',
|
|
547
|
-
operation: '
|
|
509
|
+
...(input.workId ? [{
|
|
510
|
+
label: 'Read current Work semantic state',
|
|
511
|
+
tool: 'rh_work' as const,
|
|
512
|
+
operation: 'get',
|
|
548
513
|
payload: { work_id: input.workId },
|
|
549
|
-
risk: 'readonly',
|
|
550
|
-
confidence:
|
|
551
|
-
},
|
|
514
|
+
risk: 'readonly' as const,
|
|
515
|
+
confidence: 'medium' as const,
|
|
516
|
+
}] : []),
|
|
552
517
|
]).actions,
|
|
553
518
|
rawAvailable: false,
|
|
554
519
|
});
|
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RH_WORK_MODEL_OPERATIONS } from './rh-work-operation-contract';
|
|
2
2
|
import { FACADE_TOOLS, type EvidenceRef, type FacadeTool, type SuggestedNextAction } from './types';
|
|
3
3
|
|
|
4
4
|
function expectedActionRisk(action: SuggestedNextAction): SuggestedNextAction['risk'] | undefined {
|
|
5
5
|
if (action.tool !== 'rh_work') return undefined;
|
|
6
6
|
switch (action.operation) {
|
|
7
7
|
case 'start':
|
|
8
|
-
case 'continue':
|
|
9
|
-
case 'verify':
|
|
10
|
-
case 'review':
|
|
11
8
|
case 'repair':
|
|
12
|
-
case 'stop':
|
|
13
|
-
case 'delegate':
|
|
14
|
-
case 'controller_claim':
|
|
15
|
-
case 'controller_release':
|
|
16
|
-
case 'controller_disposition':
|
|
17
9
|
case 'launcher_start':
|
|
18
10
|
case 'requirement_create':
|
|
19
|
-
case '
|
|
11
|
+
case 'requirement_promote_candidate':
|
|
20
12
|
case 'schedule_create':
|
|
21
13
|
case 'schedule_pause':
|
|
22
14
|
case 'schedule_resume':
|
|
23
15
|
case 'schedule_delete':
|
|
24
16
|
case 'schedule_trigger':
|
|
25
17
|
return 'workspace_write';
|
|
26
|
-
case 'controller_get_owner':
|
|
27
18
|
case 'schedule_list':
|
|
28
19
|
case 'schedule_get':
|
|
29
20
|
return 'readonly';
|
|
30
21
|
case 'plan_create':
|
|
22
|
+
case 'plan_revise':
|
|
23
|
+
case 'revise':
|
|
24
|
+
case 'complete':
|
|
25
|
+
case 'workflow_execute':
|
|
26
|
+
case 'workflow_reconcile':
|
|
27
|
+
case 'learning_record':
|
|
28
|
+
case 'learning_feedback':
|
|
29
|
+
case 'outcome_record':
|
|
30
|
+
case 'experience_record':
|
|
31
|
+
return 'workspace_write';
|
|
31
32
|
case 'plan_get':
|
|
32
33
|
case 'plan_list':
|
|
34
|
+
case 'get':
|
|
33
35
|
return 'readonly';
|
|
34
|
-
case 'plan_approve':
|
|
35
|
-
case 'plan_accept_step':
|
|
36
|
-
case 'plan_supersede':
|
|
37
|
-
return 'workspace_write';
|
|
38
|
-
case 'finalize':
|
|
39
|
-
return 'local_repo_write';
|
|
40
36
|
default:
|
|
41
37
|
return undefined;
|
|
42
38
|
}
|
|
@@ -47,7 +43,8 @@ const ALLOWED_FACADE_OPERATIONS: Record<FacadeTool, readonly string[]> = {
|
|
|
47
43
|
rh_status: ['list', 'get', 'repair'],
|
|
48
44
|
rh_inbox: ['list', 'get', 'ack', 'accept', 'resolve', 'dismiss', 'create'],
|
|
49
45
|
rh_context: ['list', 'get', 'search'],
|
|
50
|
-
rh_work:
|
|
46
|
+
rh_work: RH_WORK_MODEL_OPERATIONS,
|
|
47
|
+
capability_execute: ['execute'],
|
|
51
48
|
};
|
|
52
49
|
|
|
53
50
|
export interface SuggestedActionValidationOptions {
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
WorkContract,
|
|
3
3
|
VerificationOutcome,
|
|
4
|
-
ExecutionMode,
|
|
5
4
|
FacadeDetailLevel,
|
|
6
5
|
EvidenceRef,
|
|
7
6
|
SuggestedNextAction,
|
|
8
7
|
PolicyDecision,
|
|
9
8
|
} from '../../../../packages/kernel/work/domain/types';
|
|
10
9
|
export type {
|
|
11
|
-
ExecutionMode,
|
|
12
10
|
FacadeDetailLevel,
|
|
13
11
|
EvidenceRef,
|
|
14
12
|
SuggestedNextAction,
|
|
15
13
|
PolicyDecision,
|
|
16
14
|
} from '../../../../packages/kernel/work/domain/types';
|
|
17
|
-
import { applyRouteContextHints, decideRoute, type ExplicitTaskMode, type RouteContextHints, type RouteDecision, type RoutePolicyInput } from '../routing/route-policy';
|
|
18
15
|
import {
|
|
19
16
|
TERMINAL_PLAN_CONTRACT_STATUSES,
|
|
20
17
|
type PlanContractStatus,
|
|
@@ -28,10 +25,7 @@ export {
|
|
|
28
25
|
type PlanStepStatus,
|
|
29
26
|
} from '../../../../packages/kernel/goal/api/index';
|
|
30
27
|
|
|
31
|
-
export const
|
|
32
|
-
const _executionModesTypeCheck: readonly ExecutionMode[] = EXECUTION_MODES;
|
|
33
|
-
|
|
34
|
-
export const FACADE_TOOLS = ['rh_access', 'rh_status', 'rh_inbox', 'rh_context', 'rh_work'] as const;
|
|
28
|
+
export const FACADE_TOOLS = ['rh_access', 'rh_status', 'rh_inbox', 'rh_context', 'rh_work', 'capability_execute'] as const;
|
|
35
29
|
export type FacadeTool = (typeof FACADE_TOOLS)[number];
|
|
36
30
|
export type CapabilityExecutionSurface = FacadeTool | 'plugin_action_execute';
|
|
37
31
|
|
|
@@ -84,11 +78,11 @@ import type { HandoffStatus } from '../../../../packages/protocols/handoff/index
|
|
|
84
78
|
|
|
85
79
|
// Kernel V2: Work domain contracts are owned by packages/kernel/work/domain.
|
|
86
80
|
export {
|
|
87
|
-
|
|
81
|
+
SEMANTIC_WORK_STATES,
|
|
88
82
|
WORK_PHASES,
|
|
89
83
|
WORK_PHASE_EVIDENCE_STATES,
|
|
90
84
|
WORK_RISKS,
|
|
91
|
-
|
|
85
|
+
TERMINAL_SEMANTIC_WORK_STATES,
|
|
92
86
|
WORK_KINDS,
|
|
93
87
|
DISPATCH_STATES,
|
|
94
88
|
EVIDENCE_STATES,
|
|
@@ -100,10 +94,10 @@ export {
|
|
|
100
94
|
isReadOnlyReviewCompletionReceipt,
|
|
101
95
|
isRemoteEffectCompletionReceipt,
|
|
102
96
|
isDirectEditWorkCompletionReceipt,
|
|
103
|
-
|
|
97
|
+
isTerminalSemanticWorkState,
|
|
104
98
|
} from '../../../../packages/kernel/work/domain/types';
|
|
105
99
|
export type {
|
|
106
|
-
|
|
100
|
+
SemanticWorkState,
|
|
107
101
|
WorkPhase,
|
|
108
102
|
WorkPhaseEvidenceState,
|
|
109
103
|
WorkPhaseEvidence,
|
|
@@ -124,7 +118,6 @@ export type {
|
|
|
124
118
|
WorkReconciliationOutcome,
|
|
125
119
|
VerificationOutcome,
|
|
126
120
|
WorkContractConstraints,
|
|
127
|
-
WorkContractDriverPolicy,
|
|
128
121
|
WorktreePolicy,
|
|
129
122
|
EvidencePolicy,
|
|
130
123
|
ApprovalPolicy,
|
|
@@ -140,8 +133,6 @@ export const HANDOFF_CREATION_REASONS = [
|
|
|
140
133
|
'ambiguous_outcome',
|
|
141
134
|
'missing_authorization',
|
|
142
135
|
'invalid_objective',
|
|
143
|
-
'repeated_infrastructure_failure',
|
|
144
|
-
'codex_worker_requires_review',
|
|
145
136
|
'destructive_action_requires_confirmation',
|
|
146
137
|
] as const;
|
|
147
138
|
export type HandoffCreationReason = (typeof HANDOFF_CREATION_REASONS)[number];
|
|
@@ -163,13 +154,12 @@ export interface HandoffCurrentState {
|
|
|
163
154
|
issueId?: string;
|
|
164
155
|
taskId?: string;
|
|
165
156
|
workId?: string;
|
|
166
|
-
mode?: ExecutionMode;
|
|
167
157
|
statusSummary: string;
|
|
168
158
|
blockedBy?: string[];
|
|
169
159
|
changedFiles?: string[];
|
|
170
160
|
checks?: Array<{ checkId: string; ok: boolean; summary?: string; outcome?: VerificationOutcome }>;
|
|
171
161
|
/** Bounded durable Work semantics for a fresh controller session. */
|
|
172
|
-
workSemantics?: Pick<WorkContract, '
|
|
162
|
+
workSemantics?: Pick<WorkContract, 'semanticState' | 'phase' | 'workKind' | 'dispatchState' | 'evidenceState' | 'completionOutcome'>;
|
|
173
163
|
reconciliationRequired?: boolean;
|
|
174
164
|
nextSafeAction?: string;
|
|
175
165
|
}
|
|
@@ -187,6 +177,8 @@ export interface HandoffItem {
|
|
|
187
177
|
id: string;
|
|
188
178
|
repoId: string;
|
|
189
179
|
workId?: string;
|
|
180
|
+
/** Canonical person-only blocker/decision authority when this legacy Handoff projects one. */
|
|
181
|
+
canonicalUserRequestId?: string;
|
|
190
182
|
issueId?: string;
|
|
191
183
|
taskId?: string;
|
|
192
184
|
title: string;
|
|
@@ -226,6 +218,26 @@ export type {
|
|
|
226
218
|
ControllerLease,
|
|
227
219
|
ControllerRoundContext,
|
|
228
220
|
} from '../../../../packages/kernel/controller/domain/types';
|
|
221
|
+
export interface PlanSemanticItem {
|
|
222
|
+
id: string;
|
|
223
|
+
objective: string;
|
|
224
|
+
dependencies: string[];
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export interface PlanSemanticContext {
|
|
228
|
+
/** Requirement semantic revision used as planning provenance; never an execution gate. */
|
|
229
|
+
requirementBasisRevision?: number;
|
|
230
|
+
sourceBasisRevision: string;
|
|
231
|
+
goal: string;
|
|
232
|
+
nonGoals: string[];
|
|
233
|
+
assumptions: string[];
|
|
234
|
+
resolvedDecisions: string[];
|
|
235
|
+
stopConditions: string[];
|
|
236
|
+
replanConditions: string[];
|
|
237
|
+
integrationStrategy?: string;
|
|
238
|
+
items: PlanSemanticItem[];
|
|
239
|
+
}
|
|
240
|
+
|
|
229
241
|
export interface PlanStep {
|
|
230
242
|
id: string;
|
|
231
243
|
objective: string;
|
|
@@ -297,7 +309,8 @@ export interface PlanRevisionDraft {
|
|
|
297
309
|
* never own active scope, Work, scheduling, or admission authority. */
|
|
298
310
|
export interface PlanRevisionRecord {
|
|
299
311
|
schemaVersion: 1;
|
|
300
|
-
|
|
312
|
+
/** Node-local placement provenance; absent for a ForgeInstance-scoped Plan. */
|
|
313
|
+
repoId?: string;
|
|
301
314
|
planId: string;
|
|
302
315
|
revision: number;
|
|
303
316
|
requirementId?: string;
|
|
@@ -323,9 +336,16 @@ export interface PlanRevisionRecord {
|
|
|
323
336
|
export interface PlanContract {
|
|
324
337
|
schemaVersion: 1;
|
|
325
338
|
planId: string;
|
|
326
|
-
/**
|
|
339
|
+
/** Legacy PlanContract lifecycle revision retained during authority migration. */
|
|
327
340
|
revision?: number;
|
|
328
|
-
|
|
341
|
+
/** Thin model-authored Plan revision, independent from lifecycle/step execution updates. */
|
|
342
|
+
semanticRevision?: number;
|
|
343
|
+
/** Timestamp of the model-authored Plan content; lifecycle/step updates must not change it. */
|
|
344
|
+
semanticUpdatedAt?: string;
|
|
345
|
+
/** Thin model-authored working memory. Once present, legacy steps/status cannot rewrite semantic Plan content. */
|
|
346
|
+
semanticContext?: PlanSemanticContext;
|
|
347
|
+
/** @deprecated Node-local placement compatibility field; absent for a ForgeInstance-scoped Plan. */
|
|
348
|
+
repoId?: string;
|
|
329
349
|
/** Stable Requirement owner. Legacy plans may omit this until portfolio migration. */
|
|
330
350
|
requirementId?: string;
|
|
331
351
|
scopeKey: string;
|
|
@@ -389,27 +409,18 @@ export interface CapabilityGroupSummary {
|
|
|
389
409
|
schemaExposures: CapabilitySchemaExposure[];
|
|
390
410
|
}
|
|
391
411
|
|
|
392
|
-
|
|
412
|
+
/**
|
|
413
|
+
* Concrete mechanical facts about one Work start request. Forge validates and
|
|
414
|
+
* persists these; it never derives engineering method, worker/provider choice,
|
|
415
|
+
* verification, review, or completion from them. Choosing durable Work at all
|
|
416
|
+
* is the caller's explicit decision to invoke this capability.
|
|
417
|
+
*/
|
|
418
|
+
export interface WorkStartFacts {
|
|
393
419
|
objective?: string;
|
|
394
|
-
expectedFiles?: number;
|
|
395
|
-
expectedChangedLines?: number;
|
|
396
420
|
scopeClear: boolean;
|
|
397
|
-
|
|
398
|
-
workspaceDirty?: boolean;
|
|
399
|
-
workspaceFingerprint?: string;
|
|
400
|
-
checkoutId?: string;
|
|
401
|
-
/** Canonical typed placement constraint; never inferred from objective text. */
|
|
402
|
-
workspacePlacement?: 'current' | 'isolated' | 'auto';
|
|
403
|
-
/** Admission fence that has precedence over explicit Direct routing. */
|
|
404
|
-
directMainProhibited?: boolean;
|
|
405
|
-
requiresInvestigation?: boolean;
|
|
406
|
-
requiresLongRunningChecks?: boolean;
|
|
407
|
-
requiresParallelism?: boolean;
|
|
408
|
-
explicitMode?: ExplicitTaskMode;
|
|
409
|
-
needsDependencies?: boolean;
|
|
421
|
+
mutation?: boolean;
|
|
410
422
|
requiresRecovery?: boolean;
|
|
411
|
-
/** True
|
|
412
|
-
requiresWorker?: boolean;
|
|
423
|
+
/** True when the request causes an effect outside the checkout (plugin action, remote publish). */
|
|
413
424
|
requiresExternalEffect?: boolean;
|
|
414
425
|
requiresApproval?: boolean;
|
|
415
426
|
requiresUserApproval?: boolean;
|
|
@@ -417,76 +428,6 @@ export interface ExecutionModeSelectionInput {
|
|
|
417
428
|
destructive?: boolean;
|
|
418
429
|
remoteWrite?: boolean;
|
|
419
430
|
secretAccess?: boolean;
|
|
420
|
-
mutation?: boolean;
|
|
421
431
|
risk?: CapabilityRisk;
|
|
422
|
-
|
|
423
|
-
contextRouteHints?: RouteContextHints;
|
|
424
|
-
/** Migration/testing escape hatch: adapters must return this exact policy decision. */
|
|
425
|
-
routePolicyInput?: RoutePolicyInput;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
export interface ExecutionModeSelection {
|
|
429
|
-
mode: ExecutionMode;
|
|
430
|
-
reason: string;
|
|
431
|
-
missingContractFields: string[];
|
|
432
|
-
createWorkContract: boolean;
|
|
433
|
-
createHandoff: boolean;
|
|
434
|
-
requiresWork: boolean;
|
|
435
|
-
routeDecision: RouteDecision;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/** @deprecated Compatibility adapter. Route Policy is the sole routing authority. */
|
|
439
|
-
export function selectExecutionMode(input: ExecutionModeSelectionInput): ExecutionModeSelection {
|
|
440
|
-
const missingContractFields: string[] = [];
|
|
441
|
-
if (!input.scopeClear) missingContractFields.push('scopeSummary', 'acceptanceCriteria', 'allowedPaths');
|
|
442
|
-
if (input.objective !== undefined && input.objective.trim().length === 0) missingContractFields.push('objective');
|
|
443
|
-
const baseRoutePolicyInput: RoutePolicyInput = input.routePolicyInput ?? {
|
|
444
|
-
intent: {
|
|
445
|
-
objective: input.objective ?? (input.scopeClear ? 'bounded repository work' : ''),
|
|
446
|
-
scopeClear: input.scopeClear,
|
|
447
|
-
mutation: input.mutation ?? input.risk !== 'readonly',
|
|
448
|
-
expectedFiles: input.expectedFiles,
|
|
449
|
-
expectedChangedLines: input.expectedChangedLines,
|
|
450
|
-
requiresInvestigation: input.requiresInvestigation,
|
|
451
|
-
requiresLongRunningChecks: input.requiresLongRunningChecks,
|
|
452
|
-
requiresParallelism: input.requiresParallelism,
|
|
453
|
-
explicitMode: input.explicitMode,
|
|
454
|
-
needsDependencies: input.needsDependencies,
|
|
455
|
-
agentRequested: input.requiresWorker,
|
|
456
|
-
},
|
|
457
|
-
workspace: {
|
|
458
|
-
knownPaths: input.knownPaths,
|
|
459
|
-
dirty: input.workspaceDirty,
|
|
460
|
-
checkoutId: input.checkoutId,
|
|
461
|
-
fingerprint: input.workspaceFingerprint,
|
|
462
|
-
placement: input.workspacePlacement,
|
|
463
|
-
directMainProhibited: input.directMainProhibited,
|
|
464
|
-
},
|
|
465
|
-
policy: {
|
|
466
|
-
risk: input.risk,
|
|
467
|
-
requiresApproval: input.requiresApproval,
|
|
468
|
-
requiresUserApproval: input.requiresUserApproval,
|
|
469
|
-
approvalConfirmed: input.approvalConfirmed,
|
|
470
|
-
destructive: input.destructive,
|
|
471
|
-
remoteWrite: input.remoteWrite,
|
|
472
|
-
secretAccess: input.secretAccess,
|
|
473
|
-
},
|
|
474
|
-
capabilities: {
|
|
475
|
-
requiresWorker: input.requiresWorker,
|
|
476
|
-
requiresExternalEffect: input.requiresExternalEffect,
|
|
477
|
-
},
|
|
478
|
-
recovery: {
|
|
479
|
-
required: input.requiresRecovery,
|
|
480
|
-
},
|
|
481
|
-
};
|
|
482
|
-
const routeDecision = decideRoute(applyRouteContextHints(baseRoutePolicyInput, input.contextRouteHints));
|
|
483
|
-
return {
|
|
484
|
-
mode: routeDecision.executionMode,
|
|
485
|
-
reason: routeDecision.reasons.map((reason) => reason.message).join(' '),
|
|
486
|
-
missingContractFields: routeDecision.executionMode === 'handoff_only' && missingContractFields.length > 0 ? missingContractFields : [],
|
|
487
|
-
createWorkContract: routeDecision.requiresWork,
|
|
488
|
-
createHandoff: routeDecision.createHandoff,
|
|
489
|
-
requiresWork: routeDecision.requiresWork,
|
|
490
|
-
routeDecision,
|
|
491
|
-
};
|
|
432
|
+
workspaceDirty?: boolean;
|
|
492
433
|
}
|
|
@@ -14,8 +14,8 @@ export interface WorkContinuationSnapshot {
|
|
|
14
14
|
worktreeRef?: string;
|
|
15
15
|
};
|
|
16
16
|
semantics: {
|
|
17
|
+
state: WorkContract['semanticState'];
|
|
17
18
|
phase: WorkContract['phase'];
|
|
18
|
-
status: WorkContract['status'];
|
|
19
19
|
workKind: WorkContract['workKind'];
|
|
20
20
|
dispatchState: WorkContract['dispatchState'];
|
|
21
21
|
evidenceState: WorkContract['evidenceState'];
|
|
@@ -43,16 +43,16 @@ function boundedText(value: string | undefined, maximum: number): string | undef
|
|
|
43
43
|
function nextSafeAction(contract: WorkContract, reconciliationRequired: boolean): string {
|
|
44
44
|
if (reconciliationRequired) return 'Inspect the recorded reconciliation and decide whether to accept, reject, or supersede it; do not infer completion.';
|
|
45
45
|
if (contract.evidenceState === 'stale' || contract.evidenceState === 'contradictory') return 'Re-run required validation against the current bound revision before finalization.';
|
|
46
|
-
if (contract.
|
|
47
|
-
if (contract.
|
|
48
|
-
if (contract.
|
|
49
|
-
if (contract.
|
|
50
|
-
return '
|
|
46
|
+
if (contract.semanticState === 'completed') return 'Read retained result/evidence references; no further mutation is implied.';
|
|
47
|
+
if (contract.semanticState === 'cancelled') return 'This Work is cancelled and cannot be reopened; create an explicit successor Work if the objective must continue.';
|
|
48
|
+
if (contract.dispatchState === 'running' || contract.dispatchState === 'launching' || contract.dispatchState === 'claimed') return 'Inspect the bound Work and its durable process/check evidence; do not resubmit the same request ID.';
|
|
49
|
+
if (contract.evidenceState === 'failed' || contract.phaseEvidence[contract.phase].state === 'failed') return 'Inspect failure evidence and choose an explicit repair, reconciliation, or stop action.';
|
|
50
|
+
return 'Execute the next authorized step within this Work scope; inspect existing writer and process conflicts before mutating shared resources.';
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* Redacted, bounded state needed by a fresh controller session. This is a
|
|
55
|
-
* projection only: it never
|
|
55
|
+
* projection only: it never changes semantic state or interprets a reconciliation
|
|
56
56
|
* as completion.
|
|
57
57
|
*/
|
|
58
58
|
export function buildWorkContinuationSnapshot(contract: WorkContract): WorkContinuationSnapshot {
|
|
@@ -82,8 +82,8 @@ export function buildWorkContinuationSnapshot(contract: WorkContract): WorkConti
|
|
|
82
82
|
worktreeRef: contract.worktreeRef,
|
|
83
83
|
},
|
|
84
84
|
semantics: {
|
|
85
|
+
state: contract.semanticState,
|
|
85
86
|
phase: contract.phase,
|
|
86
|
-
status: contract.status,
|
|
87
87
|
workKind: contract.workKind,
|
|
88
88
|
dispatchState: contract.dispatchState,
|
|
89
89
|
evidenceState: contract.evidenceState,
|
|
@@ -25,6 +25,7 @@ export interface GeneratedCacheRetentionOptions {
|
|
|
25
25
|
maxEntries?: number;
|
|
26
26
|
maxRemovals?: number;
|
|
27
27
|
processCommands?: string[];
|
|
28
|
+
rootStartIndex?: number;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
export interface GeneratedCacheRetentionReport {
|
|
@@ -37,6 +38,19 @@ export interface GeneratedCacheRetentionReport {
|
|
|
37
38
|
budgetExhausted: boolean;
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
export interface GeneratedCacheRepositoryRootSet {
|
|
42
|
+
canonicalRoot: string;
|
|
43
|
+
checkouts: ReadonlyArray<{
|
|
44
|
+
localRoot: string;
|
|
45
|
+
worktree: boolean;
|
|
46
|
+
lifecycle?: 'active' | 'removed' | 'archived';
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface RepositoryGeneratedCacheRetentionReport extends GeneratedCacheRetentionReport {
|
|
51
|
+
rootsInspected: number;
|
|
52
|
+
}
|
|
53
|
+
|
|
40
54
|
export type BrowserDisposableArtifactKind = 'screenshots' | 'downloads' | 'diagnostics';
|
|
41
55
|
|
|
42
56
|
export interface BrowserArtifactRetentionOptions {
|
|
@@ -171,6 +185,10 @@ function directChildFiles(root: string, budget: { remaining: number }): string[]
|
|
|
171
185
|
return found;
|
|
172
186
|
}
|
|
173
187
|
|
|
188
|
+
function isDerivedDataDirectoryName(name: string): boolean {
|
|
189
|
+
return name === 'DerivedData' || name.startsWith('DerivedData-');
|
|
190
|
+
}
|
|
191
|
+
|
|
174
192
|
function nestedDerivedDataDirectories(root: string, maxDepth: number, budget: { remaining: number }): string[] {
|
|
175
193
|
if (!existsSync(root) || budget.remaining <= 0) return [];
|
|
176
194
|
const found: string[] = [];
|
|
@@ -183,7 +201,7 @@ function nestedDerivedDataDirectories(root: string, maxDepth: number, budget: {
|
|
|
183
201
|
budget.remaining -= 1;
|
|
184
202
|
if (!entry.isDirectory()) continue;
|
|
185
203
|
const path = join(dir, String(entry.name));
|
|
186
|
-
if (String(entry.name)
|
|
204
|
+
if (isDerivedDataDirectoryName(String(entry.name))) {
|
|
187
205
|
found.push(path);
|
|
188
206
|
continue;
|
|
189
207
|
}
|
|
@@ -313,6 +331,84 @@ export function cleanupGeneratedRepositoryCaches(
|
|
|
313
331
|
return report;
|
|
314
332
|
}
|
|
315
333
|
|
|
334
|
+
/**
|
|
335
|
+
* Apply the same generated-cache policy to the canonical checkout and every
|
|
336
|
+
* active managed worktree, sharing one scan/removal budget across the whole
|
|
337
|
+
* repository. Work lifecycle is intentionally not cache authority: stale but
|
|
338
|
+
* recoverable Work may keep its source checkout while rebuildable caches age
|
|
339
|
+
* out independently. Active build/test processes are still protected by
|
|
340
|
+
* cleanupGeneratedRepositoryCaches().
|
|
341
|
+
*/
|
|
342
|
+
export function cleanupGeneratedRepositoryCheckoutCaches(
|
|
343
|
+
repository: GeneratedCacheRepositoryRootSet,
|
|
344
|
+
options: GeneratedCacheRetentionOptions = {},
|
|
345
|
+
): RepositoryGeneratedCacheRetentionReport {
|
|
346
|
+
let remainingEntries = Math.max(1, Math.floor(options.maxEntries ?? DEFAULT_SCAN_BUDGET));
|
|
347
|
+
let remainingRemovals = Math.max(1, Math.floor(options.maxRemovals ?? DEFAULT_REMOVAL_BUDGET));
|
|
348
|
+
const processCommands = options.processCommands ?? collectProcessCommands();
|
|
349
|
+
const roots = [
|
|
350
|
+
repository.canonicalRoot,
|
|
351
|
+
...repository.checkouts
|
|
352
|
+
.filter((checkout) => checkout.worktree && (checkout.lifecycle ?? 'active') === 'active')
|
|
353
|
+
.map((checkout) => checkout.localRoot),
|
|
354
|
+
].filter((root, index, values) => values.findIndex((item) => canonical(item) === canonical(root)) === index);
|
|
355
|
+
if (roots.length > 1) {
|
|
356
|
+
const offset = ((Math.trunc(options.rootStartIndex ?? 0) % roots.length) + roots.length) % roots.length;
|
|
357
|
+
roots.push(...roots.splice(0, offset));
|
|
358
|
+
}
|
|
359
|
+
const rawRoots = roots.map((root) => resolve(root));
|
|
360
|
+
const canonicalRoots = roots.map((root) => canonical(root));
|
|
361
|
+
const processCommandsForRoot = (root: string): string[] => {
|
|
362
|
+
const rawRoot = resolve(root);
|
|
363
|
+
const canonicalRoot = canonical(root);
|
|
364
|
+
return processCommands.filter((command) => {
|
|
365
|
+
const referencedRootIndexes = rawRoots
|
|
366
|
+
.map((candidate, index) => command.includes(candidate) || command.includes(canonicalRoots[index]!) ? index : -1)
|
|
367
|
+
.filter((index) => index >= 0);
|
|
368
|
+
if (referencedRootIndexes.length === 0) return true;
|
|
369
|
+
return referencedRootIndexes.some((index) => rawRoots[index] === rawRoot || canonicalRoots[index] === canonicalRoot);
|
|
370
|
+
});
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
const aggregate: RepositoryGeneratedCacheRetentionReport = {
|
|
374
|
+
rootsInspected: 0,
|
|
375
|
+
inspected: 0,
|
|
376
|
+
eligible: 0,
|
|
377
|
+
removedPaths: [],
|
|
378
|
+
retainedPaths: [],
|
|
379
|
+
skippedByReason: {},
|
|
380
|
+
errors: [],
|
|
381
|
+
budgetExhausted: false,
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
for (const root of roots) {
|
|
385
|
+
if (remainingEntries <= 0 || remainingRemovals <= 0) {
|
|
386
|
+
aggregate.budgetExhausted = true;
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
const report = cleanupGeneratedRepositoryCaches(root, {
|
|
390
|
+
...options,
|
|
391
|
+
processCommands: processCommandsForRoot(root),
|
|
392
|
+
maxEntries: remainingEntries,
|
|
393
|
+
maxRemovals: remainingRemovals,
|
|
394
|
+
});
|
|
395
|
+
aggregate.rootsInspected += 1;
|
|
396
|
+
aggregate.inspected += report.inspected;
|
|
397
|
+
aggregate.eligible += report.eligible;
|
|
398
|
+
aggregate.removedPaths.push(...report.removedPaths.map((path) => `${root}:${path}`));
|
|
399
|
+
aggregate.retainedPaths.push(...report.retainedPaths.map((path) => `${root}:${path}`));
|
|
400
|
+
for (const [reason, count] of Object.entries(report.skippedByReason)) {
|
|
401
|
+
aggregate.skippedByReason[reason] = (aggregate.skippedByReason[reason] ?? 0) + count;
|
|
402
|
+
}
|
|
403
|
+
aggregate.errors.push(...report.errors.map((error) => `${root}:${error}`));
|
|
404
|
+
remainingEntries = Math.max(0, remainingEntries - report.inspected);
|
|
405
|
+
remainingRemovals = Math.max(0, remainingRemovals - report.removedPaths.length);
|
|
406
|
+
aggregate.budgetExhausted ||= report.budgetExhausted;
|
|
407
|
+
}
|
|
408
|
+
if (remainingEntries <= 0 || remainingRemovals <= 0) aggregate.budgetExhausted = true;
|
|
409
|
+
return aggregate;
|
|
410
|
+
}
|
|
411
|
+
|
|
316
412
|
function emptyBrowserArtifactClassReport(): BrowserArtifactClassRetentionReport {
|
|
317
413
|
return {
|
|
318
414
|
inspected: 0,
|