@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { McpToolDefinition } from '../../../packages/protocols/mcp/tool-contract';
|
|
2
|
-
import { CONTROLLER_CONTEXT_IMPACT_DOMAINS } from '../../../src/cli/controller/context
|
|
3
|
-
import {
|
|
2
|
+
import { CONTROLLER_CONTEXT_IMPACT_DOMAINS } from '../../../src/cli/controller/context/types';
|
|
3
|
+
import { RH_WORK_MODEL_OPERATIONS } from '../../../src/runtime/control-plane/facade/rh-work-operation-contract';
|
|
4
|
+
import { CONTROLLER_LEARNING_SIGNAL_ENVELOPE_MAX_ITEMS } from '../../../src/runtime/context/automatic-learning';
|
|
4
5
|
|
|
5
6
|
function definition(name: string, description: string, properties: Record<string, unknown>, required: string[] = [], readOnly = true): McpToolDefinition {
|
|
6
7
|
return {
|
|
@@ -23,26 +24,40 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
23
24
|
chatgpt_pull_failed: { type: 'boolean' },
|
|
24
25
|
destructive: { type: 'boolean' },
|
|
25
26
|
}),
|
|
26
|
-
definition('rh_inbox', 'Preferred ChatGPT facade:
|
|
27
|
-
repo_id: repoId,
|
|
27
|
+
definition('rh_inbox', 'Preferred ChatGPT facade: instance-level UserRequest inbox for genuine human actions/decisions. Repository-scoped handoff_id remains a legacy compatibility lookup.', {
|
|
28
|
+
repo_id: { ...repoId, description: 'Optional legacy repository context. Omit for canonical instance-level UserRequest operations.' },
|
|
28
29
|
operation: { type: 'string', enum: ['list', 'get', 'ack', 'accept', 'resolve', 'dismiss', 'create'], description: 'Defaults to list (pending).' },
|
|
29
|
-
|
|
30
|
+
request_id: { type: 'string', description: 'Canonical instance-level UserRequest id.' },
|
|
31
|
+
handoff_id: { type: 'string', description: 'Legacy compatibility id.' },
|
|
30
32
|
work_id: { type: 'string' },
|
|
31
33
|
title: { type: 'string' },
|
|
32
34
|
reason: { type: 'string' },
|
|
33
35
|
summary: { type: 'string' },
|
|
34
36
|
recommended_decision: { type: 'string' },
|
|
35
37
|
recommended_prompt: { type: 'string' },
|
|
38
|
+
action_required: { type: 'string', enum: ['login', 'grant_permission', 'confirm_destructive', 'product_decision'] },
|
|
39
|
+
request_kind: { type: 'string', enum: ['user_action_request', 'user_decision_request'] },
|
|
40
|
+
root_cause_key: { type: 'string' },
|
|
36
41
|
decision: { type: 'string', description: 'Recorded on resolve/dismiss.' },
|
|
37
42
|
resolver: { type: 'string', description: 'Who resolved or dismissed the handoff.' },
|
|
38
43
|
detail_level: { type: 'string', enum: ['summary', 'detail'] },
|
|
39
44
|
limit: { type: 'number' },
|
|
40
45
|
}),
|
|
41
|
-
definition('rh_context', 'Preferred ChatGPT facade and default repository code-discovery/read path. Start broad once to combine heuristic lexical discovery, current raw source, and optional CodeGraph structural evidence with few round trips. Natural-language lexical terms are discovery hints: do not require every guessed term to match and do not repeat the same broad search merely because a heuristic term missed. After credible files or symbols are found, derive follow-up paths/symbols from the returned source and prefer known_paths, compiler semantic_navigation/@tsnav for TypeScript, or structural relationships before another broad lexical pass. Call rh_context repeatedly only when that progressive expansion can materially improve correctness; follow-ups reuse session-scoped evidence when source identity is unchanged. Shell rg/grep/sed/cat loops are fallback-only when this Context Plane cannot supply the needed evidence.', {
|
|
46
|
+
definition('rh_context', 'Preferred ChatGPT facade and default repository code-discovery/read path. Semantic task/capability queries can also recall an initial bounded, relevance-gated Cognitive advisory working set when Project/Workspace scope is available. That first pack is an attention envelope, never a claim that the top N items are cognitively complete. Reuse it through routine micro-steps; when the model judges prior context insufficient, progressively narrow/expand recall with another semantic query or explicit knowledge audit. Start broad once to combine heuristic lexical discovery, current raw source, and optional CodeGraph structural evidence with few round trips. Natural-language lexical terms are discovery hints: do not require every guessed term to match and do not repeat the same broad search merely because a heuristic term missed. After credible files or symbols are found, derive follow-up paths/symbols from the returned source and prefer known_paths, compiler semantic_navigation/@tsnav for TypeScript, or structural relationships before another broad lexical pass. Call rh_context repeatedly only when that progressive expansion can materially improve correctness; follow-ups reuse session-scoped evidence when source identity is unchanged. Shell rg/grep/sed/cat loops are fallback-only when this Context Plane cannot supply the needed evidence.', {
|
|
42
47
|
repo_id: repoId,
|
|
43
48
|
checkout_id: { type: 'string', description: 'Optional checkout identity for repositories with multiple worktrees.' },
|
|
44
49
|
operation: { type: 'string', enum: ['list', 'get', 'search'], description: 'Defaults to get. Use search as the default code-location path when an exact file is unknown.' },
|
|
45
50
|
query: { type: 'string', description: 'Code/content intent for operation=search. For operation=list, a natural-language capability intent such as "configure Xcode provisioning" returns ranked read-only capability candidates while execution remains on the capability\'s typed executor. Frozen-schema clients may append @tsnav or @swiftnav references|definition|implementations <repo-path>:<line>:<column> for compiler/LSP-backed semantic navigation.' },
|
|
51
|
+
include_learning_recall: { type: 'boolean', description: 'Defaults to true for semantic task/capability queries. Set false for routine progressive source follow-ups or micro-steps when the already recalled working set is still valid. This is a model-owned attention/cadence choice, not a Forge semantic trigger.' },
|
|
52
|
+
knowledge_query: { type: 'string', description: 'Optional explicit read-only Cognitive audit query. Ordinary code/capability intent queries already receive a bounded relevant-learning recall; use this field for deliberate memory inspection. May be used without code query. Use "*" or omit text with filters to list learned advisory memory in scopes reachable from this repo/Work.' },
|
|
53
|
+
knowledge_memory_id: { type: 'string', description: 'Optional exact Cognitive memory id for inspection.' },
|
|
54
|
+
knowledge_scope_kind: { type: 'string', enum: ['work', 'requirement', 'plan', 'plan_step', 'project', 'workspace'], description: 'Optional Cognitive scope filter; it must already be reachable from the selected repo/Work.' },
|
|
55
|
+
knowledge_scope_id: { type: 'string', description: 'Optional Cognitive scope id paired with knowledge_scope_kind.' },
|
|
56
|
+
knowledge_concept: { type: 'string', description: 'Optional exact learned concept filter.' },
|
|
57
|
+
knowledge_facet: { type: 'string', description: 'Optional exact learned facet filter.' },
|
|
58
|
+
knowledge_source_kind: { type: 'string', enum: ['experience', 'outcome', 'knowledge', 'controller', 'system', 'external'], description: 'Optional provenance source-kind filter.' },
|
|
59
|
+
knowledge_source_work_id: { type: 'string', description: 'Optional provenance source Work filter.' },
|
|
60
|
+
knowledge_limit: { type: 'number', minimum: 1, maximum: 100, description: 'Per-call read envelope for explicit Cognitive audit/expansion; defaults to 24. This is a context/transport budget, not a semantic claim that N memories are sufficient.' },
|
|
46
61
|
known_paths: { type: 'array', items: { type: 'string' }, description: 'Optional exact paths or globs that should receive highest retrieval priority.' },
|
|
47
62
|
include_globs: { type: 'array', items: { type: 'string' } },
|
|
48
63
|
exclude_globs: { type: 'array', items: { type: 'string' } },
|
|
@@ -52,7 +67,7 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
52
67
|
semantic_navigation: {
|
|
53
68
|
type: 'array',
|
|
54
69
|
maxItems: 8,
|
|
55
|
-
description: 'Optional bounded semantic navigation through the provider registry. TypeScript uses
|
|
70
|
+
description: 'Optional bounded semantic navigation through the provider registry. TypeScript uses a short-lived release-owned Language Service sidecar so compiler/project allocator growth never remains resident in the canonical Runtime; Swift uses SourceKit-LSP only with existing build settings; registered generic LSP providers currently cover Rust, Go, Python, and C/C++ when their language-server executable and project root markers already exist. Providers start lazily only for explicit semantic requests; Forge never installs a server, triggers a build, or treats language-server output as source authority.',
|
|
56
71
|
items: {
|
|
57
72
|
type: 'object',
|
|
58
73
|
required: ['navigation', 'path', 'line', 'column'],
|
|
@@ -74,59 +89,73 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
74
89
|
work_id: { type: 'string' },
|
|
75
90
|
detail_level: { type: 'string', enum: ['summary', 'detail', 'raw'], description: 'Defaults to summary; raw is still bounded.' },
|
|
76
91
|
}),
|
|
77
|
-
definition('rh_work', 'Preferred ChatGPT facade for
|
|
92
|
+
definition('rh_work', 'Preferred ChatGPT facade for optional durable Requirement/Plan/Work semantic context, explicit recovery, scheduling/workflow intent, and external controller launch. Ordinary execution and validation use direct domain capabilities; provider/session binding, retries, transport recovery, dedupe, and other mechanical bookkeeping stay internal.', {
|
|
78
93
|
repo_id: repoId,
|
|
79
94
|
checkout_id: { type: 'string', description: 'Optional checkout identity for exact Work and Plan source selection.' },
|
|
80
|
-
operation: { type: 'string', enum: [...
|
|
95
|
+
operation: { type: 'string', enum: [...RH_WORK_MODEL_OPERATIONS], description: 'Defaults to start. list reads current semantic Work plus a bounded recent terminal history for the selected repository; start creates semantic Work context only. Requirement, Plan, and Work remain model-authored durable semantic records; execution and validation use direct capabilities. Work completion is an explicit semantic update rather than an execution phase transition.' },
|
|
96
|
+
limit: { type: 'number', minimum: 1, maximum: 100, description: 'Bounded result limit for list operations.' },
|
|
81
97
|
objective: { type: 'string' },
|
|
82
|
-
capability_id: { type: 'string', description: '
|
|
98
|
+
capability_id: { type: 'string', description: 'Compatibility-only carrier. Current callers should use typed rh_work fields directly. The outer adapter accepts only the bounded frozen semantic.v1 bridge and current-conversation enrollment, validates them without persistence, and routes them into the same Thin owners.' },
|
|
83
99
|
work_id: { type: 'string' },
|
|
84
100
|
workflow_id: { type: 'string', description: 'Versioned Workflow asset identity for workflow_execute/workflow_reconcile.' },
|
|
85
101
|
workflow_run_id: { type: 'string', description: 'Stable run identity. Reusing it resumes only the exact same workflow/content/input identity.' },
|
|
86
102
|
workflow_inputs: { type: 'object', description: 'Typed Workflow inputs validated against the installed asset contract.' },
|
|
87
103
|
workflow_scope_project_id: { type: 'string', description: 'Optional project-scoped Workflow registry identity. First-party Xiaohongshu assets use controller scope and still validate the owning Work project/account inputs.' },
|
|
88
104
|
workflow_reconciliation_request_id: { type: 'string', description: 'Fresh idempotency identity for one reconciliation observation. Retry the same observation with the same id; use a new id only for a later observation.' },
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
105
|
+
requirement_id: { type: 'string', description: 'Stable Requirement identity for requirement_get/requirement_revise/requirement_create or optional semantic context link for Work/Plan.' },
|
|
106
|
+
expected_revision: { type: 'number', minimum: 1, description: 'Expected current semantic revision for requirement_revise, plan_revise, revise, or complete. Stale writers fail and return current state; Forge never performs an implicit merge.' },
|
|
107
|
+
work_state: { type: 'string', enum: ['open', 'completed', 'cancelled'], description: 'Thin semantic Work state for revise.' },
|
|
108
|
+
work_result_refs: { type: 'array', maxItems: 100, uniqueItems: true, items: { type: 'string', maxLength: 512 }, description: 'Model/user-selected result references for thin semantic Work; separate from mechanical evidence and delivery receipts.' },
|
|
109
|
+
semantic_parent_work_id: { type: 'string', minLength: 1, maxLength: 256, description: 'Optional objective-decomposition parent for primary semantic Work. Distinct from execution parentWorkId and continuation lineage.' },
|
|
110
|
+
depends_on_work_ids: { type: 'array', maxItems: 32, uniqueItems: true, items: { type: 'string', minLength: 1, maxLength: 256 }, description: 'Explicit semantic ordering dependencies for primary Work. No edge means siblings may proceed independently; this field never dispatches or blocks Scheduler execution by itself.' },
|
|
111
|
+
requirement_revision: { type: 'number', minimum: 1, description: 'Work start defaults to selected Requirement head; Work revise explicitly adopts an existing semantic revision via expected_revision CAS, including historical revisions. For Plan, optional provenance.' },
|
|
112
|
+
plan_revision: { type: 'number', minimum: 1, description: 'Work start defaults to selected Plan head; Work revise explicitly adopts an existing semantic revision via expected_revision CAS, including historical revisions. Work get compares adopted and current heads without rebinding.' },
|
|
95
113
|
requirement_title: { type: 'string', description: 'Human-readable Requirement title for requirement_create.' },
|
|
96
114
|
requirement_outcome: { type: 'string', description: 'Durable outcome statement for requirement_create.' },
|
|
97
115
|
requirement_acceptance_criteria: { type: 'array', items: { type: 'string' }, description: 'Bounded semantic acceptance criteria for requirement_create.' },
|
|
98
116
|
requirement_delivery_references: { type: 'array', items: { type: 'string' }, description: 'Optional durable delivery/reference identifiers for requirement_create.' },
|
|
99
117
|
requirement_legacy_aliases: { type: 'array', items: { type: 'string' }, description: 'Optional migration aliases for requirement_create; not a second identity authority.' },
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
118
|
+
requirement_state: { type: 'string', enum: ['open', 'completed', 'cancelled'], description: 'Thin semantic Requirement state for requirement_revise.' },
|
|
119
|
+
requirement_candidate_id: { type: 'string', description: 'Exact Cognitive memory id for operation=requirement_promote_candidate.' },
|
|
120
|
+
handoff_id: { type: 'string', description: 'Optional existing HandoffItem to include as bounded context for launcher_start.' },
|
|
121
|
+
learning_signals: { type: 'array', maxItems: CONTROLLER_LEARNING_SIGNAL_ENVELOPE_MAX_ITEMS, items: { type: 'object', additionalProperties: false,
|
|
122
|
+
properties: {
|
|
123
|
+
scope_kind: { type: 'string', enum: ['work', 'requirement', 'project', 'workspace'] },
|
|
124
|
+
kind: { type: 'string', maxLength: 64, description: 'Compact model-authored descriptive kind (for example principle, procedure, product-model, architecture-pattern). This vocabulary is open and never an admission gate.' },
|
|
125
|
+
valence: { type: 'string', enum: ['positive', 'negative', 'neutral'] },
|
|
126
|
+
summary: { type: 'string', maxLength: 2000 },
|
|
127
|
+
concepts: { type: 'array', minItems: 1, maxItems: 32, uniqueItems: true, items: { type: 'string', maxLength: 256 } },
|
|
128
|
+
facets: { type: 'array', maxItems: 12, uniqueItems: true, items: { type: 'string', maxLength: 128 } },
|
|
129
|
+
admission_source: { type: 'string', enum: ['explicit_human', 'controller_observation', 'system_inference'] },
|
|
130
|
+
portability: { type: 'string', enum: ['local', 'portable'] },
|
|
131
|
+
salience: { type: 'number', minimum: 0, maximum: 1 },
|
|
132
|
+
confidence: { type: 'number', minimum: 0, maximum: 1 },
|
|
133
|
+
utility: { type: 'number', minimum: 0, maximum: 1 },
|
|
134
|
+
evidence_refs: { type: 'array', maxItems: 16, uniqueItems: true, items: { type: 'string', maxLength: 512 } },
|
|
135
|
+
counter_evidence_refs: { type: 'array', maxItems: 16, uniqueItems: true, items: { type: 'string', maxLength: 512 } },
|
|
136
|
+
expires_at: { type: 'string' },
|
|
137
|
+
},
|
|
138
|
+
required: ['scope_kind', 'kind', 'valence', 'summary', 'concepts', 'admission_source', 'portability', 'salience', 'confidence', 'utility'] },
|
|
139
|
+
description: 'Model-authored semantic deltas, never keyword/phrase-derived lessons. The array bound is only one MCP transport envelope; it is not a per-interaction learning quota. With operation=learning_record, project/workspace learning is lifecycle-free; when work_id is selected, its server-derived reachable Work/Requirement scopes are also available through the same writer. Distill reusable judgement/procedure/product/architecture knowledge rather than copying raw transcripts or source prose.' },
|
|
140
|
+
learning_feedback: { type: 'array', maxItems: 32, items: { type: 'object', additionalProperties: false,
|
|
141
|
+
properties: {
|
|
142
|
+
memory_address: { type: 'string', maxLength: 1024, description: 'Exact stable memoryId/address returned by learningRecall or Cognitive audit.' },
|
|
143
|
+
decision: { type: 'string', enum: ['used', 'rejected'] },
|
|
144
|
+
reason: { type: 'string', maxLength: 1000 },
|
|
145
|
+
rejection_kind: { type: 'string', enum: ['irrelevant', 'stale', 'contradicted'], description: 'Required only for rejected feedback. Semantic classification is model-authored, never inferred from keywords.' },
|
|
146
|
+
},
|
|
147
|
+
required: ['memory_address', 'decision', 'reason'] },
|
|
148
|
+
description: 'Lifecycle-free advisory retrieval feedback for operation=learning_feedback. The current principal/session and repository-reachable Cognitive scope are server-derived; feedback influences retrieval utility only and never factual confidence or execution authority.' },
|
|
149
|
+
outcome_observation: { type: 'object', description: 'Typed Work-specific OutcomeObservation draft for outcome_record. Work semantic provenance is derived server-side and cannot be supplied by the caller.' },
|
|
150
|
+
experience_draft: { type: 'object', description: 'Typed verified Work Experience draft for experience_record. Generic teaching/correction belongs in learning_record instead; source provenance is derived from current Work semantic context.' },
|
|
151
|
+
quality_adjustment_fingerprint: { type: 'string', description: 'Optional quality adjustment fingerprint for experience_record when backed by verified evidence.' },
|
|
152
|
+
controller_type: { type: 'string', enum: ['chatgpt', 'codex', 'grok', 'claude'], description: 'External controller kind for launcher_start.' },
|
|
125
153
|
launch_reservation_ms: { type: 'number', description: 'Short duplicate-spawn reservation TTL for launcher_start or schedule_create; does not grant Work ownership.' },
|
|
126
154
|
executable: { type: 'string', description: 'External controller executable for launcher_start. This is owned by the Launcher, not the Kernel.' },
|
|
127
155
|
launch_args: { type: 'array', items: { type: 'string' }, description: 'Provider-specific arguments for launcher_start.' },
|
|
128
156
|
browser_session_id: { type: 'string', description: 'Saved Forge ChatGPT browser session to continue when controller_type=chatgpt.' },
|
|
129
157
|
conversation_url: { type: 'string', description: 'Explicit https://chatgpt.com conversation URL used when no saved Forge browser session exists.' },
|
|
158
|
+
transport_conversation: { type: 'string', enum: ['bound', 'fresh'], description: 'ChatGPT launcher transport only. When omitted, an existing Work binding or explicit conversation_url is reused; otherwise a fresh conversation is created. bound requires an existing binding or explicit conversation_url. fresh always starts a new conversation and records transport metadata after provider delivery is observed.' },
|
|
130
159
|
continuation_prompt: { type: 'string', description: 'Bounded Work continuation instruction.' },
|
|
131
160
|
schedule_id: { type: 'string', description: 'Schedule identity for schedule_get/pause/resume/delete/trigger.' },
|
|
132
161
|
schedule_name: { type: 'string', description: 'Human-readable schedule name.' },
|
|
@@ -163,151 +192,23 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
163
192
|
backoff_max_minutes: { type: 'number' },
|
|
164
193
|
include_occurrences: { type: 'boolean' },
|
|
165
194
|
plan_id: { type: 'string' },
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
scope_key: { type: 'string', description: 'Stable normalized scope identity used to prevent overlapping active plans.' },
|
|
195
|
+
superseded_by: { type: 'string', description: 'For plan_revise only: record the one-way successor Plan lineage. Once set it cannot be cleared or redirected; current Plan listings exclude the predecessor without restoring legacy Plan lifecycle semantics.' },
|
|
196
|
+
scope_key: { type: 'string', description: 'Optional normalized semantic scope label for Plan discovery/lineage; it is not execution ownership or a repository mutex.' },
|
|
169
197
|
source_revision: { type: 'string', description: 'Repository revision observed during read-only planning preflight.' },
|
|
170
|
-
|
|
198
|
+
plan_items: { type: 'array', maxItems: 100, items: { type: 'object', required: ['id', 'objective'], additionalProperties: false, properties: { id: { type: 'string', maxLength: 200 }, objective: { type: 'string', maxLength: 2000 }, dependencies: { type: 'array', maxItems: 100, items: { type: 'string', maxLength: 200 } } } }, description: 'Thin model-authored Plan items for plan_create/plan_revise. Items are descriptive working memory only and never own paths, checks, Work, scheduling, or acceptance.' },
|
|
171
199
|
non_goals: { type: 'array', items: { type: 'string' } },
|
|
172
200
|
assumptions: { type: 'array', items: { type: 'string' } },
|
|
173
201
|
resolved_decisions: { type: 'array', items: { type: 'string' } },
|
|
174
202
|
stop_conditions: { type: 'array', items: { type: 'string' } },
|
|
175
203
|
replan_conditions: { type: 'array', items: { type: 'string' } },
|
|
176
204
|
integration_strategy: { type: 'string' },
|
|
177
|
-
obligation_dispositions: { type: 'array', items: { type: 'object' }, description: 'For successor Plans, explicit predecessor obligation reconciliation. Each item carries predecessor_plan_id, obligation_id, disposition keep/change/defer/drop, successor_refs, and rationale for change/defer/drop.' },
|
|
178
|
-
superseded_by: { type: 'string', description: 'For plan_supersede, the explicit replacement Plan id. For legacy active Plan-bound Work scope repair, a compatibility revision label only; the stable Plan identity is not replaced.' },
|
|
179
|
-
expected_files: { type: 'number' },
|
|
180
|
-
expected_changed_lines: { type: 'number' },
|
|
181
|
-
mode: { type: 'string', enum: ['plan', 'scale'], description: 'Explicit durable Plan/Scale mode for start. Plan binds one approved PlanContract delivery step without implying isolation; Scale additionally coordinates parallel delivery through existing Work/Process/resource-claim authorities.' },
|
|
182
|
-
work_kind: { type: 'string', enum: ['repository_change', 'completed_no_change', 'read_only_review', 'investigation', 'local_effect', 'remote_effect', 'reconciliation'], description: 'Explicit technical Work evidence shape for operation=start. read_only_review is a recoverable source-frozen review lifecycle: it permits inspected-path/finding persistence without repository edits and only clean-finalizes after unchanged-source proof. local_effect/remote_effect represent effect-only execution; completed_no_change/investigation/reconciliation likewise do not imply a source mutation. None imply semantic completion; ChatGPT must still explicitly finalize after reviewing evidence.' },
|
|
183
|
-
scope_clear: { type: 'boolean' },
|
|
184
|
-
requires_investigation: { type: 'boolean' },
|
|
185
|
-
requires_long_running_checks: { type: 'boolean' },
|
|
186
|
-
requires_parallelism: { type: 'boolean' },
|
|
187
|
-
needs_dependencies: { type: 'boolean' },
|
|
188
|
-
requires_recovery: { type: 'boolean' },
|
|
189
|
-
requires_worker: { type: 'boolean', description: 'Opt-in only. Set true only when the user explicitly requests Codex/Claude or another agent worker; never infer it from task complexity.' },
|
|
190
|
-
requires_external_effect: { type: 'boolean' },
|
|
191
|
-
requires_approval: { type: 'boolean' },
|
|
192
|
-
requires_user_approval: { type: 'boolean' },
|
|
193
|
-
destructive: { type: 'boolean' },
|
|
194
|
-
remote_write: { type: 'boolean' },
|
|
195
|
-
secret_access: { type: 'boolean' },
|
|
196
205
|
approval_confirmed: { type: 'boolean' },
|
|
197
206
|
dry_run: { type: 'boolean', description: 'Defaults to true for repair.' },
|
|
198
|
-
check_ids: { type: 'array', items: { type: 'string' }, description: 'Requested checks. Before launching multiple checks concurrently, call rh_context with requested_check_ids to read resource-compatible checkScheduling waves; do not overlap checks from different waves.' },
|
|
199
|
-
check_id: { type: 'string' },
|
|
200
|
-
acceptance_criteria: { type: 'array', items: { type: 'string' } },
|
|
201
|
-
allowed_paths: { type: 'array', items: { type: 'string' } },
|
|
202
|
-
initial_likely_paths: { type: 'array', items: { type: 'string' }, description: 'Non-authoritative first-pass discovery candidates. May expand after investigation; allowed_paths remains a policy fence only.' },
|
|
203
|
-
engineering_preconditions: {
|
|
204
|
-
type: 'object',
|
|
205
|
-
description: 'Semantic precondition draft for start/continue. Context Closure must be the complete rh_context receipt; Product DoD, Design and independent critique are semantic content. Forge validates current source/provenance and mints the durable receipt ids server-side; raw caller-supplied evidence ids are never accepted as admission authority.',
|
|
206
|
-
properties: {
|
|
207
|
-
context_closure: { type: 'object' },
|
|
208
|
-
product_dod: { type: 'object', properties: {
|
|
209
|
-
user_outcome: { type: 'string' },
|
|
210
|
-
completion_conditions: { type: 'array', items: { type: 'string' } },
|
|
211
|
-
non_regression: { type: 'array', items: { type: 'string' } },
|
|
212
|
-
performance_expectations: { type: 'array', items: { type: 'string' } },
|
|
213
|
-
non_goals: { type: 'array', items: { type: 'string' } },
|
|
214
|
-
}, required: ['user_outcome', 'completion_conditions', 'non_regression', 'performance_expectations', 'non_goals'], additionalProperties: false },
|
|
215
|
-
design_decision: { type: 'object', properties: {
|
|
216
|
-
semantic_scope_keys: { type: 'array', items: { type: 'string' } },
|
|
217
|
-
mutation_class: { type: 'string', enum: ['readonly', 'isolated_write', 'integration_write', 'external_effect'] },
|
|
218
|
-
supersedes_receipt_id: { type: 'string' },
|
|
219
|
-
decisions: { type: 'object', properties: {
|
|
220
|
-
ownership: { type: 'string' }, single_writer: { type: 'string' }, transaction: { type: 'string' }, lifecycle: { type: 'string' }, concurrency: { type: 'string' }, persistence: { type: 'string' }, failure: { type: 'string' }, projection_cache: { type: 'string' }, time: { type: 'string' }, performance: { type: 'string' }, compatibility: { type: 'string' },
|
|
221
|
-
}, required: ['ownership', 'single_writer', 'transaction', 'lifecycle', 'concurrency', 'persistence', 'failure', 'projection_cache', 'time', 'performance', 'compatibility'], additionalProperties: false },
|
|
222
|
-
complexity_budget: { type: 'object', properties: {
|
|
223
|
-
added_writers: { type: 'number' }, added_durable_mechanisms: { type: 'number' }, projection_paths: { type: 'number' }, global_invalidations: { type: 'number' }, lifecycle_hooks: { type: 'number' }, synchronous_critical_path_work: { type: 'number' }, notes: { type: 'array', items: { type: 'string' } },
|
|
224
|
-
}, additionalProperties: false },
|
|
225
|
-
}, required: ['semantic_scope_keys', 'mutation_class', 'decisions', 'complexity_budget'], additionalProperties: false },
|
|
226
|
-
independent_critique: { type: 'object', properties: {
|
|
227
|
-
decision: { type: 'string', enum: ['approved', 'changes_required', 'blocked'] },
|
|
228
|
-
findings: { type: 'array', items: { type: 'object', properties: { severity: { type: 'string', enum: ['critical', 'high', 'medium', 'low', 'info'] }, summary: { type: 'string' } }, required: ['severity', 'summary'], additionalProperties: false } },
|
|
229
|
-
}, required: ['decision', 'findings'], additionalProperties: false },
|
|
230
|
-
},
|
|
231
|
-
required: ['context_closure', 'product_dod', 'design_decision', 'independent_critique'],
|
|
232
|
-
additionalProperties: false,
|
|
233
|
-
},
|
|
234
|
-
engineering_blocker: { type: 'object', description: 'Explicit semantic blocker classification for continue. Forge derives return_to_design vs linked_work; free text cannot widen the current Work.', properties: {
|
|
235
|
-
blocker_id: { type: 'string' }, classification: { type: 'string', enum: ['same_root_cause', 'unrelated'] }, rationale: { type: 'string' }, semantic_scope_keys: { type: 'array', items: { type: 'string' } },
|
|
236
|
-
}, required: ['blocker_id', 'classification', 'rationale'], additionalProperties: false },
|
|
237
|
-
additional_likely_paths: { type: 'array', items: { type: 'string' }, description: 'Non-authoritative candidates discovered after Work start. Valid for continue; does not widen allowed_paths.' },
|
|
238
|
-
inspected_paths: { type: 'array', items: { type: 'string' }, description: 'Paths actually inspected during progressive discovery. Valid for continue; does not widen allowed_paths.' },
|
|
239
|
-
review_findings: { type: 'array', items: { type: 'string' }, description: 'Concise semantic findings for operation=continue on work_kind=read_only_review. Findings are source-bound durable review evidence and prevent clean completed_no_change finalization until a successor repair/review resolves them.' },
|
|
240
|
-
review_decision: { type: 'string', enum: ['approved', 'changes_required', 'blocked'], description: 'Explicit Controller implementation-review decision for operation=review. No default approval.' },
|
|
241
|
-
review_rationale: { type: 'string', description: 'Explicit Controller rationale for operation=review.' },
|
|
242
|
-
implementation_review_findings: { type: 'array', items: { type: 'object', required: ['severity', 'category', 'summary'], properties: { severity: { type: 'string', enum: ['critical', 'high', 'medium', 'low', 'info'] }, category: { type: 'string' }, summary: { type: 'string' }, path: { type: 'string' }, symbol: { type: 'string' } }, additionalProperties: false }, description: 'Structured implementation-review findings. Candidate source, fingerprints, paths, and evidence identities are derived by Forge and are never accepted from the caller.' },
|
|
243
|
-
acceptance_evidence: { type: 'array', items: { type: 'object', required: ['criterion', 'evidence_ids', 'rationale'], properties: { criterion: { type: 'string', description: 'Exact declared Work acceptance criterion reviewed by the Controller.' }, evidence_ids: { type: 'array', items: { type: 'string' }, description: 'Durable evidence ids already attributed to this Work that support this exact criterion.' }, rationale: { type: 'string', description: 'Controller rationale for why the cited evidence satisfies this exact criterion.' } }, additionalProperties: false }, description: 'Operation=continue only. Explicit Controller-reviewed criterion-to-evidence bindings for no-check local_effect Work. Mechanical plugin/process attribution alone never implies semantic acceptance.' },
|
|
244
|
-
acceptance_failure_decision: { type: 'string', enum: ['repair', 'rescope'], description: 'Explicit Controller decision for operation=continue after a deterministic valid_fail. Bypasses acceptance-review handoff only for this bounded repair/re-scope decision; never inferred from free text.' },
|
|
245
|
-
forbidden_paths: { type: 'array', items: { type: 'string' } },
|
|
246
|
-
constraints: {
|
|
247
|
-
type: 'object',
|
|
248
|
-
properties: {
|
|
249
|
-
max_changed_files: { type: 'number' },
|
|
250
|
-
max_changed_lines: { type: 'number' },
|
|
251
|
-
allow_commit: { type: 'boolean' },
|
|
252
|
-
allow_merge: { type: 'boolean' },
|
|
253
|
-
allow_cleanup: { type: 'boolean' },
|
|
254
|
-
allow_destructive: { type: 'boolean' },
|
|
255
|
-
require_handoff_on_ambiguity: { type: 'boolean' },
|
|
256
|
-
access_mode: { type: 'string', enum: ['request', 'full_access'] },
|
|
257
|
-
workspace_mode: { type: 'string', enum: ['current', 'isolated', 'auto'], description: 'Typed placement policy. isolated is an admission fence and cannot be downgraded to Direct Control.' },
|
|
258
|
-
require_worktree: { type: 'boolean', description: 'Typed placement policy. true requires isolated Work placement before routing.' },
|
|
259
|
-
direct_main_prohibited: { type: 'boolean', description: 'Typed admission fence. true forbids Direct Control/current-main repository mutation.' },
|
|
260
|
-
},
|
|
261
|
-
additionalProperties: true,
|
|
262
|
-
},
|
|
263
207
|
repair_operation: { type: 'string', enum: ['diagnose', 'repair', 'verify', 'handoff'] },
|
|
264
|
-
target: { type: 'string', enum: ['codex', 'grok', 'claude'], description: 'Explicit small-brain delegate target for operation=delegate. Delegation is never the default execution path.' },
|
|
265
|
-
available: { type: 'boolean', description: 'Whether the delegate target is currently available.' },
|
|
266
|
-
codex_available: { type: 'boolean' },
|
|
267
|
-
simulate_check: { type: 'boolean', description: 'Test hook: skip real check execution and use infrastructure_failed/check_failed flags.' },
|
|
268
|
-
infrastructure_failed: { type: 'boolean' },
|
|
269
|
-
check_failed: { type: 'boolean' },
|
|
270
208
|
authorize_destructive_cleanup: { type: 'boolean' },
|
|
271
|
-
commit: { type: 'boolean', description: 'Finalize override. Defaults to true only when the Work owns uncommitted changes.' },
|
|
272
|
-
merge: { type: 'boolean', description: 'Finalize override. Defaults to true for managed Work delivery.' },
|
|
273
|
-
cleanup: { type: 'boolean', description: 'Finalize/stop override. Defaults to true so managed worktrees close automatically.' },
|
|
274
|
-
target_branch: { type: 'string', description: 'Delivery branch; defaults to the repository default branch.' },
|
|
275
|
-
delete_branch: { type: 'boolean', description: 'Defaults to true after target-branch containment is proven.' },
|
|
276
|
-
no_ff: { type: 'boolean' },
|
|
277
|
-
completion_outcome: { type: 'string', enum: ['completed_changed', 'completed_no_change', 'completed_local', 'completed_remote'], description: 'Explicit completion semantics. completed_local is for controller-local effect Work finalized from durable result evidence; completed_remote remains bound to a durable remote plugin receipt.' },
|
|
278
|
-
no_change_evidence: { type: 'string', description: 'Optional explicit proof for a no-change completion; otherwise the lifecycle coordinator derives proof only for an unchanged validated HEAD.' },
|
|
279
|
-
reconcile_historical_delivery: { type: 'boolean', description: 'Explicitly request reviewed reconciliation for a historically delivered repository Work whose original receipt is missing. Managed Work is eligible only after merge, branch cleanup, and worktree cleanup are durably complete.' },
|
|
280
|
-
reconcile_target_revision: { type: 'string', description: 'Exact already-integrated commit accepted by the reviewer.' },
|
|
281
|
-
reconcile_compared_paths: { type: 'array', items: { type: 'string' }, description: 'Complete exact path set changed from the Work base revision to reconcile_target_revision.' },
|
|
282
|
-
reconcile_rationale: { type: 'string', description: 'Bounded reviewer rationale for accepting the historical delivery.' },
|
|
283
|
-
reconcile_cleanup_proof: { type: 'string', description: 'Concrete proof that no owned cleanup remains or that cleanup is complete.' },
|
|
284
209
|
detail_level: { type: 'string', enum: ['summary', 'detail'] },
|
|
285
210
|
reason: { type: 'string', description: 'Bounded reason for a work stop or repair record.' },
|
|
286
211
|
}, [], false),
|
|
287
|
-
definition('work_get', 'Resume one Work by work_id or request_id. Repository scope is always enforced.', {
|
|
288
|
-
repo_id: repoId,
|
|
289
|
-
work_id: { type: 'string' },
|
|
290
|
-
request_id: { type: 'string' },
|
|
291
|
-
include_events: { type: 'boolean' },
|
|
292
|
-
wait: { type: 'boolean', description: 'When true, wait for terminal status before returning digest.' },
|
|
293
|
-
wait_ms: { type: 'number' },
|
|
294
|
-
}),
|
|
295
|
-
definition('work_list', 'List recent resumable Work for one repository.', {
|
|
296
|
-
repo_id: repoId,
|
|
297
|
-
limit: { type: 'number' },
|
|
298
|
-
}),
|
|
299
|
-
definition('work_cancel', 'Cancel one queued or running Work by work_id or request_id.', {
|
|
300
|
-
repo_id: repoId,
|
|
301
|
-
work_id: { type: 'string' },
|
|
302
|
-
request_id: { type: 'string' },
|
|
303
|
-
reason: { type: 'string' },
|
|
304
|
-
}, [], false),
|
|
305
|
-
definition('work_wait', 'Wait for one Work/ExecutionJob/managed process to reach a terminal status and return a bounded operation digest.', {
|
|
306
|
-
repo_id: repoId,
|
|
307
|
-
work_id: { type: 'string' },
|
|
308
|
-
request_id: { type: 'string' },
|
|
309
|
-
wait_ms: { type: 'number', description: 'Max wait in ms. Default 15000, max 120000.' },
|
|
310
|
-
}),
|
|
311
212
|
definition('git_diff_paths', 'Return a bounded Git diff and status for explicit repository-relative paths only.', {
|
|
312
213
|
repo_id: repoId,
|
|
313
214
|
paths: { type: 'array', items: { type: 'string' } },
|
|
@@ -335,7 +236,7 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
335
236
|
wait: { type: 'boolean', description: 'When true, wait for terminal status before returning digest.' },
|
|
336
237
|
wait_ms: { type: 'number' },
|
|
337
238
|
}, ['job_id']),
|
|
338
|
-
definition('get_artifact', 'Read one bounded Evidence Plane artifact by id.
|
|
239
|
+
definition('get_artifact', 'Read one bounded Evidence Plane artifact/evidence handle by opaque id. repo_id is optional and used only to adopt a historical repository-partitioned handle once.', { artifact_id: { type: 'string' }, repo_id: { ...repoId, description: 'Legacy repository hint only. Omit for canonical ForgeInstance output handles.' }, max_bytes: { type: 'number' } }, ['artifact_id']),
|
|
339
240
|
definition('repository_change_verify', 'Composite: verify checkout/SHA, apply bounded patch, run checks, return first failure inline without get_job/get_artifact follow-ups.', {
|
|
340
241
|
repo_id: repoId,
|
|
341
242
|
expected_branch: { type: 'string' },
|
|
@@ -470,6 +371,30 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
470
371
|
confirm_authorization: { type: 'boolean', description: 'Must be true to authorize this exact one-shot console unlock invocation.' },
|
|
471
372
|
timeout_ms: { type: 'number', description: 'Bounded provider/postcondition timeout in milliseconds. Defaults to 15000 and is capped at 30000.' },
|
|
472
373
|
}, ['credential_handle', 'confirm_authorization'], false),
|
|
374
|
+
definition('computer_console_unlock_enroll', 'Enroll provider-local device-only protected console recovery. Credential material never enters ChatGPT, Forge Runtime, plugin receipts, or replayable jobs. Requires confirm_authorization=true for every invocation.', {
|
|
375
|
+
confirm_authorization: { type: 'boolean', description: 'Must be true to authorize this exact provider-local enrollment invocation.' },
|
|
376
|
+
timeout_ms: { type: 'number', description: 'Bounded provider timeout in milliseconds. Defaults to 15000 and is capped at 30000.' },
|
|
377
|
+
}, ['confirm_authorization'], false),
|
|
378
|
+
definition('computer_console_unlock_status', 'Read protected console recovery enrollment and availability without exposing provider-local credential material. Requires confirm_authorization=true for every invocation.', {
|
|
379
|
+
confirm_authorization: { type: 'boolean', description: 'Must be true to authorize this exact protected status invocation.' },
|
|
380
|
+
timeout_ms: { type: 'number', description: 'Bounded provider timeout in milliseconds. Defaults to 15000 and is capped at 30000.' },
|
|
381
|
+
}, ['confirm_authorization'], false),
|
|
382
|
+
definition('computer_console_unlock_recover', 'Recover a locked macOS console using only previously enrolled provider-local device-only credential material. No credential is transported through ChatGPT or Forge Runtime. Requires confirm_authorization=true for every invocation.', {
|
|
383
|
+
confirm_authorization: { type: 'boolean', description: 'Must be true to authorize this exact one-shot recovery invocation.' },
|
|
384
|
+
timeout_ms: { type: 'number', description: 'Bounded provider/postcondition timeout in milliseconds. Defaults to 15000 and is capped at 30000.' },
|
|
385
|
+
}, ['confirm_authorization'], false),
|
|
386
|
+
definition('computer_console_unlock_revoke', 'Revoke provider-local protected console recovery enrollment. Requires confirm_authorization=true for every invocation.', {
|
|
387
|
+
confirm_authorization: { type: 'boolean', description: 'Must be true to authorize this exact provider-local revocation invocation.' },
|
|
388
|
+
timeout_ms: { type: 'number', description: 'Bounded provider timeout in milliseconds. Defaults to 15000 and is capped at 30000.' },
|
|
389
|
+
}, ['confirm_authorization'], false),
|
|
390
|
+
definition('capability_execute', 'Execute one typed Forge core capability through its canonical substrate owner. Discover the exact action schema with rh_context capability_id first. This stable facade prevents one top-level MCP tool per atomic repository operation; plugin capabilities continue to use plugin_action_execute.', {
|
|
391
|
+
repo_id: repoId,
|
|
392
|
+
checkout_id: { type: 'string', description: 'Optional exact checkout identity.' },
|
|
393
|
+
capability_id: { type: 'string', description: 'Exact core capability identity returned by rh_context.' },
|
|
394
|
+
action: { type: 'string', description: 'Exact capability action returned by rh_context.' },
|
|
395
|
+
request_id: { type: 'string', description: 'Stable idempotency identity for this invocation.' },
|
|
396
|
+
arguments: { type: 'object', description: 'Action-specific arguments validated by the capability owner.' },
|
|
397
|
+
}, ['capability_id', 'action', 'request_id'], false),
|
|
473
398
|
definition('plugin_action_execute', 'Execute one typed repository or controller-scoped plugin action through the plugin provider authority. rh_context exposes plugin schemas/policy; rh_work does not execute plugin capabilities. For confirmation=authorization, normal host permission is authoritative and an exact-target Forge capability grant may be reused; do not set confirm_authorization merely because an ordinary authorization-class action was previously allowed. Strong-confirmation actions still require their explicit confirmation contract.', {
|
|
474
399
|
repo_id: repoId,
|
|
475
400
|
plugin_id: { type: 'string' },
|
|
@@ -528,6 +453,21 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
528
453
|
recent_safe_error: { type: 'string' },
|
|
529
454
|
model: { type: 'string' },
|
|
530
455
|
}),
|
|
456
|
+
definition('supervisor_task', 'Start, list, inspect, revise, recover, stop, or prove standalone Workflow Supervisor autonomous tasks. Supervisor task/effect state is the continuation authority; Requirement, Plan, and Work are optional and are not created by this tool.', {
|
|
457
|
+
repo_id: { ...repoId, description: 'Optional repository provenance for start/proof; never Work authority.' },
|
|
458
|
+
operation: { type: 'string', enum: ['start', 'list', 'get', 'revise', 'recover', 'stop', 'proof'] },
|
|
459
|
+
task_id: { type: 'string' },
|
|
460
|
+
objective: { type: 'string', description: 'Outcome objective for start/revise; revise never changes task or conversation identity.' },
|
|
461
|
+
expected_objective_sha256: { type: 'string', description: 'For revise: CAS hash of the exact current objective.' },
|
|
462
|
+
reason: { type: 'string', description: 'Operator reason recorded for stop/recover.' },
|
|
463
|
+
source_effect_id: { type: 'string', description: 'Optional exact source effect for operator recovery fencing.' },
|
|
464
|
+
supersede_unknown: { type: 'boolean', description: 'For recover only: explicitly retire one outcome-unknown effect instead of replaying it.' },
|
|
465
|
+
authorized_by: { type: 'string', description: 'Optional operator identity recorded by canonical recovery authority.' },
|
|
466
|
+
active_only: { type: 'boolean', description: 'For list, defaults true; exclude terminal tasks.' },
|
|
467
|
+
request_id: { type: 'string', description: 'Stable idempotency identity for start/revise/recover.' },
|
|
468
|
+
active_release_id: { type: 'string', description: 'Active Runtime release expected in proof dispatch evidence.' },
|
|
469
|
+
not_before: { type: 'string', description: 'ISO-8601 lower bound for proof completions.' },
|
|
470
|
+
}, ['operation'], false),
|
|
531
471
|
definition('review_artifacts_prepare', 'Create bounded repo-local review artifact roots for browser/iOS screenshot review workflows.', { repo_id: repoId }, [], false),
|
|
532
472
|
definition('review_artifacts_index', 'Index bounded repo-local browser/iOS screenshots, logs, and build reports for visual review.', { repo_id: repoId, limit: { type: 'number' } }),
|
|
533
473
|
definition('browser_review_packet', 'Build a browser visual review packet from indexed browser screenshots.', { repo_id: repoId, limit: { type: 'number' } }),
|
|
@@ -5,13 +5,14 @@ import { callLegacyIosAdapter } from './legacy-ios-tool-adapter';
|
|
|
5
5
|
import { result } from './result-adapter';
|
|
6
6
|
import { callContextAdapter } from './context-adapter';import { callPluginAdapter } from './plugin-adapter';import { callRecoveryAdapter } from './recovery-adapter';import { callArtifactAdapter } from './artifact-adapter';import { callFilesystemAdapter } from './filesystem-adapter';import { callModelAdapter } from './model-adapter';
|
|
7
7
|
import { callProtectedComputerAdapter } from './protected-computer-adapter';
|
|
8
|
-
import {
|
|
8
|
+
import { callWorkflowSupervisorAdapter } from './workflow-supervisor-adapter';
|
|
9
9
|
import { callRepositoryCompatibilityAdapter } from './repository-compat-adapter';
|
|
10
10
|
import { callSchedulerAdapter } from './scheduler-adapter';
|
|
11
11
|
import { callRuntimeObservationAdapter } from './runtime-observation-adapter';
|
|
12
12
|
import { callExecutionControlAdapter } from './execution-control-adapter';
|
|
13
13
|
import { callMaintenanceAdapter } from './maintenance-adapter';
|
|
14
14
|
import { callStatusInboxAdapter } from './status-inbox-adapter';
|
|
15
|
+
import { callCoreCapabilityAdapter } from './core-capability-adapter';
|
|
15
16
|
export { boundedPluginArtifactImageContent } from './result-adapter';
|
|
16
17
|
export { classifyTerminalCheckEvidence } from '../../../src/runtime/execution/process-runtime/check-result';
|
|
17
18
|
|
|
@@ -21,8 +22,9 @@ export {
|
|
|
21
22
|
runtimeToolDefinitions,
|
|
22
23
|
} from './runtime-tool-definitions';
|
|
23
24
|
import { callWorkAdapter, runFacadeRepair } from './work-adapter';
|
|
25
|
+
import { automationMetadata, persistAutomationReceipt } from './automation-receipt-adapter';
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
async function callRuntimeToolUnchecked(ctx: MultiRepositoryMcpToolContext, name: string, args: Record<string, unknown>): Promise<CallToolResult | undefined> {
|
|
26
28
|
try {
|
|
27
29
|
const statusInbox = await callStatusInboxAdapter(ctx, name, args, { repair: runFacadeRepair });
|
|
28
30
|
if (statusInbox) return statusInbox;
|
|
@@ -30,6 +32,8 @@ export async function callRuntimeTool(ctx: MultiRepositoryMcpToolContext, name:
|
|
|
30
32
|
if (context) return context;
|
|
31
33
|
const protectedComputer = await callProtectedComputerAdapter(ctx, name, args);
|
|
32
34
|
if (protectedComputer) return protectedComputer;
|
|
35
|
+
const coreCapability = await callCoreCapabilityAdapter(ctx, name, args);
|
|
36
|
+
if (coreCapability) return coreCapability;
|
|
33
37
|
const plugin = await callPluginAdapter(ctx, name, args);
|
|
34
38
|
if (plugin) return plugin;
|
|
35
39
|
const recovery = await callRecoveryAdapter(ctx, name, args);
|
|
@@ -40,8 +44,8 @@ export async function callRuntimeTool(ctx: MultiRepositoryMcpToolContext, name:
|
|
|
40
44
|
if (filesystem) return filesystem;
|
|
41
45
|
const model = callModelAdapter(ctx, name, args);
|
|
42
46
|
if (model) return model;
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
47
|
+
const workflowSupervisor = await callWorkflowSupervisorAdapter(ctx, name, args);
|
|
48
|
+
if (workflowSupervisor) return workflowSupervisor;
|
|
45
49
|
const repositoryCompatibility = await callRepositoryCompatibilityAdapter(ctx, name, args);
|
|
46
50
|
if (repositoryCompatibility) return repositoryCompatibility;
|
|
47
51
|
const scheduler = await callSchedulerAdapter(ctx, name, args);
|
|
@@ -63,6 +67,12 @@ export async function callRuntimeTool(ctx: MultiRepositoryMcpToolContext, name:
|
|
|
63
67
|
}
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
export
|
|
70
|
+
export async function callRuntimeTool(ctx: MultiRepositoryMcpToolContext, name: string, args: Record<string, unknown>): Promise<CallToolResult | undefined> {
|
|
71
|
+
const metadata = automationMetadata(args);
|
|
72
|
+
const outcome = await callRuntimeToolUnchecked(ctx, name, args);
|
|
73
|
+
await persistAutomationReceipt(ctx, name, metadata, outcome);
|
|
74
|
+
return outcome;
|
|
75
|
+
}
|
|
76
|
+
|
|
67
77
|
export { runtimeIdentitySnapshot, dispatchedChatgptRelayAuthorizesStaleControllerRecovery, sessionlessFacadeControllerAuthorityMatches } from './controller-authority-adapter';
|
|
68
78
|
export type { RuntimeIdentitySnapshot } from './controller-authority-adapter';
|
|
@@ -66,6 +66,7 @@ export async function callRhWorkScheduleAdapter(
|
|
|
66
66
|
workId,
|
|
67
67
|
scheduleMode: scheduleModeRaw as 'continuation' | 'browser_watch' | 'browser_keepalive',
|
|
68
68
|
controllerType: controllerType as ContinuationControllerType,
|
|
69
|
+
authorizationGrantRefs: Array.isArray(args.authorization_grant_refs) ? args.authorization_grant_refs.map(String) : undefined,
|
|
69
70
|
executable: typeof args.executable === 'string' ? args.executable : undefined,
|
|
70
71
|
launchArgs: Array.isArray(args.launch_args) ? args.launch_args.map(String) : undefined,
|
|
71
72
|
launchReservationMs: typeof args.launch_reservation_ms === 'number' ? args.launch_reservation_ms : typeof args.lease_ms === 'number' ? args.lease_ms : undefined,
|
|
@@ -16,6 +16,26 @@ export function repositoryRootForRepoId(controllerHome: string, repoId: string):
|
|
|
16
16
|
return listRepositories(controllerHome).find((repository) => repository.repoId === repoId)?.canonicalRoot;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Repository selection for tools whose semantics can be instance-scoped.
|
|
21
|
+
*
|
|
22
|
+
* An explicitly named repository (or the MCP server's default repository
|
|
23
|
+
* context) stays authoritative and fails closed when invalid. When the caller
|
|
24
|
+
* names none, a sole enabled repository is used; zero or several repositories
|
|
25
|
+
* yield undefined so the caller can serve the ForgeInstance-level answer
|
|
26
|
+
* instead of inventing a repository.
|
|
27
|
+
*/
|
|
28
|
+
export function selectedOptional(
|
|
29
|
+
ctx: MultiRepositoryMcpToolContext,
|
|
30
|
+
args: Record<string, unknown>,
|
|
31
|
+
): ReturnType<typeof selected> | undefined {
|
|
32
|
+
const explicitRepoId = typeof args.repo_id === 'string' ? args.repo_id.trim() : '';
|
|
33
|
+
const explicitCheckoutId = typeof args.checkout_id === 'string' ? args.checkout_id.trim() : '';
|
|
34
|
+
if (explicitRepoId || explicitCheckoutId || ctx.explicitRepository) return selected(ctx, args);
|
|
35
|
+
const enabled = listRepositories(ctx.controllerHome).filter((record) => record.enabled);
|
|
36
|
+
return enabled.length === 1 ? selected(ctx, args) : undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
19
39
|
export function expectedRevision(args: Record<string, unknown>, key = 'expected_revision'): number | undefined {
|
|
20
40
|
return typeof args[key] === 'number' ? Math.trunc(args[key] as number) : undefined;
|
|
21
41
|
}
|