@moretea-labs/forge 1.7.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +58 -62
- package/CHANGELOG.md +26 -0
- package/CLAUDE.md +42 -62
- package/README.md +2 -2
- package/SKILL.md +0 -1
- package/THIRD_PARTY_NOTICES.md +5 -2
- package/adapters/browser/index.ts +2 -0
- package/adapters/chatgpt/browser-delivery-host.ts +71 -0
- package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
- package/adapters/chatgpt/controller-binding-store.ts +55 -0
- package/adapters/chatgpt/controller-host.ts +119 -0
- package/adapters/chatgpt/controller-round-host.ts +78 -0
- package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
- package/adapters/chatgpt/provider-delivery.ts +113 -0
- package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
- package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
- package/adapters/computer/desktop-operator-contract.ts +7 -0
- package/adapters/computer/desktop-operator-discovery.ts +201 -0
- package/adapters/computer/desktop-operator-negotiation.ts +174 -0
- package/adapters/computer/desktop-operator-provider.ts +312 -0
- package/adapters/computer/index.ts +1 -0
- package/adapters/computer/interaction-target-authority.ts +944 -0
- package/adapters/controller-process/binding-store.ts +34 -0
- package/adapters/controller-process/controller-host.ts +26 -0
- package/adapters/mcp/access-mode.ts +132 -0
- package/adapters/mcp/audit.ts +32 -0
- package/adapters/mcp/auth.ts +407 -0
- package/adapters/mcp/controller-round-compatibility.ts +184 -0
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
- package/adapters/mcp/instructions.ts +36 -0
- package/adapters/mcp/legacy-context.ts +18 -0
- package/adapters/mcp/multi-repository.ts +437 -0
- package/adapters/mcp/oauth.ts +391 -0
- package/adapters/mcp/paths.ts +140 -0
- package/adapters/mcp/policy.ts +232 -0
- package/adapters/mcp/proxy-env.ts +62 -0
- package/adapters/mcp/readiness-projection.ts +24 -0
- package/adapters/mcp/redaction.ts +21 -0
- package/adapters/mcp/repo.ts +24 -0
- package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
- package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
- package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
- package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
- package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
- package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
- package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
- package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
- package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
- package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
- package/adapters/mcp/runtime-gateway/router.ts +728 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
- package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
- package/adapters/mcp/server.ts +1048 -0
- package/adapters/mcp/setup.ts +791 -0
- package/adapters/mcp/tool-capability-cache.ts +87 -0
- package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
- package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
- package/adapters/mcp/tool-mapping/tools.ts +9 -0
- package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
- package/adapters/mcp/toolset-names.ts +74 -0
- package/adapters/mcp/toolset-selection.ts +41 -0
- package/adapters/mcp/toolset.ts +336 -0
- package/adapters/mcp/transports/http.ts +1456 -0
- package/adapters/mcp/transports/session-registry.ts +513 -0
- package/adapters/mcp/transports/stdio.ts +8 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
- package/adapters/mcp/types.ts +41 -0
- package/assets/AGENTS.md +2 -16
- package/assets/CLAUDE.md +2 -16
- package/assets/hooks/AGENTS.md +3 -14
- package/assets/hooks/CLAUDE.md +3 -14
- package/assets/hooks/hook-input.sh +9 -2
- package/assets/hooks/lib/workflow-state.sh +28 -10
- package/assets/hooks/prompt-guard.sh +63 -37
- package/assets/hooks/security-sentinel.sh +2 -1
- package/assets/hooks/session-start-context.sh +7 -5
- package/assets/hooks/stop-orchestrator.sh +13 -3
- package/assets/initializer-question-pack.v4.json +11 -7
- package/assets/partials/05-workflow.partial.md +18 -73
- package/assets/partials/07-footer.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +1 -2
- package/assets/partials-agents/04-task-protocol.partial.md +14 -59
- package/assets/partials-agents/06-quality-safety.partial.md +11 -16
- package/assets/partials-agents/08-deep-docs.partial.md +1 -2
- package/assets/plan-map.json +11 -11
- package/assets/plugin-registry.v1.json +9 -3
- package/assets/plugin-trust-policy.v1.json +6 -0
- package/assets/recovery/ForgeRecovery.ps1 +100 -0
- package/assets/recovery/forge-wsl-rescue +271 -0
- package/assets/reference-configs/development-protocol.md +11 -15
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/global-working-rules.md +9 -1
- package/assets/reference-configs/harness-overview.md +22 -112
- package/assets/reference-configs/hook-operations.md +1 -1
- package/assets/reference-configs/sprint-contracts.md +2 -2
- package/assets/skill-version.json +2 -2
- package/assets/templates/helpers/architecture-event.ts +3 -34
- package/assets/templates/helpers/architecture-queue.sh +61 -10
- package/assets/templates/helpers/archive-workflow.sh +90 -180
- package/assets/templates/helpers/capability-config.ts +8 -11
- package/assets/templates/helpers/capability-resolver.ts +37 -19
- package/assets/templates/helpers/capture-plan.sh +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +1 -9
- package/assets/templates/helpers/check-task-sync.sh +82 -11
- package/assets/templates/helpers/check-task-workflow.sh +1 -3
- package/assets/templates/helpers/context-contract-sync.sh +1 -12
- package/assets/templates/helpers/contract-worktree.sh +26 -24
- package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
- package/assets/templates/helpers/inspect-project-state.ts +1 -1
- package/assets/templates/helpers/migrate-project-template.sh +1 -1
- package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
- package/assets/templates/helpers/new-plan.sh +2 -2
- package/assets/templates/helpers/plan-to-todo.sh +3 -31
- package/assets/templates/helpers/sprint-backlog.sh +1 -1
- package/assets/templates/helpers/switch-plan.sh +1 -1
- package/assets/templates/helpers/workflow-contract.ts +1 -0
- package/assets/workflow-contract.v1.json +63 -171
- package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
- package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
- package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
- package/docs/architecture/CURRENT.md +148 -13
- package/docs/architecture/EVOLUTION.md +13 -0
- package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
- package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
- package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
- package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
- package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
- package/docs/architecture/domains/verification.md +7 -0
- package/docs/architecture/domains/workflow-engine.md +1 -1
- package/docs/architecture/index.md +3 -3
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
- package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
- package/docs/forge-chatgpt-mcp-setup.md +5 -3
- package/docs/forge-plugin-management.md +20 -4
- package/docs/forge-runtime-self-healing-loop.md +2 -0
- package/docs/operations/benchmark-cross-version-freeze.md +38 -0
- package/docs/operations/controller-browser-plugin.md +3 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/platform-support.md +16 -8
- package/docs/operations/platform-support.zh-CN.md +2 -2
- package/docs/operations/standalone-disaster-recovery.md +26 -1
- package/docs/operations/uu-remote-rescue.md +41 -0
- package/docs/operations/windows-wsl-host-rescue.md +133 -0
- package/docs/public-usage-guide.md +1 -1
- package/docs/public-usage-guide.zh-CN.md +1 -1
- package/docs/tutorials/01-install-and-start.md +1 -1
- package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
- package/docs/tutorials/02-connect-chatgpt.md +4 -4
- package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +23 -14
- package/packages/kernel/controller/api/index.ts +2 -0
- package/packages/kernel/controller/application/controller-round-service.ts +29 -0
- package/packages/kernel/controller/application/controller-service.ts +30 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
- package/packages/kernel/controller/domain/controller-round.ts +107 -0
- package/packages/kernel/controller/domain/execution-quality.ts +133 -0
- package/packages/kernel/controller/domain/types.ts +56 -0
- package/packages/kernel/controller/index.ts +1 -0
- package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
- package/packages/kernel/controller/ports/controller-host.ts +16 -0
- package/packages/kernel/goal/api/index.ts +1 -0
- package/packages/kernel/goal/domain/types.ts +40 -0
- package/packages/kernel/goal/index.ts +1 -0
- package/packages/kernel/identity/api/index.ts +5 -0
- package/packages/kernel/identity/application/identity-service.ts +67 -0
- package/packages/kernel/identity/domain/scope.ts +63 -0
- package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
- package/packages/kernel/identity/domain/types.ts +44 -0
- package/packages/kernel/identity/domain/workspace.ts +56 -0
- package/packages/kernel/identity/index.ts +1 -0
- package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
- package/packages/kernel/memory/api/index.ts +5 -0
- package/packages/kernel/memory/application/experience-service.ts +118 -0
- package/packages/kernel/memory/application/outcome-service.ts +77 -0
- package/packages/kernel/memory/domain/experience.ts +103 -0
- package/packages/kernel/memory/domain/operational-prior.ts +92 -0
- package/packages/kernel/memory/index.ts +1 -0
- package/packages/kernel/progression/api/index.ts +2 -0
- package/packages/kernel/progression/application/projector.ts +211 -0
- package/packages/kernel/progression/domain/types.ts +116 -0
- package/packages/kernel/progression/index.ts +1 -0
- package/packages/kernel/scheduler/api/index.ts +6 -0
- package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
- package/packages/kernel/scheduler/application/eligibility.ts +252 -0
- package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
- package/packages/kernel/scheduler/application/settlement.ts +197 -0
- package/packages/kernel/scheduler/domain/continuation.ts +38 -0
- package/packages/kernel/scheduler/domain/schedule.ts +149 -0
- package/packages/kernel/scheduler/index.ts +1 -0
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
- package/packages/kernel/work/api/index.ts +15 -0
- package/packages/kernel/work/application/work-service.ts +148 -0
- package/packages/kernel/work/domain/admission-policy.ts +34 -0
- package/packages/kernel/work/domain/check-receipt.ts +43 -0
- package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
- package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
- package/packages/kernel/work/domain/engineering-design.ts +281 -0
- package/packages/kernel/work/domain/engineering-profile.ts +242 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
- package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
- package/packages/kernel/work/domain/implementation-review.ts +510 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
- package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
- package/packages/kernel/work/domain/state-machine.ts +259 -0
- package/packages/kernel/work/domain/types.ts +528 -0
- package/packages/kernel/work/index.ts +1 -0
- package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
- package/packages/kernel/work/ports/work-contract-store.ts +18 -0
- package/packages/plugin-runtime/browser/index.ts +3 -0
- package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
- package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
- package/packages/plugin-runtime/browser/session-authority.ts +61 -0
- package/packages/plugin-runtime/computer/index.ts +6 -0
- package/packages/plugin-runtime/computer/provider-error.ts +26 -0
- package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
- package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
- package/packages/plugin-runtime/computer/provider.ts +19 -0
- package/packages/plugin-runtime/computer/target-authority.ts +190 -0
- package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
- package/packages/plugin-runtime/external/index.ts +1 -0
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
- package/packages/plugin-runtime/index.ts +3 -0
- package/packages/protocols/browser/index.ts +1 -0
- package/packages/protocols/browser/session.ts +98 -0
- package/packages/protocols/computer/contract.ts +199 -0
- package/packages/protocols/computer/index.ts +1 -0
- package/packages/protocols/failure/contract.ts +158 -0
- package/packages/protocols/failure/index.ts +1 -0
- package/packages/protocols/handoff/index.ts +1 -0
- package/packages/protocols/handoff/status.ts +22 -0
- package/packages/protocols/mcp/execution-context.ts +11 -0
- package/packages/protocols/mcp/index.ts +2 -0
- package/packages/protocols/mcp/tool-contract.ts +42 -0
- package/packages/workflow-runtime/api/index.ts +2 -0
- package/packages/workflow-runtime/application/interpreter.ts +342 -0
- package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
- package/packages/workflow-runtime/index.ts +1 -0
- package/scripts/assemble-template.ts +1 -1
- package/scripts/benchmark-computer-hotpath.ts +255 -0
- package/scripts/benchmark-controller-round2.ts +54 -2
- package/scripts/benchmark-ios-agent-device.ts +3 -6
- package/scripts/benchmark-mcp-transport.ts +3 -4
- package/scripts/benchmark-operational-memory-activation.ts +235 -0
- package/scripts/benchmark-operational-shadow.ts +28 -0
- package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
- package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
- package/scripts/canary-controller-semantic-wait.ts +195 -0
- package/scripts/canary-global-hook.sh +2 -2
- package/scripts/check-mcp-compatibility.ts +173 -7
- package/scripts/check-platform-support.mjs +28 -2
- package/scripts/check-public-docs.sh +1 -1
- package/scripts/check-release-readiness.sh +1 -1
- package/scripts/check-repository-hygiene.mjs +92 -0
- package/scripts/check-runtime-architecture.mjs +1206 -95
- package/scripts/check-source-duplication.mjs +9 -1
- package/scripts/check-tarball-install-smoke.sh +98 -15
- package/scripts/controller-ngrok-rotation.sh +5 -4
- package/scripts/create-project-dirs.sh +10 -74
- package/scripts/forge-local-recovery-helper.mjs +204 -0
- package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
- package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
- package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
- package/scripts/hook-shim.sh +2 -2
- package/scripts/init-project.sh +12 -70
- package/scripts/install-desktop-operator-registration.ts +4 -2
- package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
- package/scripts/install-standalone-recovery.ts +122 -10
- package/scripts/install-uu-remote-rescue-registration.ts +74 -0
- package/scripts/install-windows-host-recovery-registration.ts +22 -0
- package/scripts/lib/controller-home-env.sh +6 -3
- package/scripts/lib/project-init-lib.sh +39 -582
- package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
- package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
- package/scripts/open-source-audit-allowlist.txt +12 -1
- package/scripts/portability-bindings.mjs +70 -0
- package/scripts/run-bounded-command.mjs +55 -0
- package/scripts/run-bun-test-file.ts +22 -6
- package/scripts/run-governed-gate.ts +4 -1
- package/scripts/smoke-mcp-http-runtime.ts +1 -1
- package/scripts/smoke-runtime-recovery.ts +34 -1
- package/scripts/smoke-schedule-engine.ts +1 -1
- package/scripts/stage-runtime-release.ts +6 -1
- package/scripts/test-governance.ts +51 -2
- package/src/cli/agent-jobs/job-manager.ts +10 -1
- package/src/cli/chatgpt-browser/bind-server.ts +2 -1
- package/src/cli/chatgpt-browser/binding.ts +20 -10
- package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
- package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
- package/src/cli/chatgpt-browser/engine.ts +10 -11
- package/src/cli/chatgpt-browser/native-provider.ts +24 -83
- package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
- package/src/cli/chatgpt-browser/types.ts +1 -0
- package/src/cli/commands/bootstrap-control.ts +334 -0
- package/src/cli/commands/brain-assistant.ts +38 -0
- package/src/cli/commands/brain.ts +193 -40
- package/src/cli/commands/chatgpt.ts +127 -0
- package/src/cli/commands/computer.ts +437 -0
- package/src/cli/commands/doctor.ts +18 -1
- package/src/cli/commands/init-hook.ts +71 -61
- package/src/cli/commands/init.ts +3 -1
- package/src/cli/commands/mcp.ts +16 -10
- package/src/cli/commands/plugin.ts +38 -12
- package/src/cli/commands/recovery.ts +493 -80
- package/src/cli/commands/runtime.ts +9 -4
- package/src/cli/commands/setup-profile.ts +89 -39
- package/src/cli/commands/status.ts +2 -1
- package/src/cli/controller/check-runner.ts +487 -98
- package/src/cli/controller/context/types.ts +7 -1
- package/src/cli/controller/context-pack.ts +23 -3
- package/src/cli/controller/issue-store.ts +1 -1
- package/src/cli/controller/systemd-user.ts +110 -0
- package/src/cli/controller/types.ts +10 -70
- package/src/cli/controller/worklog.ts +67 -13
- package/src/cli/editing/edit-operation-contract.ts +92 -0
- package/src/cli/editing/edit-session.ts +289 -13
- package/src/cli/github/plugin.ts +17 -12
- package/src/cli/hook/route-registry.ts +3 -5
- package/src/cli/hook/runtime.ts +49 -3
- package/src/cli/index.ts +3 -0
- package/src/cli/local-bridge/connector-freshness.ts +2 -2
- package/src/cli/local-bridge/console-automations.ts +2 -2
- package/src/cli/local-bridge/facade-api.ts +41 -14
- package/src/cli/local-bridge/job-store.ts +1 -1
- package/src/cli/local-bridge/server.ts +24 -27
- package/src/cli/mcp/access-mode.ts +2 -132
- package/src/cli/mcp/access-tools.ts +2 -387
- package/src/cli/mcp/audit.ts +2 -32
- package/src/cli/mcp/auth.ts +2 -404
- package/src/cli/mcp/instructions.ts +2 -34
- package/src/cli/mcp/legacy-context.ts +2 -16
- package/src/cli/mcp/legacy-tool-service.ts +2 -5308
- package/src/cli/mcp/multi-repository.ts +2 -436
- package/src/cli/mcp/oauth.ts +2 -375
- package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
- package/src/cli/mcp/paths.ts +2 -140
- package/src/cli/mcp/policy.ts +2 -232
- package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
- package/src/cli/mcp/proxy-env.ts +2 -62
- package/src/cli/mcp/readiness-projection.ts +2 -24
- package/src/cli/mcp/redaction.ts +2 -21
- package/src/cli/mcp/repo.ts +2 -24
- package/src/cli/mcp/repository-tools.ts +2 -1613
- package/src/cli/mcp/server.ts +2 -951
- package/src/cli/mcp/setup.ts +2 -737
- package/src/cli/mcp/tool-capability-cache.ts +2 -87
- package/src/cli/mcp/tool-contract.ts +2 -14
- package/src/cli/mcp/tools.ts +2 -9
- package/src/cli/mcp/toolset-names.ts +2 -70
- package/src/cli/mcp/toolset-selection.ts +2 -41
- package/src/cli/mcp/toolset.ts +2 -336
- package/src/cli/mcp/transports/AGENTS.md +1 -10
- package/src/cli/mcp/transports/CLAUDE.md +1 -10
- package/src/cli/mcp/transports/http.ts +2 -1414
- package/src/cli/mcp/transports/session-registry.ts +2 -490
- package/src/cli/mcp/transports/stdio.ts +2 -8
- package/src/cli/mcp/types.ts +2 -41
- package/src/cli/mcp/umbrella-tools.ts +2 -117
- package/src/cli/repositories/command-executor.ts +64 -18
- package/src/cli/repositories/command-scope.ts +117 -1
- package/src/cli/repositories/controller-home.ts +119 -1
- package/src/cli/repositories/identity.ts +13 -0
- package/src/cli/repositories/registry.ts +68 -49
- package/src/cli/repositories/repository-snapshot.ts +53 -7
- package/src/cli/repositories/runtime-storage.ts +27 -2
- package/src/cli/repositories/safe-patch.ts +34 -38
- package/src/cli/repositories/selected-path-actions.ts +22 -2
- package/src/cli/repositories/structured-git.ts +105 -25
- package/src/cli/runtime/helper-runner.ts +7 -0
- package/src/cli/runtime-invocation.ts +8 -1
- package/src/cli/tools/codegraph.ts +44 -25
- package/src/core/adoption/manifest-templates.ts +1 -1
- package/src/core/adoption/plan.ts +3 -26
- package/src/core/adoption/workflow-contract-plan.ts +17 -9
- package/src/effects/process-runner.ts +8 -14
- package/src/runtime/context/assistant-context.ts +154 -0
- package/src/runtime/context/assistant-work-context.ts +147 -0
- package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
- package/src/runtime/context/codegraph-read-provider.ts +55 -22
- package/src/runtime/context/codegraph-sidecar.cjs +8 -1
- package/src/runtime/context/context-closure.ts +268 -0
- package/src/runtime/context/context-plane.ts +211 -0
- package/src/runtime/context/project-engineering-contract.ts +60 -0
- package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
- package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
- package/src/runtime/control-plane/bootstrap/index.ts +5 -0
- package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
- package/src/runtime/control-plane/bootstrap/store.ts +21 -0
- package/src/runtime/control-plane/bootstrap/types.ts +87 -0
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
- package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +369 -99
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
- package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
- package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
- package/src/runtime/control-plane/execution/validation.ts +28 -3
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
- package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
- package/src/runtime/control-plane/execution/work-handle-authority.ts +219 -22
- package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
- package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
- package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
- package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
- package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
- package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
- package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
- package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
- package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
- package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
- package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
- package/src/runtime/control-plane/facade/index.ts +4 -2
- package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
- package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
- package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
- package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
- package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
- package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
- package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
- package/src/runtime/control-plane/facade/types.ts +189 -532
- package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
- package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
- package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
- package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
- package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
- package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
- package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
- package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
- package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
- package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
- package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
- package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
- package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
- package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
- package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
- package/src/runtime/control-plane/release-retention.ts +56 -16
- package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
- package/src/runtime/control-plane/routing/route-policy.ts +19 -0
- package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
- package/src/runtime/control-plane/runtime-generation.ts +6 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
- package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
- package/src/runtime/diagnostics/incident-repair.ts +406 -0
- package/src/runtime/diagnostics/mcp-timing.ts +125 -6
- package/src/runtime/diagnostics/performance.ts +6 -14
- package/src/runtime/diagnostics/read-only-tool.ts +1 -1
- package/src/runtime/evidence/artifact-store.ts +65 -2
- package/src/runtime/evidence/operational-shadow.ts +38 -0
- package/src/runtime/evidence/process-check-receipt.ts +5 -43
- package/src/runtime/evidence/sensitive-output.ts +4 -4
- package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
- package/src/runtime/execution/jobs/store.ts +121 -2
- package/src/runtime/execution/managed-workspace.ts +55 -5
- package/src/runtime/execution/process-runtime/canary.ts +19 -5
- package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
- package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
- package/src/runtime/execution/process-runtime/check-result.ts +73 -2
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
- package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
- package/src/runtime/execution/process-runtime/index.ts +1 -0
- package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
- package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
- package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
- package/src/runtime/execution/process-runtime/runtime.ts +132 -15
- package/src/runtime/execution/process-runtime/types.ts +22 -0
- package/src/runtime/execution/workers/executor.ts +16 -13
- package/src/runtime/execution/workers/worker-entry.ts +1 -1
- package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
- package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
- package/src/runtime/gateway/mcp/process-tools.ts +2 -289
- package/src/runtime/gateway/mcp/router.ts +2 -1125
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
- package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6655
- package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
- package/src/runtime/maintenance/cleanup.ts +38 -24
- package/src/runtime/platform/browser-product-discovery.ts +174 -0
- package/src/runtime/platform/computer-platform.ts +14 -0
- package/src/runtime/platform/executable-discovery.ts +54 -0
- package/src/runtime/platform/fetch-http-server.ts +90 -0
- package/src/runtime/platform/service-manager.ts +138 -0
- package/src/runtime/platform/windows-host-discovery.ts +118 -0
- package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
- package/src/runtime/plugins/action-application.ts +135 -0
- package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
- package/src/runtime/plugins/browser-adapter.ts +140 -100
- package/src/runtime/plugins/browser-automation-service.ts +15 -36
- package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
- package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
- package/src/runtime/plugins/browser-native-session-service.ts +1 -1
- package/src/runtime/plugins/browser-provider-registry.ts +2 -109
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
- package/src/runtime/plugins/browser-runtime.ts +41 -9
- package/src/runtime/plugins/browser-session-authority.ts +101 -291
- package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
- package/src/runtime/plugins/browser-session-store.ts +229 -36
- package/src/runtime/plugins/browser-session-types.ts +2 -98
- package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
- package/src/runtime/plugins/catalog-trust.ts +82 -0
- package/src/runtime/plugins/computer-registration.ts +839 -0
- package/src/runtime/plugins/config-store.ts +119 -0
- package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
- package/src/runtime/plugins/errors.ts +8 -1
- package/src/runtime/plugins/external-adapter.ts +45 -322
- package/src/runtime/plugins/external-provider-policy.ts +48 -0
- package/src/runtime/plugins/external-registration.ts +9 -1
- package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
- package/src/runtime/plugins/external-unix-socket.ts +64 -193
- package/src/runtime/plugins/first-party-external-registration.ts +163 -0
- package/src/runtime/plugins/first-party-registry.ts +3 -1
- package/src/runtime/plugins/github-adapter.ts +1 -2
- package/src/runtime/plugins/gmail-adapter.ts +6 -6
- package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
- package/src/runtime/plugins/google-shared.ts +31 -46
- package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
- package/src/runtime/plugins/ios-adapter.ts +1 -2
- package/src/runtime/plugins/local-system-adapter.ts +180 -0
- package/src/runtime/plugins/macos-capability-broker.ts +15 -105
- package/src/runtime/plugins/resend-adapter.ts +15 -24
- package/src/runtime/plugins/store.ts +493 -51
- package/src/runtime/plugins/types.ts +8 -1
- package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
- package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
- package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
- package/src/runtime/projections/controller-context.ts +12 -6
- package/src/runtime/projections/git-status-sampler.ts +73 -22
- package/src/runtime/projections/materialized-view.ts +14 -8
- package/src/runtime/recovery/capability-action-application.ts +228 -0
- package/src/runtime/recovery/index.ts +3 -0
- package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
- package/src/runtime/recovery/local-jobs-repair.ts +14 -14
- package/src/runtime/recovery/maintenance-executor.ts +358 -76
- package/src/runtime/recovery/quarantine-retention.ts +256 -0
- package/src/runtime/release/identity.ts +6 -0
- package/src/runtime/resources/leases/store.ts +1 -1
- package/src/runtime/root/active-execution-power-assertion.ts +139 -0
- package/src/runtime/root/assistant-learning-loop.ts +45 -0
- package/src/runtime/root/browser-session-composition.ts +59 -0
- package/src/runtime/root/computer-composition.ts +191 -0
- package/src/runtime/root/computer-target-composition.ts +16 -0
- package/src/runtime/root/computer-target-persistence.ts +39 -0
- package/src/runtime/root/controller-round-composition.ts +107 -0
- package/src/runtime/root/controller-services.ts +2 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/gateway-adapter.ts +3 -3
- package/src/runtime/root/local-bridge.ts +5 -2
- package/src/runtime/root/mcp-transport.ts +5 -5
- package/src/runtime/root/package-connector-service.ts +108 -56
- package/src/runtime/root/package-runtime-release.ts +85 -18
- package/src/runtime/root/package-runtime-service.ts +60 -97
- package/src/runtime/root/release-execution-canary.ts +71 -0
- package/src/runtime/root/release-loader.ts +68 -0
- package/src/runtime/root/release-manifest.ts +106 -2
- package/src/runtime/root/release-materialize.ts +103 -4
- package/src/runtime/root/release-store.ts +31 -2
- package/src/runtime/root/runtime.ts +240 -25
- package/src/runtime/root/scheduled-controller-composition.ts +51 -0
- package/src/runtime/root/scheduler.ts +12 -4
- package/src/runtime/root/service-runner.ts +1 -1
- package/src/runtime/root/service.ts +41 -16
- package/src/runtime/root/status.ts +1 -0
- package/src/runtime/root/types.ts +24 -1
- package/src/runtime/shared/local-bridge-surface.ts +1 -1
- package/src/runtime/shared/process-environment.ts +19 -4
- package/src/runtime/shared/storage-capacity.ts +68 -0
- package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
- package/src/runtime/standalone-recovery/core.ts +984 -230
- package/src/runtime/standalone-recovery/entry.ts +182 -51
- package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
- package/src/runtime/standalone-recovery/installer.ts +212 -104
- package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
- package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
- package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
- package/src/runtime/standalone-recovery/performance.ts +135 -0
- package/src/runtime/standalone-recovery/release.ts +5 -0
- package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
- package/src/runtime/workflow/schedules/engine.ts +191 -343
- package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
- package/src/runtime/workflow/schedules/settlement.ts +2 -191
- package/src/runtime/workflow/schedules/store.ts +2 -607
- package/src/runtime/workflow/schedules/types.ts +2 -127
- package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
- package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
- package/src/runtime/workflows/runtime.ts +486 -0
- package/src/testing/test-governance.ts +90 -29
- package/assets/templates/helpers/archive-architecture-request.sh +0 -244
- package/docs/architecture/history/README.md +0 -7
- package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
- package/docs/architecture/history/global-hook-runtime.md +0 -166
- package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
- package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
- package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
- package/docs/architecture/requests/archive/2026/root.md +0 -68
- package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
- package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
- package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
- package/scripts/archive-architecture-request.sh +0 -4
- package/scripts/run-skill-evals.ts +0 -1022
|
@@ -1,87 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export type ControllerCapabilityGroup = 'core' | 'repository' | 'workflow' | 'git' | 'runtime' | 'plugins' | 'admin' | 'legacy';
|
|
4
|
-
|
|
5
|
-
export interface CapabilityGroupSnapshot {
|
|
6
|
-
group: ControllerCapabilityGroup;
|
|
7
|
-
toolNames: string[];
|
|
8
|
-
definitions: McpToolDefinition[];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface ToolDefinitionCacheOptions {
|
|
12
|
-
maxSessions?: number;
|
|
13
|
-
maxEntriesPerSession?: number;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const CORE_TOOL_NAMES = new Set(['rh_context', 'rh_access', 'rh_work', 'rh_status', 'rh_inbox']);
|
|
17
|
-
|
|
18
|
-
export function controllerCapabilityGroupForTool(name: string): ControllerCapabilityGroup {
|
|
19
|
-
if (CORE_TOOL_NAMES.has(name)) return 'core';
|
|
20
|
-
if (name.startsWith('repository_git_') || name.startsWith('git_')) return 'git';
|
|
21
|
-
if (name.startsWith('repository_')) return 'repository';
|
|
22
|
-
if (name.startsWith('plugin_') || name === 'list_plugins') return 'plugins';
|
|
23
|
-
if (name.startsWith('runtime_') || name.startsWith('controller_')) return 'runtime';
|
|
24
|
-
if (name.startsWith('work_') || name.startsWith('session_') || name.startsWith('approval_') || name.startsWith('result_')) return 'workflow';
|
|
25
|
-
if (name.startsWith('admin_')) return 'admin';
|
|
26
|
-
return 'legacy';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function groupControllerToolDefinitions(definitions: readonly McpToolDefinition[]): CapabilityGroupSnapshot[] {
|
|
30
|
-
const grouped = new Map<ControllerCapabilityGroup, McpToolDefinition[]>();
|
|
31
|
-
for (const definition of definitions) {
|
|
32
|
-
const group = controllerCapabilityGroupForTool(definition.name);
|
|
33
|
-
const entries = grouped.get(group) ?? [];
|
|
34
|
-
entries.push(definition);
|
|
35
|
-
grouped.set(group, entries);
|
|
36
|
-
}
|
|
37
|
-
return [...grouped.entries()].map(([group, entries]) => ({ group, toolNames: entries.map((entry) => entry.name), definitions: entries }));
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export class SessionToolDefinitionCache {
|
|
41
|
-
private readonly sessions = new Map<string, Map<string, readonly McpToolDefinition[]>>();
|
|
42
|
-
private readonly maxSessions: number;
|
|
43
|
-
private readonly maxEntriesPerSession: number;
|
|
44
|
-
|
|
45
|
-
constructor(options: ToolDefinitionCacheOptions = {}) {
|
|
46
|
-
this.maxSessions = Math.max(1, options.maxSessions ?? 32);
|
|
47
|
-
this.maxEntriesPerSession = Math.max(1, options.maxEntriesPerSession ?? 16);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
getOrCreate(sessionId: string, cacheKey: string, factory: () => readonly McpToolDefinition[]): readonly McpToolDefinition[] {
|
|
51
|
-
let session = this.sessions.get(sessionId);
|
|
52
|
-
if (!session) {
|
|
53
|
-
session = new Map();
|
|
54
|
-
this.sessions.set(sessionId, session);
|
|
55
|
-
this.trimSessions();
|
|
56
|
-
} else {
|
|
57
|
-
this.sessions.delete(sessionId);
|
|
58
|
-
this.sessions.set(sessionId, session);
|
|
59
|
-
}
|
|
60
|
-
const cached = session.get(cacheKey);
|
|
61
|
-
if (cached) {
|
|
62
|
-
session.delete(cacheKey);
|
|
63
|
-
session.set(cacheKey, cached);
|
|
64
|
-
return cached;
|
|
65
|
-
}
|
|
66
|
-
const created = Object.freeze([...factory()]);
|
|
67
|
-
session.set(cacheKey, created);
|
|
68
|
-
while (session.size > this.maxEntriesPerSession) {
|
|
69
|
-
const oldest = session.keys().next().value;
|
|
70
|
-
if (oldest === undefined) break;
|
|
71
|
-
session.delete(oldest);
|
|
72
|
-
}
|
|
73
|
-
return created;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
invalidateSession(sessionId: string): void { this.sessions.delete(sessionId); }
|
|
77
|
-
clear(): void { this.sessions.clear(); }
|
|
78
|
-
get sessionCount(): number { return this.sessions.size; }
|
|
79
|
-
|
|
80
|
-
private trimSessions(): void {
|
|
81
|
-
while (this.sessions.size > this.maxSessions) {
|
|
82
|
-
const oldest = this.sessions.keys().next().value;
|
|
83
|
-
if (oldest === undefined) break;
|
|
84
|
-
this.sessions.delete(oldest);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP adapter owns this surface. */
|
|
2
|
+
export * from '../../../adapters/mcp/tool-capability-cache';
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Transport-neutral MCP tool schema used by legacy, repository and Runtime surfaces. */
|
|
4
|
-
export interface McpToolDefinition {
|
|
5
|
-
name: string;
|
|
6
|
-
description: string;
|
|
7
|
-
inputSchema: Record<string, unknown>;
|
|
8
|
-
annotations?: Record<string, unknown>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** Bounded text-first result contract shared by Forge MCP adapters. */
|
|
12
|
-
export type CallToolResult = Omit<SdkCallToolResult, 'content'> & {
|
|
13
|
-
content: Array<{ type: 'text'; text: string }>;
|
|
14
|
-
};
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP DTO authority lives in packages/protocols/mcp. */
|
|
2
|
+
export * from '../../../packages/protocols/mcp/tool-contract';
|
package/src/cli/mcp/tools.ts
CHANGED
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Gateway code imports the stable tool schema and result types from this
|
|
5
|
-
* module, while the compatibility implementation itself is isolated in
|
|
6
|
-
* legacy-tool-service.ts and is invoked for long work only by Worker
|
|
7
|
-
* processes through the durable ExecutionJob pipeline.
|
|
8
|
-
*/
|
|
9
|
-
export * from './legacy-tool-service';
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP adapter owns this surface. */
|
|
2
|
+
export * from '../../../adapters/mcp/tool-mapping/tools';
|
|
@@ -1,70 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/** Preferred ChatGPT-facing facade tools. Must stay small and stable. */
|
|
4
|
-
export const PREFERRED_FACADE_TOOL_NAMES = [...FACADE_TOOLS] as const;
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Default ChatGPT-facing MCP surface. The Runtime keeps every internal atomic
|
|
8
|
-
* handler and the full compatibility profile; ChatGPT only needs this bounded
|
|
9
|
-
* execution surface. Atomic Git / issue-task / edit-session / plugin
|
|
10
|
-
* tools remain registered and reachable through `toolset=full`.
|
|
11
|
-
*/
|
|
12
|
-
export const DEFAULT_CONTROLLER_TOOL_NAMES = [
|
|
13
|
-
...PREFERRED_FACADE_TOOL_NAMES,
|
|
14
|
-
|
|
15
|
-
// Repository selection / bootstrap.
|
|
16
|
-
'repository_list',
|
|
17
|
-
'repository_get',
|
|
18
|
-
'repository_register',
|
|
19
|
-
|
|
20
|
-
// Generic repository-scoped command (readonly fast path, mutation, destructive gate).
|
|
21
|
-
'repository_command_execute',
|
|
22
|
-
|
|
23
|
-
// Source inspection and bounded Direct Edit. Code location is routed through
|
|
24
|
-
// rh_context.search; the low-level search_repository handler remains in full.
|
|
25
|
-
'read_repository_file',
|
|
26
|
-
'repository_safe_patch_apply',
|
|
27
|
-
|
|
28
|
-
// Focused checks through Process Runtime.
|
|
29
|
-
'run_check',
|
|
30
|
-
|
|
31
|
-
// One typed plugin dispatcher. Plugin discovery/action schemas stay routed
|
|
32
|
-
// through rh_context(capability_id=plugin.<plugin>.<action>) to avoid widening
|
|
33
|
-
// the default surface with list/get plugin atomics.
|
|
34
|
-
'plugin_action_execute',
|
|
35
|
-
|
|
36
|
-
// Managed Process Runtime lifecycle (attach / poll / cancel — never re-exec).
|
|
37
|
-
'process_get',
|
|
38
|
-
'process_wait',
|
|
39
|
-
'process_logs',
|
|
40
|
-
'process_cancel',
|
|
41
|
-
|
|
42
|
-
// Evidence. Approval resolution is available through rh_access/rh_work and
|
|
43
|
-
// the explicit full compatibility profile; it does not need a top-level
|
|
44
|
-
// default tool.
|
|
45
|
-
'result_read',
|
|
46
|
-
'result_search',
|
|
47
|
-
] as const;
|
|
48
|
-
|
|
49
|
-
/** Minimal bootstrap subset retained for diagnostics and constrained clients. */
|
|
50
|
-
export const BOOTSTRAP_CONTROLLER_TOOL_NAMES = [
|
|
51
|
-
...PREFERRED_FACADE_TOOL_NAMES,
|
|
52
|
-
'repository_access_get',
|
|
53
|
-
'repository_list',
|
|
54
|
-
'repository_get',
|
|
55
|
-
'repository_register',
|
|
56
|
-
'repository_latest_source_diagnose',
|
|
57
|
-
'repository_bootstrap_local_project',
|
|
58
|
-
] as const;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Stable ChatGPT connector schema. Keep this identical to the bounded default
|
|
62
|
-
* Runtime surface so discovery never advertises atomic tools that the default
|
|
63
|
-
* Forge build will reject. The exhaustive `full` profile is assembled directly
|
|
64
|
-
* from registered definitions and remains available for explicit compatibility
|
|
65
|
-
* clients without widening the normal connector schema.
|
|
66
|
-
*/
|
|
67
|
-
export const STABLE_CONTROLLER_TOOL_NAMES = DEFAULT_CONTROLLER_TOOL_NAMES;
|
|
68
|
-
|
|
69
|
-
/** Core is a compatibility label for the bounded default Controller surface. */
|
|
70
|
-
export const CORE_CONTROLLER_TOOL_NAMES = DEFAULT_CONTROLLER_TOOL_NAMES;
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP adapter owns this surface. */
|
|
2
|
+
export * from '../../../adapters/mcp/toolset-names';
|
|
@@ -1,41 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export interface ControllerToolsetSelection {
|
|
5
|
-
toolset: McpToolset;
|
|
6
|
-
locked: boolean;
|
|
7
|
-
migratedLegacyAdvanced: boolean;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function normalizeConfiguredMcpToolset(value: unknown): McpToolset | undefined {
|
|
11
|
-
return value === 'facade' || value === 'core' || value === 'advanced' || value === 'full' ? value : undefined;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** Persisted Core and Advanced are compatibility-equivalent stable profiles. */
|
|
15
|
-
export function configuredControllerToolset(config: McpLocalConfig | null | undefined): McpToolset | undefined {
|
|
16
|
-
return normalizeConfiguredMcpToolset(config?.toolset);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function resolveControllerToolsetSelection(
|
|
20
|
-
config: McpLocalConfig | null | undefined,
|
|
21
|
-
override?: unknown,
|
|
22
|
-
): ControllerToolsetSelection {
|
|
23
|
-
const explicitOverride = normalizeConfiguredMcpToolset(override);
|
|
24
|
-
const configured = configuredControllerToolset(config);
|
|
25
|
-
return {
|
|
26
|
-
toolset: explicitOverride ?? configured ?? 'advanced',
|
|
27
|
-
locked: explicitOverride !== undefined || configured !== undefined,
|
|
28
|
-
migratedLegacyAdvanced: false,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function migrateControllerToolsetConfig(config: McpLocalConfig | null | undefined): {
|
|
33
|
-
toolset: McpToolset;
|
|
34
|
-
toolsetExplicit: boolean;
|
|
35
|
-
} {
|
|
36
|
-
const configured = configuredControllerToolset(config);
|
|
37
|
-
return {
|
|
38
|
-
toolset: configured ?? 'advanced',
|
|
39
|
-
toolsetExplicit: configured !== undefined,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP adapter owns this surface. */
|
|
2
|
+
export * from '../../../adapters/mcp/toolset-selection';
|
package/src/cli/mcp/toolset.ts
CHANGED
|
@@ -1,336 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { buildMultiRepositoryToolDefinitions } from './multi-repository';
|
|
4
|
-
import { accessToolDefinitions } from './access-tools';
|
|
5
|
-
import {
|
|
6
|
-
resolveControllerAccessState,
|
|
7
|
-
type ControllerAccessState,
|
|
8
|
-
} from './access-mode';
|
|
9
|
-
import { repositoryToolDefinitions } from './repository-tools';
|
|
10
|
-
import { runtimeToolDefinitions } from '../../runtime/gateway/mcp/runtime-tool-definitions';
|
|
11
|
-
import { executionToolDefinitions } from '../../runtime/gateway/mcp/execution-tools';
|
|
12
|
-
import { processToolDefinitions } from '../../runtime/gateway/mcp/process-tools';
|
|
13
|
-
import { injectDurableCommandFields } from '../../runtime/gateway/mcp/router';
|
|
14
|
-
import { DEFAULT_CONTROLLER_TOOL_NAMES, PREFERRED_FACADE_TOOL_NAMES, STABLE_CONTROLLER_TOOL_NAMES } from './toolset-names';
|
|
15
|
-
export { BOOTSTRAP_CONTROLLER_TOOL_NAMES, CORE_CONTROLLER_TOOL_NAMES, DEFAULT_CONTROLLER_TOOL_NAMES, PREFERRED_FACADE_TOOL_NAMES, STABLE_CONTROLLER_TOOL_NAMES } from './toolset-names';
|
|
16
|
-
import type { McpToolset } from './types';
|
|
17
|
-
import { forgeToolSurfaceFingerprint } from '../controller/runtime-config';
|
|
18
|
-
|
|
19
|
-
export type ToolExposureClass = 'facade' | 'advanced' | 'internal' | 'compatibility';
|
|
20
|
-
export type ControllerToolProfile = 'facade' | 'core' | 'advanced' | 'full';
|
|
21
|
-
|
|
22
|
-
export interface ControllerToolInventoryEntry {
|
|
23
|
-
name: string;
|
|
24
|
-
profile: ControllerToolProfile;
|
|
25
|
-
capability: string;
|
|
26
|
-
exposedVia: 'facade' | 'core' | 'advanced' | 'full';
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* One authoritative snapshot of the MCP schema actually served to a client.
|
|
31
|
-
* Access mode intentionally does not alter this schema: Request vs Full Access
|
|
32
|
-
* is an execution-policy decision, not a tool-discovery decision.
|
|
33
|
-
*/
|
|
34
|
-
export interface ControllerExposureSnapshot {
|
|
35
|
-
access: ControllerAccessState;
|
|
36
|
-
toolset: McpToolset;
|
|
37
|
-
profile: ControllerToolProfile;
|
|
38
|
-
definitions: McpToolDefinition[];
|
|
39
|
-
toolNames: string[];
|
|
40
|
-
expectedToolNames: string[];
|
|
41
|
-
actualToolNames: string[];
|
|
42
|
-
missingToolNames: string[];
|
|
43
|
-
unexpectedToolNames: string[];
|
|
44
|
-
duplicateToolNames: string[];
|
|
45
|
-
fingerprint: string;
|
|
46
|
-
inventory: ControllerToolInventoryEntry[];
|
|
47
|
-
schemaStableAcrossAccessModes: true;
|
|
48
|
-
ready: boolean;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Cached schema/readiness projection for hot paths that do not need access
|
|
53
|
-
* policy or a per-tool inventory. Status uses this rather than rebuilding a
|
|
54
|
-
* complete controller exposure response on every read.
|
|
55
|
-
*/
|
|
56
|
-
export interface ControllerToolSurfaceStatus {
|
|
57
|
-
expectedToolNames: string[];
|
|
58
|
-
actualToolNames: string[];
|
|
59
|
-
missingToolNames: string[];
|
|
60
|
-
unexpectedToolNames: string[];
|
|
61
|
-
duplicateToolNames: string[];
|
|
62
|
-
fingerprint: string;
|
|
63
|
-
schemaStableAcrossAccessModes: true;
|
|
64
|
-
ready: boolean;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Core and Advanced expose the same bounded default ChatGPT surface
|
|
69
|
-
* (DEFAULT_CONTROLLER_TOOL_NAMES). Full remains the exhaustive compatibility
|
|
70
|
-
* surface for legacy integrations; internal atomic handlers are never deleted.
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
/** Historical Advanced name retained for compatibility. */
|
|
74
|
-
export const ADVANCED_CONTROLLER_TOOL_NAMES = DEFAULT_CONTROLLER_TOOL_NAMES;
|
|
75
|
-
|
|
76
|
-
const DEFAULT_CONTROLLER_TOOL_SET = new Set<string>(DEFAULT_CONTROLLER_TOOL_NAMES);
|
|
77
|
-
|
|
78
|
-
interface StaticControllerExposureSnapshot {
|
|
79
|
-
definitions: McpToolDefinition[];
|
|
80
|
-
toolNames: string[];
|
|
81
|
-
expectedToolNames: string[];
|
|
82
|
-
actualToolNames: string[];
|
|
83
|
-
missingToolNames: string[];
|
|
84
|
-
unexpectedToolNames: string[];
|
|
85
|
-
duplicateToolNames: string[];
|
|
86
|
-
fingerprint: string;
|
|
87
|
-
schemaStableAcrossAccessModes: true;
|
|
88
|
-
ready: boolean;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const STATIC_EXPOSURE_CACHE_MAX_ENTRIES = 64;
|
|
92
|
-
const staticControllerExposureCache = new Map<string, StaticControllerExposureSnapshot>();
|
|
93
|
-
|
|
94
|
-
function pruneStaticExposureCache(): void {
|
|
95
|
-
while (staticControllerExposureCache.size > STATIC_EXPOSURE_CACHE_MAX_ENTRIES) {
|
|
96
|
-
const oldest = staticControllerExposureCache.keys().next().value as string | undefined;
|
|
97
|
-
if (!oldest) break;
|
|
98
|
-
staticControllerExposureCache.delete(oldest);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export function normalizeMcpToolset(value: unknown): McpToolset {
|
|
103
|
-
if (value === 'full' || value === 'advanced' || value === 'core' || value === 'facade') return value;
|
|
104
|
-
return 'advanced';
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* null means expose every registered definition. Profile membership only
|
|
109
|
-
* changes schema discovery; authorization remains an independent policy.
|
|
110
|
-
*/
|
|
111
|
-
export function controllerToolNamesForToolset(
|
|
112
|
-
toolset: McpToolset,
|
|
113
|
-
_ctx?: MultiRepositoryMcpToolContext,
|
|
114
|
-
): readonly string[] | null {
|
|
115
|
-
if (toolset === 'full') return null;
|
|
116
|
-
if (toolset === 'facade') return PREFERRED_FACADE_TOOL_NAMES;
|
|
117
|
-
return DEFAULT_CONTROLLER_TOOL_NAMES;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function resolveControllerAccessStateForContext(
|
|
121
|
-
ctx: MultiRepositoryMcpToolContext,
|
|
122
|
-
): ControllerAccessState {
|
|
123
|
-
return resolveControllerAccessState({
|
|
124
|
-
controllerHome: ctx.controllerHome,
|
|
125
|
-
repoRoot: ctx.explicitRepository?.canonicalRoot,
|
|
126
|
-
toolsetOverride: ctx.toolset,
|
|
127
|
-
toolsetLocked: ctx.toolsetLocked ?? false,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function uniqueDefinitions(definitions: McpToolDefinition[]): {
|
|
132
|
-
definitions: McpToolDefinition[];
|
|
133
|
-
duplicates: string[];
|
|
134
|
-
} {
|
|
135
|
-
const byName = new Map<string, McpToolDefinition>();
|
|
136
|
-
const duplicates = new Set<string>();
|
|
137
|
-
for (const definition of definitions) {
|
|
138
|
-
if (byName.has(definition.name)) {
|
|
139
|
-
duplicates.add(definition.name);
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
byName.set(definition.name, definition);
|
|
143
|
-
}
|
|
144
|
-
const preferredOrder = new Map<string, number>(
|
|
145
|
-
(PREFERRED_FACADE_TOOL_NAMES as readonly string[]).map((name, index) => [name, index]),
|
|
146
|
-
);
|
|
147
|
-
const orderedDefinitions = [...byName.values()].sort((left, right) => {
|
|
148
|
-
const leftOrder = preferredOrder.get(left.name);
|
|
149
|
-
const rightOrder = preferredOrder.get(right.name);
|
|
150
|
-
if (leftOrder !== undefined || rightOrder !== undefined) {
|
|
151
|
-
if (leftOrder === undefined) return 1;
|
|
152
|
-
if (rightOrder === undefined) return -1;
|
|
153
|
-
return leftOrder - rightOrder;
|
|
154
|
-
}
|
|
155
|
-
return 0;
|
|
156
|
-
});
|
|
157
|
-
return { definitions: orderedDefinitions, duplicates: [...duplicates].sort() };
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function staticExposureCacheKey(ctx: MultiRepositoryMcpToolContext): string {
|
|
161
|
-
return JSON.stringify({
|
|
162
|
-
controllerHome: ctx.controllerHome,
|
|
163
|
-
repoRoot: ctx.repoRoot,
|
|
164
|
-
explicitRepositoryId: ctx.explicitRepository?.repoId,
|
|
165
|
-
toolset: ctx.toolset,
|
|
166
|
-
profile: ctx.policy.profile,
|
|
167
|
-
enableChatgptBrowser: ctx.enableChatgptBrowser === true,
|
|
168
|
-
devAgentRunner: ctx.policy.execution.agentRunner,
|
|
169
|
-
allowedAgents: [...ctx.policy.execution.allowedAgents].sort(),
|
|
170
|
-
runnerTimeoutMs: ctx.policy.execution.runnerTimeoutMs,
|
|
171
|
-
runnerMaxTimeoutMs: ctx.policy.execution.runnerMaxTimeoutMs,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
function buildStaticControllerExposureSnapshot(
|
|
176
|
-
ctx: MultiRepositoryMcpToolContext,
|
|
177
|
-
): StaticControllerExposureSnapshot {
|
|
178
|
-
const currentDefinitions = runtimeToolDefinitions.concat(
|
|
179
|
-
executionToolDefinitions,
|
|
180
|
-
processToolDefinitions,
|
|
181
|
-
accessToolDefinitions,
|
|
182
|
-
repositoryToolDefinitions,
|
|
183
|
-
);
|
|
184
|
-
const rawDefinitions = ctx.toolset === 'full'
|
|
185
|
-
? currentDefinitions.concat(
|
|
186
|
-
buildMultiRepositoryToolDefinitions(ctx).filter(
|
|
187
|
-
(legacy) => !currentDefinitions.some((current) => current.name === legacy.name),
|
|
188
|
-
),
|
|
189
|
-
)
|
|
190
|
-
: currentDefinitions;
|
|
191
|
-
const unique = uniqueDefinitions(rawDefinitions);
|
|
192
|
-
const allowed = controllerToolNamesForToolset(ctx.toolset, ctx);
|
|
193
|
-
const expectedToolNames = allowed === null
|
|
194
|
-
? unique.definitions.map((tool) => tool.name)
|
|
195
|
-
: [...new Set(allowed)];
|
|
196
|
-
const definitionByName = new Map(unique.definitions.map((definition) => [definition.name, definition]));
|
|
197
|
-
const definitions = expectedToolNames
|
|
198
|
-
.map((name) => definitionByName.get(name))
|
|
199
|
-
.filter((definition): definition is McpToolDefinition => Boolean(definition))
|
|
200
|
-
// Fingerprint the definitions that ListTools actually returns. The server
|
|
201
|
-
// adds durable command fields to every object schema, so calculating the
|
|
202
|
-
// fence from the pre-injection form would miss a change to those fields.
|
|
203
|
-
.map(injectDurableCommandFields);
|
|
204
|
-
const actualToolNames = definitions.map((tool) => tool.name);
|
|
205
|
-
const actualSet = new Set(actualToolNames);
|
|
206
|
-
const expectedSet = new Set(expectedToolNames);
|
|
207
|
-
const missingToolNames = expectedToolNames.filter((name) => !actualSet.has(name));
|
|
208
|
-
const unexpectedToolNames = actualToolNames.filter((name) => !expectedSet.has(name));
|
|
209
|
-
const fingerprint = forgeToolSurfaceFingerprint(definitions);
|
|
210
|
-
return {
|
|
211
|
-
definitions,
|
|
212
|
-
toolNames: actualToolNames,
|
|
213
|
-
expectedToolNames,
|
|
214
|
-
actualToolNames,
|
|
215
|
-
missingToolNames,
|
|
216
|
-
unexpectedToolNames,
|
|
217
|
-
duplicateToolNames: unique.duplicates,
|
|
218
|
-
fingerprint,
|
|
219
|
-
schemaStableAcrossAccessModes: true,
|
|
220
|
-
ready: missingToolNames.length === 0 && unexpectedToolNames.length === 0 && unique.duplicates.length === 0,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
function staticControllerExposureSnapshot(
|
|
225
|
-
ctx: MultiRepositoryMcpToolContext,
|
|
226
|
-
): StaticControllerExposureSnapshot {
|
|
227
|
-
const key = staticExposureCacheKey(ctx);
|
|
228
|
-
const cached = staticControllerExposureCache.get(key);
|
|
229
|
-
if (cached) return cached;
|
|
230
|
-
const built = buildStaticControllerExposureSnapshot(ctx);
|
|
231
|
-
staticControllerExposureCache.set(key, built);
|
|
232
|
-
pruneStaticExposureCache();
|
|
233
|
-
return built;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
function capabilityForToolName(name: string): string {
|
|
237
|
-
if (name.startsWith('rh_')) return 'facade';
|
|
238
|
-
if (name.startsWith('git_') || name.startsWith('repository_git_')) return 'git';
|
|
239
|
-
if (/(^|_)(issue|task|project|worklog)(_|$)/.test(name)) return 'issue-task';
|
|
240
|
-
if (name.startsWith('repository_') || name.startsWith('search_') || name.startsWith('read_')) return 'repository';
|
|
241
|
-
if (name.startsWith('ios_')) return 'ios';
|
|
242
|
-
if (name.startsWith('web_')) return 'browser';
|
|
243
|
-
if (name.includes('plugin')) return 'plugin';
|
|
244
|
-
if (name.startsWith('result_') || name.includes('artifact') || name.includes('evidence')) return 'evidence';
|
|
245
|
-
if (name.includes('controller_')) return 'controller';
|
|
246
|
-
if (name.startsWith('process_') || name.startsWith('schedule_') || name.startsWith('runtime_') || name.startsWith('maintenance_')) return 'runtime-maintenance';
|
|
247
|
-
if (name.startsWith('work_') || name.startsWith('session_')) return 'workflow';
|
|
248
|
-
return 'compatibility';
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function profileForToolset(toolset: McpToolset): ControllerToolProfile {
|
|
252
|
-
return toolset === 'full' ? 'full' : toolset === 'facade' ? 'facade' : toolset === 'core' ? 'core' : 'advanced';
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
export function controllerToolInventory(
|
|
256
|
-
toolNames: readonly string[],
|
|
257
|
-
toolset: McpToolset,
|
|
258
|
-
): ControllerToolInventoryEntry[] {
|
|
259
|
-
const profile = profileForToolset(toolset);
|
|
260
|
-
return toolNames.map((name) => ({
|
|
261
|
-
name,
|
|
262
|
-
profile,
|
|
263
|
-
capability: capabilityForToolName(name),
|
|
264
|
-
exposedVia: name.startsWith('rh_') ? 'facade' : profile,
|
|
265
|
-
}));
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
export function clearControllerExposureCacheForTest(): void {
|
|
269
|
-
staticControllerExposureCache.clear();
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
export function allControllerToolDefinitions(ctx: MultiRepositoryMcpToolContext): McpToolDefinition[] {
|
|
273
|
-
return uniqueDefinitions(
|
|
274
|
-
runtimeToolDefinitions.concat(executionToolDefinitions, processToolDefinitions, accessToolDefinitions, repositoryToolDefinitions, buildMultiRepositoryToolDefinitions(ctx)),
|
|
275
|
-
).definitions;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
export function controllerExposureSnapshot(ctx: MultiRepositoryMcpToolContext): ControllerExposureSnapshot {
|
|
279
|
-
const staticSnapshot = staticControllerExposureSnapshot(ctx);
|
|
280
|
-
return {
|
|
281
|
-
access: resolveControllerAccessStateForContext(ctx),
|
|
282
|
-
toolset: ctx.toolset,
|
|
283
|
-
profile: profileForToolset(ctx.toolset),
|
|
284
|
-
inventory: controllerToolInventory(staticSnapshot.actualToolNames, ctx.toolset),
|
|
285
|
-
...staticSnapshot,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
export function controllerToolSurfaceStatus(ctx: MultiRepositoryMcpToolContext): ControllerToolSurfaceStatus {
|
|
290
|
-
const snapshot = staticControllerExposureSnapshot(ctx);
|
|
291
|
-
return {
|
|
292
|
-
expectedToolNames: snapshot.expectedToolNames,
|
|
293
|
-
actualToolNames: snapshot.actualToolNames,
|
|
294
|
-
missingToolNames: snapshot.missingToolNames,
|
|
295
|
-
unexpectedToolNames: snapshot.unexpectedToolNames,
|
|
296
|
-
duplicateToolNames: snapshot.duplicateToolNames,
|
|
297
|
-
fingerprint: snapshot.fingerprint,
|
|
298
|
-
schemaStableAcrossAccessModes: snapshot.schemaStableAcrossAccessModes,
|
|
299
|
-
ready: snapshot.ready,
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
export function controllerExposedToolNames(ctx: MultiRepositoryMcpToolContext): string[] {
|
|
304
|
-
return controllerExposureSnapshot(ctx).actualToolNames;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
export function classifyControllerToolExposure(toolName: string): ToolExposureClass {
|
|
308
|
-
if ((PREFERRED_FACADE_TOOL_NAMES as readonly string[]).includes(toolName)) return 'facade';
|
|
309
|
-
if (toolName.startsWith('rh_')) return 'facade';
|
|
310
|
-
if (DEFAULT_CONTROLLER_TOOL_SET.has(toolName)) return 'advanced';
|
|
311
|
-
return 'compatibility';
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
export function controllerToolExposureMetadata(toolNames: readonly string[]): {
|
|
315
|
-
preferredTools: string[];
|
|
316
|
-
advancedTools: string[];
|
|
317
|
-
compatibilityTools: string[];
|
|
318
|
-
classification: Record<string, ToolExposureClass>;
|
|
319
|
-
} {
|
|
320
|
-
const classification: Record<string, ToolExposureClass> = {};
|
|
321
|
-
for (const name of toolNames) classification[name] = classifyControllerToolExposure(name);
|
|
322
|
-
return {
|
|
323
|
-
preferredTools: toolNames.filter((name) => classification[name] === 'facade'),
|
|
324
|
-
advancedTools: toolNames.filter((name) => classification[name] === 'advanced'),
|
|
325
|
-
compatibilityTools: toolNames.filter((name) => classification[name] === 'compatibility'),
|
|
326
|
-
classification,
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
export function exposedControllerToolDefinitions(ctx: MultiRepositoryMcpToolContext): McpToolDefinition[] {
|
|
331
|
-
return controllerExposureSnapshot(ctx).definitions;
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
export function isControllerToolExposed(ctx: MultiRepositoryMcpToolContext, name: string): boolean {
|
|
335
|
-
return controllerExposureSnapshot(ctx).actualToolNames.includes(name);
|
|
336
|
-
}
|
|
1
|
+
/** @deprecated Kernel V2 compatibility shim. MCP adapter owns this surface. */
|
|
2
|
+
export * from '../../../adapters/mcp/toolset';
|
|
@@ -26,14 +26,5 @@ Keep this file focused on the local contract for this primary functional block.
|
|
|
26
26
|
- Semantic diagram source: `docs/architecture/modules/controller-runtime/transport-lifecycle.md`
|
|
27
27
|
- Latest human diagram: `(none yet)`
|
|
28
28
|
- Pending architecture request: `none`
|
|
29
|
-
|
|
30
|
-
## Active Workstreams
|
|
31
|
-
|
|
32
|
-
- (none yet)
|
|
33
|
-
|
|
34
|
-
## Current Session Projection
|
|
35
|
-
|
|
36
|
-
- Durable progress lives under `tasks/workstreams/controller-runtime/transport-lifecycle`.
|
|
37
|
-
- `tasks/current.md` is the tracked derived status snapshot; it is not a live lock or task source.
|
|
38
|
-
- `tasks/todos.md` is the deferred-goal ledger; current execution slices stay in the active plan's `## Task Breakdown`.
|
|
29
|
+
- Runtime progress authority: Forge Controller Home Requirement/Plan/Work/Evidence; this repository block contains authored architecture context only.
|
|
39
30
|
<!-- END ARCHITECTURE CONTRACT -->
|
|
@@ -26,14 +26,5 @@ Keep this file focused on the local contract for this primary functional block.
|
|
|
26
26
|
- Semantic diagram source: `docs/architecture/modules/controller-runtime/transport-lifecycle.md`
|
|
27
27
|
- Latest human diagram: `(none yet)`
|
|
28
28
|
- Pending architecture request: `none`
|
|
29
|
-
|
|
30
|
-
## Active Workstreams
|
|
31
|
-
|
|
32
|
-
- (none yet)
|
|
33
|
-
|
|
34
|
-
## Current Session Projection
|
|
35
|
-
|
|
36
|
-
- Durable progress lives under `tasks/workstreams/controller-runtime/transport-lifecycle`.
|
|
37
|
-
- `tasks/current.md` is the tracked derived status snapshot; it is not a live lock or task source.
|
|
38
|
-
- `tasks/todos.md` is the deferred-goal ledger; current execution slices stay in the active plan's `## Task Breakdown`.
|
|
29
|
+
- Runtime progress authority: Forge Controller Home Requirement/Plan/Work/Evidence; this repository block contains authored architecture context only.
|
|
39
30
|
<!-- END ARCHITECTURE CONTRACT -->
|