@moretea-labs/forge 1.6.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +39 -0
- package/CLAUDE.md +4 -0
- package/README.md +2 -2
- package/README.zh-CN.md +1 -1
- 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/prompt-guard.sh +5 -81
- package/assets/hooks/session-start-context.sh +56 -1
- package/assets/partials/05-workflow.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/partials-agents/03-orchestration.partial.md +1 -1
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/harness-overview.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-architecture-sync.sh +17 -0
- 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 +11 -36
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-project-template.sh +22 -45
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- 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/verify-contract.sh +1 -111
- package/assets/templates/helpers/verify-sprint.sh +3 -180
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- 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 +178 -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-plugin-management.md +1 -1
- package/docs/forge-runtime-self-healing-loop.md +1 -1
- package/docs/operations/controller-browser-plugin.md +26 -6
- package/docs/operations/controller-performance-and-502.md +143 -0
- package/docs/operations/controller-reliability-runbook.md +1 -1
- package/docs/operations/features.md +2 -2
- 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/wiki/Architecture.md +6 -6
- package/docs/wiki/Implementation.md +2 -2
- package/docs/wiki/Integrations.md +2 -2
- package/docs/wiki/Work-Lifecycle.md +1 -1
- package/package.json +33 -11
- package/scripts/activate-source-baseline.ts +17 -13
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- 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/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1558
- package/scripts/check-architecture-sync.sh +2 -371
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-mcp-compatibility.ts +14 -0
- package/scripts/check-runtime-architecture.mjs +349 -79
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +92 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -722
- package/scripts/ensure-task-workflow.sh +1 -1225
- package/scripts/host-temporary-cloud-mcp-e2e.sh +265 -0
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/install-standalone-recovery.ts +24 -0
- package/scripts/lib/project-init-lib.sh +22 -46
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -1189
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -796
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +5 -1
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -558
- 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 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -703
- package/scripts/verify-forge-runtime.sh +0 -1
- package/scripts/verify-sprint.sh +1 -677
- package/scripts/workflow-contract.ts +4 -205
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/init-hook.ts +3 -3
- package/src/cli/commands/mcp.ts +9 -5
- package/src/cli/commands/plugin.ts +12 -3
- 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 +113 -5
- 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 +828 -487
- 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/contracts.ts +16 -0
- package/src/cli/github/github.ts +135 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/installer/managed-entries.ts +15 -1
- package/src/cli/local-bridge/console-automations.ts +54 -78
- package/src/cli/local-bridge/console-view-models.ts +1 -35
- package/src/cli/local-bridge/facade-api.ts +37 -264
- package/src/cli/local-bridge/frontend/src/App.tsx +3 -3
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +23 -13
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +37 -4
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +6 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +1 -6
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +1 -1
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +2 -2
- package/src/cli/local-bridge/frontend/src/styles.css +1 -1
- package/src/cli/local-bridge/frontend/src/types.ts +5 -8
- package/src/cli/local-bridge/job-store.ts +1 -490
- package/src/cli/local-bridge/server.ts +2 -515
- package/src/cli/local-bridge/ui-dist/app.css +1 -1
- package/src/cli/local-bridge/ui-dist/app.js +3703 -3757
- package/src/cli/mcp/auth.ts +5 -5
- package/src/cli/mcp/instructions.ts +3 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -222
- package/src/cli/mcp/multi-repository.ts +16 -5
- package/src/cli/mcp/oauth.ts +175 -26
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +282 -146
- package/src/cli/mcp/server.ts +586 -116
- package/src/cli/mcp/tool-capability-cache.ts +1 -1
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset-selection.ts +1 -1
- package/src/cli/mcp/toolset.ts +44 -7
- package/src/cli/mcp/transports/http.ts +124 -14
- package/src/cli/mcp/transports/session-registry.ts +43 -5
- package/src/cli/mcp/types.ts +3 -3
- package/src/cli/repositories/command-classifier.ts +103 -21
- package/src/cli/repositories/command-executor.ts +78 -526
- 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 +124 -0
- package/src/cli/repositories/selected-path-actions.ts +17 -9
- package/src/cli/repositories/structured-git.ts +118 -6
- package/src/cli/repository/inspector.ts +563 -65
- 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-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +223 -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 +48 -16
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +86 -24
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/session-store.ts +18 -0
- package/src/runtime/control-plane/execution/verification-evidence.ts +58 -3
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- 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-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +215 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +22 -18
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +156 -11
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +22 -14
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +90 -9
- package/src/runtime/control-plane/facade/capability-registry.ts +129 -25
- package/src/runtime/control-plane/facade/controller-round-relay.ts +1118 -0
- package/src/runtime/control-plane/facade/controller-session-store.ts +302 -12
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +17 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +928 -190
- package/src/runtime/control-plane/facade/index.ts +3 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +275 -42
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- 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 +90 -10
- package/src/runtime/control-plane/facade/work-contract-store.ts +157 -261
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- 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 +152 -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 +278 -543
- 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 +63 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +365 -117
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +89 -0
- package/src/runtime/control-plane/launcher/thin-launcher.ts +244 -11
- package/src/runtime/control-plane/persistence/controller-home-migration.ts +487 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- 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/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +24 -21
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/control-plane/runtime-status-client.ts +0 -2
- package/src/runtime/diagnostics/mcp-timing.ts +13 -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/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- 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 +51 -4
- package/src/runtime/execution/process-runtime/check-result.ts +88 -0
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/check-scheduling.ts +114 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +367 -40
- package/src/runtime/execution/process-runtime/gc.ts +38 -6
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +1201 -0
- package/src/runtime/execution/process-runtime/persisted-check.ts +51 -5
- package/src/runtime/execution/process-runtime/resource-claims.ts +10 -6
- package/src/runtime/execution/process-runtime/runtime.ts +53 -3
- package/src/runtime/execution/process-runtime/store.ts +1 -0
- package/src/runtime/execution/process-runtime/types.ts +4 -12
- 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/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -61
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -1852
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/process-tools.ts +83 -37
- package/src/runtime/gateway/mcp/router.ts +186 -84
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +565 -0
- package/src/runtime/gateway/mcp/runtime-tools.ts +2378 -1947
- package/src/runtime/plugins/app-store-connect-adapter.ts +216 -47
- package/src/runtime/plugins/browser-adapter.ts +2662 -829
- package/src/runtime/plugins/browser-automation-service.ts +10 -0
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +110 -5
- package/src/runtime/plugins/browser-macos-bridge.ts +701 -63
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- 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 +154 -0
- package/src/runtime/plugins/browser-runtime.ts +193 -0
- package/src/runtime/plugins/browser-session-authority.ts +332 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/capability-authorization-grants.ts +354 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +10 -4
- package/src/runtime/plugins/external-adapter.ts +358 -3
- package/src/runtime/plugins/external-unix-socket.ts +7 -1
- package/src/runtime/plugins/first-party-registry.ts +2 -0
- package/src/runtime/plugins/github-adapter.ts +125 -0
- 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 +123 -6
- package/src/runtime/plugins/macos-capability-broker.ts +47 -9
- package/src/runtime/plugins/plugin-action-sidecar.ts +59 -0
- package/src/runtime/plugins/plugin-management-adapter.ts +49 -8
- package/src/runtime/plugins/resend-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +330 -33
- package/src/runtime/plugins/types.ts +38 -3
- 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/maintenance-executor.ts +426 -25
- package/src/runtime/root/mcp-transport.ts +180 -10
- package/src/runtime/root/package-connector-service.ts +230 -10
- package/src/runtime/root/package-runtime-release.ts +143 -17
- package/src/runtime/root/package-runtime-service.ts +461 -22
- package/src/runtime/root/release-manifest.ts +144 -18
- package/src/runtime/root/release-materialize.ts +125 -32
- package/src/runtime/root/release-store.ts +48 -11
- package/src/runtime/root/runtime.ts +23 -5
- package/src/runtime/root/service.ts +100 -29
- package/src/runtime/root/types.ts +12 -0
- package/src/runtime/safe-tooling/ios-development.ts +321 -63
- 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 +1079 -240
- package/src/runtime/standalone-recovery/entry.ts +100 -24
- package/src/runtime/standalone-recovery/installer.ts +20 -4
- 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 +81 -3
- package/src/runtime/workflow/schedules/engine.ts +364 -202
- package/src/runtime/workflow/schedules/github-issue-watch.ts +158 -0
- package/src/runtime/workflow/schedules/settlement.ts +64 -17
- package/src/runtime/workflow/schedules/store.ts +209 -19
- package/src/runtime/workflow/schedules/types.ts +2 -4
- package/src/runtime/workflow/schedules/work-continuation.ts +26 -13
- 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/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 -459
- package/docs/architecture/current/codegraph-context-provider.md +0 -238
- 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 -373
- package/docs/architecture/current/entity-model.md +0 -612
- 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 -169
- 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 -321
- 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 -93
- 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/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
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { withControllerLock, withControllerLockAsync } from '../../../cli/repositories/locks';
|
|
2
|
+
import { sanitizeFileComponent } from '../../shared/json-files';
|
|
3
|
+
import { isTerminalPlanContractStatus, type PlanContract } from './types';
|
|
4
|
+
|
|
5
|
+
export const PLAN_ADMISSION_RELATIONS = ['extend', 'parallel'] as const;
|
|
6
|
+
export type PlanAdmissionRelation = (typeof PLAN_ADMISSION_RELATIONS)[number];
|
|
7
|
+
|
|
8
|
+
export type PlanAdmissionReason =
|
|
9
|
+
| 'exact_scope_authority'
|
|
10
|
+
| 'requirement_relation_required'
|
|
11
|
+
| 'extension_target_required'
|
|
12
|
+
| 'extend_existing'
|
|
13
|
+
| 'create_new';
|
|
14
|
+
|
|
15
|
+
export interface PlanAdmissionInput {
|
|
16
|
+
requirementId?: string;
|
|
17
|
+
scopeKey: string;
|
|
18
|
+
planRelation?: PlanAdmissionRelation;
|
|
19
|
+
relatedPlanId?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface PlanAdmissionResolution {
|
|
23
|
+
admissionDecision: 'reuse_existing' | 'resolution_required' | 'extend_existing' | 'create_new';
|
|
24
|
+
resolutionRequired: boolean;
|
|
25
|
+
reason: PlanAdmissionReason;
|
|
26
|
+
normalizedScopeKey: string;
|
|
27
|
+
plan?: PlanContract;
|
|
28
|
+
candidates: PlanContract[];
|
|
29
|
+
allowedPlanRelations?: readonly PlanAdmissionRelation[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function normalizePlanScopeKey(value: string): string {
|
|
33
|
+
const raw = String(value ?? '').trim();
|
|
34
|
+
if (!raw) return '';
|
|
35
|
+
const normalized = sanitizeFileComponent(raw).toLowerCase().slice(0, 160);
|
|
36
|
+
return normalized === 'unknown' ? '' : normalized;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function resolvePlanAdmission(
|
|
40
|
+
plans: readonly PlanContract[],
|
|
41
|
+
input: PlanAdmissionInput,
|
|
42
|
+
): PlanAdmissionResolution {
|
|
43
|
+
const activePlans = plans.filter((plan) => !isTerminalPlanContractStatus(plan.status));
|
|
44
|
+
const normalizedScopeKey = normalizePlanScopeKey(input.scopeKey);
|
|
45
|
+
const requirementId = input.requirementId?.trim() || undefined;
|
|
46
|
+
const requirementPlans = requirementId
|
|
47
|
+
? activePlans.filter((candidate) => candidate.requirementId === requirementId)
|
|
48
|
+
: [];
|
|
49
|
+
const relatedPlanId = input.relatedPlanId?.trim() || undefined;
|
|
50
|
+
const explicitlyRelatedPlan = relatedPlanId
|
|
51
|
+
? activePlans.find((candidate) => candidate.planId === relatedPlanId)
|
|
52
|
+
: undefined;
|
|
53
|
+
const relatedPlan = explicitlyRelatedPlan && (!requirementId || explicitlyRelatedPlan.requirementId === requirementId)
|
|
54
|
+
? explicitlyRelatedPlan
|
|
55
|
+
: !relatedPlanId && requirementPlans.length === 1 ? requirementPlans[0] : undefined;
|
|
56
|
+
const exactScopeAuthority = normalizedScopeKey
|
|
57
|
+
? activePlans.find((candidate) => candidate.scopeKey === normalizedScopeKey)
|
|
58
|
+
: undefined;
|
|
59
|
+
|
|
60
|
+
// An explicit extension is a serial replan, not a second active Plan. Resolve
|
|
61
|
+
// it before exact-scope reuse so a successor may retain the predecessor scope.
|
|
62
|
+
// If another Plan owns the requested successor scope, preserve that authority.
|
|
63
|
+
if (input.planRelation === 'extend') {
|
|
64
|
+
if (!relatedPlan) {
|
|
65
|
+
return {
|
|
66
|
+
admissionDecision: 'resolution_required',
|
|
67
|
+
resolutionRequired: true,
|
|
68
|
+
reason: 'extension_target_required',
|
|
69
|
+
normalizedScopeKey,
|
|
70
|
+
candidates: (requirementPlans.length > 0 ? requirementPlans : activePlans).slice(0, 8),
|
|
71
|
+
allowedPlanRelations: PLAN_ADMISSION_RELATIONS,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (exactScopeAuthority && exactScopeAuthority.planId !== relatedPlan.planId) {
|
|
75
|
+
return {
|
|
76
|
+
admissionDecision: 'reuse_existing',
|
|
77
|
+
resolutionRequired: false,
|
|
78
|
+
reason: 'exact_scope_authority',
|
|
79
|
+
normalizedScopeKey,
|
|
80
|
+
plan: exactScopeAuthority,
|
|
81
|
+
candidates: [exactScopeAuthority],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
admissionDecision: 'extend_existing',
|
|
86
|
+
resolutionRequired: false,
|
|
87
|
+
reason: 'extend_existing',
|
|
88
|
+
normalizedScopeKey,
|
|
89
|
+
plan: relatedPlan,
|
|
90
|
+
candidates: requirementPlans.length > 0 ? requirementPlans.slice(0, 8) : [relatedPlan],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (exactScopeAuthority) {
|
|
95
|
+
return {
|
|
96
|
+
admissionDecision: 'reuse_existing',
|
|
97
|
+
resolutionRequired: false,
|
|
98
|
+
reason: 'exact_scope_authority',
|
|
99
|
+
normalizedScopeKey,
|
|
100
|
+
plan: exactScopeAuthority,
|
|
101
|
+
candidates: [exactScopeAuthority],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (requirementPlans.length > 0 && !input.planRelation) {
|
|
106
|
+
return {
|
|
107
|
+
admissionDecision: 'resolution_required',
|
|
108
|
+
resolutionRequired: true,
|
|
109
|
+
reason: 'requirement_relation_required',
|
|
110
|
+
normalizedScopeKey,
|
|
111
|
+
candidates: requirementPlans.slice(0, 8),
|
|
112
|
+
allowedPlanRelations: PLAN_ADMISSION_RELATIONS,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
admissionDecision: 'create_new',
|
|
118
|
+
resolutionRequired: false,
|
|
119
|
+
reason: 'create_new',
|
|
120
|
+
normalizedScopeKey,
|
|
121
|
+
candidates: requirementPlans.slice(0, 8),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Short per-repository semantic admission critical section. The fixed task key
|
|
127
|
+
* keeps admission independent from repository/worktree execution locks while
|
|
128
|
+
* still coordinating competing controller processes for the same repository.
|
|
129
|
+
*/
|
|
130
|
+
const planAdmissionLockKey = (repoId: string) => ({
|
|
131
|
+
scope: 'task' as const,
|
|
132
|
+
repoId,
|
|
133
|
+
taskId: 'semantic-plan-admission',
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
export function withPlanAdmissionLock<T>(
|
|
137
|
+
options: { controllerHome?: string; repoId?: string },
|
|
138
|
+
operation: () => T,
|
|
139
|
+
): T {
|
|
140
|
+
if (!options.controllerHome?.trim() || !options.repoId?.trim()) return operation();
|
|
141
|
+
return withControllerLock(
|
|
142
|
+
options.controllerHome,
|
|
143
|
+
planAdmissionLockKey(options.repoId),
|
|
144
|
+
'semantic-plan-admission',
|
|
145
|
+
operation,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Gateway-facing admission waits briefly for a competing controller to finish
|
|
150
|
+
* its tiny create/approve decision, then re-reads canonical state under lock. */
|
|
151
|
+
export async function withPlanAdmissionLockAsync<T>(
|
|
152
|
+
options: { controllerHome?: string; repoId?: string },
|
|
153
|
+
operation: () => T | Promise<T>,
|
|
154
|
+
): Promise<T> {
|
|
155
|
+
if (!options.controllerHome?.trim() || !options.repoId?.trim()) return await operation();
|
|
156
|
+
return await withControllerLockAsync(
|
|
157
|
+
options.controllerHome,
|
|
158
|
+
planAdmissionLockKey(options.repoId),
|
|
159
|
+
'semantic-plan-admission',
|
|
160
|
+
async () => await operation(),
|
|
161
|
+
undefined,
|
|
162
|
+
500,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const primaryWorkAdmissionLockKey = (repoId: string) => ({
|
|
167
|
+
scope: 'task' as const,
|
|
168
|
+
repoId,
|
|
169
|
+
taskId: 'semantic-primary-work-admission',
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Primary Work admission protects only canonical ownership resolution and
|
|
174
|
+
* persistence. It must never span workspace materialization, dependency prep,
|
|
175
|
+
* checks, worker launch, or the Work execution lifetime.
|
|
176
|
+
*/
|
|
177
|
+
export function withPrimaryWorkAdmissionLock<T>(
|
|
178
|
+
options: { controllerHome?: string; repoId?: string },
|
|
179
|
+
operation: () => T,
|
|
180
|
+
): T {
|
|
181
|
+
if (!options.controllerHome?.trim() || !options.repoId?.trim()) return operation();
|
|
182
|
+
return withControllerLock(
|
|
183
|
+
options.controllerHome,
|
|
184
|
+
primaryWorkAdmissionLockKey(options.repoId),
|
|
185
|
+
'semantic-primary-work-admission',
|
|
186
|
+
operation,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** Gateway callers wait briefly for a competing admission, then re-read the
|
|
191
|
+
* canonical Plan/Work state while holding the same short critical section. */
|
|
192
|
+
export async function withPrimaryWorkAdmissionLockAsync<T>(
|
|
193
|
+
options: { controllerHome?: string; repoId?: string },
|
|
194
|
+
operation: () => T | Promise<T>,
|
|
195
|
+
): Promise<T> {
|
|
196
|
+
if (!options.controllerHome?.trim() || !options.repoId?.trim()) return await operation();
|
|
197
|
+
return await withControllerLockAsync(
|
|
198
|
+
options.controllerHome,
|
|
199
|
+
primaryWorkAdmissionLockKey(options.repoId),
|
|
200
|
+
'semantic-primary-work-admission',
|
|
201
|
+
async () => await operation(),
|
|
202
|
+
undefined,
|
|
203
|
+
500,
|
|
204
|
+
);
|
|
205
|
+
}
|
|
@@ -11,10 +11,13 @@ function expectedActionRisk(action: SuggestedNextAction): SuggestedNextAction['r
|
|
|
11
11
|
case 'delegate':
|
|
12
12
|
case 'controller_claim':
|
|
13
13
|
case 'controller_release':
|
|
14
|
+
case 'controller_disposition':
|
|
14
15
|
case 'launcher_start':
|
|
16
|
+
case 'requirement_create':
|
|
15
17
|
case 'schedule_create':
|
|
16
18
|
case 'schedule_pause':
|
|
17
19
|
case 'schedule_resume':
|
|
20
|
+
case 'schedule_delete':
|
|
18
21
|
case 'schedule_trigger':
|
|
19
22
|
return 'workspace_write';
|
|
20
23
|
case 'controller_get_owner':
|
|
@@ -26,6 +29,7 @@ function expectedActionRisk(action: SuggestedNextAction): SuggestedNextAction['r
|
|
|
26
29
|
case 'plan_list':
|
|
27
30
|
return 'readonly';
|
|
28
31
|
case 'plan_approve':
|
|
32
|
+
case 'plan_accept_step':
|
|
29
33
|
case 'plan_supersede':
|
|
30
34
|
return 'workspace_write';
|
|
31
35
|
case 'finalize':
|
|
@@ -40,7 +44,7 @@ const ALLOWED_FACADE_OPERATIONS: Record<FacadeTool, readonly string[]> = {
|
|
|
40
44
|
rh_status: ['list', 'get', 'repair'],
|
|
41
45
|
rh_inbox: ['list', 'get', 'ack', 'accept', 'resolve', 'dismiss', 'create'],
|
|
42
46
|
rh_context: ['list', 'get', 'search'],
|
|
43
|
-
rh_work: ['start', 'continue', 'verify', 'repair', 'finalize', 'stop', 'delegate', 'controller_claim', 'controller_release', 'controller_get_owner', 'launcher_start', 'plan_create', 'plan_get', 'plan_list', 'plan_approve', 'plan_supersede', 'schedule_create', 'schedule_list', 'schedule_get', 'schedule_pause', 'schedule_resume', 'schedule_trigger'],
|
|
47
|
+
rh_work: ['start', 'continue', 'verify', 'repair', 'finalize', 'stop', 'delegate', 'controller_claim', 'controller_release', 'controller_disposition', 'controller_get_owner', 'launcher_start', 'requirement_create', 'plan_create', 'plan_get', 'plan_list', 'plan_approve', 'plan_accept_step', 'plan_supersede', 'schedule_create', 'schedule_list', 'schedule_get', 'schedule_pause', 'schedule_resume', 'schedule_delete', 'schedule_trigger'],
|
|
44
48
|
};
|
|
45
49
|
|
|
46
50
|
export interface SuggestedActionValidationOptions {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { ProcessCheckReceiptEvidence } from '../../evidence/process-check-receipt';
|
|
2
2
|
import type { CompletionReceipt as RepositoryCompletionReceipt } from '../../../cli/controller/types';
|
|
3
3
|
import type { AccessMode } from '../governance/access-policy';
|
|
4
|
-
import { decideRoute, type RouteDecision, type RoutePolicyInput } from '../routing/route-policy';
|
|
4
|
+
import { decideRoute, type ExplicitTaskMode, type RouteDecision, type RoutePolicyInput } from '../routing/route-policy';
|
|
5
5
|
|
|
6
6
|
export const EXECUTION_MODES = ['direct_control', 'goal_workloop', 'handoff_only'] as const;
|
|
7
7
|
export type ExecutionMode = (typeof EXECUTION_MODES)[number];
|
|
8
8
|
|
|
9
9
|
export const FACADE_TOOLS = ['rh_access', 'rh_status', 'rh_inbox', 'rh_context', 'rh_work'] as const;
|
|
10
10
|
export type FacadeTool = (typeof FACADE_TOOLS)[number];
|
|
11
|
+
export type CapabilityExecutionSurface = FacadeTool | 'plugin_action_execute';
|
|
11
12
|
|
|
12
13
|
export const FACADE_STATUSES = ['ok', 'blocked', 'failed', 'approval_required', 'not_found'] as const;
|
|
13
14
|
export type FacadeStatus = (typeof FACADE_STATUSES)[number];
|
|
@@ -119,6 +120,7 @@ export const TERMINAL_WORK_CONTRACT_STATUSES: readonly WorkContractStatus[] = [
|
|
|
119
120
|
export const WORK_KINDS = [
|
|
120
121
|
'repository_change',
|
|
121
122
|
'completed_no_change',
|
|
123
|
+
'read_only_review',
|
|
122
124
|
'investigation',
|
|
123
125
|
'local_effect',
|
|
124
126
|
'remote_effect',
|
|
@@ -136,6 +138,44 @@ export type EvidenceState = (typeof EVIDENCE_STATES)[number];
|
|
|
136
138
|
export const COMPLETION_OUTCOMES = ['completed_changed', 'completed_no_change', 'completed_local', 'completed_remote', 'superseded'] as const;
|
|
137
139
|
export type CompletionOutcome = (typeof COMPLETION_OUTCOMES)[number];
|
|
138
140
|
|
|
141
|
+
/** Source-bound semantic evidence accumulated by a recoverable read-only review. */
|
|
142
|
+
export interface ReadOnlyReviewEvidence {
|
|
143
|
+
sourceRevision: string;
|
|
144
|
+
workspaceFingerprint?: string;
|
|
145
|
+
inspectedPaths: string[];
|
|
146
|
+
findings: string[];
|
|
147
|
+
recordedAt: string;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Controller-reviewed binding from one exact Work acceptance criterion to durable evidence. */
|
|
151
|
+
export interface WorkSemanticAcceptanceEvidence {
|
|
152
|
+
criterion: string;
|
|
153
|
+
evidenceIds: string[];
|
|
154
|
+
rationale: string;
|
|
155
|
+
recordedAt: string;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Terminal authority for a clean read-only review. This deliberately does not
|
|
160
|
+
* impersonate repository delivery: it proves the reviewed source stayed at the
|
|
161
|
+
* frozen base revision with no workspace delta and records the bounded review
|
|
162
|
+
* scope that justified completed_no_change.
|
|
163
|
+
*/
|
|
164
|
+
export interface ReadOnlyReviewCompletionReceipt {
|
|
165
|
+
schemaVersion: 1;
|
|
166
|
+
receiptId: string;
|
|
167
|
+
source: 'read_only_review';
|
|
168
|
+
workId: string;
|
|
169
|
+
baseRevision: string;
|
|
170
|
+
sourceRevision: string;
|
|
171
|
+
workspaceFingerprint?: string;
|
|
172
|
+
/** Explicit unchanged-workspace proof captured by the trusted finalizer. Must be empty. */
|
|
173
|
+
workspaceChangedPaths: string[];
|
|
174
|
+
inspectedPaths: string[];
|
|
175
|
+
findingCount: 0;
|
|
176
|
+
recordedAt: string;
|
|
177
|
+
}
|
|
178
|
+
|
|
139
179
|
/**
|
|
140
180
|
* Terminal receipt for a bounded Controller-local side effect that is not a
|
|
141
181
|
* repository delivery. Repository Task/Issue completion keeps using the
|
|
@@ -156,18 +196,21 @@ export interface LocalEffectCompletionReceipt {
|
|
|
156
196
|
recordedAt: string;
|
|
157
197
|
}
|
|
158
198
|
|
|
159
|
-
/** Durable completion authority for one typed remote
|
|
199
|
+
/** Durable completion authority for one typed remote effect. */
|
|
160
200
|
export interface RemoteEffectCompletionReceipt {
|
|
161
201
|
schemaVersion: 1;
|
|
162
|
-
/**
|
|
202
|
+
/** Plugin receipts retain their PLG-* id; repository Process effects use their canonical Process id. */
|
|
163
203
|
receiptId: string;
|
|
164
204
|
source: 'remote_effect';
|
|
165
205
|
workId: string;
|
|
166
|
-
|
|
206
|
+
/** Historical receipts omit this field and are interpreted as plugin_action. */
|
|
207
|
+
authority?: 'plugin_action' | 'repository_process';
|
|
208
|
+
pluginId?: string;
|
|
167
209
|
actionId: string;
|
|
168
210
|
requestId: string;
|
|
169
211
|
semanticKey: string;
|
|
170
212
|
resultDigest: string;
|
|
213
|
+
processId?: string;
|
|
171
214
|
recordedAt: string;
|
|
172
215
|
}
|
|
173
216
|
|
|
@@ -196,12 +239,21 @@ export interface DirectEditWorkCompletionReceipt {
|
|
|
196
239
|
recordedAt: string;
|
|
197
240
|
}
|
|
198
241
|
|
|
199
|
-
export type WorkCompletionReceipt = RepositoryCompletionReceipt | DirectEditWorkCompletionReceipt | LocalEffectCompletionReceipt | RemoteEffectCompletionReceipt;
|
|
242
|
+
export type WorkCompletionReceipt = RepositoryCompletionReceipt | DirectEditWorkCompletionReceipt | ReadOnlyReviewCompletionReceipt | LocalEffectCompletionReceipt | RemoteEffectCompletionReceipt;
|
|
200
243
|
|
|
201
244
|
export function isRepositoryCompletionReceipt(
|
|
202
245
|
receipt: WorkCompletionReceipt,
|
|
203
246
|
): receipt is RepositoryCompletionReceipt {
|
|
204
|
-
return receipt.source !== 'local_effect'
|
|
247
|
+
return receipt.source !== 'local_effect'
|
|
248
|
+
&& receipt.source !== 'remote_effect'
|
|
249
|
+
&& receipt.source !== 'direct_edit_work'
|
|
250
|
+
&& receipt.source !== 'read_only_review';
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export function isReadOnlyReviewCompletionReceipt(
|
|
254
|
+
receipt: WorkCompletionReceipt,
|
|
255
|
+
): receipt is ReadOnlyReviewCompletionReceipt {
|
|
256
|
+
return receipt.source === 'read_only_review';
|
|
205
257
|
}
|
|
206
258
|
|
|
207
259
|
export function isRemoteEffectCompletionReceipt(
|
|
@@ -347,12 +399,16 @@ export interface WorkContractConstraints {
|
|
|
347
399
|
/** current is the stability-first default; isolated is opt-in or used for explicit parallelism. */
|
|
348
400
|
workspaceMode?: 'current' | 'isolated' | 'auto';
|
|
349
401
|
requireWorktree?: boolean;
|
|
402
|
+
/** Admission fence: repository mutation must not use the Direct Control/current-main lane. */
|
|
403
|
+
directMainProhibited?: boolean;
|
|
350
404
|
/** True when a change alters the agreed architecture direction rather than only implementation details. */
|
|
351
405
|
architectureStrategyChange?: boolean;
|
|
352
406
|
/** True when the proposed change weakens the thin-harness / high-performance execution policy. */
|
|
353
407
|
conflictsWithThinHarnessPolicy?: boolean;
|
|
354
408
|
/** True when the change alters the default routing or execution mode visible to users. */
|
|
355
409
|
changesDefaultExecutionStrategy?: boolean;
|
|
410
|
+
/** Repository-change delivery must publish the exact integrated revision before Work terminalization. */
|
|
411
|
+
remoteDeliveryRequired?: boolean;
|
|
356
412
|
}
|
|
357
413
|
|
|
358
414
|
export interface WorkContractDriverPolicy {
|
|
@@ -476,6 +532,22 @@ export interface WorkContract {
|
|
|
476
532
|
planStepId?: string;
|
|
477
533
|
planSourceRevision?: string;
|
|
478
534
|
scopeSummary?: string;
|
|
535
|
+
/**
|
|
536
|
+
* Discovery evidence, never an authorization boundary. Initial guesses,
|
|
537
|
+
* inspected paths, and observed changes remain distinct so early retrieval
|
|
538
|
+
* cannot masquerade as complete implementation scope.
|
|
539
|
+
*/
|
|
540
|
+
scopeEvidence?: {
|
|
541
|
+
initialLikelyPaths: string[];
|
|
542
|
+
inspectedPaths: string[];
|
|
543
|
+
actualChangedPaths: string[];
|
|
544
|
+
recordedAt: string;
|
|
545
|
+
};
|
|
546
|
+
/** Source-bound semantic findings/scope for first-class recoverable read-only review Work. */
|
|
547
|
+
readOnlyReviewEvidence?: ReadOnlyReviewEvidence;
|
|
548
|
+
/** Explicit Controller-reviewed acceptance bindings. Mechanical evidence attribution alone never writes this field. */
|
|
549
|
+
semanticAcceptanceEvidence?: WorkSemanticAcceptanceEvidence[];
|
|
550
|
+
/** Explicit policy fence. This is not semantic completeness evidence. */
|
|
479
551
|
allowedPaths: string[];
|
|
480
552
|
forbiddenPaths: string[];
|
|
481
553
|
checks: string[];
|
|
@@ -495,13 +567,12 @@ export interface WorkContract {
|
|
|
495
567
|
continuationPrompt?: string;
|
|
496
568
|
worktreeRef?: string;
|
|
497
569
|
workerRef?: string;
|
|
498
|
-
/** Stable idempotency key when this Work was accepted via work_submit. */
|
|
499
570
|
requestId?: string;
|
|
500
|
-
/**
|
|
571
|
+
/** Typed execution metadata; it does not imply ExecutionJob creation. */
|
|
501
572
|
submittedOperation?: SubmittedWorkOperation;
|
|
502
573
|
}
|
|
503
574
|
|
|
504
|
-
/**
|
|
575
|
+
/** Typed execution metadata retained on execution-child WorkContracts. */
|
|
505
576
|
export interface SubmittedWorkOperation {
|
|
506
577
|
name: string;
|
|
507
578
|
semanticKey: string;
|
|
@@ -630,7 +701,7 @@ export interface CapabilityDescriptor {
|
|
|
630
701
|
group: CapabilityGroup;
|
|
631
702
|
operationClass: CapabilityOperationClass;
|
|
632
703
|
risk: CapabilityRisk;
|
|
633
|
-
exposedVia:
|
|
704
|
+
exposedVia: CapabilityExecutionSurface;
|
|
634
705
|
schemaExposure: CapabilitySchemaExposure;
|
|
635
706
|
summary: string;
|
|
636
707
|
}
|
|
@@ -639,6 +710,7 @@ export interface CapabilityGroupSummary {
|
|
|
639
710
|
group: CapabilityGroup;
|
|
640
711
|
capabilityCount: number;
|
|
641
712
|
domains: CapabilityDomain[];
|
|
713
|
+
executionSurfaces: CapabilityExecutionSurface[];
|
|
642
714
|
facadeTools: FacadeTool[];
|
|
643
715
|
operationClasses: CapabilityOperationClass[];
|
|
644
716
|
risks: CapabilityRisk[];
|
|
@@ -664,9 +736,14 @@ export interface ExecutionModeSelectionInput {
|
|
|
664
736
|
workspaceDirty?: boolean;
|
|
665
737
|
workspaceFingerprint?: string;
|
|
666
738
|
checkoutId?: string;
|
|
739
|
+
/** Canonical typed placement constraint; never inferred from objective text. */
|
|
740
|
+
workspacePlacement?: 'current' | 'isolated' | 'auto';
|
|
741
|
+
/** Admission fence that has precedence over explicit Direct routing. */
|
|
742
|
+
directMainProhibited?: boolean;
|
|
667
743
|
requiresInvestigation?: boolean;
|
|
668
744
|
requiresLongRunningChecks?: boolean;
|
|
669
745
|
requiresParallelism?: boolean;
|
|
746
|
+
explicitMode?: ExplicitTaskMode;
|
|
670
747
|
needsDependencies?: boolean;
|
|
671
748
|
requiresRecovery?: boolean;
|
|
672
749
|
/** True only when the user explicitly requested an agent/worker executor. Complexity alone must not enable workers. */
|
|
@@ -717,6 +794,7 @@ export function selectExecutionMode(input: ExecutionModeSelectionInput): Executi
|
|
|
717
794
|
requiresInvestigation: input.requiresInvestigation,
|
|
718
795
|
requiresLongRunningChecks: input.requiresLongRunningChecks,
|
|
719
796
|
requiresParallelism: input.requiresParallelism,
|
|
797
|
+
explicitMode: input.explicitMode,
|
|
720
798
|
needsDependencies: input.needsDependencies,
|
|
721
799
|
agentRequested: input.requiresWorker,
|
|
722
800
|
},
|
|
@@ -725,6 +803,8 @@ export function selectExecutionMode(input: ExecutionModeSelectionInput): Executi
|
|
|
725
803
|
dirty: input.workspaceDirty,
|
|
726
804
|
checkoutId: input.checkoutId,
|
|
727
805
|
fingerprint: input.workspaceFingerprint,
|
|
806
|
+
placement: input.workspacePlacement,
|
|
807
|
+
directMainProhibited: input.directMainProhibited,
|
|
728
808
|
},
|
|
729
809
|
policy: {
|
|
730
810
|
risk: input.risk,
|