@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
package/adapters/mcp/server.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { callExecutionTool } from './runtime-gateway/execution-tools';
|
|
|
19
19
|
import { callProcessTool } from './runtime-gateway/process-tools';
|
|
20
20
|
import { injectDurableCommandFields, isGatewayIsolatedTool, routeDurableMcpCall } from './runtime-gateway/router';
|
|
21
21
|
import { controllerExposureSnapshot, isControllerToolExposed } from './toolset';
|
|
22
|
+
import { settleCognitionAfterTool } from './runtime-gateway/cognition-settlement';
|
|
22
23
|
import { randomUUID } from 'crypto';
|
|
23
24
|
import { readFileSync } from 'fs';
|
|
24
25
|
import { join } from 'path';
|
|
@@ -28,6 +29,7 @@ import { getRuntimeWriteClaim } from '../../src/runtime/root/write-fence';
|
|
|
28
29
|
import { recordMcpIncident, recordMcpTiming, type McpTimingTrace } from '../../src/runtime/diagnostics/mcp-timing';
|
|
29
30
|
import { maybeRegisterMcpIncidentRepair } from '../../src/runtime/diagnostics/incident-repair';
|
|
30
31
|
import { FORGE_VERSION, forgeToolSurfaceFingerprint } from '../../src/cli/controller/runtime-config';
|
|
32
|
+
import { RUNTIME_MCP_CUTOVER_OUTCOME_UNKNOWN } from '../../src/runtime/root/mcp-transport';
|
|
31
33
|
|
|
32
34
|
export type { McpServerOptions } from './multi-repository';
|
|
33
35
|
export { buildMultiRepositoryToolDefinitions, callMultiRepositoryTool } from './multi-repository';
|
|
@@ -45,9 +47,11 @@ function isMultiRepositoryContext(ctx: ServerToolContext): ctx is MultiRepositor
|
|
|
45
47
|
return 'controllerHome' in ctx;
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
function recordRequestId(args: Record<string, unknown>,
|
|
50
|
+
function recordRequestId(args: Record<string, unknown>, _rpcId: string | number | undefined): string {
|
|
49
51
|
const explicit = typeof args.request_id === 'string' ? args.request_id.trim() : '';
|
|
50
|
-
|
|
52
|
+
// Transport RPC ids are connection-local correlation only. They are not a
|
|
53
|
+
// semantic idempotency authority and may be recycled across unrelated calls.
|
|
54
|
+
return explicit || `mcp-call:${randomUUID()}`;
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
function firstTimingString(...values: unknown[]): string | undefined {
|
|
@@ -208,6 +212,7 @@ async function traceControllerMcpRequest(
|
|
|
208
212
|
...(rpcId === undefined ? {} : { rpcId }),
|
|
209
213
|
layer: ctx.runtimeSourceRoot ? 'canonical_runtime' : 'public_gateway',
|
|
210
214
|
startedAt: startedAtWall,
|
|
215
|
+
...(ctx.hostConversationSessionId?.trim() ? { hostConversationSessionId: ctx.hostConversationSessionId.trim() } : {}),
|
|
211
216
|
outcome,
|
|
212
217
|
...(errorCode ? { errorCode } : {}),
|
|
213
218
|
...executionIdentity,
|
|
@@ -414,6 +419,7 @@ interface CanonicalRuntimeForwardingIdentity {
|
|
|
414
419
|
principalId?: string;
|
|
415
420
|
sessionId?: string;
|
|
416
421
|
controllerType?: ForwardedControllerType;
|
|
422
|
+
hostConversationSessionId?: string;
|
|
417
423
|
}
|
|
418
424
|
|
|
419
425
|
function boundedForwardedIdentity(value: unknown): string | undefined {
|
|
@@ -422,18 +428,26 @@ function boundedForwardedIdentity(value: unknown): string | undefined {
|
|
|
422
428
|
return normalized ? normalized.slice(0, 512) : undefined;
|
|
423
429
|
}
|
|
424
430
|
|
|
431
|
+
/** ChatGPT supplies this as an anonymized same-conversation correlation fact. It is not an auth token or URL. */
|
|
432
|
+
export function chatgptHostSessionIdFromMcpMeta(meta: unknown): string | undefined {
|
|
433
|
+
if (!meta || typeof meta !== 'object' || Array.isArray(meta)) return undefined;
|
|
434
|
+
return boundedForwardedIdentity((meta as Record<string, unknown>)['openai/session']);
|
|
435
|
+
}
|
|
436
|
+
|
|
425
437
|
export function canonicalRuntimeForwardingIdentity(meta: unknown): CanonicalRuntimeForwardingIdentity {
|
|
426
438
|
if (!meta || typeof meta !== 'object' || Array.isArray(meta)) return {};
|
|
427
439
|
const envelope = (meta as Record<string, unknown>)[CANONICAL_RUNTIME_FORWARD_META_KEY];
|
|
428
440
|
if (!envelope || typeof envelope !== 'object' || Array.isArray(envelope)) return {};
|
|
429
441
|
const record = envelope as Record<string, unknown>;
|
|
430
442
|
const controllerType = boundedForwardedIdentity(record.controllerType);
|
|
443
|
+
const hostConversationSessionId = boundedForwardedIdentity(record.hostConversationSessionId);
|
|
431
444
|
return {
|
|
432
445
|
principalId: boundedForwardedIdentity(record.principalId),
|
|
433
446
|
sessionId: boundedForwardedIdentity(record.sessionId),
|
|
434
447
|
...(controllerType && ['chatgpt', 'codex', 'claude', 'grok', 'human'].includes(controllerType)
|
|
435
448
|
? { controllerType: controllerType as ForwardedControllerType }
|
|
436
449
|
: {}),
|
|
450
|
+
...(hostConversationSessionId ? { hostConversationSessionId } : {}),
|
|
437
451
|
};
|
|
438
452
|
}
|
|
439
453
|
|
|
@@ -443,18 +457,27 @@ function canonicalRuntimeForwardingMeta(ctx: MultiRepositoryMcpToolContext): Rec
|
|
|
443
457
|
...(ctx.principalId?.trim() ? { principalId: ctx.principalId.trim() } : {}),
|
|
444
458
|
...(ctx.sessionId?.trim() ? { sessionId: ctx.sessionId.trim() } : {}),
|
|
445
459
|
...(ctx.controllerType ? { controllerType: ctx.controllerType } : {}),
|
|
460
|
+
...(ctx.hostConversationSessionId?.trim() ? { hostConversationSessionId: ctx.hostConversationSessionId.trim() } : {}),
|
|
446
461
|
},
|
|
447
462
|
};
|
|
448
463
|
}
|
|
449
464
|
|
|
450
465
|
function canonicalRuntimeRequestContext(baseContext: ServerToolContext, meta: unknown): ServerToolContext {
|
|
451
|
-
if (!isMultiRepositoryContext(baseContext)
|
|
466
|
+
if (!isMultiRepositoryContext(baseContext)) return baseContext;
|
|
467
|
+
// Host metadata is request-scoped correlation only. The public Gateway carries
|
|
468
|
+
// it through its private forwarding envelope so Canonical Runtime does not lose
|
|
469
|
+
// the ChatGPT conversation scope during the proxy hop.
|
|
470
|
+
const hostConversationSessionId = chatgptHostSessionIdFromMcpMeta(meta);
|
|
471
|
+
if (!baseContext.runtimeSourceRoot) {
|
|
472
|
+
return hostConversationSessionId ? { ...baseContext, hostConversationSessionId } : baseContext;
|
|
473
|
+
}
|
|
452
474
|
const forwarded = canonicalRuntimeForwardingIdentity(meta);
|
|
453
475
|
return {
|
|
454
476
|
...baseContext,
|
|
455
477
|
...(forwarded.principalId ? { principalId: forwarded.principalId } : {}),
|
|
456
478
|
...(forwarded.sessionId ? { sessionId: forwarded.sessionId } : {}),
|
|
457
479
|
...(forwarded.controllerType ? { controllerType: forwarded.controllerType } : {}),
|
|
480
|
+
...(forwarded.hostConversationSessionId ? { hostConversationSessionId: forwarded.hostConversationSessionId } : {}),
|
|
458
481
|
};
|
|
459
482
|
}
|
|
460
483
|
|
|
@@ -490,6 +513,20 @@ export function canonicalRuntimeToolCallIsReplaySafe(name: string, args: Record<
|
|
|
490
513
|
return Boolean(workId && requestId);
|
|
491
514
|
}
|
|
492
515
|
|
|
516
|
+
export function canonicalRuntimeToolCallFailureIsCutoverOutcomeUnknown(error: unknown): boolean {
|
|
517
|
+
if (!error || typeof error !== 'object') return false;
|
|
518
|
+
const record = error as { code?: unknown; message?: unknown; data?: unknown };
|
|
519
|
+
const message = typeof record.message === 'string' ? record.message : '';
|
|
520
|
+
if (SdkHttpError.isInstance(error)) {
|
|
521
|
+
return error.status === 409 && (
|
|
522
|
+
message.includes(RUNTIME_MCP_CUTOVER_OUTCOME_UNKNOWN)
|
|
523
|
+
|| message.toLowerCase().includes('runtime cutover outcome unknown')
|
|
524
|
+
|| JSON.stringify(record.data ?? '').includes(RUNTIME_MCP_CUTOVER_OUTCOME_UNKNOWN)
|
|
525
|
+
);
|
|
526
|
+
}
|
|
527
|
+
return record.code === -32000 && message === RUNTIME_MCP_CUTOVER_OUTCOME_UNKNOWN;
|
|
528
|
+
}
|
|
529
|
+
|
|
493
530
|
export function canonicalRuntimeToolCallFailureIsTransient(error: unknown): boolean {
|
|
494
531
|
if (SdkHttpError.isInstance(error)) return error.status === 404;
|
|
495
532
|
if (SdkError.isInstance(error)) {
|
|
@@ -516,6 +553,9 @@ export async function callCanonicalRuntimeToolWithReplay<T>(input: {
|
|
|
516
553
|
try {
|
|
517
554
|
return await input.call();
|
|
518
555
|
} catch (error) {
|
|
556
|
+
if (canonicalRuntimeToolCallFailureIsCutoverOutcomeUnknown(error)) {
|
|
557
|
+
throw new Error(`${RUNTIME_MCP_CUTOVER_OUTCOME_UNKNOWN}: Canonical Runtime entered cutover after request admission; reconcile the original request/effect identity before retrying.`);
|
|
558
|
+
}
|
|
519
559
|
if (!canonicalRuntimeToolCallIsReplaySafe(input.name, input.args)
|
|
520
560
|
|| !canonicalRuntimeToolCallFailureIsTransient(error)) {
|
|
521
561
|
throw error;
|
|
@@ -1013,29 +1053,33 @@ export function createForgeMcpServerFromContext(
|
|
|
1013
1053
|
// Gateway processes from acquiring Process Runtime leases or evaluating
|
|
1014
1054
|
// Runtime source coherence against their own checkout.
|
|
1015
1055
|
if (!getRuntimeWriteClaim()) {
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1056
|
+
// Keep trace correlation separate from Tool Contract idempotency. Only
|
|
1057
|
+
// a caller-supplied request_id may authorize semantic replay/dedup.
|
|
1058
|
+
const forwardedArgs = args;
|
|
1019
1059
|
if (runtimeProxy && runtimeSchema) return runtimeProxy.callTool(ctx, name, forwardedArgs, phaseTimings);
|
|
1020
1060
|
if (runtimeProxy && observeRuntimeStatus(ctx.controllerHome).ready) return runtimeProxy.callTool(ctx, name, forwardedArgs, phaseTimings);
|
|
1021
1061
|
}
|
|
1022
|
-
const
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1062
|
+
const executeLocalTool = async (): Promise<CallToolResult> => {
|
|
1063
|
+
const accessResult = callAccessTool(ctx, name, args);
|
|
1064
|
+
if (accessResult) return accessResult;
|
|
1065
|
+
const executionResult = await callExecutionTool(ctx, name, args);
|
|
1066
|
+
if (executionResult) return executionResult;
|
|
1067
|
+
const processResult = await callProcessTool(ctx, name, args);
|
|
1068
|
+
if (processResult) return processResult;
|
|
1069
|
+
if (isGatewayIsolatedTool(name)) {
|
|
1070
|
+
const isolatedResult = await routeDurableMcpCall(ctx, name, args, { allowReadOnly: true, forceDurable: true });
|
|
1071
|
+
if (isolatedResult) return isolatedResult;
|
|
1072
|
+
}
|
|
1073
|
+
const runtimeResult = await callRuntimeTool(ctx, name, args);
|
|
1074
|
+
if (runtimeResult) return runtimeResult;
|
|
1075
|
+
const durableResult = await routeDurableMcpCall(ctx, name, args);
|
|
1076
|
+
if (durableResult) return durableResult;
|
|
1077
|
+
const repositoryResult = await callRepositoryToolWithPostFinalizeAttribution(ctx.controllerHome, name, args, ctx);
|
|
1078
|
+
if (repositoryResult) return repositoryResult;
|
|
1079
|
+
return await callMultiRepositoryTool(ctx, name, args);
|
|
1080
|
+
};
|
|
1081
|
+
const localResult = await executeLocalTool();
|
|
1082
|
+
return settleCognitionAfterTool(ctx, name, args, localResult) ?? localResult;
|
|
1039
1083
|
});
|
|
1040
1084
|
}
|
|
1041
1085
|
return callMcpTool(ctx, name, args);
|
package/adapters/mcp/setup.ts
CHANGED
|
@@ -419,11 +419,10 @@ export function runMcpSetupChatgpt(opts: {
|
|
|
419
419
|
enabled: false,
|
|
420
420
|
host: existingConfig?.localController?.host ?? "127.0.0.1",
|
|
421
421
|
port: localControllerPort,
|
|
422
|
-
autoOpen: false,
|
|
423
422
|
mode: "disabled",
|
|
424
423
|
}
|
|
425
424
|
: {
|
|
426
|
-
...(existingConfig?.localController ?? { enabled: true, host: "127.0.0.1"
|
|
425
|
+
...(existingConfig?.localController ?? { enabled: true, host: "127.0.0.1" }),
|
|
427
426
|
port: localControllerPort,
|
|
428
427
|
},
|
|
429
428
|
devMode: {
|
|
@@ -701,7 +700,6 @@ export function runMcpDoctor(opts: {
|
|
|
701
700
|
enabled: localConfig?.localController?.enabled ?? true,
|
|
702
701
|
host: localConfig?.localController?.host ?? "127.0.0.1",
|
|
703
702
|
port: localConfig?.localController?.port ?? 8766,
|
|
704
|
-
autoOpen: localConfig?.localController?.autoOpen ?? false,
|
|
705
703
|
},
|
|
706
704
|
devMode: {
|
|
707
705
|
agentRunner: localConfig?.devMode?.agentRunner === true,
|
|
@@ -68,30 +68,23 @@ import {
|
|
|
68
68
|
updateTask,
|
|
69
69
|
} from "../../../src/cli/controller/issue-store";
|
|
70
70
|
import { applyMigratedIssueDecision } from '../../../src/cli/controller/migrated-issue-decision';
|
|
71
|
-
import { legacyIssueAuthorityRetired } from '../../../src/cli/controller/legacy-issue-cutover';
|
|
72
71
|
import {
|
|
73
72
|
listControllerChecks,
|
|
74
73
|
} from "../../../src/cli/controller/check-runner";
|
|
75
74
|
import { normalizeCheckIds } from '../../../src/runtime/control-plane/facade/check-normalization';
|
|
76
75
|
import { buildExecutionDiagnostics, buildRequirementBoard } from '../../../src/runtime/control-plane/facade/requirement-board';
|
|
77
|
-
import { acceptVerifiedTaskFromControllerWork } from '../../../src/runtime/control-plane/execution/work-task-receipt';
|
|
78
76
|
import { getWorkContract } from '../../../packages/kernel/work/api';
|
|
79
77
|
import { admitDirectEditWorkContract } from '../../../src/runtime/control-plane/facade/repository-work-admission';
|
|
80
|
-
import { decideRoute } from '../../../src/runtime/control-plane/routing/route-policy';
|
|
81
78
|
import { listCapabilityDescriptors, summarizeCapabilityGroups } from '../../../src/runtime/control-plane/facade/capability-registry';
|
|
82
79
|
import {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
} from "../../../src/cli/controller/progress";
|
|
88
|
-
import { exportControllerWorklog, parseWorklogCategory } from "../../../src/cli/controller/worklog";
|
|
80
|
+
exportControllerWorklog,
|
|
81
|
+
listControllerWorklogEvents,
|
|
82
|
+
parseWorklogCategory,
|
|
83
|
+
} from "../../../src/cli/controller/worklog";
|
|
89
84
|
import { inspectProjectGovernance, reconcileProjectGovernance } from "../../../src/cli/controller/governance";
|
|
90
|
-
import { assessWorkMode, parseExplicitTaskMode } from "../../../src/cli/controller/work-mode";
|
|
91
85
|
import { taskExecutionPolicy } from "../../../src/cli/controller/execution-policy";
|
|
92
86
|
import { finishEditSession, finishTaskRun } from "../../../src/cli/controller/completion-orchestrator";
|
|
93
87
|
import { buildControllerTaskLedgerProjection } from "../../../src/cli/controller/task-ledger";
|
|
94
|
-
import { buildControllerContextPack } from "../../../src/cli/controller/context-pack";
|
|
95
88
|
import { loadControllerProjectState, saveControllerProjectState } from "../../../src/cli/controller/project-state";
|
|
96
89
|
import {
|
|
97
90
|
FORGE_MCP_SCHEMA_VERSION,
|
|
@@ -179,6 +172,8 @@ export interface McpToolContext {
|
|
|
179
172
|
principalId?: string;
|
|
180
173
|
/** Authenticated transport controller/provider type. */
|
|
181
174
|
controllerType?: 'chatgpt' | 'codex' | 'claude' | 'grok' | 'human';
|
|
175
|
+
/** Host-provided ChatGPT session correlation. Never authorization and never a canonical conversation URL. */
|
|
176
|
+
hostConversationSessionId?: string;
|
|
182
177
|
controllerInstanceId?: string;
|
|
183
178
|
/** Bound repository identity for session cache keys. */
|
|
184
179
|
repoId?: string;
|
|
@@ -737,10 +732,7 @@ function taskExecutorHealth(
|
|
|
737
732
|
githubRepo?: string,
|
|
738
733
|
): ExecutorHealth | null {
|
|
739
734
|
if (agent === "github-copilot") {
|
|
740
|
-
return classifyGitHubCopilotPreflight(
|
|
741
|
-
getGitHubStatus(ctx.repoRoot, githubRepo),
|
|
742
|
-
task,
|
|
743
|
-
);
|
|
735
|
+
return classifyGitHubCopilotPreflight(getGitHubStatus(ctx.repoRoot, githubRepo));
|
|
744
736
|
}
|
|
745
737
|
return classifyLocalExecutorHealth(
|
|
746
738
|
agent,
|
|
@@ -748,7 +740,6 @@ function taskExecutorHealth(
|
|
|
748
740
|
agentRunner: ctx.policy.execution.agentRunner,
|
|
749
741
|
allowedAgents: ctx.policy.execution.allowedAgents,
|
|
750
742
|
},
|
|
751
|
-
task,
|
|
752
743
|
);
|
|
753
744
|
}
|
|
754
745
|
|
|
@@ -1575,18 +1566,12 @@ export function buildMcpToolDefinitions(
|
|
|
1575
1566
|
{
|
|
1576
1567
|
name: "controller_context",
|
|
1577
1568
|
description:
|
|
1578
|
-
"Return one compact controller start-work context: Git status, current Issue focus, active Runs and Jobs,
|
|
1569
|
+
"Return one compact controller start-work context: Git status, current Issue focus, active Runs and Jobs, and available checks.",
|
|
1579
1570
|
inputSchema: {
|
|
1580
1571
|
type: "object",
|
|
1581
1572
|
properties: {
|
|
1582
1573
|
description: { type: "string" },
|
|
1583
|
-
mode: { type: "string", enum: ["direct", "plan", "debug", "review", "release", "scale", "-direct", "-plan", "-debug", "-review", "-release", "-scale"] },
|
|
1584
1574
|
known_paths: { type: "array", items: { type: "string" } },
|
|
1585
|
-
expected_files: { type: "number" },
|
|
1586
|
-
expected_changed_lines: { type: "number" },
|
|
1587
|
-
requires_investigation: { type: "boolean" },
|
|
1588
|
-
requires_parallelism: { type: "boolean" },
|
|
1589
|
-
requires_long_running_checks: { type: "boolean" },
|
|
1590
1575
|
needs_dependencies: { type: "boolean" },
|
|
1591
1576
|
risk: { type: "string", enum: ["readonly", "low", "medium", "high", "destructive"] },
|
|
1592
1577
|
},
|
|
@@ -1784,13 +1769,6 @@ export function buildMcpToolDefinitions(
|
|
|
1784
1769
|
},
|
|
1785
1770
|
annotations: readOnly,
|
|
1786
1771
|
},
|
|
1787
|
-
{
|
|
1788
|
-
name: "get_project_progress",
|
|
1789
|
-
description:
|
|
1790
|
-
"Return evidence-gate completion, effective status, blockers, throughput, current-focus progress, and attention items without lifecycle-percentage estimates.",
|
|
1791
|
-
inputSchema: EMPTY_SCHEMA,
|
|
1792
|
-
annotations: readOnly,
|
|
1793
|
-
},
|
|
1794
1772
|
{
|
|
1795
1773
|
name: "get_project_governance",
|
|
1796
1774
|
description:
|
|
@@ -1844,22 +1822,6 @@ export function buildMcpToolDefinitions(
|
|
|
1844
1822
|
},
|
|
1845
1823
|
annotations: write,
|
|
1846
1824
|
},
|
|
1847
|
-
{
|
|
1848
|
-
name: "get_task_progress_detail",
|
|
1849
|
-
description:
|
|
1850
|
-
"Return one Task with effective progress, bounded Run and timeline summaries by default, and full detail on demand.",
|
|
1851
|
-
inputSchema: {
|
|
1852
|
-
type: "object",
|
|
1853
|
-
properties: {
|
|
1854
|
-
issue_id: { type: "string" },
|
|
1855
|
-
task_id: { type: "string" },
|
|
1856
|
-
detail_level: { type: "string", enum: ["summary", "full"] },
|
|
1857
|
-
},
|
|
1858
|
-
required: ["issue_id", "task_id"],
|
|
1859
|
-
additionalProperties: false,
|
|
1860
|
-
},
|
|
1861
|
-
annotations: readOnly,
|
|
1862
|
-
},
|
|
1863
1825
|
{
|
|
1864
1826
|
name: "get_worklog_timeline",
|
|
1865
1827
|
description:
|
|
@@ -2045,29 +2007,6 @@ export function buildMcpToolDefinitions(
|
|
|
2045
2007
|
},
|
|
2046
2008
|
annotations: readOnly,
|
|
2047
2009
|
},
|
|
2048
|
-
{
|
|
2049
|
-
name: "assess_work_request",
|
|
2050
|
-
description:
|
|
2051
|
-
"Choose direct_edit, quick_agent, or issue_task before creating work. Prefer repository search plus bounded direct edits for low/medium-risk changes, even when exact files need discovery; use an Agent only when direct patches are not safe or practical.",
|
|
2052
|
-
inputSchema: {
|
|
2053
|
-
type: "object",
|
|
2054
|
-
properties: {
|
|
2055
|
-
description: { type: "string" },
|
|
2056
|
-
mode: { type: "string", enum: ["direct", "plan", "debug", "review", "release", "scale", "-direct", "-plan", "-debug", "-review", "-release", "-scale"] },
|
|
2057
|
-
known_paths: { type: "array", items: { type: "string" } },
|
|
2058
|
-
expected_files: { type: "number" },
|
|
2059
|
-
expected_changed_lines: { type: "number" },
|
|
2060
|
-
requires_investigation: { type: "boolean" },
|
|
2061
|
-
requires_parallelism: { type: "boolean" },
|
|
2062
|
-
requires_long_running_checks: { type: "boolean" },
|
|
2063
|
-
needs_dependencies: { type: "boolean" },
|
|
2064
|
-
risk: { type: "string", enum: ["readonly", "low", "medium", "high", "destructive"] },
|
|
2065
|
-
},
|
|
2066
|
-
required: ["description"],
|
|
2067
|
-
additionalProperties: false,
|
|
2068
|
-
},
|
|
2069
|
-
annotations: readOnly,
|
|
2070
|
-
},
|
|
2071
2010
|
{
|
|
2072
2011
|
name: "create_issue",
|
|
2073
2012
|
description:
|
|
@@ -2403,7 +2342,7 @@ export function buildMcpToolDefinitions(
|
|
|
2403
2342
|
{
|
|
2404
2343
|
name: "integrate_task_run",
|
|
2405
2344
|
description:
|
|
2406
|
-
"
|
|
2345
|
+
"Explicitly integrate one completed isolated Task Run into this dispatch checkout through a rollback-capable edit session.",
|
|
2407
2346
|
inputSchema: {
|
|
2408
2347
|
type: "object",
|
|
2409
2348
|
properties: { run_id: { type: "string" } },
|
|
@@ -2821,7 +2760,7 @@ export function buildMcpToolDefinitions(
|
|
|
2821
2760
|
},
|
|
2822
2761
|
);
|
|
2823
2762
|
}
|
|
2824
|
-
return tools;
|
|
2763
|
+
return tools.filter((tool) => !RETIRED_LEGACY_PUBLIC_TOOLS.has(tool.name));
|
|
2825
2764
|
}
|
|
2826
2765
|
|
|
2827
2766
|
export function controllerExpectedToolNames(
|
|
@@ -2835,24 +2774,48 @@ export function controllerExpectedToolNames(
|
|
|
2835
2774
|
return [...DEFAULT_CONTROLLER_TOOL_NAMES];
|
|
2836
2775
|
}
|
|
2837
2776
|
|
|
2838
|
-
const
|
|
2777
|
+
const RETIRED_LEGACY_PUBLIC_TOOLS = new Set([
|
|
2778
|
+
"list_issues",
|
|
2779
|
+
"get_project_board",
|
|
2780
|
+
"get_project_governance",
|
|
2839
2781
|
"reconcile_project_governance",
|
|
2782
|
+
"get_project_state",
|
|
2840
2783
|
"set_current_issue",
|
|
2841
2784
|
"archive_issue",
|
|
2842
2785
|
"restore_issue",
|
|
2786
|
+
"get_issue",
|
|
2843
2787
|
"publish_issue_to_github",
|
|
2844
2788
|
"refresh_github_issue",
|
|
2845
2789
|
"close_github_issue",
|
|
2790
|
+
"inspect_issue_readiness",
|
|
2791
|
+
"inspect_task_readiness",
|
|
2846
2792
|
"prepare_issue_launch",
|
|
2847
2793
|
"create_issue",
|
|
2794
|
+
"update_issue",
|
|
2848
2795
|
"plan_issue",
|
|
2849
2796
|
"append_task",
|
|
2850
2797
|
"split_task",
|
|
2851
2798
|
"supersede_task",
|
|
2852
2799
|
"set_task_dependencies",
|
|
2853
2800
|
"update_task",
|
|
2801
|
+
"dispatch_task",
|
|
2802
|
+
"launch_issue",
|
|
2803
|
+
"dispatch_ready_tasks",
|
|
2804
|
+
"get_task_run",
|
|
2805
|
+
"get_task_run_events",
|
|
2806
|
+
"get_task_run_log",
|
|
2807
|
+
"get_task_diff",
|
|
2808
|
+
"integrate_task_run",
|
|
2809
|
+
"finish_task_run",
|
|
2810
|
+
"list_task_runs",
|
|
2811
|
+
"cancel_task_run",
|
|
2812
|
+
"retry_task_run",
|
|
2813
|
+
"verify_task",
|
|
2814
|
+
"accept_task",
|
|
2815
|
+
"request_task_changes",
|
|
2854
2816
|
"record_task_verification",
|
|
2855
2817
|
"accept_verified_task",
|
|
2818
|
+
"finish_edit_session",
|
|
2856
2819
|
]);
|
|
2857
2820
|
|
|
2858
2821
|
export async function callMcpTool(
|
|
@@ -2861,12 +2824,9 @@ export async function callMcpTool(
|
|
|
2861
2824
|
args: Record<string, unknown> = {},
|
|
2862
2825
|
): Promise<CallToolResult> {
|
|
2863
2826
|
try {
|
|
2864
|
-
if (
|
|
2827
|
+
if (RETIRED_LEGACY_PUBLIC_TOOLS.has(name)) {
|
|
2865
2828
|
audit(ctx, name, "blocked", args);
|
|
2866
|
-
return errorResult(
|
|
2867
|
-
"LEGACY_CONTROL_PLANE_MUTATION_RETIRED",
|
|
2868
|
-
`${name} cannot mutate frozen Issue/Task/currentIssue/project-board compatibility files after SQLite cutover. Use Requirement, Plan and Work APIs.`,
|
|
2869
|
-
);
|
|
2829
|
+
return errorResult("UNKNOWN_TOOL", `unknown tool: ${name}`);
|
|
2870
2830
|
}
|
|
2871
2831
|
switch (name) {
|
|
2872
2832
|
case "harness_status": {
|
|
@@ -3202,30 +3162,6 @@ export async function callMcpTool(
|
|
|
3202
3162
|
timeoutMs: check.timeoutMs,
|
|
3203
3163
|
source: check.source,
|
|
3204
3164
|
}));
|
|
3205
|
-
const assessment = assessWorkMode({
|
|
3206
|
-
description: typeof args.description === "string" && args.description.trim()
|
|
3207
|
-
? String(args.description)
|
|
3208
|
-
: "Inspect the selected repository context.",
|
|
3209
|
-
knownPaths: stringList(args.known_paths),
|
|
3210
|
-
expectedFiles: typeof args.expected_files === "number" ? args.expected_files : undefined,
|
|
3211
|
-
expectedChangedLines: typeof args.expected_changed_lines === "number" ? args.expected_changed_lines : undefined,
|
|
3212
|
-
requiresInvestigation: args.requires_investigation === true,
|
|
3213
|
-
requiresParallelism: args.requires_parallelism === true,
|
|
3214
|
-
requiresLongRunningChecks: args.requires_long_running_checks === true,
|
|
3215
|
-
needsDependencies: args.needs_dependencies === true,
|
|
3216
|
-
risk: typeof args.risk === "string" ? args.risk as TaskRisk : undefined,
|
|
3217
|
-
explicitMode: parseExplicitTaskMode(args.mode)
|
|
3218
|
-
?? (typeof args.description === "string" && args.description.trim() ? undefined : "direct"),
|
|
3219
|
-
});
|
|
3220
|
-
const modeContextPack = assessment.modeBehavior.structuralContext === "required"
|
|
3221
|
-
? buildControllerContextPack(ctx.repoRoot, ctx.policy, {
|
|
3222
|
-
description: typeof args.description === "string" ? args.description : undefined,
|
|
3223
|
-
knownPaths: stringList(args.known_paths),
|
|
3224
|
-
structuralContext: "required",
|
|
3225
|
-
maxFiles: 8,
|
|
3226
|
-
maxSnippets: 20,
|
|
3227
|
-
})
|
|
3228
|
-
: undefined;
|
|
3229
3165
|
const payload = {
|
|
3230
3166
|
git: gitSnapshot(ctx.repoRoot),
|
|
3231
3167
|
requirementBoard,
|
|
@@ -3260,8 +3196,6 @@ export async function callMcpTool(
|
|
|
3260
3196
|
})),
|
|
3261
3197
|
},
|
|
3262
3198
|
checks,
|
|
3263
|
-
recommendedExecution: assessment,
|
|
3264
|
-
...(modeContextPack ? { modeContextPack } : {}),
|
|
3265
3199
|
};
|
|
3266
3200
|
audit(ctx, name, "ok", args);
|
|
3267
3201
|
return textResult(payload);
|
|
@@ -3525,13 +3459,6 @@ export async function callMcpTool(
|
|
|
3525
3459
|
response.responseMeta.structuredPayloadBytes = Buffer.byteLength(JSON.stringify(response), "utf8");
|
|
3526
3460
|
return textResult(response);
|
|
3527
3461
|
}
|
|
3528
|
-
case "get_project_progress": {
|
|
3529
|
-
if (ctx.policy.profile !== "controller")
|
|
3530
|
-
return errorResult("TOOL_DISABLED", "get_project_progress requires the controller profile");
|
|
3531
|
-
const progress = getProjectProgress(ctx.repoRoot);
|
|
3532
|
-
audit(ctx, name, "ok", args);
|
|
3533
|
-
return textResult(progress);
|
|
3534
|
-
}
|
|
3535
3462
|
case "get_project_governance": {
|
|
3536
3463
|
if (ctx.policy.profile !== "controller")
|
|
3537
3464
|
return errorResult("TOOL_DISABLED", "get_project_governance requires the controller profile");
|
|
@@ -3577,22 +3504,10 @@ export async function callMcpTool(
|
|
|
3577
3504
|
audit(ctx, name, "ok", args, `tasks/issues/${issue.id}`);
|
|
3578
3505
|
return textResult(projectIssueEffectiveView(ctx.repoRoot, issue));
|
|
3579
3506
|
}
|
|
3580
|
-
case "get_task_progress_detail": {
|
|
3581
|
-
if (ctx.policy.profile !== "controller")
|
|
3582
|
-
return errorResult("TOOL_DISABLED", "get_task_progress_detail requires the controller profile");
|
|
3583
|
-
const result = getTaskProgressReadView(
|
|
3584
|
-
ctx.repoRoot,
|
|
3585
|
-
String(args.issue_id ?? ""),
|
|
3586
|
-
String(args.task_id ?? ""),
|
|
3587
|
-
args.detail_level === "full" ? "full" : "summary",
|
|
3588
|
-
);
|
|
3589
|
-
audit(ctx, name, "ok", args, `tasks/issues/${result.issue.id}`);
|
|
3590
|
-
return textResult(result);
|
|
3591
|
-
}
|
|
3592
3507
|
case "get_worklog_timeline": {
|
|
3593
3508
|
if (ctx.policy.profile !== "controller")
|
|
3594
3509
|
return errorResult("TOOL_DISABLED", "get_worklog_timeline requires the controller profile");
|
|
3595
|
-
const events =
|
|
3510
|
+
const events = listControllerWorklogEvents(ctx.repoRoot, {
|
|
3596
3511
|
category: parseWorklogCategory(args.category),
|
|
3597
3512
|
issueId: typeof args.issue_id === "string" ? args.issue_id : undefined,
|
|
3598
3513
|
taskId: typeof args.task_id === "string" ? args.task_id : undefined,
|
|
@@ -3826,24 +3741,6 @@ export async function callMcpTool(
|
|
|
3826
3741
|
);
|
|
3827
3742
|
return textResult(preview);
|
|
3828
3743
|
}
|
|
3829
|
-
case "assess_work_request": {
|
|
3830
|
-
if (ctx.policy.profile !== "controller")
|
|
3831
|
-
return errorResult("TOOL_DISABLED", "assess_work_request requires the controller profile");
|
|
3832
|
-
const assessment = assessWorkMode({
|
|
3833
|
-
description: String(args.description ?? ""),
|
|
3834
|
-
knownPaths: stringList(args.known_paths),
|
|
3835
|
-
expectedFiles: typeof args.expected_files === "number" ? args.expected_files : undefined,
|
|
3836
|
-
expectedChangedLines: typeof args.expected_changed_lines === "number" ? args.expected_changed_lines : undefined,
|
|
3837
|
-
requiresInvestigation: args.requires_investigation === true,
|
|
3838
|
-
requiresParallelism: args.requires_parallelism === true,
|
|
3839
|
-
requiresLongRunningChecks: args.requires_long_running_checks === true,
|
|
3840
|
-
needsDependencies: args.needs_dependencies === true,
|
|
3841
|
-
risk: typeof args.risk === "string" ? args.risk as TaskRisk : undefined,
|
|
3842
|
-
explicitMode: parseExplicitTaskMode(args.mode),
|
|
3843
|
-
});
|
|
3844
|
-
audit(ctx, name, "ok", args);
|
|
3845
|
-
return textResult(assessment);
|
|
3846
|
-
}
|
|
3847
3744
|
case "create_issue": {
|
|
3848
3745
|
if (ctx.policy.profile !== "controller")
|
|
3849
3746
|
return errorResult(
|
|
@@ -4427,18 +4324,12 @@ export async function callMcpTool(
|
|
|
4427
4324
|
if (!task) return errorResult("TASK_NOT_FOUND", `task not found: ${issueId}/${taskId}`);
|
|
4428
4325
|
if (task.status === "done") return textResult(projectIssueEffectiveView(ctx.repoRoot, current));
|
|
4429
4326
|
if (task.status !== "verified" || !task.verification) return errorResult("TASK_NOT_VERIFIED", `task has not passed its risk-adaptive verification requirements (current: ${task.status})`);
|
|
4430
|
-
const
|
|
4431
|
-
|
|
4432
|
-
|
|
4433
|
-
|
|
4434
|
-
|
|
4435
|
-
|
|
4436
|
-
issueId,
|
|
4437
|
-
taskId,
|
|
4438
|
-
workId,
|
|
4439
|
-
note: typeof args.note === "string" ? args.note : undefined,
|
|
4440
|
-
}).issue
|
|
4441
|
-
: acceptVerifiedTask(ctx.repoRoot, issueId, taskId, typeof args.note === "string" ? args.note : "Accepted after required verification evidence.");
|
|
4327
|
+
const issue = acceptVerifiedTask(
|
|
4328
|
+
ctx.repoRoot,
|
|
4329
|
+
issueId,
|
|
4330
|
+
taskId,
|
|
4331
|
+
typeof args.note === "string" ? args.note : "Accepted after required verification evidence.",
|
|
4332
|
+
);
|
|
4442
4333
|
audit(ctx, name, "ok", args, `tasks/issues/${issue.id}`);
|
|
4443
4334
|
return textResult(projectIssueEffectiveView(ctx.repoRoot, issue));
|
|
4444
4335
|
}
|
|
@@ -4487,19 +4378,6 @@ export async function callMcpTool(
|
|
|
4487
4378
|
const checks = stringList(args.checks);
|
|
4488
4379
|
const git = gitSnapshot(ctx.repoRoot);
|
|
4489
4380
|
const workspaceIdentity = createHash("sha256").update(JSON.stringify(git)).digest("hex");
|
|
4490
|
-
const routeDecision = decideRoute({
|
|
4491
|
-
intent: {
|
|
4492
|
-
objective: purpose,
|
|
4493
|
-
scopeClear: allowedPaths.length > 0,
|
|
4494
|
-
mutation: true,
|
|
4495
|
-
expectedFiles: typeof args.max_files === "number" ? args.max_files : allowedPaths.length,
|
|
4496
|
-
expectedChangedLines: typeof args.max_changed_lines === "number" ? args.max_changed_lines : undefined,
|
|
4497
|
-
},
|
|
4498
|
-
workspace: { knownPaths: allowedPaths, checkoutId: identity.checkoutId, fingerprint: workspaceIdentity },
|
|
4499
|
-
policy: { risk: "local_repo_write", approvalConfirmed: true },
|
|
4500
|
-
capabilities: {},
|
|
4501
|
-
recovery: {},
|
|
4502
|
-
});
|
|
4503
4381
|
const requestedWorkId = typeof args.work_id === "string" ? args.work_id.trim() : "";
|
|
4504
4382
|
const workId = requestedWorkId || `work-direct-${createHash("sha256").update(`${repoId}\0${purpose}\0${Date.now()}`).digest("hex").slice(0, 16)}`;
|
|
4505
4383
|
const workStore = { controllerHome, repoId };
|
|
@@ -4514,7 +4392,6 @@ export async function callMcpTool(
|
|
|
4514
4392
|
controllerInstanceId: identity.controllerInstanceId,
|
|
4515
4393
|
baseRevision: git.head ?? undefined,
|
|
4516
4394
|
workspaceFingerprint: workspaceIdentity,
|
|
4517
|
-
routeDecision,
|
|
4518
4395
|
objective: purpose,
|
|
4519
4396
|
issueId: typeof args.issue_id === "string" ? args.issue_id : undefined,
|
|
4520
4397
|
taskId: typeof args.task_id === "string" ? args.task_id : undefined,
|
|
@@ -4546,7 +4423,6 @@ export async function callMcpTool(
|
|
|
4546
4423
|
checkoutId: identity.checkoutId,
|
|
4547
4424
|
principalId: identity.principalId,
|
|
4548
4425
|
controllerInstanceId: identity.controllerInstanceId,
|
|
4549
|
-
routeDecisionFingerprint: routeDecision.inputFingerprint,
|
|
4550
4426
|
},
|
|
4551
4427
|
});
|
|
4552
4428
|
audit(
|
|
@@ -4585,7 +4461,6 @@ export async function callMcpTool(
|
|
|
4585
4461
|
checkoutId: identity.checkoutId,
|
|
4586
4462
|
principalId: identity.principalId,
|
|
4587
4463
|
controllerInstanceId: identity.controllerInstanceId,
|
|
4588
|
-
routeDecisionFingerprint: current.routeDecisionFingerprint,
|
|
4589
4464
|
},
|
|
4590
4465
|
},
|
|
4591
4466
|
);
|
|
@@ -4705,7 +4580,6 @@ export async function callMcpTool(
|
|
|
4705
4580
|
checkoutId: identity.checkoutId,
|
|
4706
4581
|
principalId: identity.principalId,
|
|
4707
4582
|
controllerInstanceId: identity.controllerInstanceId,
|
|
4708
|
-
routeDecisionFingerprint: current.routeDecisionFingerprint,
|
|
4709
4583
|
},
|
|
4710
4584
|
},
|
|
4711
4585
|
);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { classifyRepositoryCommand } from '../../../src/cli/repositories/command-classifier';
|
|
2
2
|
import { resolveRepositorySelection } from '../../../src/cli/repositories/registry';
|
|
3
3
|
import { executionIdentityForRepository } from '../../../src/runtime/control-plane/execution/execution-identity';
|
|
4
|
-
import { getWorkContract } from '../../../packages/kernel/work/api';
|
|
5
|
-
import { isTerminalWorkContractStatus } from '../../../src/runtime/control-plane/facade/types';
|
|
4
|
+
import { getWorkContract, semanticWorkState } from '../../../packages/kernel/work/api';
|
|
6
5
|
import {
|
|
7
6
|
classifyRepositoryCommandRoute,
|
|
8
7
|
executeRepositoryCommandViaProcessRuntime,
|
|
@@ -69,10 +68,7 @@ export async function callPostFinalizeWorkReadOnlyCommand(
|
|
|
69
68
|
const work = getWorkContract({ controllerHome, repoId: repository.repoId }, requestedWorkId);
|
|
70
69
|
if (
|
|
71
70
|
!work
|
|
72
|
-
||
|
|
73
|
-
|| work.status !== 'completed'
|
|
74
|
-
|| !work.completionReceipt
|
|
75
|
-
|| work.completionReceipt.workId !== requestedWorkId
|
|
71
|
+
|| semanticWorkState(work) !== 'completed'
|
|
76
72
|
|| !work.principalId?.trim()
|
|
77
73
|
|| work.principalId.trim() !== principalId
|
|
78
74
|
) {
|
|
@@ -110,7 +106,7 @@ export async function callPostFinalizeWorkReadOnlyCommand(
|
|
|
110
106
|
repoId: repository.repoId,
|
|
111
107
|
checkoutId: repository.activeCheckoutId,
|
|
112
108
|
workId: requestedWorkId,
|
|
113
|
-
|
|
109
|
+
semanticWorkState: 'completed',
|
|
114
110
|
error: {
|
|
115
111
|
code: 'POST_FINALIZE_READONLY_ROUTE_MISMATCH',
|
|
116
112
|
message: 'Post-finalize Work attribution may execute only through the bounded readonly direct lane.',
|
|
@@ -127,9 +123,8 @@ export async function callPostFinalizeWorkReadOnlyCommand(
|
|
|
127
123
|
repoId: repository.repoId,
|
|
128
124
|
checkoutId: repository.activeCheckoutId,
|
|
129
125
|
workId: requestedWorkId,
|
|
130
|
-
|
|
126
|
+
semanticWorkState: 'completed',
|
|
131
127
|
postFinalizeAttribution: 'readonly_followup',
|
|
132
|
-
completed: true,
|
|
133
128
|
ok: execution.ok === true,
|
|
134
129
|
exitCode: execution.exitCode,
|
|
135
130
|
stdout: execution.stdout,
|