@moretea-labs/forge 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +70 -7
- package/CHANGELOG.md +14 -0
- package/CLAUDE.md +17 -2
- package/CONTRIBUTING.md +3 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/adapters/chatgpt/browser-delivery-host.ts +7 -1
- package/adapters/chatgpt/browser-delivery-runtime.ts +529 -56
- package/adapters/chatgpt/controller-binding-store.ts +101 -22
- package/adapters/chatgpt/controller-round-host.ts +15 -25
- package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
- package/adapters/chatgpt/provider-delivery.ts +228 -1
- package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
- package/adapters/computer/chatgpt-extension-target.ts +463 -0
- package/adapters/computer/chatgpt-target-router.ts +103 -0
- package/adapters/computer/chrome-extension/background.js +385 -0
- package/adapters/computer/chrome-extension/content.js +378 -0
- package/adapters/computer/chrome-extension/core.js +24 -0
- package/adapters/computer/chrome-extension/manifest.json +30 -0
- package/adapters/computer/desktop-operator-discovery.ts +11 -31
- package/adapters/computer/interaction-target-authority.ts +142 -18
- package/adapters/mcp/auth.ts +0 -1
- package/adapters/mcp/instructions.ts +5 -4
- package/adapters/mcp/multi-repository.ts +3 -19
- package/adapters/mcp/oauth.ts +73 -0
- package/adapters/mcp/paths.ts +4 -1
- package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
- package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
- package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +411 -73
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
- package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
- package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +8 -42
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
- package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
- package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
- package/adapters/mcp/runtime-gateway/router.ts +18 -504
- package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
- package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
- package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
- package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
- package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +246 -0
- package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
- package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
- package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
- package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
- package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +263 -0
- package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
- package/adapters/mcp/server.ts +67 -23
- package/adapters/mcp/setup.ts +1 -3
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
- package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
- package/adapters/mcp/toolset-names.ts +5 -0
- package/adapters/mcp/toolset.ts +6 -5
- package/adapters/mcp/transports/http-observation.ts +365 -0
- package/adapters/mcp/transports/http.ts +154 -677
- package/adapters/mcp/transports/oauth-http.ts +322 -0
- package/adapters/mcp/transports/session-registry.ts +6 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
- package/assets/plugin-registry.v1.json +6 -4
- package/assets/reference-configs/agentic-development-flow.md +25 -0
- package/assets/reference-configs/global-working-rules.md +19 -0
- package/assets/skill-version.json +2 -2
- package/docs/architecture/CURRENT.md +111 -41
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
- package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
- package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
- package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +221 -0
- package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
- package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
- package/docs/architecture/domains/verification.md +1 -0
- package/docs/architecture/domains/workflow-engine.md +6 -0
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/forge-plugin-management.md +2 -2
- package/docs/operations/controller-performance-and-502.md +17 -0
- package/docs/operations/controller-reliability-runbook.md +2 -2
- package/docs/operations/features.md +1 -1
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +2 -0
- package/docs/operations/releasing.md +2 -0
- package/docs/operations/standalone-disaster-recovery.md +14 -6
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +25 -14
- package/packages/kernel/cognition/api/index.ts +6 -0
- package/packages/kernel/cognition/application/activation-service.ts +451 -0
- package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
- package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
- package/packages/kernel/cognition/application/memory-service.ts +64 -0
- package/packages/kernel/cognition/domain/learning.ts +106 -0
- package/packages/kernel/cognition/domain/memory.ts +254 -0
- package/packages/kernel/controller/api/index.ts +1 -0
- package/packages/kernel/controller/application/continuation-service.ts +281 -0
- package/packages/kernel/controller/application/controller-round-service.ts +12 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
- package/packages/kernel/controller/domain/controller-round.ts +4 -1
- package/packages/kernel/controller/domain/execution-quality.ts +3 -1
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +297 -71
- package/packages/kernel/controller/ports/controller-host.ts +2 -0
- package/packages/kernel/identity/api/index.ts +10 -0
- package/packages/kernel/identity/domain/activity-projection.ts +43 -0
- package/packages/kernel/identity/domain/capability-broker.ts +60 -0
- package/packages/kernel/identity/domain/grant.ts +72 -0
- package/packages/kernel/identity/domain/owned-resource.ts +116 -0
- package/packages/kernel/identity/domain/user-request.ts +93 -0
- package/packages/kernel/identity/infrastructure/activity-projection-store.ts +77 -0
- package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
- package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
- package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
- package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
- package/packages/kernel/scheduler/api/index.ts +0 -2
- package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
- package/packages/kernel/scheduler/application/settlement.ts +0 -15
- package/packages/kernel/scheduler/domain/schedule.ts +87 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +153 -133
- package/packages/kernel/work/api/index.ts +3 -2
- package/packages/kernel/work/application/work-service.ts +17 -42
- package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
- package/packages/kernel/work/domain/engineering-design.ts +10 -5
- package/packages/kernel/work/domain/engineering-profile.ts +8 -12
- package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
- package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
- package/packages/kernel/work/domain/implementation-review.ts +14 -331
- package/packages/kernel/work/domain/objective-graph.ts +119 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
- package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
- package/packages/kernel/work/domain/state-machine.ts +25 -63
- package/packages/kernel/work/domain/types.ts +57 -51
- package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
- package/packages/kernel/work/ports/work-contract-store.ts +5 -2
- package/packages/plugin-runtime/browser/session-authority.ts +2 -1
- package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
- package/packages/plugin-runtime/computer/conversation-target.ts +143 -0
- package/packages/plugin-runtime/computer/index.ts +2 -0
- package/packages/plugin-runtime/computer/target-authority.ts +26 -1
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
- package/packages/protocols/computer/contract.ts +27 -1
- package/scripts/activate-source-baseline.ts +7 -9
- package/scripts/canary-controller-semantic-wait.ts +12 -24
- package/scripts/check-mcp-compatibility.ts +48 -136
- package/scripts/check-runtime-architecture.mjs +622 -217
- package/scripts/forge-local-recovery-helper.mjs +93 -15
- package/scripts/lib/project-init-lib.sh +3 -0
- package/scripts/open-source-audit-allowlist.txt +1 -2
- package/scripts/run-bounded-command.mjs +5 -0
- package/scripts/run-governed-gate.ts +0 -1
- package/scripts/run-mobile-monitor-bridge.ts +0 -1
- package/scripts/smoke-control-plane-failure-domain.ts +94 -0
- package/scripts/smoke-mcp-http-runtime.ts +5 -0
- package/scripts/smoke-runtime-recovery.ts +12 -43
- package/scripts/smoke-schedule-engine.ts +23 -15
- package/scripts/smoke-unattended-transport-recovery.ts +223 -0
- package/scripts/smoke-user-request-continuation-restart.ts +232 -0
- package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +92 -0
- package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
- package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
- package/scripts/smoke-workflow-supervisor.ts +103 -0
- package/scripts/verify-forge-runtime.sh +2 -1
- package/src/cli/agent-jobs/executor-health.ts +11 -34
- package/src/cli/agent-jobs/integration.ts +18 -49
- package/src/cli/agent-jobs/job-manager.ts +7 -3
- package/src/cli/commands/brain-assistant.ts +27 -13
- package/src/cli/commands/brain.ts +13 -15
- package/src/cli/commands/chatgpt.ts +1 -163
- package/src/cli/commands/recovery.ts +135 -121
- package/src/cli/commands/runtime.ts +3 -3
- package/src/cli/commands/setup-profile.ts +8 -0
- package/src/cli/controller/check-runner.ts +13 -2
- package/src/cli/controller/completion-backlog.ts +3 -3
- package/src/cli/controller/completion-orchestrator.ts +4 -43
- package/src/cli/controller/completion-target.ts +3 -72
- package/src/cli/controller/context/source-materializer.ts +81 -100
- package/src/cli/controller/context-pack.ts +10 -8
- package/src/cli/controller/execution-completion.ts +4 -7
- package/src/cli/controller/execution-policy.ts +36 -153
- package/src/cli/controller/governance.ts +2 -3
- package/src/cli/controller/issue-store.ts +4 -99
- package/src/cli/controller/launch-agents.ts +59 -18
- package/src/cli/controller/operational-plan.ts +24 -51
- package/src/cli/controller/runtime-config.ts +5 -1
- package/src/cli/controller/stuck-state-migration.ts +2 -3
- package/src/cli/controller/systemd-user.ts +39 -1
- package/src/cli/editing/edit-session.ts +1 -7
- package/src/cli/local-bridge/console-automations.ts +18 -13
- package/src/cli/local-bridge/console-view-models.ts +3 -12
- package/src/cli/local-bridge/facade-api.ts +64 -191
- package/src/cli/local-bridge/server.ts +24 -147
- package/src/cli/local-bridge/types.ts +0 -1
- package/src/cli/mcp/oauth-client-retirement.ts +74 -0
- package/src/cli/repositories/command-executor.ts +29 -23
- package/src/cli/repositories/command-scope.ts +35 -16
- package/src/cli/repositories/controller-home.ts +48 -0
- package/src/cli/repositories/ephemeral-workspace.ts +20 -30
- package/src/cli/repositories/git-command-executor.ts +2 -2
- package/src/cli/repositories/registry.ts +77 -11
- package/src/cli/repositories/structured-git.ts +62 -2
- package/src/cli/repository/session-cache.ts +92 -6
- package/src/runtime/context/assistant-context.ts +20 -7
- package/src/runtime/context/assistant-work-context.ts +89 -27
- package/src/runtime/context/automatic-learning.ts +565 -0
- package/src/runtime/context/cognitive-attention.ts +173 -0
- package/src/runtime/context/cognitive-skill-canary.ts +158 -0
- package/src/runtime/context/context-closure.ts +46 -9
- package/src/runtime/context/context-pack-process.ts +103 -0
- package/src/runtime/context/context-plane.ts +1 -9
- package/src/runtime/context/direct-controller-learning.ts +298 -0
- package/src/runtime/context/semantic-navigation-contract.ts +9 -0
- package/src/runtime/context/semantic-navigation.ts +6 -34
- package/src/runtime/context/typescript-navigation-process.ts +145 -0
- package/src/runtime/context/typescript-navigation.ts +89 -3
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +212 -9
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
- package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
- package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
- package/src/runtime/control-plane/execution/session-store.ts +31 -1
- package/src/runtime/control-plane/execution/validation.ts +6 -8
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
- package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
- package/src/runtime/control-plane/execution/work-delivery-service.ts +497 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
- package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
- package/src/runtime/control-plane/execution/work-handle-authority.ts +188 -109
- package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
- package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
- package/src/runtime/control-plane/execution/work-operation-service.ts +43 -27
- package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
- package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +173 -186
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
- package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/capability-registry.ts +362 -37
- package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
- package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
- package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
- package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
- package/src/runtime/control-plane/facade/index.ts +0 -1
- package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
- package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
- package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
- package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
- package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
- package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
- package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
- package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
- package/src/runtime/control-plane/facade/types.ts +49 -108
- package/src/runtime/control-plane/facade/work-continuation.ts +8 -8
- package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
- package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +239 -112
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
- package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
- package/src/runtime/control-plane/governance/access-policy.ts +19 -2
- package/src/runtime/control-plane/governance/authorization.ts +20 -3
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -300
- package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
- package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
- package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
- package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
- package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
- package/src/runtime/control-plane/release-retention.ts +135 -47
- package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
- package/src/runtime/control-plane/runtime-cleanup.ts +290 -21
- package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
- package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
- package/src/runtime/diagnostics/incident-repair.ts +313 -146
- package/src/runtime/diagnostics/mcp-timing.ts +114 -0
- package/src/runtime/evidence/artifact-store.ts +158 -40
- package/src/runtime/evidence/evidence-store.ts +112 -8
- package/src/runtime/evidence/output-handle-index.ts +225 -0
- package/src/runtime/evidence/result-store.ts +158 -44
- package/src/runtime/execution/jobs/store.ts +3 -4
- package/src/runtime/execution/managed-workspace.ts +57 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
- package/src/runtime/execution/process-runtime/check-result.ts +105 -1
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
- package/src/runtime/execution/process-runtime/command-facade.ts +79 -27
- package/src/runtime/execution/process-runtime/gc.ts +15 -2
- package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
- package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
- package/src/runtime/execution/process-runtime/index.ts +3 -0
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
- package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
- package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
- package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
- package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
- package/src/runtime/execution/process-runtime/runtime.ts +35 -2
- package/src/runtime/execution/process-runtime/store.ts +30 -2
- package/src/runtime/execution/process-runtime/types.ts +6 -1
- package/src/runtime/execution/workers/executor.ts +2 -6
- package/src/runtime/platform/service-inventory.ts +130 -0
- package/src/runtime/platform/service-manager.ts +8 -0
- package/src/runtime/plugins/action-application.ts +85 -28
- package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
- package/src/runtime/plugins/browser-adapter.ts +757 -34
- package/src/runtime/plugins/browser-automation-service.ts +23 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
- package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
- package/src/runtime/plugins/browser-native-session-service.ts +63 -13
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime.ts +14 -1
- package/src/runtime/plugins/browser-session-authority.ts +2 -2
- package/src/runtime/plugins/browser-session-store.ts +46 -76
- package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
- package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +219 -0
- package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
- package/src/runtime/plugins/computer-registration.ts +222 -11
- package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
- package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
- package/src/runtime/plugins/external-adapter.ts +42 -6
- package/src/runtime/plugins/external-registration.ts +21 -1
- package/src/runtime/plugins/gmail-adapter.ts +23 -2
- package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
- package/src/runtime/plugins/google-shared.ts +14 -7
- package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
- package/src/runtime/plugins/ios-adapter.ts +1 -1
- package/src/runtime/plugins/lightweight-action.ts +208 -2
- package/src/runtime/plugins/local-system-adapter.ts +12 -2
- package/src/runtime/plugins/managed-process-adapter.ts +12 -5
- package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
- package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +602 -428
- package/src/runtime/plugins/types.ts +20 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
- package/src/runtime/projections/invalidation.ts +7 -3
- package/src/runtime/projections/materialized-view.ts +80 -36
- package/src/runtime/recovery/actions.ts +3 -3
- package/src/runtime/recovery/capability-action-application.ts +46 -45
- package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
- package/src/runtime/recovery/maintenance-executor.ts +374 -123
- package/src/runtime/recovery/store.ts +29 -11
- package/src/runtime/release/release-coordinator.ts +296 -0
- package/src/runtime/release/release-session.ts +716 -0
- package/src/runtime/release/release-state-migration.ts +25 -0
- package/src/runtime/resources/leases/store.ts +56 -25
- package/src/runtime/root/computer-composition.ts +191 -6
- package/src/runtime/root/controller-progression-composition.ts +192 -0
- package/src/runtime/root/controller-round-composition.ts +20 -1
- package/src/runtime/root/deployment-topology.ts +106 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/known-good-recovery.ts +184 -0
- package/src/runtime/root/local-bridge.ts +0 -1
- package/src/runtime/root/mcp-transport.ts +111 -18
- package/src/runtime/root/ownership.ts +261 -9
- package/src/runtime/root/package-connector-service.ts +105 -19
- package/src/runtime/root/package-runtime-release.ts +117 -18
- package/src/runtime/root/package-runtime-service.ts +17 -11
- package/src/runtime/root/release-execution-canary.ts +44 -12
- package/src/runtime/root/release-loader.ts +90 -8
- package/src/runtime/root/release-manifest.ts +80 -6
- package/src/runtime/root/release-materialize.ts +372 -28
- package/src/runtime/root/release-store.ts +395 -36
- package/src/runtime/root/runtime-lane.ts +191 -0
- package/src/runtime/root/runtime.ts +159 -27
- package/src/runtime/root/scheduled-controller-composition.ts +28 -3
- package/src/runtime/root/service-runner.ts +2 -2
- package/src/runtime/root/service.ts +36 -33
- package/src/runtime/root/status.ts +48 -0
- package/src/runtime/root/types.ts +32 -3
- package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
- package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
- package/src/runtime/root/write-fence.ts +50 -2
- package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
- package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
- package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
- package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
- package/src/runtime/shared/process-environment.ts +20 -9
- package/src/runtime/shared/response-budget.ts +1 -3
- package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
- package/src/runtime/standalone-recovery/core.ts +3702 -342
- package/src/runtime/standalone-recovery/entry.ts +469 -39
- package/src/runtime/standalone-recovery/installer.ts +262 -148
- package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
- package/src/runtime/standalone-recovery/operation-lock.ts +1 -1
- package/src/runtime/standalone-recovery/performance.ts +54 -16
- package/src/runtime/standalone-recovery/release.ts +53 -5
- package/src/runtime/standalone-recovery/service-labels.ts +5 -2
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
- package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +10 -3
- package/src/runtime/workflow/schedules/engine.ts +138 -172
- package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
- package/src/runtime/workflows/runtime.ts +15 -19
- package/src/testing/test-governance.ts +5 -1
- package/supervisor/chatgpt-conversation.ts +23 -0
- package/supervisor/client.ts +201 -0
- package/supervisor/control-plane.ts +868 -0
- package/supervisor/entry.ts +15 -0
- package/supervisor/forge-validators.ts +80 -0
- package/supervisor/index.ts +5 -0
- package/supervisor/native-browser-adapter.ts +786 -0
- package/supervisor/native-messaging/host.ts +39 -0
- package/supervisor/native-messaging/manifest.ts +26 -0
- package/supervisor/native-messaging/protocol.ts +27 -0
- package/supervisor/paths.ts +18 -0
- package/supervisor/protocol.ts +202 -0
- package/supervisor/server.ts +404 -0
- package/supervisor/store.ts +1451 -0
- package/supervisor/tsconfig.json +8 -0
- package/supervisor/types.ts +255 -0
- package/adapters/chatgpt/controller-host.ts +0 -119
- package/adapters/mcp/controller-round-compatibility.ts +0 -184
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
- package/packages/kernel/progression/api/index.ts +0 -2
- package/packages/kernel/progression/application/projector.ts +0 -211
- package/packages/kernel/progression/domain/types.ts +0 -116
- package/packages/kernel/progression/index.ts +0 -1
- package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
- package/packages/kernel/scheduler/domain/continuation.ts +0 -38
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
- package/packages/kernel/work/domain/admission-policy.ts +0 -34
- package/scripts/benchmark-background-check-overlap.ts +0 -228
- package/scripts/benchmark-computer-hotpath.ts +0 -255
- package/scripts/benchmark-controller-hotpath.ts +0 -212
- package/scripts/benchmark-controller-round2.ts +0 -191
- package/scripts/benchmark-ios-agent-device.ts +0 -511
- package/scripts/benchmark-mcp-host.sh +0 -117
- package/scripts/benchmark-mcp-transport.ts +0 -169
- package/scripts/benchmark-operational-memory-activation.ts +0 -235
- package/scripts/benchmark-operational-shadow.ts +0 -28
- package/scripts/benchmark-quality-harness.ts +0 -146
- package/scripts/benchmark-route-session-concurrency.ts +0 -915
- package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
- package/scripts/benchmark-thin-harness.ts +0 -251
- package/scripts/benchmark-typescript-navigation.ts +0 -186
- package/scripts/benchmark-work-efficiency.ts +0 -334
- package/scripts/build-controller-ui.ts +0 -28
- package/scripts/check-npm-release.sh +0 -32
- package/scripts/check-public-release-surface.sh +0 -19
- package/scripts/check-release-published.sh +0 -57
- package/scripts/check-release-readiness.sh +0 -37
- package/scripts/check-release-version.mjs +0 -74
- package/scripts/check-tarball-install-smoke.sh +0 -150
- package/scripts/package-source-archive.sh +0 -147
- package/scripts/public-release-files.txt +0 -39
- package/scripts/public-release.ts +0 -174
- package/scripts/publish-release-tarball.sh +0 -27
- package/scripts/route-nl-vs-ts-eval.ts +0 -679
- package/scripts/stage-runtime-release.ts +0 -44
- package/src/cli/controller/progress.ts +0 -656
- package/src/cli/controller/work-mode.ts +0 -181
- package/src/cli/local-bridge/console-assets.ts +0 -17
- package/src/cli/local-bridge/dashboard.ts +0 -17
- package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
- package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
- package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
- package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
- package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
- package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/styles.css +0 -28
- package/src/cli/local-bridge/frontend/src/types.ts +0 -15
- package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
- package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
- package/src/cli/local-bridge/ui-dist/app.css +0 -1
- package/src/cli/local-bridge/ui-dist/app.js +0 -11228
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
- package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
- package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
- package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
- package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
- package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
- package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
- package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
- package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
- package/src/runtime/control-plane/routing/index.ts +0 -1
- package/src/runtime/control-plane/routing/route-policy.ts +0 -401
- package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
|
@@ -18,13 +18,13 @@ export interface ControllerOperationalPlan {
|
|
|
18
18
|
reviewRequired: boolean;
|
|
19
19
|
};
|
|
20
20
|
validationStrategy: {
|
|
21
|
-
source: "
|
|
21
|
+
source: "declared-check-projection";
|
|
22
22
|
policy: "minimal" | "task-targeted" | "release-gate";
|
|
23
23
|
checks: string[];
|
|
24
24
|
reason: string;
|
|
25
25
|
};
|
|
26
26
|
recipeSystem: {
|
|
27
|
-
source: "
|
|
27
|
+
source: "legacy-recipe-projection";
|
|
28
28
|
recipes: Array<{
|
|
29
29
|
id: string;
|
|
30
30
|
label: string;
|
|
@@ -34,7 +34,7 @@ export interface ControllerOperationalPlan {
|
|
|
34
34
|
}>;
|
|
35
35
|
};
|
|
36
36
|
workerAbstraction: {
|
|
37
|
-
source: "
|
|
37
|
+
source: "execution-capability-projection";
|
|
38
38
|
workers: Array<{
|
|
39
39
|
id: string;
|
|
40
40
|
role: string;
|
|
@@ -107,11 +107,9 @@ export function buildControllerOperationalPlan(repoRoot: string, ledger: TaskLed
|
|
|
107
107
|
const dirty = changedFiles.length > 0;
|
|
108
108
|
const blocked = ledger.status.kind === "blocked" || ledger.status.kind === "needs_retry_decision";
|
|
109
109
|
const needsAttention = blocked || ledger.status.severity === "action" || ledger.status.severity === "warning" || dirty;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
? "task-targeted" as const
|
|
114
|
-
: "minimal" as const;
|
|
110
|
+
// Compatibility projection only. Declared checks are facts the model may use;
|
|
111
|
+
// this projection does not choose a validation method or release gate.
|
|
112
|
+
const policy = "minimal" as const;
|
|
115
113
|
|
|
116
114
|
return {
|
|
117
115
|
schemaVersion: OPERATIONAL_PLAN_SCHEMA_VERSION,
|
|
@@ -122,70 +120,45 @@ export function buildControllerOperationalPlan(repoRoot: string, ledger: TaskLed
|
|
|
122
120
|
"task-ledger",
|
|
123
121
|
"context-pack",
|
|
124
122
|
"diff-projection",
|
|
125
|
-
"
|
|
126
|
-
"recipe-
|
|
127
|
-
"
|
|
123
|
+
"declared-check-projection",
|
|
124
|
+
"legacy-recipe-projection",
|
|
125
|
+
"execution-capability-projection",
|
|
128
126
|
"gui-interaction-model",
|
|
129
127
|
"mcp-tool-schema-convergence",
|
|
130
128
|
"controller-home-runtime-storage-policy",
|
|
131
129
|
"branch-worktree-cleanup-policy",
|
|
132
130
|
"task-recovery-loop",
|
|
133
131
|
],
|
|
134
|
-
remainingDecisionPoints:
|
|
135
|
-
? ["Review and commit or discard current diff before dispatching unrelated work."]
|
|
136
|
-
: [],
|
|
132
|
+
remainingDecisionPoints: [],
|
|
137
133
|
diffProjection: {
|
|
138
134
|
source: "live-git-diff-projection",
|
|
139
135
|
dirty,
|
|
140
136
|
changedFiles,
|
|
141
137
|
diffStat: diffStat.ok ? diffStat.stdout.trim() : diffStat.error || diffStat.stderr.trim(),
|
|
142
|
-
|
|
138
|
+
// Legacy field retained for UI ABI only. Dirty state is a fact, not an
|
|
139
|
+
// automatic review lifecycle decision.
|
|
140
|
+
reviewRequired: false,
|
|
143
141
|
},
|
|
144
142
|
validationStrategy: {
|
|
145
|
-
source: "
|
|
143
|
+
source: "declared-check-projection",
|
|
146
144
|
policy,
|
|
147
145
|
checks,
|
|
148
|
-
reason:
|
|
149
|
-
? "
|
|
150
|
-
:
|
|
151
|
-
? "Use checks declared on the focused task or ready queue; do not expand validation scope by default."
|
|
152
|
-
: "No task-specific checks were found; keep validation minimal and explicit.",
|
|
146
|
+
reason: checks.length > 0
|
|
147
|
+
? "These checks are declared context only; the model decides whether, when, and how to validate."
|
|
148
|
+
: "No declared checks were found; Forge does not invent a validation strategy.",
|
|
153
149
|
},
|
|
154
150
|
recipeSystem: {
|
|
155
|
-
source: "
|
|
156
|
-
recipes: [
|
|
157
|
-
{
|
|
158
|
-
id: "scoped-direct-edit",
|
|
159
|
-
label: "Scoped direct edit",
|
|
160
|
-
when: "Known files and low/medium-risk bounded changes.",
|
|
161
|
-
steps: ["build context pack", "read exact ranges", "apply bounded patch", "review diff projection", "run task-targeted checks"],
|
|
162
|
-
requiredEvidence: ["contextPack", "diffProjection", "validationStrategy"],
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
id: "isolated-worker-run",
|
|
166
|
-
label: "Isolated worker run",
|
|
167
|
-
when: "Large, risky, or long-running implementation requiring agent execution.",
|
|
168
|
-
steps: ["derive worker scope", "dispatch isolated run", "inspect run diff", "integrate through edit session", "verify exact revision"],
|
|
169
|
-
requiredEvidence: ["run", "task diff", "integration session", "checks"],
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
id: "recovery-resume",
|
|
173
|
-
label: "Fresh-session recovery",
|
|
174
|
-
when: "A controller session restarts or loses conversation state.",
|
|
175
|
-
steps: ["load task ledger", "read operational plan", "select continuation state", "expand only needed context", "resume or ask for the one missing decision"],
|
|
176
|
-
requiredEvidence: ["taskLedger", "operationalPlan", "recoveryArtifacts"],
|
|
177
|
-
},
|
|
178
|
-
],
|
|
151
|
+
source: "legacy-recipe-projection",
|
|
152
|
+
recipes: [],
|
|
179
153
|
},
|
|
180
154
|
workerAbstraction: {
|
|
181
|
-
source: "
|
|
155
|
+
source: "execution-capability-projection",
|
|
182
156
|
workers: [
|
|
183
|
-
{ id: "
|
|
184
|
-
{ id: "
|
|
185
|
-
{ id: "
|
|
186
|
-
{ id: "github_copilot", role: "visible cloud coding session", preferredFor: ["remote reviewable work", "GitHub issue flow"], avoidWhen: ["secret-local context", "offline tasks"] },
|
|
157
|
+
{ id: "direct_capability", role: "direct domain capability execution", preferredFor: [], avoidWhen: [] },
|
|
158
|
+
{ id: "isolated_process", role: "isolated process/workspace capability when explicitly useful", preferredFor: [], avoidWhen: [] },
|
|
159
|
+
{ id: "external_provider", role: "optional external model/provider capability", preferredFor: [], avoidWhen: [] },
|
|
187
160
|
],
|
|
188
|
-
recommendedWorker:
|
|
161
|
+
recommendedWorker: "model_selected",
|
|
189
162
|
},
|
|
190
163
|
guiInteraction: {
|
|
191
164
|
source: "controller-console-interaction-model",
|
|
@@ -6,7 +6,11 @@ export { FORGE_VERSION } from '../../version';
|
|
|
6
6
|
/** Product identity exposed by every Forge runtime surface. */
|
|
7
7
|
export const FORGE_TOOL_SURFACE = FORGE_PRODUCT_ID;
|
|
8
8
|
/** Payload schema for MCP health/config records; this is not a product/component version. */
|
|
9
|
-
|
|
9
|
+
// 12: autonomous continuation is addressed by Workflow Supervisor task identity
|
|
10
|
+
// rather than optional Work identity. Tool names stay bounded; the served input
|
|
11
|
+
// schema changes and therefore must fence stale Connector schema snapshots.
|
|
12
|
+
// A served-schema change must be visible to connector freshness checks.
|
|
13
|
+
export const FORGE_MCP_SCHEMA_VERSION = 12;
|
|
10
14
|
|
|
11
15
|
type ToolSurfaceDefinition = {
|
|
12
16
|
name: string;
|
|
@@ -3,7 +3,7 @@ import { spawnSync } from 'child_process';
|
|
|
3
3
|
import { createHash } from 'crypto';
|
|
4
4
|
import { inspectCompletionBacklog, type CompletionBacklogItem } from './completion-backlog';
|
|
5
5
|
import { getIssue, listIssues, updateIssue, updateTask } from './issue-store';
|
|
6
|
-
import { completionEvidenceComplete,
|
|
6
|
+
import { completionEvidenceComplete, verificationEvidencePassed } from './execution-policy';
|
|
7
7
|
import type { CompletionReceipt, ControllerIssue, ControllerTask } from './types';
|
|
8
8
|
import { resolveCompletionTargetBranch } from './completion-target';
|
|
9
9
|
import { legacyIssueAuthorityRetired } from './legacy-issue-cutover';
|
|
@@ -174,8 +174,7 @@ function reachable(repoRoot: string, revision: string, branch: string): boolean
|
|
|
174
174
|
|
|
175
175
|
function historicalCompletionReceipt(repoRoot: string, issue: ControllerIssue, task: ControllerTask): CompletionReceipt | undefined {
|
|
176
176
|
if (!task.verification) return undefined;
|
|
177
|
-
const
|
|
178
|
-
const outcome = verificationEvidencePassed(task, task.verification, policy);
|
|
177
|
+
const outcome = verificationEvidencePassed(task, task.verification);
|
|
179
178
|
if (!outcome.ok) return undefined;
|
|
180
179
|
const target = currentTarget(repoRoot);
|
|
181
180
|
if (!target) return undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawnSync, type SpawnSyncReturns } from 'child_process';
|
|
2
|
-
import { mkdirSync, renameSync, writeFileSync } from 'fs';
|
|
2
|
+
import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from 'fs';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { dirname, join } from 'path';
|
|
5
5
|
|
|
@@ -108,3 +108,41 @@ export function systemdUserServicePid(unitName: string, env: NodeJS.ProcessEnv =
|
|
|
108
108
|
const pid = Number(result.stdout.trim());
|
|
109
109
|
return Number.isInteger(pid) && pid > 0 ? pid : undefined;
|
|
110
110
|
}
|
|
111
|
+
|
|
112
|
+
export interface ExactSystemdUserUnitRetirementResult {
|
|
113
|
+
unitName: string;
|
|
114
|
+
unitPath: string;
|
|
115
|
+
serviceWasPresent: boolean;
|
|
116
|
+
unitFileWasPresent: boolean;
|
|
117
|
+
absentAfter: boolean;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function systemdUnitLoaded(unitName: string, env: NodeJS.ProcessEnv): boolean {
|
|
121
|
+
const result = commandSucceeded('systemctl', ['--user', 'show', '--property', 'LoadState', '--value', systemdUserUnitName(unitName)], env);
|
|
122
|
+
return result.status === 0 && result.stdout.trim() !== '' && result.stdout.trim() !== 'not-found';
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function retireSystemdUserUnitExact(
|
|
126
|
+
input: { unitName: string; env?: NodeJS.ProcessEnv },
|
|
127
|
+
): ExactSystemdUserUnitRetirementResult {
|
|
128
|
+
const env = input.env ?? process.env;
|
|
129
|
+
const unitName = systemdUserUnitName(input.unitName);
|
|
130
|
+
const unitPath = systemdUserUnitPath(unitName, env);
|
|
131
|
+
const serviceWasPresent = systemdUnitLoaded(unitName, env);
|
|
132
|
+
const unitFileWasPresent = existsSync(unitPath);
|
|
133
|
+
if (serviceWasPresent || unitFileWasPresent) {
|
|
134
|
+
const disabled = commandSucceeded('systemctl', ['--user', 'disable', '--now', unitName], env);
|
|
135
|
+
const detail = `${disabled.stderr ?? ''}\n${disabled.stdout ?? ''}`;
|
|
136
|
+
if (disabled.status !== 0 && !/not loaded|not found|does not exist|not enabled|no files found/i.test(detail)) {
|
|
137
|
+
throw new Error(`SYSTEMD_USER_EXACT_RETIRE_FAILED: ${unitName}: ${detail.trim()}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
rmSync(unitPath, { force: true });
|
|
141
|
+
const reload = commandSucceeded('systemctl', ['--user', 'daemon-reload'], env);
|
|
142
|
+
if (reload.status !== 0) {
|
|
143
|
+
throw new Error(`SYSTEMD_USER_EXACT_RETIRE_RELOAD_FAILED: ${unitName}: ${(reload.stderr || reload.stdout || '').trim()}`);
|
|
144
|
+
}
|
|
145
|
+
const absentAfter = !systemdUnitLoaded(unitName, env) && !existsSync(unitPath);
|
|
146
|
+
if (!absentAfter) throw new Error(`SYSTEMD_USER_EXACT_RETIRE_VERIFY_FAILED: ${unitName}`);
|
|
147
|
+
return { unitName, unitPath, serviceWasPresent, unitFileWasPresent, absentAfter };
|
|
148
|
+
}
|
|
@@ -86,7 +86,6 @@ export interface EditSessionBinding {
|
|
|
86
86
|
checkoutId?: string;
|
|
87
87
|
principalId?: string;
|
|
88
88
|
controllerInstanceId?: string;
|
|
89
|
-
routeDecisionFingerprint?: string;
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
export interface EditSession {
|
|
@@ -99,7 +98,6 @@ export interface EditSession {
|
|
|
99
98
|
checkoutId?: string;
|
|
100
99
|
principalId?: string;
|
|
101
100
|
controllerInstanceId?: string;
|
|
102
|
-
routeDecisionFingerprint?: string;
|
|
103
101
|
workspaceFingerprint?: string;
|
|
104
102
|
assurance?: EditSessionAssurance;
|
|
105
103
|
purpose: string;
|
|
@@ -293,8 +291,7 @@ export function assertEditSessionDurableBinding(
|
|
|
293
291
|
session.workId
|
|
294
292
|
|| session.repoId
|
|
295
293
|
|| session.checkoutId
|
|
296
|
-
|| session.principalId
|
|
297
|
-
|| session.routeDecisionFingerprint,
|
|
294
|
+
|| session.principalId,
|
|
298
295
|
);
|
|
299
296
|
if (options.requireBoundIdentity === true && hasDurableIdentity && !binding) {
|
|
300
297
|
throw new Error('EDIT_SESSION_IDENTITY_MISMATCH: binding');
|
|
@@ -305,7 +302,6 @@ export function assertEditSessionDurableBinding(
|
|
|
305
302
|
['repoId', session.repoId, binding.repoId],
|
|
306
303
|
['checkoutId', session.checkoutId, binding.checkoutId],
|
|
307
304
|
['principalId', session.principalId, binding.principalId],
|
|
308
|
-
['routeDecisionFingerprint', session.routeDecisionFingerprint, binding.routeDecisionFingerprint],
|
|
309
305
|
];
|
|
310
306
|
for (const [field, expected, observed] of pairs) {
|
|
311
307
|
if (expected && expected !== observed) throw new Error(`EDIT_SESSION_IDENTITY_MISMATCH: ${String(field)}`);
|
|
@@ -404,7 +400,6 @@ function normalizeStoredSession(value: Partial<EditSession> & { sessionId: strin
|
|
|
404
400
|
checkoutId: value.checkoutId,
|
|
405
401
|
principalId: value.principalId,
|
|
406
402
|
controllerInstanceId: value.controllerInstanceId,
|
|
407
|
-
routeDecisionFingerprint: value.routeDecisionFingerprint,
|
|
408
403
|
workspaceFingerprint: value.workspaceFingerprint,
|
|
409
404
|
assurance: value.assurance,
|
|
410
405
|
purpose: value.purpose ?? 'Direct edit',
|
|
@@ -1206,7 +1201,6 @@ export function beginEditSession(repoRoot: string, input: {
|
|
|
1206
1201
|
checkoutId: input.binding?.checkoutId?.trim() || undefined,
|
|
1207
1202
|
principalId: input.binding?.principalId?.trim() || undefined,
|
|
1208
1203
|
controllerInstanceId: input.binding?.controllerInstanceId?.trim() || undefined,
|
|
1209
|
-
routeDecisionFingerprint: input.binding?.routeDecisionFingerprint?.trim() || undefined,
|
|
1210
1204
|
workspaceFingerprint: workspaceFingerprint(repoRoot),
|
|
1211
1205
|
purpose,
|
|
1212
1206
|
status: 'open',
|
|
@@ -204,32 +204,37 @@ function scheduleNeedsAttention(schedule: RepositorySchedule): boolean {
|
|
|
204
204
|
return Boolean(schedule.pausedReason && /(?:fail|error|auth|login|block|attention|maximum)/i.test(schedule.pausedReason));
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
function scheduleStatus(schedule: RepositorySchedule,
|
|
208
|
-
if (
|
|
209
|
-
if (
|
|
207
|
+
function scheduleStatus(schedule: RepositorySchedule, workState?: string): ConsoleAutomationView['status'] {
|
|
208
|
+
if (workState === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return 'completed';
|
|
209
|
+
if (workState === 'cancelled') return 'paused';
|
|
210
210
|
if (schedule.enabled) return scheduleNeedsAttention(schedule) ? 'attention' : 'enabled';
|
|
211
211
|
return scheduleNeedsAttention(schedule) ? 'attention' : 'paused';
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
function workBinding(controllerHome: string, repoId: string, schedule: RepositorySchedule): { id?: string; objective?: string;
|
|
214
|
+
function workBinding(controllerHome: string, repoId: string, schedule: RepositorySchedule): { id?: string; objective?: string; state?: string; failed?: boolean } {
|
|
215
215
|
const value = schedule.action.arguments?.work_id;
|
|
216
216
|
const workId = typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
217
217
|
if (!workId) return {};
|
|
218
218
|
const work = getWorkContract({ controllerHome, repoId }, workId);
|
|
219
|
-
return {
|
|
219
|
+
return {
|
|
220
|
+
id: workId,
|
|
221
|
+
objective: work?.objective,
|
|
222
|
+
state: work?.semanticState,
|
|
223
|
+
failed: work ? work.evidenceState === 'failed' || work.phaseEvidence[work.phase].state === 'failed' : false,
|
|
224
|
+
};
|
|
220
225
|
}
|
|
221
226
|
|
|
222
|
-
function displayPauseReason(schedule: RepositorySchedule,
|
|
223
|
-
if (
|
|
227
|
+
function displayPauseReason(schedule: RepositorySchedule, workState?: string): string | undefined {
|
|
228
|
+
if (workState === 'completed' || /is terminal \(completed\)/i.test(schedule.pausedReason ?? '')) return '关联工作已经完成,这个自动任务不会再触发。';
|
|
224
229
|
if (schedule.lastObservationStatus === 'auth_required') return '目标登录状态已失效,完成重新登录后即可恢复。';
|
|
225
230
|
if (schedule.consecutiveFailures >= schedule.policy.maxFailures || /maximum consecutive failures/i.test(schedule.pausedReason ?? '')) return '连续执行失败达到上限,已自动暂停。修复问题后可以恢复任务。';
|
|
226
231
|
if (/canary completed/i.test(schedule.pausedReason ?? '')) return '验收任务已经完成。';
|
|
227
232
|
return schedule.pausedReason;
|
|
228
233
|
}
|
|
229
234
|
|
|
230
|
-
function attentionMessage(schedule: RepositorySchedule,
|
|
235
|
+
function attentionMessage(schedule: RepositorySchedule, workFailed = false): string | undefined {
|
|
231
236
|
if (schedule.lastObservationStatus === 'auth_required') return '需要重新登录后才能继续自动执行。';
|
|
232
|
-
if (
|
|
237
|
+
if (workFailed) return '关联工作执行失败,需要检查失败原因后再恢复。';
|
|
233
238
|
if (schedule.consecutiveFailures >= schedule.policy.maxFailures) return '连续执行失败达到上限,任务已自动暂停。';
|
|
234
239
|
return undefined;
|
|
235
240
|
}
|
|
@@ -256,7 +261,7 @@ export function listConsoleAutomations(controllerHome: string, repositories: Rep
|
|
|
256
261
|
repositoryName: repository.displayName,
|
|
257
262
|
name: schedule.name,
|
|
258
263
|
summary: scheduleSummary(mode),
|
|
259
|
-
status: scheduleStatus(schedule, work.
|
|
264
|
+
status: scheduleStatus(schedule, work.state),
|
|
260
265
|
schedule: triggerLabel(schedule),
|
|
261
266
|
timezone: schedule.trigger.timezone,
|
|
262
267
|
delivery: scheduleDelivery(schedule, mode),
|
|
@@ -274,10 +279,10 @@ export function listConsoleAutomations(controllerHome: string, repositories: Rep
|
|
|
274
279
|
lastRunAt: last?.updatedAt ?? schedule.lastTriggeredAt,
|
|
275
280
|
lastResult: observationResult(schedule, last),
|
|
276
281
|
nextRunHint: nextScheduleHint(schedule),
|
|
277
|
-
pausedReason: displayPauseReason(schedule, work.
|
|
278
|
-
attentionMessage: attentionMessage(schedule, work.
|
|
282
|
+
pausedReason: displayPauseReason(schedule, work.state),
|
|
283
|
+
attentionMessage: attentionMessage(schedule, work.failed),
|
|
279
284
|
history: occurrenceHistory(occurrences),
|
|
280
|
-
actions: scheduleStatus(schedule, work.
|
|
285
|
+
actions: scheduleStatus(schedule, work.state) === 'completed' ? [] : schedule.enabled ? ['run', 'pause'] : ['resume'],
|
|
281
286
|
});
|
|
282
287
|
}
|
|
283
288
|
|
|
@@ -12,14 +12,6 @@ export interface SuggestedActionViewModel {
|
|
|
12
12
|
primary?: boolean;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export interface ModePreviewViewModel {
|
|
16
|
-
mode: 'direct_control' | 'goal_workloop' | 'handoff_only';
|
|
17
|
-
label: string;
|
|
18
|
-
explanation: string;
|
|
19
|
-
createWorkContract: boolean;
|
|
20
|
-
createHandoff: boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
15
|
export interface VerificationViewModel {
|
|
24
16
|
label: string;
|
|
25
17
|
tone: PlainStatusTone;
|
|
@@ -104,8 +96,6 @@ export interface WorkSummaryViewModel {
|
|
|
104
96
|
updatedAt: string;
|
|
105
97
|
title: string;
|
|
106
98
|
objective: string;
|
|
107
|
-
modeLabel: string;
|
|
108
|
-
mode: ModePreviewViewModel['mode'];
|
|
109
99
|
accessMode: 'request' | 'full_access';
|
|
110
100
|
accessModeLabel: string;
|
|
111
101
|
statusLabel: string;
|
|
@@ -127,7 +117,9 @@ export interface WorkSummaryViewModel {
|
|
|
127
117
|
primaryActionLabel?: string;
|
|
128
118
|
advanced?: {
|
|
129
119
|
workId: string;
|
|
130
|
-
|
|
120
|
+
state: string;
|
|
121
|
+
dispatchState: string;
|
|
122
|
+
evidenceState: string;
|
|
131
123
|
checkIds: string[];
|
|
132
124
|
handoffRefs: string[];
|
|
133
125
|
};
|
|
@@ -280,7 +272,6 @@ export interface CommandCenterViewModel {
|
|
|
280
272
|
/** Assistant/plugin capabilities available to the controller (not the primary workflow). */
|
|
281
273
|
pluginSummary: PluginSummaryViewModel;
|
|
282
274
|
plugins: PluginCardViewModel[];
|
|
283
|
-
modePreviewDefault: ModePreviewViewModel;
|
|
284
275
|
warnings: string[];
|
|
285
276
|
/** Setup guidance when no usable repository is selected. */
|
|
286
277
|
setupGuide?: {
|