@moretea-labs/forge 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +70 -7
- package/CHANGELOG.md +14 -0
- package/CLAUDE.md +17 -2
- package/CONTRIBUTING.md +3 -2
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/adapters/chatgpt/browser-delivery-host.ts +7 -1
- package/adapters/chatgpt/browser-delivery-runtime.ts +529 -56
- package/adapters/chatgpt/controller-binding-store.ts +101 -22
- package/adapters/chatgpt/controller-round-host.ts +15 -25
- package/adapters/chatgpt/controller-round-settlement-store.ts +58 -4
- package/adapters/chatgpt/provider-delivery.ts +228 -1
- package/adapters/chatgpt/work-conversation-binding-store.ts +79 -53
- package/adapters/computer/chatgpt-extension-target.ts +463 -0
- package/adapters/computer/chatgpt-target-router.ts +103 -0
- package/adapters/computer/chrome-extension/background.js +385 -0
- package/adapters/computer/chrome-extension/content.js +378 -0
- package/adapters/computer/chrome-extension/core.js +24 -0
- package/adapters/computer/chrome-extension/manifest.json +30 -0
- package/adapters/computer/desktop-operator-discovery.ts +11 -31
- package/adapters/computer/interaction-target-authority.ts +142 -18
- package/adapters/mcp/auth.ts +0 -1
- package/adapters/mcp/instructions.ts +5 -4
- package/adapters/mcp/multi-repository.ts +3 -19
- package/adapters/mcp/oauth.ts +73 -0
- package/adapters/mcp/paths.ts +4 -1
- package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +87 -0
- package/adapters/mcp/runtime-gateway/bounded-result-runtime.ts +62 -0
- package/adapters/mcp/runtime-gateway/cognition-settlement.ts +201 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +411 -73
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +91 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +20 -5
- package/adapters/mcp/runtime-gateway/core-capability-adapter.ts +258 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +10 -27
- package/adapters/mcp/runtime-gateway/engineering-tool-contract.ts +15 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +8 -42
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +2 -1
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +117 -45
- package/adapters/mcp/runtime-gateway/process-tools.ts +190 -22
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +16 -4
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +69 -52
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +4 -35
- package/adapters/mcp/runtime-gateway/result-adapter.ts +10 -4
- package/adapters/mcp/runtime-gateway/router.ts +18 -504
- package/adapters/mcp/runtime-gateway/routing-policy.ts +499 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +14 -65
- package/adapters/mcp/runtime-gateway/runtime-readiness-observation.ts +218 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +113 -173
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +15 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +1 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +20 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +358 -266
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +136 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +261 -3122
- package/adapters/mcp/runtime-gateway/work-controller-operations.ts +257 -0
- package/adapters/mcp/runtime-gateway/work-detail-projection.ts +60 -0
- package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +246 -0
- package/adapters/mcp/runtime-gateway/work-learning-operations.ts +145 -0
- package/adapters/mcp/runtime-gateway/work-list-projection.ts +38 -0
- package/adapters/mcp/runtime-gateway/work-plan-operations.ts +382 -0
- package/adapters/mcp/runtime-gateway/work-repair-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/work-requirement-operations.ts +148 -0
- package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +263 -0
- package/adapters/mcp/runtime-gateway/work-workflow-operations.ts +113 -0
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +156 -0
- package/adapters/mcp/server.ts +67 -23
- package/adapters/mcp/setup.ts +1 -3
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +44 -170
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +4 -9
- package/adapters/mcp/tool-mapping/repository-tools.ts +133 -142
- package/adapters/mcp/toolset-names.ts +5 -0
- package/adapters/mcp/toolset.ts +6 -5
- package/adapters/mcp/transports/http-observation.ts +365 -0
- package/adapters/mcp/transports/http.ts +154 -677
- package/adapters/mcp/transports/oauth-http.ts +322 -0
- package/adapters/mcp/transports/session-registry.ts +6 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +89 -5
- package/assets/plugin-registry.v1.json +6 -4
- package/assets/reference-configs/agentic-development-flow.md +25 -0
- package/assets/reference-configs/global-working-rules.md +19 -0
- package/assets/skill-version.json +2 -2
- package/docs/architecture/CURRENT.md +111 -41
- package/docs/architecture/decisions/20260803-release-identity-binding-and-exit-policy.md +14 -5
- package/docs/architecture/decisions/20260823-immediate-controller-relay.md +6 -3
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +2 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +19 -4
- package/docs/architecture/decisions/20260916-workflow-supervisor-authority.md +249 -0
- package/docs/architecture/decisions/20260917-cognitive-memory-foundation.md +82 -0
- package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +221 -0
- package/docs/architecture/decisions/20260919-autonomous-work-liveness.md +62 -0
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +72 -0
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +237 -0
- package/docs/architecture/decisions/20261005-forge-v3-desktop-client-boundary.md +77 -0
- package/docs/architecture/domains/verification.md +1 -0
- package/docs/architecture/domains/workflow-engine.md +6 -0
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +1 -1
- package/docs/forge-plugin-management.md +2 -2
- package/docs/operations/controller-performance-and-502.md +17 -0
- package/docs/operations/controller-reliability-runbook.md +2 -2
- package/docs/operations/features.md +1 -1
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +2 -0
- package/docs/operations/releasing.md +2 -0
- package/docs/operations/standalone-disaster-recovery.md +14 -6
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +25 -14
- package/packages/kernel/cognition/api/index.ts +6 -0
- package/packages/kernel/cognition/application/activation-service.ts +451 -0
- package/packages/kernel/cognition/application/consolidation-service.ts +185 -0
- package/packages/kernel/cognition/application/legacy-experience-adapter.ts +38 -0
- package/packages/kernel/cognition/application/memory-service.ts +64 -0
- package/packages/kernel/cognition/domain/learning.ts +106 -0
- package/packages/kernel/cognition/domain/memory.ts +254 -0
- package/packages/kernel/controller/api/index.ts +1 -0
- package/packages/kernel/controller/application/continuation-service.ts +281 -0
- package/packages/kernel/controller/application/controller-round-service.ts +12 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +242 -21
- package/packages/kernel/controller/domain/controller-round.ts +4 -1
- package/packages/kernel/controller/domain/execution-quality.ts +3 -1
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +689 -103
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +297 -71
- package/packages/kernel/controller/ports/controller-host.ts +2 -0
- package/packages/kernel/identity/api/index.ts +10 -0
- package/packages/kernel/identity/domain/activity-projection.ts +43 -0
- package/packages/kernel/identity/domain/capability-broker.ts +60 -0
- package/packages/kernel/identity/domain/grant.ts +72 -0
- package/packages/kernel/identity/domain/owned-resource.ts +116 -0
- package/packages/kernel/identity/domain/user-request.ts +93 -0
- package/packages/kernel/identity/infrastructure/activity-projection-store.ts +77 -0
- package/packages/kernel/identity/infrastructure/capability-broker.ts +81 -0
- package/packages/kernel/identity/infrastructure/grant-store.ts +284 -0
- package/packages/kernel/identity/infrastructure/owned-resource-store.ts +259 -0
- package/packages/kernel/identity/infrastructure/user-request-store.ts +182 -0
- package/packages/kernel/scheduler/api/index.ts +0 -2
- package/packages/kernel/scheduler/application/schedule-service.ts +3 -0
- package/packages/kernel/scheduler/application/settlement.ts +0 -15
- package/packages/kernel/scheduler/domain/schedule.ts +87 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +153 -133
- package/packages/kernel/work/api/index.ts +3 -2
- package/packages/kernel/work/application/work-service.ts +17 -42
- package/packages/kernel/work/domain/current-task-lineage.ts +104 -0
- package/packages/kernel/work/domain/engineering-design.ts +10 -5
- package/packages/kernel/work/domain/engineering-profile.ts +8 -12
- package/packages/kernel/work/domain/evaluation-promotion-receipt.ts +186 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +19 -26
- package/packages/kernel/work/domain/execution-snapshot.ts +0 -31
- package/packages/kernel/work/domain/implementation-review.ts +14 -331
- package/packages/kernel/work/domain/objective-graph.ts +119 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +23 -1
- package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
- package/packages/kernel/work/domain/state-machine.ts +25 -63
- package/packages/kernel/work/domain/types.ts +57 -51
- package/packages/kernel/work/infrastructure/work-contract-store.ts +819 -728
- package/packages/kernel/work/ports/work-contract-store.ts +5 -2
- package/packages/plugin-runtime/browser/session-authority.ts +2 -1
- package/packages/plugin-runtime/computer/chatgpt-identity.ts +24 -0
- package/packages/plugin-runtime/computer/conversation-target.ts +143 -0
- package/packages/plugin-runtime/computer/index.ts +2 -0
- package/packages/plugin-runtime/computer/target-authority.ts +26 -1
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +142 -18
- package/packages/protocols/computer/contract.ts +27 -1
- package/scripts/activate-source-baseline.ts +7 -9
- package/scripts/canary-controller-semantic-wait.ts +12 -24
- package/scripts/check-mcp-compatibility.ts +48 -136
- package/scripts/check-runtime-architecture.mjs +622 -217
- package/scripts/forge-local-recovery-helper.mjs +93 -15
- package/scripts/lib/project-init-lib.sh +3 -0
- package/scripts/open-source-audit-allowlist.txt +1 -2
- package/scripts/run-bounded-command.mjs +5 -0
- package/scripts/run-governed-gate.ts +0 -1
- package/scripts/run-mobile-monitor-bridge.ts +0 -1
- package/scripts/smoke-control-plane-failure-domain.ts +94 -0
- package/scripts/smoke-mcp-http-runtime.ts +5 -0
- package/scripts/smoke-runtime-recovery.ts +12 -43
- package/scripts/smoke-schedule-engine.ts +23 -15
- package/scripts/smoke-unattended-transport-recovery.ts +223 -0
- package/scripts/smoke-user-request-continuation-restart.ts +232 -0
- package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +92 -0
- package/scripts/smoke-workflow-supervisor-process-restart.ts +276 -0
- package/scripts/smoke-workflow-supervisor-restart-recovery.ts +150 -0
- package/scripts/smoke-workflow-supervisor.ts +103 -0
- package/scripts/verify-forge-runtime.sh +2 -1
- package/src/cli/agent-jobs/executor-health.ts +11 -34
- package/src/cli/agent-jobs/integration.ts +18 -49
- package/src/cli/agent-jobs/job-manager.ts +7 -3
- package/src/cli/commands/brain-assistant.ts +27 -13
- package/src/cli/commands/brain.ts +13 -15
- package/src/cli/commands/chatgpt.ts +1 -163
- package/src/cli/commands/recovery.ts +135 -121
- package/src/cli/commands/runtime.ts +3 -3
- package/src/cli/commands/setup-profile.ts +8 -0
- package/src/cli/controller/check-runner.ts +13 -2
- package/src/cli/controller/completion-backlog.ts +3 -3
- package/src/cli/controller/completion-orchestrator.ts +4 -43
- package/src/cli/controller/completion-target.ts +3 -72
- package/src/cli/controller/context/source-materializer.ts +81 -100
- package/src/cli/controller/context-pack.ts +10 -8
- package/src/cli/controller/execution-completion.ts +4 -7
- package/src/cli/controller/execution-policy.ts +36 -153
- package/src/cli/controller/governance.ts +2 -3
- package/src/cli/controller/issue-store.ts +4 -99
- package/src/cli/controller/launch-agents.ts +59 -18
- package/src/cli/controller/operational-plan.ts +24 -51
- package/src/cli/controller/runtime-config.ts +5 -1
- package/src/cli/controller/stuck-state-migration.ts +2 -3
- package/src/cli/controller/systemd-user.ts +39 -1
- package/src/cli/editing/edit-session.ts +1 -7
- package/src/cli/local-bridge/console-automations.ts +18 -13
- package/src/cli/local-bridge/console-view-models.ts +3 -12
- package/src/cli/local-bridge/facade-api.ts +64 -191
- package/src/cli/local-bridge/server.ts +24 -147
- package/src/cli/local-bridge/types.ts +0 -1
- package/src/cli/mcp/oauth-client-retirement.ts +74 -0
- package/src/cli/repositories/command-executor.ts +29 -23
- package/src/cli/repositories/command-scope.ts +35 -16
- package/src/cli/repositories/controller-home.ts +48 -0
- package/src/cli/repositories/ephemeral-workspace.ts +20 -30
- package/src/cli/repositories/git-command-executor.ts +2 -2
- package/src/cli/repositories/registry.ts +77 -11
- package/src/cli/repositories/structured-git.ts +62 -2
- package/src/cli/repository/session-cache.ts +92 -6
- package/src/runtime/context/assistant-context.ts +20 -7
- package/src/runtime/context/assistant-work-context.ts +89 -27
- package/src/runtime/context/automatic-learning.ts +565 -0
- package/src/runtime/context/cognitive-attention.ts +173 -0
- package/src/runtime/context/cognitive-skill-canary.ts +158 -0
- package/src/runtime/context/context-closure.ts +46 -9
- package/src/runtime/context/context-pack-process.ts +103 -0
- package/src/runtime/context/context-plane.ts +1 -9
- package/src/runtime/context/direct-controller-learning.ts +298 -0
- package/src/runtime/context/semantic-navigation-contract.ts +9 -0
- package/src/runtime/context/semantic-navigation.ts +6 -34
- package/src/runtime/context/typescript-navigation-process.ts +145 -0
- package/src/runtime/context/typescript-navigation.ts +89 -3
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +212 -9
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +9 -47
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +34 -4
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +29 -20
- package/src/runtime/control-plane/execution/execution-identity.ts +23 -3
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +7 -30
- package/src/runtime/control-plane/execution/retained-work-resume.ts +206 -199
- package/src/runtime/control-plane/execution/session-store.ts +31 -1
- package/src/runtime/control-plane/execution/validation.ts +6 -8
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +13 -42
- package/src/runtime/control-plane/execution/work-check-evidence.ts +137 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +30 -85
- package/src/runtime/control-plane/execution/work-delivery-service.ts +497 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +12 -50
- package/src/runtime/control-plane/execution/work-execution-support.ts +50 -149
- package/src/runtime/control-plane/execution/work-handle-authority.ts +188 -109
- package/src/runtime/control-plane/execution/work-handle-store.ts +19 -43
- package/src/runtime/control-plane/execution/work-head-settlement.ts +53 -20
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +52 -29
- package/src/runtime/control-plane/execution/work-operation-service.ts +43 -27
- package/src/runtime/control-plane/execution/work-preparation-service.ts +126 -266
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +2 -3
- package/src/runtime/control-plane/execution/work-revision-diff.ts +39 -0
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +173 -186
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +28 -84
- package/src/runtime/control-plane/execution/work-verification-service.ts +406 -50
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/capability-registry.ts +362 -37
- package/src/runtime/control-plane/facade/check-normalization.ts +3 -9
- package/src/runtime/control-plane/facade/codex-delegation.ts +10 -11
- package/src/runtime/control-plane/facade/controller-connection.ts +135 -0
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +1 -20
- package/src/runtime/control-plane/facade/goal-workloop.ts +281 -1753
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +12 -25
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +256 -52
- package/src/runtime/control-plane/facade/index.ts +0 -1
- package/src/runtime/control-plane/facade/operation-digest.ts +12 -15
- package/src/runtime/control-plane/facade/plan-contract-store.ts +451 -991
- package/src/runtime/control-plane/facade/policy-gate.ts +0 -23
- package/src/runtime/control-plane/facade/repository-work-admission.ts +12 -22
- package/src/runtime/control-plane/facade/requirement-authority.ts +102 -199
- package/src/runtime/control-plane/facade/requirement-board.ts +3 -3
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +51 -14
- package/src/runtime/control-plane/facade/self-healing-loop.ts +18 -53
- package/src/runtime/control-plane/facade/suggested-actions.ts +15 -18
- package/src/runtime/control-plane/facade/types.ts +49 -108
- package/src/runtime/control-plane/facade/work-continuation.ts +8 -8
- package/src/runtime/control-plane/generated-cache-retention.ts +97 -1
- package/src/runtime/control-plane/global-scheduler/autonomous-continuation.ts +248 -0
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +239 -112
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +2 -1
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +66 -40
- package/src/runtime/control-plane/global-scheduler/wake-signal.ts +42 -2
- package/src/runtime/control-plane/governance/access-policy.ts +19 -2
- package/src/runtime/control-plane/governance/authorization.ts +20 -3
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +63 -300
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +28 -300
- package/src/runtime/control-plane/launcher/local-conversation-controller.ts +238 -0
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +5 -2
- package/src/runtime/control-plane/launcher/thin-launcher.ts +96 -240
- package/src/runtime/control-plane/persistence/cognition-store.ts +820 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +162 -29
- package/src/runtime/control-plane/persistence/requirement-store.ts +216 -74
- package/src/runtime/control-plane/persistence/sqlite-store.ts +113 -6
- package/src/runtime/control-plane/release-retention.ts +135 -47
- package/src/runtime/control-plane/repository-namespace-retention.ts +2 -2
- package/src/runtime/control-plane/runtime-cleanup.ts +290 -21
- package/src/runtime/control-plane/workspace/project-onboarding.ts +80 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +19 -5
- package/src/runtime/control-plane/workspace/workspace-store.ts +169 -0
- package/src/runtime/diagnostics/incident-repair.ts +313 -146
- package/src/runtime/diagnostics/mcp-timing.ts +114 -0
- package/src/runtime/evidence/artifact-store.ts +158 -40
- package/src/runtime/evidence/evidence-store.ts +112 -8
- package/src/runtime/evidence/output-handle-index.ts +225 -0
- package/src/runtime/evidence/result-store.ts +158 -44
- package/src/runtime/execution/jobs/store.ts +3 -4
- package/src/runtime/execution/managed-workspace.ts +57 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +2 -2
- package/src/runtime/execution/process-runtime/check-result.ts +105 -1
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +18 -8
- package/src/runtime/execution/process-runtime/command-facade.ts +79 -27
- package/src/runtime/execution/process-runtime/gc.ts +15 -2
- package/src/runtime/execution/process-runtime/handle-index.ts +176 -0
- package/src/runtime/execution/process-runtime/host-command-lane.ts +139 -0
- package/src/runtime/execution/process-runtime/index.ts +3 -0
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +251 -72
- package/src/runtime/execution/process-runtime/persisted-check.ts +3 -3
- package/src/runtime/execution/process-runtime/process-runner-entry.ts +47 -5
- package/src/runtime/execution/process-runtime/process-scope.ts +160 -0
- package/src/runtime/execution/process-runtime/resource-claims.ts +65 -61
- package/src/runtime/execution/process-runtime/runtime.ts +35 -2
- package/src/runtime/execution/process-runtime/store.ts +30 -2
- package/src/runtime/execution/process-runtime/types.ts +6 -1
- package/src/runtime/execution/workers/executor.ts +2 -6
- package/src/runtime/platform/service-inventory.ts +130 -0
- package/src/runtime/platform/service-manager.ts +8 -0
- package/src/runtime/plugins/action-application.ts +85 -28
- package/src/runtime/plugins/app-store-connect-adapter.ts +38 -14
- package/src/runtime/plugins/browser-adapter.ts +757 -34
- package/src/runtime/plugins/browser-automation-service.ts +23 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +321 -29
- package/src/runtime/plugins/browser-manifest-surface.ts +45 -11
- package/src/runtime/plugins/browser-native-session-service.ts +63 -13
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime.ts +14 -1
- package/src/runtime/plugins/browser-session-authority.ts +2 -2
- package/src/runtime/plugins/browser-session-store.ts +46 -76
- package/src/runtime/plugins/capability-authorization-grants.ts +258 -62
- package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +219 -0
- package/src/runtime/plugins/computer-chatgpt-macos-target.ts +891 -0
- package/src/runtime/plugins/computer-registration.ts +222 -11
- package/src/runtime/plugins/desktop-operator-external-policy.ts +36 -4
- package/src/runtime/plugins/desktop-operator-registration.ts +12 -4
- package/src/runtime/plugins/external-adapter.ts +42 -6
- package/src/runtime/plugins/external-registration.ts +21 -1
- package/src/runtime/plugins/gmail-adapter.ts +23 -2
- package/src/runtime/plugins/google-calendar-adapter.ts +2 -2
- package/src/runtime/plugins/google-shared.ts +14 -7
- package/src/runtime/plugins/google-tasks-adapter.ts +2 -2
- package/src/runtime/plugins/ios-adapter.ts +1 -1
- package/src/runtime/plugins/lightweight-action.ts +208 -2
- package/src/runtime/plugins/local-system-adapter.ts +12 -2
- package/src/runtime/plugins/managed-process-adapter.ts +12 -5
- package/src/runtime/plugins/plugin-action-sidecar.ts +17 -13
- package/src/runtime/plugins/plugin-management-adapter.ts +1 -1
- package/src/runtime/plugins/store.ts +602 -428
- package/src/runtime/plugins/types.ts +20 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +16 -0
- package/src/runtime/projections/invalidation.ts +7 -3
- package/src/runtime/projections/materialized-view.ts +80 -36
- package/src/runtime/recovery/actions.ts +3 -3
- package/src/runtime/recovery/capability-action-application.ts +46 -45
- package/src/runtime/recovery/lifecycle-inventory.ts +29 -29
- package/src/runtime/recovery/maintenance-executor.ts +374 -123
- package/src/runtime/recovery/store.ts +29 -11
- package/src/runtime/release/release-coordinator.ts +296 -0
- package/src/runtime/release/release-session.ts +716 -0
- package/src/runtime/release/release-state-migration.ts +25 -0
- package/src/runtime/resources/leases/store.ts +56 -25
- package/src/runtime/root/computer-composition.ts +191 -6
- package/src/runtime/root/controller-progression-composition.ts +192 -0
- package/src/runtime/root/controller-round-composition.ts +20 -1
- package/src/runtime/root/deployment-topology.ts +106 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/known-good-recovery.ts +184 -0
- package/src/runtime/root/local-bridge.ts +0 -1
- package/src/runtime/root/mcp-transport.ts +111 -18
- package/src/runtime/root/ownership.ts +261 -9
- package/src/runtime/root/package-connector-service.ts +105 -19
- package/src/runtime/root/package-runtime-release.ts +117 -18
- package/src/runtime/root/package-runtime-service.ts +17 -11
- package/src/runtime/root/release-execution-canary.ts +44 -12
- package/src/runtime/root/release-loader.ts +90 -8
- package/src/runtime/root/release-manifest.ts +80 -6
- package/src/runtime/root/release-materialize.ts +372 -28
- package/src/runtime/root/release-store.ts +395 -36
- package/src/runtime/root/runtime-lane.ts +191 -0
- package/src/runtime/root/runtime.ts +159 -27
- package/src/runtime/root/scheduled-controller-composition.ts +28 -3
- package/src/runtime/root/service-runner.ts +2 -2
- package/src/runtime/root/service.ts +36 -33
- package/src/runtime/root/status.ts +48 -0
- package/src/runtime/root/types.ts +32 -3
- package/src/runtime/root/workflow-supervisor-composition.ts +493 -0
- package/src/runtime/root/workflow-supervisor-runtime.ts +209 -0
- package/src/runtime/root/write-fence.ts +50 -2
- package/src/runtime/safe-tooling/google-credential-store.ts +76 -21
- package/src/runtime/safe-tooling/google-oauth-broker.ts +25 -7
- package/src/runtime/safe-tooling/workspace-auth.ts +1 -1
- package/src/runtime/shared/bounded-child-supervisor.ts +9 -1
- package/src/runtime/shared/process-environment.ts +20 -9
- package/src/runtime/shared/response-budget.ts +1 -3
- package/src/runtime/standalone-recovery/controller-home-migration.ts +16 -24
- package/src/runtime/standalone-recovery/core.ts +3702 -342
- package/src/runtime/standalone-recovery/entry.ts +469 -39
- package/src/runtime/standalone-recovery/installer.ts +262 -148
- package/src/runtime/standalone-recovery/mcp-server.ts +29 -193
- package/src/runtime/standalone-recovery/operation-lock.ts +1 -1
- package/src/runtime/standalone-recovery/performance.ts +54 -16
- package/src/runtime/standalone-recovery/release.ts +53 -5
- package/src/runtime/standalone-recovery/service-labels.ts +5 -2
- package/src/runtime/standalone-recovery/watchdog-heartbeat.ts +5 -2
- package/src/runtime/workflow/schedules/browser-probe.ts +17 -6
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +10 -3
- package/src/runtime/workflow/schedules/engine.ts +138 -172
- package/src/runtime/workflow/schedules/work-continuation.ts +44 -5
- package/src/runtime/workflows/runtime.ts +15 -19
- package/src/testing/test-governance.ts +5 -1
- package/supervisor/chatgpt-conversation.ts +23 -0
- package/supervisor/client.ts +201 -0
- package/supervisor/control-plane.ts +868 -0
- package/supervisor/entry.ts +15 -0
- package/supervisor/forge-validators.ts +80 -0
- package/supervisor/index.ts +5 -0
- package/supervisor/native-browser-adapter.ts +786 -0
- package/supervisor/native-messaging/host.ts +39 -0
- package/supervisor/native-messaging/manifest.ts +26 -0
- package/supervisor/native-messaging/protocol.ts +27 -0
- package/supervisor/paths.ts +18 -0
- package/supervisor/protocol.ts +202 -0
- package/supervisor/server.ts +404 -0
- package/supervisor/store.ts +1451 -0
- package/supervisor/tsconfig.json +8 -0
- package/supervisor/types.ts +255 -0
- package/adapters/chatgpt/controller-host.ts +0 -119
- package/adapters/mcp/controller-round-compatibility.ts +0 -184
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +0 -292
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +0 -502
- package/packages/kernel/progression/api/index.ts +0 -2
- package/packages/kernel/progression/application/projector.ts +0 -211
- package/packages/kernel/progression/domain/types.ts +0 -116
- package/packages/kernel/progression/index.ts +0 -1
- package/packages/kernel/scheduler/application/continuation-service.ts +0 -212
- package/packages/kernel/scheduler/domain/continuation.ts +0 -38
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +0 -38
- package/packages/kernel/work/domain/admission-policy.ts +0 -34
- package/scripts/benchmark-background-check-overlap.ts +0 -228
- package/scripts/benchmark-computer-hotpath.ts +0 -255
- package/scripts/benchmark-controller-hotpath.ts +0 -212
- package/scripts/benchmark-controller-round2.ts +0 -191
- package/scripts/benchmark-ios-agent-device.ts +0 -511
- package/scripts/benchmark-mcp-host.sh +0 -117
- package/scripts/benchmark-mcp-transport.ts +0 -169
- package/scripts/benchmark-operational-memory-activation.ts +0 -235
- package/scripts/benchmark-operational-shadow.ts +0 -28
- package/scripts/benchmark-quality-harness.ts +0 -146
- package/scripts/benchmark-route-session-concurrency.ts +0 -915
- package/scripts/benchmark-thin-harness-gateway-ab.ts +0 -632
- package/scripts/benchmark-thin-harness-mcp-e2e.ts +0 -498
- package/scripts/benchmark-thin-harness.ts +0 -251
- package/scripts/benchmark-typescript-navigation.ts +0 -186
- package/scripts/benchmark-work-efficiency.ts +0 -334
- package/scripts/build-controller-ui.ts +0 -28
- package/scripts/check-npm-release.sh +0 -32
- package/scripts/check-public-release-surface.sh +0 -19
- package/scripts/check-release-published.sh +0 -57
- package/scripts/check-release-readiness.sh +0 -37
- package/scripts/check-release-version.mjs +0 -74
- package/scripts/check-tarball-install-smoke.sh +0 -150
- package/scripts/package-source-archive.sh +0 -147
- package/scripts/public-release-files.txt +0 -39
- package/scripts/public-release.ts +0 -174
- package/scripts/publish-release-tarball.sh +0 -27
- package/scripts/route-nl-vs-ts-eval.ts +0 -679
- package/scripts/stage-runtime-release.ts +0 -44
- package/src/cli/controller/progress.ts +0 -656
- package/src/cli/controller/work-mode.ts +0 -181
- package/src/cli/local-bridge/console-assets.ts +0 -17
- package/src/cli/local-bridge/dashboard.ts +0 -17
- package/src/cli/local-bridge/frontend/src/App.tsx +0 -10
- package/src/cli/local-bridge/frontend/src/components/Button.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +0 -3
- package/src/cli/local-bridge/frontend/src/design/icons.tsx +0 -11
- package/src/cli/local-bridge/frontend/src/design/tokens.css +0 -8
- package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +0 -153
- package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +0 -37
- package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +0 -183
- package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/lib/api.ts +0 -30
- package/src/cli/local-bridge/frontend/src/lib/format.ts +0 -4
- package/src/cli/local-bridge/frontend/src/lib/routes.ts +0 -7
- package/src/cli/local-bridge/frontend/src/main.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +0 -1
- package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +0 -2
- package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +0 -4
- package/src/cli/local-bridge/frontend/src/styles.css +0 -28
- package/src/cli/local-bridge/frontend/src/types.ts +0 -15
- package/src/cli/local-bridge/frontend/src/vite-env.d.ts +0 -1
- package/src/cli/local-bridge/frontend/vite.config.ts +0 -27
- package/src/cli/local-bridge/ui-dist/app.css +0 -1
- package/src/cli/local-bridge/ui-dist/app.js +0 -11228
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +0 -169
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +0 -85
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +0 -655
- package/src/runtime/control-plane/execution/work-finalization-service.ts +0 -2850
- package/src/runtime/control-plane/execution/work-path-scope.ts +0 -37
- package/src/runtime/control-plane/execution/work-task-receipt.ts +0 -468
- package/src/runtime/control-plane/facade/controller-round-relay.ts +0 -3
- package/src/runtime/control-plane/facade/work-admission-policy.ts +0 -142
- package/src/runtime/control-plane/facade/work-implementation-review.ts +0 -2
- package/src/runtime/control-plane/facade/work-state-machine.ts +0 -2
- package/src/runtime/control-plane/facade/work-task-projection.ts +0 -66
- package/src/runtime/control-plane/routing/index.ts +0 -1
- package/src/runtime/control-plane/routing/route-policy.ts +0 -401
- package/src/runtime/control-plane/routing/workspace-admission.ts +0 -70
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GitHubStatus } from "../github/contracts";
|
|
2
2
|
import type { McpAgentRunnerName } from "../mcp/types";
|
|
3
|
-
import type { ControllerAgent
|
|
3
|
+
import type { ControllerAgent } from "../controller/types";
|
|
4
4
|
|
|
5
5
|
export type ExecutorHealthStatus =
|
|
6
6
|
| "available"
|
|
@@ -24,7 +24,6 @@ export type ExecutorHealthReason =
|
|
|
24
24
|
| "unknown";
|
|
25
25
|
|
|
26
26
|
export type ExecutorHealthFallback =
|
|
27
|
-
| "use_direct_edit"
|
|
28
27
|
| "enable_local_agent"
|
|
29
28
|
| "run_gh_auth_login"
|
|
30
29
|
| "enable_copilot_coding_agent"
|
|
@@ -64,19 +63,6 @@ function normalize(value: string): string {
|
|
|
64
63
|
return value.toLowerCase().replace(/\s+/g, " ").trim();
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
function isSmallScopedTask(task: Pick<ControllerTask, "allowedPaths"> | undefined): boolean {
|
|
68
|
-
return Array.isArray(task?.allowedPaths) && task.allowedPaths.length > 0 && task.allowedPaths.length <= 3;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function localUnavailableMessage(base: string, task?: Pick<ControllerTask, "allowedPaths">): string {
|
|
72
|
-
if (!isSmallScopedTask(task)) return base;
|
|
73
|
-
return `${base} Use begin_edit_session/apply_patch/run_check instead of retrying unavailable agents.`;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function localUnavailableFallback(task?: Pick<ControllerTask, "allowedPaths">): ExecutorHealthFallback {
|
|
77
|
-
return isSmallScopedTask(task) ? "use_direct_edit" : "enable_local_agent";
|
|
78
|
-
}
|
|
79
|
-
|
|
80
66
|
export function executorHealthCode(health: ExecutorHealth): string {
|
|
81
67
|
switch (health.reason) {
|
|
82
68
|
case "local_dev_runner_disabled":
|
|
@@ -104,19 +90,15 @@ export function executorHealthCode(health: ExecutorHealth): string {
|
|
|
104
90
|
export function classifyLocalExecutorHealth(
|
|
105
91
|
agent: Exclude<ControllerAgent, "github-copilot">,
|
|
106
92
|
policy: LocalExecutorPolicy,
|
|
107
|
-
task?: Pick<ControllerTask, "allowedPaths">,
|
|
108
93
|
): ExecutorHealth | null {
|
|
109
94
|
if (!policy.agentRunner) {
|
|
110
95
|
return {
|
|
111
96
|
agent,
|
|
112
97
|
status: "disabled",
|
|
113
98
|
reason: "local_dev_runner_disabled",
|
|
114
|
-
message:
|
|
115
|
-
`Local ${agent} runs are disabled because the dev runner is not enabled.`,
|
|
116
|
-
task,
|
|
117
|
-
),
|
|
99
|
+
message: `Local ${agent} runs are disabled because the dev runner is not enabled.`,
|
|
118
100
|
remediation: "Enable the controller dev runner before dispatching local Codex or Claude runs.",
|
|
119
|
-
fallback:
|
|
101
|
+
fallback: "enable_local_agent",
|
|
120
102
|
};
|
|
121
103
|
}
|
|
122
104
|
if (!policy.allowedAgents.includes(agent)) {
|
|
@@ -124,12 +106,9 @@ export function classifyLocalExecutorHealth(
|
|
|
124
106
|
agent,
|
|
125
107
|
status: "disabled",
|
|
126
108
|
reason: "local_agent_disabled",
|
|
127
|
-
message:
|
|
128
|
-
`Local agent is not enabled: ${agent}.`,
|
|
129
|
-
task,
|
|
130
|
-
),
|
|
109
|
+
message: `Local agent is not enabled: ${agent}.`,
|
|
131
110
|
remediation: `Enable ${agent} in the controller dev-runner allowedAgents list before retrying.`,
|
|
132
|
-
fallback:
|
|
111
|
+
fallback: "enable_local_agent",
|
|
133
112
|
};
|
|
134
113
|
}
|
|
135
114
|
return null;
|
|
@@ -137,7 +116,6 @@ export function classifyLocalExecutorHealth(
|
|
|
137
116
|
|
|
138
117
|
export function classifyGitHubCopilotPreflight(
|
|
139
118
|
status: GitHubStatus,
|
|
140
|
-
task?: Pick<ControllerTask, "allowedPaths">,
|
|
141
119
|
): ExecutorHealth | null {
|
|
142
120
|
if (!status.available) {
|
|
143
121
|
return {
|
|
@@ -146,7 +124,7 @@ export function classifyGitHubCopilotPreflight(
|
|
|
146
124
|
reason: "github_cli_unavailable",
|
|
147
125
|
message: "GitHub CLI (gh) is unavailable, so GitHub Copilot cloud sessions cannot start.",
|
|
148
126
|
remediation: "Install GitHub CLI and ensure `gh --version` works in this repository environment.",
|
|
149
|
-
fallback:
|
|
127
|
+
fallback: "install_github_cli",
|
|
150
128
|
};
|
|
151
129
|
}
|
|
152
130
|
if (!status.authenticated) {
|
|
@@ -175,7 +153,6 @@ export function classifyGitHubCopilotPreflight(
|
|
|
175
153
|
export function classifyExecutorFailure(
|
|
176
154
|
agent: ControllerAgent,
|
|
177
155
|
message: string,
|
|
178
|
-
task?: Pick<ControllerTask, "allowedPaths">,
|
|
179
156
|
): ExecutorHealth | null {
|
|
180
157
|
const text = normalize(message);
|
|
181
158
|
if (!text) return null;
|
|
@@ -193,7 +170,7 @@ export function classifyExecutorFailure(
|
|
|
193
170
|
reason: "copilot_cca_disabled",
|
|
194
171
|
message: "GitHub Copilot cloud agent is not enabled for this account or repository.",
|
|
195
172
|
remediation: "Enable GitHub Copilot Coding Agent / CCA for the account and repository before retrying cloud sessions.",
|
|
196
|
-
fallback:
|
|
173
|
+
fallback: "enable_copilot_coding_agent",
|
|
197
174
|
};
|
|
198
175
|
}
|
|
199
176
|
return null;
|
|
@@ -207,7 +184,7 @@ export function classifyExecutorFailure(
|
|
|
207
184
|
reason: "codex_insufficient_balance",
|
|
208
185
|
message: "Codex execution is unavailable because the configured API account has insufficient balance.",
|
|
209
186
|
remediation: "Restore API balance or correct the Codex base URL/account configuration before retrying.",
|
|
210
|
-
fallback:
|
|
187
|
+
fallback: "fix_codex_api_balance_or_base_url",
|
|
211
188
|
};
|
|
212
189
|
}
|
|
213
190
|
if (text.includes("usage limit")) {
|
|
@@ -217,7 +194,7 @@ export function classifyExecutorFailure(
|
|
|
217
194
|
reason: "codex_usage_limit",
|
|
218
195
|
message: "Codex execution is unavailable because the configured account has reached a usage limit.",
|
|
219
196
|
remediation: "Raise or wait for the Codex usage limit, or correct the API account/base URL configuration before retrying.",
|
|
220
|
-
fallback:
|
|
197
|
+
fallback: "fix_codex_api_balance_or_base_url",
|
|
221
198
|
};
|
|
222
199
|
}
|
|
223
200
|
if (
|
|
@@ -232,7 +209,7 @@ export function classifyExecutorFailure(
|
|
|
232
209
|
reason: "codex_auth_required",
|
|
233
210
|
message: "Codex execution is unavailable because authentication is required.",
|
|
234
211
|
remediation: "Authenticate the Codex executor or correct the configured credentials/base URL before retrying.",
|
|
235
|
-
fallback:
|
|
212
|
+
fallback: "authenticate_codex",
|
|
236
213
|
};
|
|
237
214
|
}
|
|
238
215
|
}
|
|
@@ -243,7 +220,7 @@ export function classifyExecutorFailure(
|
|
|
243
220
|
reason: "unknown",
|
|
244
221
|
message: `${agent} execution failed for an unclassified reason.`,
|
|
245
222
|
remediation: "Inspect the bounded run error and executor configuration before retrying.",
|
|
246
|
-
fallback:
|
|
223
|
+
fallback: "inspect_executor_configuration",
|
|
247
224
|
};
|
|
248
225
|
}
|
|
249
226
|
|
|
@@ -13,14 +13,11 @@ import {
|
|
|
13
13
|
type EditOperation,
|
|
14
14
|
type EditSession,
|
|
15
15
|
} from "../editing/edit-session";
|
|
16
|
-
import { getIssue, updateTask } from "../controller/issue-store";
|
|
17
|
-
import { readTaskRunEvidence } from "../controller/run-evidence";
|
|
18
|
-
import { resolveEffectiveTaskState } from "../controller/task-status-resolver";
|
|
19
16
|
import { resolveMcpPath } from "../mcp/paths";
|
|
20
17
|
import type { McpPolicy } from "../mcp/types";
|
|
21
18
|
import { getAgentJob, markAgentJobClosure, markAgentJobIntegrated, markAgentJobIntegrationReview } from "./job-manager";
|
|
22
19
|
import type { AgentJobMeta, AgentJobPreservationReason } from "./types";
|
|
23
|
-
import { assertRuntimeMayWriteOrThrow } from "../../runtime/root/write-fence";
|
|
20
|
+
import { assertRuntimeMayWriteOrThrow, isRuntimeWriteFenceError } from "../../runtime/root/write-fence";
|
|
24
21
|
|
|
25
22
|
type IntegrationChangeOutcome = "changed" | "already_integrated";
|
|
26
23
|
|
|
@@ -509,21 +506,22 @@ export function integrateAgentJob(
|
|
|
509
506
|
?? undefined;
|
|
510
507
|
assertRuntimeMayWriteOrThrow('integrate_worktree', controllerHome);
|
|
511
508
|
} catch (error) {
|
|
512
|
-
if (error
|
|
509
|
+
if (isRuntimeWriteFenceError(error)) throw error;
|
|
513
510
|
/* unbound legacy single-runtime */
|
|
514
511
|
}
|
|
515
512
|
let run: AgentJobMeta = getAgentJob(repoRoot, runId);
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
run.executionMode === "worktree"
|
|
523
|
-
|
|
524
|
-
|
|
513
|
+
// Integration is an explicit decision, so an ordinary Run must have finished
|
|
514
|
+
// successfully. One state is still integrable: a Run that a previous explicit
|
|
515
|
+
// integration attempt preserved after a failure or a required review. That
|
|
516
|
+
// preserved worktree is the durable product of that attempt, and refusing to
|
|
517
|
+
// retry it stranded the isolated work with no path forward.
|
|
518
|
+
const preservedIntegrationRetry = run.status === "waiting_for_user"
|
|
519
|
+
&& run.executionMode === "worktree"
|
|
520
|
+
&& (run.closureState === "preserved" || run.closureState === "integration_blocked")
|
|
521
|
+
&& Boolean(run.autoIntegrationError || run.preservationReason);
|
|
522
|
+
if (run.status !== "succeeded" && !preservedIntegrationRetry)
|
|
525
523
|
throw new Error(
|
|
526
|
-
`only succeeded
|
|
524
|
+
`only a succeeded Run (or an explicitly preserved integration attempt) can be integrated (current: ${run.status})`,
|
|
527
525
|
);
|
|
528
526
|
if (run.provider !== "local")
|
|
529
527
|
throw new Error(
|
|
@@ -531,7 +529,7 @@ export function integrateAgentJob(
|
|
|
531
529
|
);
|
|
532
530
|
if (run.worktree === repoRoot || !run.branch || !run.baseRevision)
|
|
533
531
|
throw new Error(
|
|
534
|
-
"Run did not use an isolated Git worktree; its changes are already in the
|
|
532
|
+
"Run did not use an isolated Git worktree; its changes are already in the dispatch checkout",
|
|
535
533
|
);
|
|
536
534
|
if (run.integratedSessionId) {
|
|
537
535
|
const existing = getEditSession(repoRoot, run.integratedSessionId);
|
|
@@ -548,28 +546,12 @@ export function integrateAgentJob(
|
|
|
548
546
|
|
|
549
547
|
run = markAgentJobClosure(repoRoot, runId, {
|
|
550
548
|
state: "integrating",
|
|
551
|
-
details: "Applying isolated Run changes to the
|
|
549
|
+
details: "Applying isolated Run changes to the dispatch checkout.",
|
|
552
550
|
});
|
|
553
551
|
|
|
554
|
-
const issue = getIssue(repoRoot, run.issueId);
|
|
555
|
-
const task = issue.tasks.find((entry) => entry.id === run.taskId);
|
|
556
|
-
if (!task) throw new Error(`task not found: ${run.issueId}/${run.taskId}`);
|
|
557
|
-
const state = resolveEffectiveTaskState({ issue, task, runs: readTaskRunEvidence(repoRoot, task) });
|
|
558
|
-
const taskReady = autoFinalizing || userResolvableIntegration
|
|
559
|
-
? !state.terminal && !state.inactive && ["review", "ready_to_integrate", "integrating", "integration_blocked", "integrated", "verified"].includes(task.status)
|
|
560
|
-
: !state.terminal && !state.inactive && ["review", "ready_to_integrate", "integrating", "integration_blocked", "verified"].includes(state.effectiveStatus);
|
|
561
|
-
if (!taskReady)
|
|
562
|
-
throw new Error(
|
|
563
|
-
`task must be active and in review before integration (declared: ${task.status}, effective: ${state.effectiveStatus})`,
|
|
564
|
-
);
|
|
565
|
-
|
|
566
552
|
const initialPlan = planFromCurrentWorkspace(repoRoot, run, policy);
|
|
567
553
|
if (initialPlan.changedPaths.length === 0)
|
|
568
554
|
throw new Error("task worktree has no changes to integrate");
|
|
569
|
-
if (initialPlan.changedPaths.length > 25)
|
|
570
|
-
throw new Error(
|
|
571
|
-
`task changed ${initialPlan.changedPaths.length} files; split or manually integrate work larger than 25 files`,
|
|
572
|
-
);
|
|
573
555
|
if (initialPlan.conflicts.length > 0)
|
|
574
556
|
throw createReviewPacket(
|
|
575
557
|
repoRoot,
|
|
@@ -578,10 +560,9 @@ export function integrateAgentJob(
|
|
|
578
560
|
initialPlan.conflicts,
|
|
579
561
|
);
|
|
580
562
|
|
|
581
|
-
const allowedPaths =
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
: initialPlan.changedPaths;
|
|
563
|
+
const allowedPaths = run.allowedPaths?.length
|
|
564
|
+
? run.allowedPaths
|
|
565
|
+
: initialPlan.changedPaths;
|
|
585
566
|
if (initialPlan.operations.length === 0) {
|
|
586
567
|
const applied = finalizeAlreadyIntegratedSession(
|
|
587
568
|
repoRoot,
|
|
@@ -592,10 +573,6 @@ export function integrateAgentJob(
|
|
|
592
573
|
changedFiles: initialPlan.changedPaths,
|
|
593
574
|
changeOutcome: "already_integrated",
|
|
594
575
|
});
|
|
595
|
-
updateTask(repoRoot, run.issueId, run.taskId, {
|
|
596
|
-
status: "integrated",
|
|
597
|
-
note: `${runId} already matched the main workspace and was recorded through edit session ${applied.sessionId}; run focused checks and record verification before acceptance.`,
|
|
598
|
-
});
|
|
599
576
|
return {
|
|
600
577
|
session: applied,
|
|
601
578
|
changedPaths: initialPlan.changedPaths,
|
|
@@ -644,10 +621,6 @@ export function integrateAgentJob(
|
|
|
644
621
|
changedFiles: refreshedPlan.changedPaths,
|
|
645
622
|
changeOutcome: "already_integrated",
|
|
646
623
|
});
|
|
647
|
-
updateTask(repoRoot, run.issueId, run.taskId, {
|
|
648
|
-
status: "integrated",
|
|
649
|
-
note: `${runId} became already integrated while finish was running and was recorded through edit session ${alreadyIntegrated.sessionId}; run focused checks and record verification before acceptance.`,
|
|
650
|
-
});
|
|
651
624
|
return {
|
|
652
625
|
session: alreadyIntegrated,
|
|
653
626
|
changedPaths: refreshedPlan.changedPaths,
|
|
@@ -683,10 +656,6 @@ export function integrateAgentJob(
|
|
|
683
656
|
changedFiles: initialPlan.operations.map((operation) => operation.path),
|
|
684
657
|
changeOutcome: "changed",
|
|
685
658
|
});
|
|
686
|
-
updateTask(repoRoot, run.issueId, run.taskId, {
|
|
687
|
-
status: "integrated",
|
|
688
|
-
note: `${runId} integrated through edit session ${applied.sessionId}; run focused checks and record verification before acceptance.`,
|
|
689
|
-
});
|
|
690
659
|
return {
|
|
691
660
|
session: applied,
|
|
692
661
|
changedPaths: initialPlan.operations.map((operation) => operation.path),
|
|
@@ -122,7 +122,10 @@ function normalizeAgentMeta(
|
|
|
122
122
|
: meta.worktree === repoRoot
|
|
123
123
|
? "workspace"
|
|
124
124
|
: "worktree");
|
|
125
|
-
|
|
125
|
+
// Integration is an explicit model decision. Historical worktree Runs may
|
|
126
|
+
// retain this field for read compatibility, but a missing value must never
|
|
127
|
+
// turn a completed execution into a workflow transition.
|
|
128
|
+
meta.autoIntegrate = meta.autoIntegrate ?? false;
|
|
126
129
|
meta.closureState = meta.closureState ?? (
|
|
127
130
|
meta.provider === "local" && meta.executionMode === "worktree"
|
|
128
131
|
? meta.worktreeCleanedAt
|
|
@@ -1105,7 +1108,7 @@ function attachExecutorFailureHealth(meta: AgentJobMeta, stdoutTail?: string, st
|
|
|
1105
1108
|
}
|
|
1106
1109
|
if (meta.executorHealth) return meta;
|
|
1107
1110
|
const message = executorFailureMessage(meta, stdoutTail, stderrTail);
|
|
1108
|
-
const health = classifyExecutorFailure(meta.agent, message
|
|
1111
|
+
const health = classifyExecutorFailure(meta.agent, message);
|
|
1109
1112
|
if (health) meta.executorHealth = health;
|
|
1110
1113
|
return meta;
|
|
1111
1114
|
}
|
|
@@ -1261,7 +1264,8 @@ function baseMeta(
|
|
|
1261
1264
|
eventsPath: relative(opts.repoRoot, paths.eventsPath).replace(/\\/g, "/"),
|
|
1262
1265
|
timeoutMs: opts.timeoutMs,
|
|
1263
1266
|
startupDeadlineAt: new Date(Date.now() + agentStartupTimeoutMs()).toISOString(),
|
|
1264
|
-
|
|
1267
|
+
// A worktree contains concurrent writes; it does not authorize delivery.
|
|
1268
|
+
autoIntegrate: false,
|
|
1265
1269
|
progress: {
|
|
1266
1270
|
phase: "starting",
|
|
1267
1271
|
currentActivity: "已受理,等待异步启动",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { readFileSync, statSync } from 'fs';
|
|
2
2
|
import type { Command } from 'commander';
|
|
3
3
|
import { recordExperience, retractExperience, supersedeExperience, type ExperienceDraft } from '../../../packages/kernel/memory/api/index';
|
|
4
|
-
import { controllerExperienceStore } from '../../runtime/control-plane/persistence/experience-store';
|
|
4
|
+
import { controllerExperienceStore, workExperienceProvenance } from '../../runtime/control-plane/persistence/experience-store';
|
|
5
|
+
import { getWorkContract } from '../../../packages/kernel/work/api/index';
|
|
5
6
|
import { prepareAssistantWorkContext } from '../../runtime/context/assistant-work-context';
|
|
6
7
|
|
|
7
8
|
function readBoundedJson(path: string): unknown {
|
|
@@ -17,21 +18,34 @@ export function addBrainAssistantCommands(brain: Command): void {
|
|
|
17
18
|
.action((options: { controllerHome: string; repoId: string; workId: string; query?: string; channel?: string; account?: string; locale?: string }) => {
|
|
18
19
|
console.log(JSON.stringify(prepareAssistantWorkContext({ ...options, applicability: { channel: options.channel, account: options.account, locale: options.locale } }) ?? { status: 'project_contract_missing' }, null, 2));
|
|
19
20
|
});
|
|
20
|
-
const experience = brain.command('experience').description('Submit or withdraw
|
|
21
|
+
const experience = brain.command('experience').description('Submit or withdraw Work-authored, evidence-backed advisory experience');
|
|
21
22
|
for (const operation of ['record', 'supersede', 'retract'] as const) {
|
|
22
23
|
experience.command(operation)
|
|
23
24
|
.requiredOption('--controller-home <path>').requiredOption('--repo-id <id>').requiredOption('--work-id <id>')
|
|
24
|
-
.requiredOption('--
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
if (
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
.requiredOption('--input <path>', 'Bounded JSON API input; source Work provenance is derived by Forge')
|
|
26
|
+
.action((options: { controllerHome: string; repoId: string; workId: string; input: string }) => {
|
|
27
|
+
const work = getWorkContract({ controllerHome: options.controllerHome, repoId: options.repoId }, options.workId);
|
|
28
|
+
if (!work) throw new Error(`BRAIN_WORK_NOT_FOUND: ${options.workId}`);
|
|
29
|
+
const sourceRoundId = workExperienceProvenance(work);
|
|
30
|
+
const store = controllerExperienceStore({ ...options, identity: { workId: options.workId } });
|
|
31
|
+
const raw = readBoundedJson(options.input);
|
|
32
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('BRAIN_INPUT_OBJECT_REQUIRED');
|
|
33
|
+
const data = raw as Record<string, unknown>;
|
|
34
|
+
const result = operation === 'record'
|
|
35
|
+
? recordExperience(store, { ...data, sourceWorkId: options.workId, sourceRoundId } as ExperienceDraft)
|
|
36
|
+
: operation === 'supersede'
|
|
37
|
+
? (() => {
|
|
38
|
+
const input = data as Parameters<typeof supersedeExperience>[1];
|
|
39
|
+
return supersedeExperience(store, {
|
|
40
|
+
...input,
|
|
41
|
+
draft: { ...input.draft, sourceWorkId: options.workId, sourceRoundId },
|
|
42
|
+
});
|
|
43
|
+
})()
|
|
44
|
+
: retractExperience(store, {
|
|
45
|
+
...(data as Parameters<typeof retractExperience>[1]),
|
|
46
|
+
sourceWorkId: options.workId,
|
|
47
|
+
sourceRoundId,
|
|
48
|
+
});
|
|
35
49
|
console.log(JSON.stringify(result, null, 2));
|
|
36
50
|
});
|
|
37
51
|
}
|
|
@@ -14,7 +14,7 @@ import { configuredBrainRoot } from './brain-root';
|
|
|
14
14
|
import { addBrainAssistantCommands } from './brain-assistant';
|
|
15
15
|
import { resolveRepoPreferredControllerHome } from '../repositories/controller-home';
|
|
16
16
|
import { findRegisteredRepositoryByCheckoutRoot } from '../repositories/registry';
|
|
17
|
-
import { getWorkContract,
|
|
17
|
+
import { getWorkContract, semanticWorkState } from '../../../packages/kernel/work/api/index';
|
|
18
18
|
|
|
19
19
|
export type BrainLifecycle = 'always-sync' | 'archive-only' | 'never-sync';
|
|
20
20
|
export type BrainCategory = 'decisions' | 'runbooks' | 'patterns' | 'references';
|
|
@@ -561,38 +561,36 @@ function modernBrainPromotionSource(repoRoot: string, opts: BrainPromoteOptions,
|
|
|
561
561
|
return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope: '' };
|
|
562
562
|
}
|
|
563
563
|
const workScope = `${work.scopeRef.kind}:${work.scopeRef.id}`;
|
|
564
|
-
if (work
|
|
565
|
-
issue(issues, 'error', `Brain promotion requires a completed Work
|
|
564
|
+
if (semanticWorkState(work) !== 'completed') {
|
|
565
|
+
issue(issues, 'error', `Brain promotion requires a semantically completed Work: ${workId}`);
|
|
566
566
|
return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: '', workScope };
|
|
567
567
|
}
|
|
568
|
-
try {
|
|
569
|
-
validateWorkSemantics(work);
|
|
570
|
-
} catch (error) {
|
|
571
|
-
issue(issues, 'error', `Work completion evidence is invalid for Brain promotion: ${error instanceof Error ? error.message : String(error)}`);
|
|
572
|
-
return { sources: [], sections: [], relatedPlan: work.planId ?? '', terminalAt: '', outcome: '', sourceWork: workId, completionReceipt: work.completionReceipt.receiptId, workScope };
|
|
573
|
-
}
|
|
574
568
|
const receipt = work.completionReceipt;
|
|
575
|
-
const
|
|
569
|
+
const semanticResultRefs = [...new Set((work.semanticResultRefs ?? []).map((value) => value.trim()).filter(Boolean))];
|
|
570
|
+
const repositoryDetails = receipt && 'targetRevision' in receipt
|
|
576
571
|
? [`- Target revision: ${receipt.targetRevision}`, `- Changed paths: ${receipt.changedPaths.length}`]
|
|
577
572
|
: [];
|
|
573
|
+
const legacyReceiptDetails = receipt
|
|
574
|
+
? [`- Legacy completion receipt: ${receipt.receiptId}`, `- Legacy completion source: ${receipt.source}`]
|
|
575
|
+
: ['- Legacy completion receipt: none (not required for semantic completion)'];
|
|
578
576
|
const section = [
|
|
579
577
|
`## Source: work:${work.workId}`,
|
|
580
578
|
'',
|
|
581
579
|
`- Objective: ${work.objective}`,
|
|
582
580
|
`- Completion outcome: ${work.completionOutcome ?? 'completed'}`,
|
|
583
|
-
`-
|
|
584
|
-
`- Completion authority: ${receipt.source}`,
|
|
581
|
+
`- Semantic result refs: ${semanticResultRefs.length ? semanticResultRefs.join(', ') : '(none recorded)'}`,
|
|
585
582
|
`- Work scope: ${workScope}`,
|
|
583
|
+
...legacyReceiptDetails,
|
|
586
584
|
...repositoryDetails,
|
|
587
585
|
'',
|
|
588
586
|
'This entry is promoted from validated durable Work metadata. Raw process logs, credentials, and chat history are not copied into Brain.',
|
|
589
587
|
'',
|
|
590
588
|
].join('\n');
|
|
591
589
|
return {
|
|
592
|
-
sources: [`work:${work.workId}`, `completion:${receipt.receiptId}`],
|
|
593
|
-
sections: [section], relatedPlan: work.planId ?? '', terminalAt:
|
|
590
|
+
sources: [`work:${work.workId}`, ...semanticResultRefs, ...(receipt ? [`completion:${receipt.receiptId}`] : [])],
|
|
591
|
+
sections: [section], relatedPlan: work.planId ?? '', terminalAt: work.semanticUpdatedAt ?? work.updatedAt,
|
|
594
592
|
outcome: work.completionOutcome ?? 'completed', sourceWork: work.workId,
|
|
595
|
-
completionReceipt: receipt
|
|
593
|
+
completionReceipt: receipt?.receiptId ?? '', workScope,
|
|
596
594
|
};
|
|
597
595
|
}
|
|
598
596
|
|
|
@@ -13,12 +13,7 @@ import {
|
|
|
13
13
|
} from '../chatgpt-browser/engine';
|
|
14
14
|
import type { BrowserProviderName, BrowserSessionStatus, NativeBrowserChannel, ThinkingLevel } from '../chatgpt-browser/types';
|
|
15
15
|
import { durableControllerHome } from '../repositories/controller-home';
|
|
16
|
-
import {
|
|
17
|
-
runWorkChatgptContinuation,
|
|
18
|
-
type ChatgptAutomationReasoning,
|
|
19
|
-
type ChatgptAutomationTabPolicy,
|
|
20
|
-
} from '../../runtime/control-plane/launcher/chatgpt-work-continuation';
|
|
21
|
-
import { closeChatgptControllerRoundFromSource, continueChatgptControllerRoundFromSource, openChatgptControllerRoundFromSource } from '../../runtime/control-plane/launcher/chatgpt-round-continuation';
|
|
16
|
+
import { closeChatgptControllerRoundFromSource } from '../../runtime/control-plane/launcher/chatgpt-round-continuation';
|
|
22
17
|
|
|
23
18
|
interface BrowserCommonOptions {
|
|
24
19
|
repo?: string;
|
|
@@ -81,43 +76,6 @@ interface BrowserConsultOptions extends BrowserCommonOptions {
|
|
|
81
76
|
headless?: boolean;
|
|
82
77
|
}
|
|
83
78
|
|
|
84
|
-
interface WorkChatgptContinueOptions extends BrowserCommonOptions {
|
|
85
|
-
controllerHome: string;
|
|
86
|
-
repoId: string;
|
|
87
|
-
workId: string;
|
|
88
|
-
prompt: string;
|
|
89
|
-
title?: string;
|
|
90
|
-
session?: string;
|
|
91
|
-
conversationUrl?: string;
|
|
92
|
-
model?: string;
|
|
93
|
-
reasoning?: string;
|
|
94
|
-
tabPolicy?: string;
|
|
95
|
-
timeoutMs?: string;
|
|
96
|
-
controllerAuthorityId?: string;
|
|
97
|
-
relayScopeId?: string;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
interface SourceRoundOpenOptions extends BrowserCommonOptions {
|
|
101
|
-
controllerHome?: string;
|
|
102
|
-
repoId: string;
|
|
103
|
-
workId: string;
|
|
104
|
-
controllerId: string;
|
|
105
|
-
principalId: string;
|
|
106
|
-
controllerInstanceId?: string;
|
|
107
|
-
continuationPrompt?: string;
|
|
108
|
-
timeoutMs?: string;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
interface SourceRoundContinueOptions extends BrowserCommonOptions {
|
|
112
|
-
controllerHome?: string;
|
|
113
|
-
repoId: string;
|
|
114
|
-
workId: string;
|
|
115
|
-
controllerAuthorityId: string;
|
|
116
|
-
relayScopeId: string;
|
|
117
|
-
reason?: string;
|
|
118
|
-
timeoutMs?: string;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
79
|
interface SourceRoundCloseOptions extends BrowserCommonOptions {
|
|
122
80
|
controllerHome?: string;
|
|
123
81
|
repoId: string;
|
|
@@ -156,18 +114,6 @@ interface BrowserFollowupOptions extends BrowserCommonOptions {
|
|
|
156
114
|
oracleBin?: string;
|
|
157
115
|
}
|
|
158
116
|
|
|
159
|
-
function parseAutomationReasoning(value?: string): ChatgptAutomationReasoning | undefined {
|
|
160
|
-
if (value === undefined) return undefined;
|
|
161
|
-
if (value === 'medium' || value === 'high' || value === 'xhigh') return value;
|
|
162
|
-
throw new Error(`invalid --reasoning "${value}" (expected: medium, high, xhigh)`);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function parseAutomationTabPolicy(value?: string): ChatgptAutomationTabPolicy | undefined {
|
|
166
|
-
if (value === undefined) return undefined;
|
|
167
|
-
if (value === 'auto' || value === 'reuse' || value === 'new') return value;
|
|
168
|
-
throw new Error(`invalid --tab-policy "${value}" (expected: auto, reuse, new)`);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
117
|
function parseProvider(value?: string): BrowserProviderName {
|
|
172
118
|
if (value === undefined || value === 'oracle') return 'oracle';
|
|
173
119
|
if (value === 'native') return 'native';
|
|
@@ -435,114 +381,6 @@ export function buildChatgptCommand(): Command {
|
|
|
435
381
|
});
|
|
436
382
|
});
|
|
437
383
|
|
|
438
|
-
const workContinue = new Command('work-continue')
|
|
439
|
-
.description('Internal: continue one Forge Work in its bound ChatGPT Web conversation')
|
|
440
|
-
.option('--repo <path>', 'Repository root for the Work browser session', '.')
|
|
441
|
-
.requiredOption('--controller-home <path>', 'Explicit Controller Home containing the authoritative Work and conversation binding')
|
|
442
|
-
.requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
|
|
443
|
-
.requiredOption('--work-id <work-id>', 'Stable Forge Work id')
|
|
444
|
-
.requiredOption('--prompt <text>', 'Bounded continuation prompt')
|
|
445
|
-
.option('--title <title>', 'Human-readable local conversation alias')
|
|
446
|
-
.option('--session <session-id>', 'Saved browser session to seed or resume the Work binding')
|
|
447
|
-
.option('--conversation-url <url>', 'Explicit ChatGPT conversation URL to seed the binding')
|
|
448
|
-
.option('--model <label>', 'Requested ChatGPT automation model', 'gpt-5.6')
|
|
449
|
-
.option('--reasoning <level>', 'Reasoning level: medium|high|xhigh', 'high')
|
|
450
|
-
.option('--tab-policy <policy>', 'Browser tab policy: auto|reuse|new', 'auto')
|
|
451
|
-
.option('--timeout-ms <ms>', 'Assistant timeout in milliseconds')
|
|
452
|
-
.option('--controller-authority-id <id>', 'Durable ControllerRound authority for source-mode continuation')
|
|
453
|
-
.option('--relay-scope-id <id>', 'Durable ControllerRound relay scope paired with controller authority')
|
|
454
|
-
.action((rawOpts: WorkChatgptContinueOptions) => {
|
|
455
|
-
void runChatgptAction(async () => {
|
|
456
|
-
const result = await runWorkChatgptContinuation({
|
|
457
|
-
controllerHome: durableControllerHome(rawOpts.controllerHome),
|
|
458
|
-
repoId: rawOpts.repoId,
|
|
459
|
-
repoRoot: resolveRepoRoot(rawOpts.repo),
|
|
460
|
-
workId: rawOpts.workId,
|
|
461
|
-
prompt: rawOpts.prompt,
|
|
462
|
-
controllerAuthorityId: rawOpts.controllerAuthorityId,
|
|
463
|
-
relayScopeId: rawOpts.relayScopeId,
|
|
464
|
-
title: rawOpts.title,
|
|
465
|
-
browserSessionId: rawOpts.session,
|
|
466
|
-
conversationUrl: rawOpts.conversationUrl,
|
|
467
|
-
model: rawOpts.model,
|
|
468
|
-
reasoning: parseAutomationReasoning(rawOpts.reasoning),
|
|
469
|
-
tabPolicy: parseAutomationTabPolicy(rawOpts.tabPolicy),
|
|
470
|
-
timeoutMs: parsePositiveInteger('timeout-ms', rawOpts.timeoutMs),
|
|
471
|
-
});
|
|
472
|
-
console.log(JSON.stringify({
|
|
473
|
-
status: result.status,
|
|
474
|
-
provider: result.provider,
|
|
475
|
-
sessionId: result.browserSessionId,
|
|
476
|
-
conversationUrl: result.conversationUrl,
|
|
477
|
-
conversationId: result.conversationId,
|
|
478
|
-
localAlias: result.localAlias,
|
|
479
|
-
resumedFromBinding: result.resumedFromBinding,
|
|
480
|
-
model: result.model,
|
|
481
|
-
reasoning: result.reasoning,
|
|
482
|
-
tabPolicy: result.tabPolicy,
|
|
483
|
-
executionPreferenceVerified: result.executionPreferenceVerified,
|
|
484
|
-
error: result.error,
|
|
485
|
-
}, null, 2));
|
|
486
|
-
});
|
|
487
|
-
});
|
|
488
|
-
chatgpt.addCommand(workContinue, { hidden: true });
|
|
489
|
-
|
|
490
|
-
const roundOpen = new Command('round-open')
|
|
491
|
-
.description('Internal: open and dispatch one ChatGPT ControllerRound from current source')
|
|
492
|
-
.option('--repo <path>', 'Repository root used by the ChatGPT Browser delivery host', '.')
|
|
493
|
-
.option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
|
|
494
|
-
.requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
|
|
495
|
-
.requiredOption('--work-id <work-id>', 'Forge Work id to dispatch')
|
|
496
|
-
.requiredOption('--controller-id <id>', 'Authenticated ChatGPT controller id/principal identity')
|
|
497
|
-
.requiredOption('--principal-id <id>', 'Authenticated ChatGPT principal id')
|
|
498
|
-
.option('--controller-instance-id <id>', 'Source launcher instance identity')
|
|
499
|
-
.option('--continuation-prompt <text>', 'Bounded source-mode continuation instruction')
|
|
500
|
-
.option('--timeout-ms <ms>', 'Assistant dispatch timeout in milliseconds')
|
|
501
|
-
.action((rawOpts: SourceRoundOpenOptions) => {
|
|
502
|
-
void runChatgptAction(async () => {
|
|
503
|
-
const result = await openChatgptControllerRoundFromSource({
|
|
504
|
-
controllerHome: durableControllerHome(rawOpts.controllerHome),
|
|
505
|
-
repoId: rawOpts.repoId,
|
|
506
|
-
repoRoot: resolveRepoRoot(rawOpts.repo),
|
|
507
|
-
workId: rawOpts.workId,
|
|
508
|
-
controllerId: rawOpts.controllerId,
|
|
509
|
-
principalId: rawOpts.principalId,
|
|
510
|
-
controllerInstanceId: rawOpts.controllerInstanceId,
|
|
511
|
-
continuationPrompt: rawOpts.continuationPrompt,
|
|
512
|
-
timeoutMs: parsePositiveInteger('timeout-ms', rawOpts.timeoutMs),
|
|
513
|
-
});
|
|
514
|
-
console.log(JSON.stringify(result, null, 2));
|
|
515
|
-
});
|
|
516
|
-
});
|
|
517
|
-
chatgpt.addCommand(roundOpen, { hidden: true });
|
|
518
|
-
|
|
519
|
-
const roundContinue = new Command('round-continue')
|
|
520
|
-
.description('Internal: close one claimed ChatGPT ControllerRound and immediately dispatch its successor from current source')
|
|
521
|
-
.option('--repo <path>', 'Repository root used by the ChatGPT Browser delivery host', '.')
|
|
522
|
-
.option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
|
|
523
|
-
.requiredOption('--repo-id <repo-id>', 'Stable Forge repository id')
|
|
524
|
-
.requiredOption('--work-id <work-id>', 'Currently claimed Forge Work id')
|
|
525
|
-
.requiredOption('--controller-authority-id <id>', 'Exact durable ControllerRound authority')
|
|
526
|
-
.requiredOption('--relay-scope-id <id>', 'Exact durable ControllerRound relay scope')
|
|
527
|
-
.option('--reason <text>', 'Bounded semantic continuation reason')
|
|
528
|
-
.option('--timeout-ms <ms>', 'Assistant dispatch timeout in milliseconds')
|
|
529
|
-
.action((rawOpts: SourceRoundContinueOptions) => {
|
|
530
|
-
void runChatgptAction(async () => {
|
|
531
|
-
const result = await continueChatgptControllerRoundFromSource({
|
|
532
|
-
controllerHome: durableControllerHome(rawOpts.controllerHome),
|
|
533
|
-
repoId: rawOpts.repoId,
|
|
534
|
-
repoRoot: resolveRepoRoot(rawOpts.repo),
|
|
535
|
-
workId: rawOpts.workId,
|
|
536
|
-
controllerAuthorityId: rawOpts.controllerAuthorityId,
|
|
537
|
-
relayScopeId: rawOpts.relayScopeId,
|
|
538
|
-
reason: rawOpts.reason,
|
|
539
|
-
timeoutMs: parsePositiveInteger('timeout-ms', rawOpts.timeoutMs),
|
|
540
|
-
});
|
|
541
|
-
console.log(JSON.stringify(result, null, 2));
|
|
542
|
-
});
|
|
543
|
-
});
|
|
544
|
-
chatgpt.addCommand(roundContinue, { hidden: true });
|
|
545
|
-
|
|
546
384
|
const roundClose = new Command('round-close')
|
|
547
385
|
.description('Internal: reconcile and close one claimed ChatGPT ControllerRound from current source without dispatching a successor')
|
|
548
386
|
.option('--controller-home <path>', 'Explicit Controller Home containing ControllerRound authority; defaults to canonical user-level Forge Controller Home')
|