@moretea-labs/forge 1.5.1 → 1.7.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 +2 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +2 -0
- package/DESIGN.md +7 -2
- package/README.md +4 -4
- package/README.zh-CN.md +2 -2
- package/SKILL.md +2 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/hooks/hook-input.sh +11 -8
- package/assets/hooks/lib/session-state.sh +10 -7
- package/assets/hooks/lib/workflow-state.sh +13 -177
- package/assets/hooks/post-tool-observer.sh +8 -2
- package/assets/hooks/pre-edit-guard.sh +8 -39
- package/assets/hooks/prompt-guard.sh +7 -83
- package/assets/hooks/session-start-context.sh +56 -1
- package/assets/partials/05-workflow.partial.md +1 -1
- package/assets/partials-agents/03-orchestration.partial.md +1 -1
- package/assets/plugin-registry.v1.json +54 -3
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/harness-overview.md +1 -1
- package/assets/reference-configs/hook-operations.md +1 -1
- package/assets/reference-configs/sprint-contracts.md +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/contract.template.md +2 -7
- package/assets/templates/helpers/capture-plan.sh +2 -2
- package/assets/templates/helpers/check-task-workflow.sh +4 -4
- package/assets/templates/helpers/contract-worktree.sh +1 -21
- package/assets/templates/helpers/ensure-task-workflow.sh +13 -38
- package/assets/templates/helpers/migrate-project-template.sh +22 -45
- package/assets/templates/helpers/new-plan.sh +1 -1
- package/assets/templates/helpers/plan-to-todo.sh +12 -37
- package/assets/templates/helpers/ship-worktrees.sh +2 -29
- package/assets/templates/helpers/sprint-backlog.sh +6 -6
- package/assets/templates/helpers/verify-contract.sh +1 -111
- package/assets/templates/helpers/verify-sprint.sh +3 -180
- package/assets/templates/plan.template.md +1 -1
- package/assets/templates/review.template.md +9 -34
- package/assets/workflow-contract.v1.json +10 -19
- package/docs/README.md +10 -10
- package/docs/architecture/CURRENT.md +170 -0
- package/docs/architecture/EVOLUTION.md +42 -0
- package/docs/architecture/current/README.md +4 -156
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +2 -2
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +53 -0
- package/docs/architecture/decisions/20260826-browser-runtime-v2.md +73 -0
- package/docs/architecture/history/README.md +7 -0
- package/docs/architecture/{chatgpt-handoff-facade.md → history/chatgpt-handoff-facade.md} +4 -0
- package/docs/architecture/{global-hook-runtime.md → history/global-hook-runtime.md} +7 -3
- package/docs/architecture/{ios-semantic-automation-provider-v2.md → history/ios-semantic-automation-provider-v2.md} +6 -2
- package/docs/architecture/history.md +3 -34
- package/docs/architecture/index.md +15 -98
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/architecture/reviews/2026-08-22-semantic-harness-convergence-acceptance.md +39 -0
- package/docs/architecture/versions/1.6.md +38 -0
- package/docs/architecture/versions/1.7.md +41 -0
- package/docs/forge-chatgpt-browser-engine.md +2 -2
- package/docs/forge-chatgpt-mcp-setup.md +4 -28
- package/docs/forge-chatgpt-supervised-automation.md +3 -3
- package/docs/forge-github-issue-launcher.md +1 -1
- package/docs/forge-runtime-self-healing-loop.md +1 -1
- package/docs/operations/controller-browser-plugin.md +38 -22
- package/docs/operations/controller-performance-and-502.md +124 -0
- package/docs/operations/controller-reliability-runbook.md +1 -1
- package/docs/operations/features.md +3 -3
- package/docs/operations/github-repository.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +5 -3
- package/docs/tutorials/01-install-and-start.md +1 -1
- package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
- package/docs/wiki/Architecture.md +6 -6
- package/docs/wiki/Implementation.md +2 -2
- package/docs/wiki/Installation.md +1 -1
- package/docs/wiki/Integrations.md +2 -2
- package/docs/wiki/Quick-Start.md +1 -1
- package/docs/wiki/Work-Lifecycle.md +1 -1
- package/package.json +29 -10
- package/scripts/activate-source-baseline.ts +17 -13
- package/scripts/benchmark-background-check-overlap.ts +228 -0
- package/scripts/benchmark-mcp-host.sh +117 -0
- package/scripts/benchmark-mcp-transport.ts +170 -0
- package/scripts/benchmark-quality-harness.ts +146 -0
- package/scripts/benchmark-route-session-concurrency.ts +207 -6
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +7 -1
- package/scripts/benchmark-typescript-navigation.ts +186 -0
- package/scripts/benchmark-work-efficiency.ts +334 -0
- package/scripts/capture-plan.sh +3 -3
- package/scripts/check-agent-tooling.sh +8 -35
- package/scripts/check-architecture-sync.sh +17 -86
- package/scripts/check-mcp-compatibility.ts +14 -0
- package/scripts/check-public-docs.sh +14 -1
- package/scripts/check-runtime-architecture.mjs +107 -64
- package/scripts/check-stable-baseline.ts +92 -0
- package/scripts/check-task-workflow.sh +4 -4
- package/scripts/contract-worktree.sh +1 -21
- package/scripts/ensure-task-workflow.sh +22 -55
- package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
- package/scripts/install-standalone-recovery.ts +24 -0
- package/scripts/lib/project-init-lib.sh +15 -44
- package/scripts/migrate-chatgpt-automation-schedules.ts +64 -0
- package/scripts/migrate-project-template.sh +23 -1179
- package/scripts/new-plan.sh +1 -1
- package/scripts/plan-to-todo.sh +11 -36
- package/scripts/run-governed-gate.ts +2 -1
- package/scripts/ship-worktrees.sh +2 -29
- package/scripts/smoke-ios-physical-device.ts +4 -2
- package/scripts/smoke-runtime-recovery.ts +1 -35
- package/scripts/smoke-schedule-engine.ts +1 -20
- package/scripts/sprint-backlog.sh +1 -1
- package/scripts/verify-contract.sh +1 -111
- package/scripts/verify-forge-runtime.sh +0 -1
- package/scripts/verify-sprint.sh +3 -180
- package/scripts/workflow-contract.ts +1 -5
- package/src/cli/commands/chatgpt.ts +31 -2
- package/src/cli/commands/init-hook.ts +3 -3
- package/src/cli/commands/mcp.ts +9 -5
- package/src/cli/commands/plugin.ts +37 -10
- package/src/cli/commands/recovery.ts +25 -3
- package/src/cli/commands/runtime.ts +55 -3
- package/src/cli/commands/security.ts +12 -1
- package/src/cli/commands/setup-profile.ts +31 -21
- package/src/cli/controller/check-runner.ts +106 -3
- package/src/cli/controller/composite-result.ts +1 -1
- package/src/cli/controller/context/focus.ts +51 -0
- package/src/cli/controller/context/instruction-context.ts +114 -0
- package/src/cli/controller/context/known-paths.ts +76 -0
- package/src/cli/controller/context/query-planning.ts +110 -0
- package/src/cli/controller/context/rule-resolution.ts +532 -0
- package/src/cli/controller/context/source-materializer.ts +278 -0
- package/src/cli/controller/context/structural.ts +16 -0
- package/src/cli/controller/context/types.ts +286 -0
- package/src/cli/controller/context-pack.ts +898 -430
- package/src/cli/controller/launch-agents.ts +77 -2
- package/src/cli/controller/operational-plan.ts +2 -2
- package/src/cli/controller/work-mode.ts +6 -4
- package/src/cli/editing/edit-session.ts +60 -7
- package/src/cli/github/github.ts +133 -0
- package/src/cli/hook/prompt-guard-decision.ts +17 -18
- package/src/cli/hook/prompt-intents.ts +1 -1
- package/src/cli/installer/managed-entries.ts +15 -1
- package/src/cli/local-bridge/console-automations.ts +225 -67
- package/src/cli/local-bridge/console-view-models.ts +3 -35
- package/src/cli/local-bridge/facade-api.ts +2 -217
- package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +153 -3
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +183 -3
- package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +1 -1
- package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +4 -3
- package/src/cli/local-bridge/frontend/src/lib/api.ts +18 -11
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
- package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +1 -1
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +4 -3
- package/src/cli/local-bridge/frontend/src/styles.css +27 -11
- package/src/cli/local-bridge/frontend/src/types.ts +8 -7
- package/src/cli/local-bridge/job-store.ts +1 -490
- package/src/cli/local-bridge/server.ts +29 -532
- package/src/cli/local-bridge/ui-dist/app.css +1 -1
- package/src/cli/local-bridge/ui-dist/app.js +5101 -4967
- package/src/cli/mcp/auth.ts +5 -5
- package/src/cli/mcp/instructions.ts +3 -2
- package/src/cli/mcp/legacy-tool-service.ts +0 -189
- package/src/cli/mcp/multi-repository.ts +16 -5
- package/src/cli/mcp/oauth.ts +175 -26
- package/src/cli/mcp/paths.ts +8 -2
- package/src/cli/mcp/repository-tools.ts +356 -101
- package/src/cli/mcp/server.ts +625 -54
- package/src/cli/mcp/tool-capability-cache.ts +1 -1
- package/src/cli/mcp/toolset-selection.ts +1 -1
- package/src/cli/mcp/toolset.ts +42 -5
- package/src/cli/mcp/transports/http.ts +125 -15
- package/src/cli/mcp/transports/session-registry.ts +67 -5
- package/src/cli/mcp/types.ts +3 -3
- package/src/cli/repositories/command-classifier.ts +209 -14
- package/src/cli/repositories/command-executor.ts +55 -521
- package/src/cli/repositories/command-process.ts +108 -0
- package/src/cli/repositories/command-scope.ts +99 -41
- package/src/cli/repositories/controller-home.ts +7 -8
- package/src/cli/repositories/git-command-executor.ts +2 -0
- package/src/cli/repositories/locks.ts +53 -16
- package/src/cli/repositories/repository-snapshot.ts +121 -0
- package/src/cli/repositories/safe-patch.ts +6 -4
- package/src/cli/repositories/selected-path-actions.ts +17 -9
- package/src/cli/repositories/structured-git.ts +110 -10
- package/src/cli/repository/inspector.ts +565 -62
- package/src/cli/repository/session-cache.ts +58 -17
- package/src/cli/v81-entry.ts +1 -4
- package/src/effects/fs-transaction.ts +85 -17
- package/src/runtime/context/codegraph-read-provider.ts +233 -2
- package/src/runtime/context/codegraph-sidecar.cjs +74 -40
- package/src/runtime/context/generic-lsp-provider.ts +355 -0
- package/src/runtime/context/lsp-client.ts +283 -0
- package/src/runtime/context/semantic-navigation.ts +275 -0
- package/src/runtime/context/swift-navigation.ts +565 -0
- package/src/runtime/context/typescript-navigation.ts +226 -0
- package/src/runtime/control-plane/dispatch-priority.ts +28 -0
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +196 -2
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
- package/src/runtime/control-plane/execution/execution-identity.ts +65 -14
- package/src/runtime/control-plane/execution/session-store.ts +18 -0
- package/src/runtime/control-plane/execution/validation.ts +15 -2
- package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
- package/src/runtime/control-plane/execution/work-handle-store.ts +27 -2
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +258 -0
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +54 -11
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +175 -8
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -21
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +87 -9
- package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
- package/src/runtime/control-plane/facade/controller-round-relay.ts +991 -0
- package/src/runtime/control-plane/facade/controller-session-store.ts +144 -14
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +9 -2
- package/src/runtime/control-plane/facade/goal-workloop.ts +885 -105
- package/src/runtime/control-plane/facade/index.ts +1 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +211 -26
- package/src/runtime/control-plane/facade/requirement-board.ts +24 -8
- package/src/runtime/control-plane/facade/semantic-admission.ts +205 -0
- package/src/runtime/control-plane/facade/suggested-actions.ts +5 -1
- package/src/runtime/control-plane/facade/types.ts +55 -11
- package/src/runtime/control-plane/facade/work-contract-store.ts +204 -73
- package/src/runtime/control-plane/generated-cache-retention.ts +271 -0
- package/src/runtime/control-plane/global-scheduler/config.ts +44 -0
- package/src/runtime/control-plane/global-scheduler/dispatch-capacity.ts +80 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +46 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +145 -0
- package/src/runtime/control-plane/global-scheduler/projection-refresh.ts +84 -0
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +3 -3
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +273 -542
- package/src/runtime/control-plane/global-scheduler/source-scan.ts +59 -0
- package/src/runtime/control-plane/global-scheduler/state.ts +88 -0
- package/src/runtime/control-plane/global-scheduler/worker-attachment.ts +57 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-decision.ts +38 -0
- package/src/runtime/control-plane/global-scheduler/worker-exit-reconciler.ts +175 -0
- package/src/runtime/control-plane/global-scheduler/worker-launch.ts +111 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle-store.ts +64 -0
- package/src/runtime/control-plane/global-scheduler/worker-lifecycle.ts +150 -0
- package/src/runtime/control-plane/global-scheduler/worker-process.ts +119 -0
- package/src/runtime/control-plane/global-scheduler/worker-stderr.ts +60 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +50 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +642 -51
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +40 -0
- package/src/runtime/control-plane/launcher/thin-launcher.ts +194 -10
- package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +15 -11
- package/src/runtime/control-plane/persistence/sqlite-store.ts +33 -2
- package/src/runtime/control-plane/release-retention.ts +62 -2
- package/src/runtime/control-plane/routing/route-policy.ts +7 -16
- package/src/runtime/control-plane/runtime-status-client.ts +0 -2
- package/src/runtime/diagnostics/mcp-timing.ts +19 -0
- package/src/runtime/diagnostics/mcp-transport-benchmark.ts +129 -0
- package/src/runtime/diagnostics/performance.ts +24 -1
- package/src/runtime/evidence/event-ledger.ts +1 -1
- package/src/runtime/execution/jobs/store.ts +58 -4
- package/src/runtime/execution/jobs/types.ts +1 -1
- package/src/runtime/execution/managed-workspace.ts +203 -1
- package/src/runtime/execution/process-runtime/check-facade.ts +52 -14
- package/src/runtime/execution/process-runtime/check-result.ts +63 -2
- package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +346 -40
- package/src/runtime/execution/process-runtime/gc.ts +98 -12
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +1184 -0
- package/src/runtime/execution/process-runtime/persisted-check.ts +57 -6
- package/src/runtime/execution/process-runtime/resource-claims.ts +97 -8
- package/src/runtime/execution/process-runtime/runtime.ts +59 -4
- package/src/runtime/execution/process-runtime/store.ts +7 -0
- package/src/runtime/execution/process-runtime/types.ts +2 -0
- package/src/runtime/execution/thin-harness/async-process.ts +12 -2
- package/src/runtime/execution/thin-harness/search-worker.ts +54 -5
- package/src/runtime/execution/workers/executor.ts +0 -48
- package/src/runtime/gateway/mcp/execution-tools.ts +1219 -126
- package/src/runtime/gateway/mcp/process-tools.ts +83 -37
- package/src/runtime/gateway/mcp/router.ts +185 -83
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +546 -0
- package/src/runtime/gateway/mcp/runtime-tools.ts +2555 -1616
- package/src/runtime/model-clients/deepseek-adapter.ts +0 -32
- package/src/runtime/plugins/app-store-connect-adapter.ts +123 -19
- package/src/runtime/plugins/browser-adapter.ts +2925 -318
- package/src/runtime/plugins/browser-automation-service.ts +10 -0
- package/src/runtime/plugins/browser-handoff-host.ts +6 -31
- package/src/runtime/plugins/browser-handoff.ts +92 -5
- package/src/runtime/plugins/browser-macos-bridge.ts +586 -45
- package/src/runtime/plugins/browser-node-bridge.ts +6 -34
- package/src/runtime/plugins/browser-provider-registry.ts +109 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +152 -0
- package/src/runtime/plugins/browser-runtime.ts +183 -0
- package/src/runtime/plugins/browser-session-authority.ts +332 -0
- package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +15 -12
- package/src/runtime/plugins/external-adapter.ts +324 -3
- package/src/runtime/plugins/external-registration.ts +84 -5
- package/src/runtime/plugins/external-unix-socket.ts +7 -1
- package/src/runtime/plugins/first-party-registry.ts +4 -2
- package/src/runtime/plugins/github-adapter.ts +125 -0
- package/src/runtime/plugins/gmail-adapter.ts +28 -2
- package/src/runtime/plugins/ios/agent-device-provider.ts +1 -1
- package/src/runtime/plugins/ios/agent-device-typed-provider.ts +52 -9
- package/src/runtime/plugins/ios/remote-xpc-hid.ts +1171 -0
- package/src/runtime/plugins/ios-adapter.ts +106 -16
- package/src/runtime/plugins/ios-agent-device.ts +234 -64
- package/src/runtime/plugins/ios-physical-device.ts +1143 -392
- package/src/runtime/plugins/lightweight-action.ts +153 -0
- package/src/runtime/plugins/local-system-adapter.ts +125 -8
- package/src/runtime/plugins/macos-capability-broker.ts +55 -9
- package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
- package/src/runtime/plugins/plugin-management-adapter.ts +181 -0
- package/src/runtime/plugins/resend-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +366 -24
- package/src/runtime/plugins/types.ts +39 -2
- package/src/runtime/plugins/xiaohongshu-publish.ts +515 -0
- package/src/runtime/projections/git-status-sampler.ts +16 -16
- package/src/runtime/projections/materialized-view.ts +28 -10
- package/src/runtime/recovery/actions.ts +0 -10
- package/src/runtime/recovery/classifier.ts +0 -9
- package/src/runtime/recovery/maintenance-executor.ts +415 -18
- package/src/runtime/recovery/probe.ts +0 -1
- package/src/runtime/recovery/types.ts +0 -1
- package/src/runtime/root/mcp-transport.ts +180 -10
- package/src/runtime/root/package-connector-service.ts +186 -8
- package/src/runtime/root/package-runtime-release.ts +143 -17
- package/src/runtime/root/package-runtime-service.ts +430 -22
- package/src/runtime/root/release-manifest.ts +7 -2
- package/src/runtime/root/release-materialize.ts +162 -19
- package/src/runtime/root/release-store.ts +48 -11
- package/src/runtime/root/runtime.ts +23 -5
- package/src/runtime/root/service.ts +100 -27
- package/src/runtime/root/types.ts +2 -0
- package/src/runtime/safe-tooling/index.ts +0 -1
- package/src/runtime/safe-tooling/ios-development.ts +321 -63
- package/src/runtime/safe-tooling/types.ts +0 -30
- package/src/runtime/shared/trusted-executable.ts +62 -0
- package/src/runtime/shared/trusted-node-executable.ts +48 -0
- package/src/runtime/standalone-recovery/core.ts +702 -94
- package/src/runtime/standalone-recovery/entry.ts +99 -23
- package/src/runtime/standalone-recovery/installer.ts +19 -3
- package/src/runtime/standalone-recovery/service-labels.ts +2 -0
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +160 -0
- package/src/runtime/workflow/schedules/browser-probe.ts +258 -0
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +40 -0
- package/src/runtime/workflow/schedules/engine.ts +509 -80
- package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
- package/src/runtime/workflow/schedules/settlement.ts +48 -4
- package/src/runtime/workflow/schedules/store.ts +131 -10
- package/src/runtime/workflow/schedules/types.ts +6 -3
- package/src/runtime/workflow/schedules/work-continuation.ts +120 -34
- package/src/testing/test-governance.ts +8 -40
- package/assets/reference-configs/heartbeat-triage.md +0 -57
- package/assets/templates/helpers/harness-trace-grade.sh +0 -150
- package/assets/templates/helpers/heartbeat-triage.sh +0 -361
- package/assets/templates/helpers/maintenance-triage.sh +0 -167
- package/bin/forge-desktop-helper.mjs +0 -204
- package/docs/architecture/current/approved-target-architecture.zh-CN.md +0 -1501
- package/docs/architecture/current/architecture-invariants.md +0 -331
- package/docs/architecture/current/automation-and-schedule-engine.md +0 -453
- package/docs/architecture/current/codegraph-context-provider.md +0 -226
- package/docs/architecture/current/control-plane-authority-inventory.md +0 -94
- package/docs/architecture/current/controller-repository-decoupling.md +0 -148
- package/docs/architecture/current/dispatch-and-agent-strategy.md +0 -354
- package/docs/architecture/current/entity-model.md +0 -592
- package/docs/architecture/current/external-plugin-governance.md +0 -396
- package/docs/architecture/current/failure-recovery.md +0 -447
- package/docs/architecture/current/governance.md +0 -213
- package/docs/architecture/current/human-interaction-plane.md +0 -87
- package/docs/architecture/current/implementation-status.md +0 -128
- package/docs/architecture/current/job-and-run-lifecycle.md +0 -413
- package/docs/architecture/current/legacy-governance.md +0 -58
- package/docs/architecture/current/local-workspace-target-grants.md +0 -70
- package/docs/architecture/current/migration-roadmap.md +0 -105
- package/docs/architecture/current/multi-repository-execution.md +0 -371
- package/docs/architecture/current/operations-runbook.md +0 -45
- package/docs/architecture/current/peer-supercontroller-runtime.md +0 -32
- package/docs/architecture/current/personal-assistant-plugin-baseline.md +0 -206
- package/docs/architecture/current/repository-access-modes.md +0 -102
- package/docs/architecture/current/route-policy.md +0 -15
- package/docs/architecture/current/route-session-concurrency.md +0 -85
- package/docs/architecture/current/runtime-architecture-simplification.md +0 -214
- package/docs/architecture/current/runtime-directory-map.md +0 -49
- package/docs/architecture/current/runtime-health-and-resource-lifecycle.md +0 -85
- package/docs/architecture/current/scheduler-and-resource-claims.md +0 -422
- package/docs/architecture/current/session-aware-execution-and-authorization.md +0 -77
- package/docs/architecture/current/system-overview.md +0 -144
- package/docs/architecture/current/target-requirements-traceability.md +0 -202
- package/docs/architecture/current/thin-harness-governance-policy.md +0 -32
- package/docs/architecture/current/thin-harness-v1.md +0 -311
- package/docs/architecture/current/verification-and-release-gates.md +0 -391
- package/docs/forge-autonomous-goal-loop.md +0 -9
- package/docs/forge-provider-configuration.md +0 -7
- package/docs/operations/chatgpt-personal-assistant-runtime.md +0 -83
- package/docs/operations/controller-desktop-plugin.md +0 -112
- package/docs/operations/gmail-assistant-routines.md +0 -186
- package/docs/operations/personal-assistant-operator-guide.md +0 -61
- package/docs/operations/provider-configuration.md +0 -31
- package/scripts/harness-trace-grade.sh +0 -150
- package/scripts/heartbeat-triage.sh +0 -361
- package/scripts/maintenance-triage.sh +0 -167
- package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +0 -2
- package/src/cli/repositories/goal-registry.ts +0 -239
- package/src/runtime/assistant/action-proposals.ts +0 -279
- package/src/runtime/assistant/intent.ts +0 -395
- package/src/runtime/assistant/model-provider.ts +0 -460
- package/src/runtime/assistant/openapi.ts +0 -223
- package/src/runtime/assistant/policy.ts +0 -89
- package/src/runtime/assistant/readiness.ts +0 -258
- package/src/runtime/assistant/routine-runtime.ts +0 -477
- package/src/runtime/assistant/schedule-binding.ts +0 -171
- package/src/runtime/assistant/standing-grants.ts +0 -375
- package/src/runtime/assistant/store.ts +0 -243
- package/src/runtime/assistant/types.ts +0 -135
- package/src/runtime/control-plane/goal-loop/config-facade.ts +0 -700
- package/src/runtime/control-plane/goal-loop/config-store.ts +0 -570
- package/src/runtime/control-plane/goal-loop/config-types.ts +0 -213
- package/src/runtime/control-plane/goal-loop/executor-router.ts +0 -109
- package/src/runtime/control-plane/goal-loop/failure-taxonomy.ts +0 -149
- package/src/runtime/control-plane/goal-loop/goal-contract-store.ts +0 -304
- package/src/runtime/control-plane/goal-loop/goal-loop-engine.ts +0 -1001
- package/src/runtime/control-plane/goal-loop/handoff-packet.ts +0 -160
- package/src/runtime/control-plane/goal-loop/index.ts +0 -13
- package/src/runtime/control-plane/goal-loop/local-tools.ts +0 -290
- package/src/runtime/control-plane/goal-loop/policy-gates.ts +0 -203
- package/src/runtime/control-plane/goal-loop/provider-dispatch.ts +0 -93
- package/src/runtime/control-plane/goal-loop/provider-registry.ts +0 -545
- package/src/runtime/control-plane/goal-loop/types.ts +0 -378
- package/src/runtime/control-plane/startup-recovery.ts +0 -198
- package/src/runtime/gateway/mcp/resource-policy.ts +0 -186
- package/src/runtime/personal-assistant/gmail-triage-manager.ts +0 -231
- package/src/runtime/personal-assistant/reporting-runtime.ts +0 -344
- package/src/runtime/personal-assistant/triage-runtime.ts +0 -748
- package/src/runtime/plugins/desktop-adapter.ts +0 -374
- package/src/runtime/safe-tooling/browser-safe.ts +0 -133
- package/src/runtime/workflow/findings/store.ts +0 -204
- package/src/runtime/workflow/findings/types.ts +0 -58
- package/src/runtime/workflow/portfolio/engine.ts +0 -20
- package/src/runtime/workflow/portfolio/store.ts +0 -185
- package/src/runtime/workflow/portfolio/types.ts +0 -29
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
# External Plugin and Provider Governance
|
|
2
|
-
|
|
3
|
-
Status: architecture-reviewed for phased implementation
|
|
4
|
-
Source baseline: `9269defb536a79d78d1630d95736eaaf9fa9be56`
|
|
5
|
-
Scope: Forge plugin control plane, external provider integration, sibling repository governance, and open-source release boundaries
|
|
6
|
-
|
|
7
|
-
## Problem
|
|
8
|
-
|
|
9
|
-
Forge has a strong first-party plugin contract but still resolves adapters from a static in-process map:
|
|
10
|
-
|
|
11
|
-
```text
|
|
12
|
-
FIRST_PARTY_PLUGIN_ADAPTERS
|
|
13
|
-
-> PLUGIN_ADAPTERS
|
|
14
|
-
-> AssistantPluginManifest
|
|
15
|
-
-> plugin_action_execute
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
That model works for JavaScript/TypeScript adapters shipped with Forge, but it does not support independently released native or product-scale providers without compiling their implementation into Forge.
|
|
19
|
-
|
|
20
|
-
Two existing sibling repositories make the missing boundary concrete:
|
|
21
|
-
|
|
22
|
-
- `repo-harness-desktop-operator`: a clean independent Swift/macOS service with Accessibility observation, semantic UI actions, screenshots, batch execution, sessions, and Unix-socket JSONL transport. Its architecture intentionally expects an External Plugin Broker that Forge does not yet implement.
|
|
23
|
-
- `repo-harness-design`: an independent design asset/product boundary with deterministic JSON assets, CLI/local API, validation, and an intended future controller adapter.
|
|
24
|
-
|
|
25
|
-
Keeping these implementations independent is desirable. Keeping `repo-harness-*` product names, incompatible registration descriptors, duplicated static adapters, and disconnected runtime integration is not.
|
|
26
|
-
|
|
27
|
-
## Goals
|
|
28
|
-
|
|
29
|
-
1. Keep Forge core responsible for plugin policy, lifecycle, registration, health projection, action risk/confirmation, resource claims, execution receipts, and host-facing facade integration.
|
|
30
|
-
2. Allow independently released providers to implement platform-native or product-specific behavior without importing Controller private source.
|
|
31
|
-
3. Preserve the current first-party adapter path while introducing a deterministic external-provider path.
|
|
32
|
-
4. Make Desktop Operator the first end-to-end external provider acceptance target and Design the second.
|
|
33
|
-
5. Standardize product repository naming and public identity before open-source publication.
|
|
34
|
-
6. Make legacy Repo Harness/Matea identifiers explicit migration inputs only, never new authorities.
|
|
35
|
-
7. Define one measurable completeness standard for every plugin, whether in-process or external.
|
|
36
|
-
|
|
37
|
-
## Non-goals
|
|
38
|
-
|
|
39
|
-
- Do not dynamically download arbitrary plugins from ChatGPT requests.
|
|
40
|
-
- Do not let a model supply arbitrary executable paths, sockets, shell commands, or registration files.
|
|
41
|
-
- Do not create another Forge Runtime, scheduler, daemon authority, or rollout slot.
|
|
42
|
-
- Do not move all external provider source into the Forge repository.
|
|
43
|
-
- Do not delete legacy runtime/worktree/recovery directories until their authority and unique-state status is proven safe.
|
|
44
|
-
- Do not rename the current GitHub `moretea-labs/matea` remote until an authenticated repository-rename operation is available and the target `moretea-labs/forge` identity can be proven.
|
|
45
|
-
|
|
46
|
-
## Current facts
|
|
47
|
-
|
|
48
|
-
### Forge plugin contract
|
|
49
|
-
|
|
50
|
-
`AssistantPluginManifest` already provides the host contract required by the broker:
|
|
51
|
-
|
|
52
|
-
- stable `pluginId`, provider, display name, and plugin version;
|
|
53
|
-
- derived single source-of-truth declaration;
|
|
54
|
-
- lifecycle and health;
|
|
55
|
-
- permission scopes;
|
|
56
|
-
- capabilities;
|
|
57
|
-
- typed actions;
|
|
58
|
-
- read-only/write/destructive risk;
|
|
59
|
-
- confirmation requirements;
|
|
60
|
-
- resource claims;
|
|
61
|
-
- bounded arguments schema.
|
|
62
|
-
|
|
63
|
-
The missing piece is adapter discovery/transport, not a replacement manifest model.
|
|
64
|
-
|
|
65
|
-
### Current authority namespaces
|
|
66
|
-
|
|
67
|
-
Current source uses Forge authorities for active configuration:
|
|
68
|
-
|
|
69
|
-
- App Store Connect: `.forge/plugins/app-store-connect.json`, `FORGE_ASC_*`;
|
|
70
|
-
- Browser: `.forge/plugins/browser.json`, `.forge/browser/`;
|
|
71
|
-
- GitHub: `.forge/plugins/github.json` plus Repository Registry GitHub identity;
|
|
72
|
-
- Gmail/Calendar/Tasks: `.forge/plugins/...`, `FORGE_*_ACCESS_TOKEN`;
|
|
73
|
-
- iOS: `.forge/plugins/ios.json`, `FORGE_IOS_DEVICE_RUNNER_URL` plus local Xcode/CoreDevice/agent-device facts;
|
|
74
|
-
- Desktop: Controller Home `system/desktop/config.json`;
|
|
75
|
-
- Local System: Controller Home `system/local-system`.
|
|
76
|
-
|
|
77
|
-
App Store Connect intentionally retains `.repo-harness/plugins/app-store-connect.json` as a named `legacy-read-fallback`. This is an acceptable migration pattern and must not become a new write authority.
|
|
78
|
-
|
|
79
|
-
### Runtime integration gap
|
|
80
|
-
|
|
81
|
-
`src/runtime/plugins/store.ts` currently initializes one static `PLUGIN_ADAPTERS` map from `createFirstPartyPluginAdapterMap()`. External registration descriptors are not loaded.
|
|
82
|
-
|
|
83
|
-
## Decision: Forge core + independently released providers
|
|
84
|
-
|
|
85
|
-
Use the following ownership split:
|
|
86
|
-
|
|
87
|
-
```text
|
|
88
|
-
ChatGPT / Local UI
|
|
89
|
-
|
|
|
90
|
-
Forge facade + plugin policy
|
|
91
|
-
|
|
|
92
|
-
Assistant Plugin Store
|
|
93
|
-
|
|
|
94
|
-
Plugin Adapter Resolver
|
|
95
|
-
+---+-----------------------+
|
|
96
|
-
| |
|
|
97
|
-
Built-in adapters External Plugin Broker
|
|
98
|
-
| |
|
|
99
|
-
TS/JS implementation trusted registration
|
|
100
|
-
|
|
|
101
|
-
typed transport adapter
|
|
102
|
-
|
|
|
103
|
-
external provider process/service
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Forge remains the policy and completion authority. External providers only perform the bounded domain operation described by their registered contract.
|
|
107
|
-
|
|
108
|
-
## Repository naming policy
|
|
109
|
-
|
|
110
|
-
Current and future product repositories use the Forge namespace:
|
|
111
|
-
|
|
112
|
-
- core: `forge`
|
|
113
|
-
- macOS desktop provider: `forge-desktop-operator`
|
|
114
|
-
- design product/provider: `forge-design`
|
|
115
|
-
- future independent providers: `forge-<provider>`
|
|
116
|
-
|
|
117
|
-
`repo-harness-*` names are legacy identities. They may temporarily survive as filesystem symlinks, Git redirects, migration aliases, or historical/legal references, but must not be the canonical name of a newly published Forge product.
|
|
118
|
-
|
|
119
|
-
Sibling provider repositories remain peers of the Forge repository rather than children of `/forge/projects`:
|
|
120
|
-
|
|
121
|
-
```text
|
|
122
|
-
DevProjects/
|
|
123
|
-
forge/
|
|
124
|
-
forge-desktop-operator/
|
|
125
|
-
forge-design/
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
This gives each provider a clean release/history/dependency boundary and avoids coupling its build system to Forge.
|
|
129
|
-
|
|
130
|
-
## External registration authority
|
|
131
|
-
|
|
132
|
-
External providers are not discovered by scanning arbitrary folders.
|
|
133
|
-
|
|
134
|
-
Canonical registration state lives under Controller Home, for example:
|
|
135
|
-
|
|
136
|
-
```text
|
|
137
|
-
<controller-home>/system/plugins/external/
|
|
138
|
-
registrations/<plugin-id>.json
|
|
139
|
-
index.json
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
A registration is written only by a trusted installation/configuration workflow. ChatGPT can read registered providers and execute declared actions but cannot choose an unregistered executable/socket.
|
|
143
|
-
|
|
144
|
-
Provider repositories may ship an install-time descriptor template, but that repository file is not runtime authority until installation validates and copies its bounded registration into Controller Home.
|
|
145
|
-
|
|
146
|
-
## Registration schema v1
|
|
147
|
-
|
|
148
|
-
A registration must include:
|
|
149
|
-
|
|
150
|
-
- schema version;
|
|
151
|
-
- plugin ID and display name;
|
|
152
|
-
- provider ID/version;
|
|
153
|
-
- plugin contract version;
|
|
154
|
-
- scope: controller or repository;
|
|
155
|
-
- transport kind;
|
|
156
|
-
- stable installed identity;
|
|
157
|
-
- expected protocol version/range;
|
|
158
|
-
- manifest acquisition method;
|
|
159
|
-
- health method;
|
|
160
|
-
- lifecycle ownership;
|
|
161
|
-
- state ownership;
|
|
162
|
-
- registration revision/fingerprint;
|
|
163
|
-
- optional legacy migration identities.
|
|
164
|
-
|
|
165
|
-
Transport v1 supports:
|
|
166
|
-
|
|
167
|
-
1. `unix_socket_jsonl` for long-lived native providers such as Desktop Operator;
|
|
168
|
-
2. `managed_cli_json` for trusted bounded one-shot product providers such as Forge Design and Personal Knowledge Assistant;
|
|
169
|
-
3. `localhost_http_json` remains deferred until a provider genuinely needs it.
|
|
170
|
-
|
|
171
|
-
Do not add a generic shell transport.
|
|
172
|
-
|
|
173
|
-
## Broker responsibilities
|
|
174
|
-
|
|
175
|
-
The External Plugin Broker must:
|
|
176
|
-
|
|
177
|
-
1. load only trusted Controller Home registrations;
|
|
178
|
-
2. validate registration schema and protocol compatibility;
|
|
179
|
-
3. derive an `AssistantPluginManifest` from the provider manifest plus Forge policy;
|
|
180
|
-
4. verify that provider action IDs/capabilities are stable and internally consistent;
|
|
181
|
-
5. map action risk, confirmation, and resource claims into the existing Plugin Store execution path;
|
|
182
|
-
6. use bounded request/response sizes and deadlines;
|
|
183
|
-
7. support cancellation where the provider protocol supports it;
|
|
184
|
-
8. enforce idempotency/request IDs at the Forge layer regardless of provider implementation;
|
|
185
|
-
9. redact errors and never return transport secrets/absolute private internals by default;
|
|
186
|
-
10. fail closed on missing/mismatched provider identity;
|
|
187
|
-
11. project health truthfully as ready/degraded/error rather than silently falling back to a weaker implementation;
|
|
188
|
-
12. retain Forge Work/evidence receipts as the canonical execution record.
|
|
189
|
-
|
|
190
|
-
## Desktop provider decision
|
|
191
|
-
|
|
192
|
-
The independent Swift Desktop Operator becomes the primary `desktop` capability provider once broker acceptance is complete.
|
|
193
|
-
|
|
194
|
-
Do not duplicate the full Accessibility/session/screenshot/batch implementation in Forge TypeScript.
|
|
195
|
-
|
|
196
|
-
The current bundled `desktop` helper remains a bounded bootstrap/fallback implementation during migration. The transition is explicit:
|
|
197
|
-
|
|
198
|
-
```text
|
|
199
|
-
Phase 0: bundled desktop helper is canonical
|
|
200
|
-
Phase 1: external Desktop Operator can register and report health/manifests
|
|
201
|
-
Phase 2: selected desktop actions route to external provider
|
|
202
|
-
Phase 3: full desktop action surface routes externally; bundled helper retained only as documented fallback or retired
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
The provider must expose, at minimum:
|
|
206
|
-
|
|
207
|
-
- status/doctor;
|
|
208
|
-
- session open/close;
|
|
209
|
-
- application/window observation;
|
|
210
|
-
- semantic element press;
|
|
211
|
-
- typed text entry;
|
|
212
|
-
- keyboard shortcuts;
|
|
213
|
-
- URL opening;
|
|
214
|
-
- screenshot capture;
|
|
215
|
-
- bounded batch execution.
|
|
216
|
-
|
|
217
|
-
macOS TCC trust remains attached to the stable installed user-service identity. Forge does not attempt per-click TCC bypasses.
|
|
218
|
-
|
|
219
|
-
## Design provider decision
|
|
220
|
-
|
|
221
|
-
`forge-design` remains a separate product/repository. The public `design` provider is installable through the official pinned catalog and uses `managed_cli_json` without becoming Controller source. Its deterministic design assets and CLI/API are product authority.
|
|
222
|
-
|
|
223
|
-
Forge integration should expose bounded design context/read/validate/edit/render actions through the broker or a thin repository adapter, not duplicate design storage or rendering logic in Forge.
|
|
224
|
-
|
|
225
|
-
Migration of `.design-harness` to a Forge-branded asset directory is a product compatibility decision and must have an explicit migration/read-fallback strategy; do not mass-rename existing repositories without it.
|
|
226
|
-
|
|
227
|
-
## Namespace migration rules
|
|
228
|
-
|
|
229
|
-
### Current authorities
|
|
230
|
-
|
|
231
|
-
New writes use only Forge namespaces:
|
|
232
|
-
|
|
233
|
-
- `.forge/...`
|
|
234
|
-
- `FORGE_*`
|
|
235
|
-
- `~/Library/Application Support/forge/...`
|
|
236
|
-
- `~/Library/Caches/forge/...`
|
|
237
|
-
- `forge-*` product/repository names.
|
|
238
|
-
|
|
239
|
-
### Legacy fallbacks
|
|
240
|
-
|
|
241
|
-
A legacy Repo Harness/Matea identity may remain only when all are true:
|
|
242
|
-
|
|
243
|
-
1. the code labels it as legacy/migration compatibility;
|
|
244
|
-
2. it is read-only unless the migration operation itself is explicitly running;
|
|
245
|
-
3. the current Forge authority is preferred;
|
|
246
|
-
4. health/status can report its use;
|
|
247
|
-
5. tests cover migration precedence;
|
|
248
|
-
6. there is a documented retirement condition.
|
|
249
|
-
|
|
250
|
-
Never add a new compatibility alias without a migration reason.
|
|
251
|
-
|
|
252
|
-
## Plugin completeness standard
|
|
253
|
-
|
|
254
|
-
Every first-party or external plugin receives a matrix with these gates:
|
|
255
|
-
|
|
256
|
-
| Gate | Required evidence |
|
|
257
|
-
| --- | --- |
|
|
258
|
-
| Identity | Forge-branded stable ID/display name/version |
|
|
259
|
-
| Authority | one current source of truth; legacy fallbacks explicitly named |
|
|
260
|
-
| Configuration | configure/read-status path; missing external config reported as pending/degraded |
|
|
261
|
-
| Health | real probe; ready must mean executable action path is usable |
|
|
262
|
-
| Read actions | focused unit/integration tests |
|
|
263
|
-
| Write actions | confirmation/risk/resource-claim tests and dry-run/preview where applicable |
|
|
264
|
-
| Idempotency | duplicate request ID cannot execute twice |
|
|
265
|
-
| Cancellation/timeout | bounded failure behavior |
|
|
266
|
-
| Secrets | never returned/persisted in raw form |
|
|
267
|
-
| E2E | at least one real local/remote acceptance path when external dependency is available |
|
|
268
|
-
| Fault tests | unavailable/malformed/timeout/protocol mismatch paths |
|
|
269
|
-
| Documentation | current configuration, permissions, troubleshooting, lifecycle |
|
|
270
|
-
| Open-source surface | no personal path, raw credential, stale product identity, or runtime artifact |
|
|
271
|
-
|
|
272
|
-
A plugin blocked only by credentials/device/service availability is marked `configuration_pending`/degraded with a clear remediation. It is not considered an implementation failure when its code path and tests are complete.
|
|
273
|
-
|
|
274
|
-
## Test strategy
|
|
275
|
-
|
|
276
|
-
Add a plugin-governance test layer that checks invariants across all registered first-party adapters and external registrations:
|
|
277
|
-
|
|
278
|
-
- unique plugin IDs;
|
|
279
|
-
- canonical Forge display identities where Forge-branded;
|
|
280
|
-
- action IDs unique per plugin;
|
|
281
|
-
- capability actions all exist;
|
|
282
|
-
- action scopes declared by permissions;
|
|
283
|
-
- readOnly/risk consistency;
|
|
284
|
-
- destructive actions require strong confirmation;
|
|
285
|
-
- no external provider registration uses arbitrary shell execution;
|
|
286
|
-
- current authority does not write legacy namespaces;
|
|
287
|
-
- manifests remain bounded and serializable.
|
|
288
|
-
|
|
289
|
-
Add fault/property-style tests for broker registrations and transports:
|
|
290
|
-
|
|
291
|
-
- malformed registration rejected;
|
|
292
|
-
- protocol version mismatch rejected;
|
|
293
|
-
- socket absent => degraded/unavailable, not fallback success;
|
|
294
|
-
- truncated/oversized response rejected;
|
|
295
|
-
- duplicate request ID executes once;
|
|
296
|
-
- timeout/cancellation closes transport and leaves no live Work lease;
|
|
297
|
-
- provider crash cannot mark Work completed;
|
|
298
|
-
- registration replacement is revision/fingerprint checked;
|
|
299
|
-
- uninstall/disable is idempotent.
|
|
300
|
-
|
|
301
|
-
## Repository governance and migration
|
|
302
|
-
|
|
303
|
-
Do not rename/delete sibling directories directly with unbounded shell commands.
|
|
304
|
-
|
|
305
|
-
For each provider repository:
|
|
306
|
-
|
|
307
|
-
1. register it with Forge;
|
|
308
|
-
2. inspect Git status, branches, remotes, unique commits, build/test state;
|
|
309
|
-
3. commit internal Forge-brand migration first;
|
|
310
|
-
4. create/rename remote when available;
|
|
311
|
-
5. use a typed local project move/registry migration capability to change the filesystem path;
|
|
312
|
-
6. update Controller Registry and any trusted external registration atomically;
|
|
313
|
-
7. keep a temporary compatibility symlink only if an installed service/script still needs the old path;
|
|
314
|
-
8. remove the alias only after zero-reference verification.
|
|
315
|
-
|
|
316
|
-
Runtime/recovery/worktree directories are governed separately and are never treated as ordinary provider repositories.
|
|
317
|
-
|
|
318
|
-
## Phase 1: broker foundation + Desktop Operator
|
|
319
|
-
|
|
320
|
-
1. Define external registration types and Controller Home store.
|
|
321
|
-
2. Add resolver composition: built-in adapter first by explicit provider selection, external registration path without changing host MCP tool count.
|
|
322
|
-
3. Implement Unix-socket JSONL broker transport with bounded request/response/deadline semantics.
|
|
323
|
-
4. Add external adapter that maps provider manifest/actions into `AssistantPluginManifest`.
|
|
324
|
-
5. Add read-only list/get health support before action execution.
|
|
325
|
-
6. Register Desktop Operator through a trusted test/installation registration.
|
|
326
|
-
7. Route a non-destructive status/observe action end-to-end.
|
|
327
|
-
8. Add write action policy tests for press/type/screenshot/batch without bypassing normal Forge confirmation rules.
|
|
328
|
-
9. Run real macOS E2E when the registered Desktop Operator build/service is available.
|
|
329
|
-
10. Only then decide whether the bundled Desktop helper remains fallback or is retired.
|
|
330
|
-
|
|
331
|
-
### Phase 1 acceptance
|
|
332
|
-
|
|
333
|
-
- External providers appear through existing `list_plugins/get_plugin` surfaces.
|
|
334
|
-
- No new top-level MCP tools are required.
|
|
335
|
-
- Missing provider service yields truthful degraded health.
|
|
336
|
-
- Broker cannot execute an unregistered provider path.
|
|
337
|
-
- Desktop status/observe can run through the external transport.
|
|
338
|
-
- action policy remains owned by Forge.
|
|
339
|
-
- provider request IDs are idempotent and bounded.
|
|
340
|
-
- Controller restart rebuilds external provider projection from Controller Home authority.
|
|
341
|
-
- no second Forge Runtime is introduced.
|
|
342
|
-
|
|
343
|
-
## Phase 2: repository/product migration
|
|
344
|
-
|
|
345
|
-
### Desktop Operator
|
|
346
|
-
|
|
347
|
-
Target identity:
|
|
348
|
-
|
|
349
|
-
- repository/directory: `forge-desktop-operator`
|
|
350
|
-
- product name: `Forge Desktop Operator`
|
|
351
|
-
- current state root: `~/Library/Application Support/forge/desktop-operator`
|
|
352
|
-
- current cache/socket root: `~/Library/Caches/forge/...`
|
|
353
|
-
- descriptor/schema names: Forge-branded
|
|
354
|
-
|
|
355
|
-
Legacy state/descriptor paths are migrated explicitly. Installed TCC identity must remain stable across migration; path/signature changes require a reviewed migration plan before changing the live service.
|
|
356
|
-
|
|
357
|
-
### Design
|
|
358
|
-
|
|
359
|
-
Target identity:
|
|
360
|
-
|
|
361
|
-
- repository/directory: `forge-design`
|
|
362
|
-
- product name: `Forge Design`
|
|
363
|
-
|
|
364
|
-
Preserve its independent Git/product boundary. Integrate only through stable contract/API surfaces.
|
|
365
|
-
|
|
366
|
-
## Phase 3: all-plugin completeness matrix
|
|
367
|
-
|
|
368
|
-
Audit and close every built-in plugin:
|
|
369
|
-
|
|
370
|
-
- Browser: Chrome/Vivaldi attach, ownership/reuse, DOM/native capability matrix, failure paths, real E2E.
|
|
371
|
-
- Local System/Desktop: unregistered target operations, application control, external Desktop provider, destructive-path safeguards.
|
|
372
|
-
- iOS: simulator, agent-device, CoreDevice, physical runner configuration/E2E.
|
|
373
|
-
- App Store Connect: auth/read/preview/write policy and remote-write guarded E2E.
|
|
374
|
-
- GitHub: canonical Forge remote identity after repository rename; issue/project read/write acceptance.
|
|
375
|
-
- Gmail/Calendar/Tasks: auth/config migration, read/write policy, configuration-pending semantics, connected-account E2E when configured.
|
|
376
|
-
|
|
377
|
-
## Architecture review
|
|
378
|
-
|
|
379
|
-
Review result: approved for phased implementation.
|
|
380
|
-
|
|
381
|
-
Reasons:
|
|
382
|
-
|
|
383
|
-
- It uses the existing plugin manifest/policy model rather than inventing a second host contract.
|
|
384
|
-
- It preserves independent native/product release boundaries where they are valuable.
|
|
385
|
-
- It removes static-adapter coupling without enabling arbitrary plugin execution.
|
|
386
|
-
- It aligns repository naming and state namespaces with the open-source Forge identity.
|
|
387
|
-
- It makes external configuration gaps explicit rather than conflating them with missing functionality.
|
|
388
|
-
- It provides a concrete first acceptance target (Desktop Operator) and a second product-scale target (Design).
|
|
389
|
-
|
|
390
|
-
Rejected alternatives:
|
|
391
|
-
|
|
392
|
-
1. Move Desktop Operator and Design into the Forge monorepo: rejected because their independent native/product release boundaries are useful and coupling would increase build/release complexity.
|
|
393
|
-
2. Keep every external provider as an ad-hoc static adapter: rejected because it recreates Controller-private coupling and prevents independent releases.
|
|
394
|
-
3. Scan sibling folders for plugin descriptors: rejected because filesystem discovery is not a trusted runtime authority.
|
|
395
|
-
4. Generic command/executable plugin transport: rejected because arbitrary executable control is too broad and weakens policy/audit guarantees.
|
|
396
|
-
5. Mechanical global rename of all `.repo-harness`/Repo Harness strings: rejected because legal attribution, historical evidence, and explicit read-only migrations are distinct from current product identity.
|