@moretea-labs/forge 1.7.2 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +58 -62
- package/CHANGELOG.md +26 -0
- package/CLAUDE.md +42 -62
- package/README.md +2 -2
- package/SKILL.md +0 -1
- package/THIRD_PARTY_NOTICES.md +5 -2
- package/adapters/browser/index.ts +2 -0
- package/adapters/chatgpt/browser-delivery-host.ts +71 -0
- package/adapters/chatgpt/browser-delivery-runtime.ts +783 -0
- package/adapters/chatgpt/controller-binding-store.ts +55 -0
- package/adapters/chatgpt/controller-host.ts +119 -0
- package/adapters/chatgpt/controller-round-host.ts +78 -0
- package/adapters/chatgpt/controller-round-settlement-store.ts +45 -0
- package/adapters/chatgpt/provider-delivery.ts +113 -0
- package/adapters/chatgpt/work-conversation-binding-store.ts +192 -0
- package/adapters/chatgpt/wsl-bridge-delivery-host.ts +63 -0
- package/adapters/computer/desktop-operator-contract.ts +7 -0
- package/adapters/computer/desktop-operator-discovery.ts +201 -0
- package/adapters/computer/desktop-operator-negotiation.ts +174 -0
- package/adapters/computer/desktop-operator-provider.ts +312 -0
- package/adapters/computer/index.ts +1 -0
- package/adapters/computer/interaction-target-authority.ts +944 -0
- package/adapters/controller-process/binding-store.ts +34 -0
- package/adapters/controller-process/controller-host.ts +26 -0
- package/adapters/mcp/access-mode.ts +132 -0
- package/adapters/mcp/audit.ts +32 -0
- package/adapters/mcp/auth.ts +407 -0
- package/adapters/mcp/controller-round-compatibility.ts +184 -0
- package/adapters/mcp/frozen-client-semantic-compatibility.ts +292 -0
- package/adapters/mcp/instructions.ts +36 -0
- package/adapters/mcp/legacy-context.ts +18 -0
- package/adapters/mcp/multi-repository.ts +437 -0
- package/adapters/mcp/oauth.ts +391 -0
- package/adapters/mcp/paths.ts +140 -0
- package/adapters/mcp/policy.ts +232 -0
- package/adapters/mcp/proxy-env.ts +62 -0
- package/adapters/mcp/readiness-projection.ts +24 -0
- package/adapters/mcp/redaction.ts +21 -0
- package/adapters/mcp/repo.ts +24 -0
- package/adapters/mcp/runtime-gateway/artifact-adapter.ts +52 -0
- package/adapters/mcp/runtime-gateway/context-adapter.ts +829 -0
- package/adapters/mcp/runtime-gateway/controller-authority-adapter.ts +191 -0
- package/adapters/mcp/runtime-gateway/engineering-preconditions.ts +147 -0
- package/adapters/mcp/runtime-gateway/execution-control-adapter.ts +28 -0
- package/adapters/mcp/runtime-gateway/execution-tools.ts +207 -0
- package/adapters/mcp/runtime-gateway/filesystem-adapter.ts +38 -0
- package/adapters/mcp/runtime-gateway/gateway-execution-adapter.ts +411 -0
- package/adapters/mcp/runtime-gateway/legacy-ios-tool-adapter.ts +105 -0
- package/adapters/mcp/runtime-gateway/maintenance-adapter.ts +44 -0
- package/adapters/mcp/runtime-gateway/model-adapter.ts +63 -0
- package/adapters/mcp/runtime-gateway/persisted-check-process.ts +3 -0
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +308 -0
- package/adapters/mcp/runtime-gateway/process-tools.ts +289 -0
- package/adapters/mcp/runtime-gateway/protected-computer-adapter.ts +76 -0
- package/adapters/mcp/runtime-gateway/recovery-adapter.ts +268 -0
- package/adapters/mcp/runtime-gateway/recovery-client-adapter.ts +70 -0
- package/adapters/mcp/runtime-gateway/recovery-tool-contract.ts +99 -0
- package/adapters/mcp/runtime-gateway/repository-compat-adapter.ts +110 -0
- package/adapters/mcp/runtime-gateway/result-adapter.ts +108 -0
- package/adapters/mcp/runtime-gateway/router.ts +728 -0
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1251 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +634 -0
- package/adapters/mcp/runtime-gateway/runtime-tool-shared.ts +27 -0
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +68 -0
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +186 -0
- package/adapters/mcp/runtime-gateway/shared-adapter.ts +25 -0
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +870 -0
- package/adapters/mcp/runtime-gateway/work-adapter.ts +3186 -0
- package/adapters/mcp/runtime-gateway/work-compat-adapter.ts +502 -0
- package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +1 -0
- package/adapters/mcp/server.ts +1048 -0
- package/adapters/mcp/setup.ts +791 -0
- package/adapters/mcp/tool-capability-cache.ts +87 -0
- package/adapters/mcp/tool-mapping/access-tools.ts +387 -0
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +5265 -0
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +150 -0
- package/adapters/mcp/tool-mapping/repository-tools.ts +1691 -0
- package/adapters/mcp/tool-mapping/tools.ts +9 -0
- package/adapters/mcp/tool-mapping/umbrella-tools.ts +117 -0
- package/adapters/mcp/toolset-names.ts +74 -0
- package/adapters/mcp/toolset-selection.ts +41 -0
- package/adapters/mcp/toolset.ts +336 -0
- package/adapters/mcp/transports/http.ts +1456 -0
- package/adapters/mcp/transports/session-registry.ts +513 -0
- package/adapters/mcp/transports/stdio.ts +8 -0
- package/adapters/mcp/tunnels/openai-secure-tunnel.ts +139 -0
- package/adapters/mcp/types.ts +41 -0
- package/assets/AGENTS.md +2 -16
- package/assets/CLAUDE.md +2 -16
- package/assets/hooks/AGENTS.md +3 -14
- package/assets/hooks/CLAUDE.md +3 -14
- package/assets/hooks/hook-input.sh +9 -2
- package/assets/hooks/lib/workflow-state.sh +28 -10
- package/assets/hooks/prompt-guard.sh +63 -37
- package/assets/hooks/security-sentinel.sh +2 -1
- package/assets/hooks/session-start-context.sh +7 -5
- package/assets/hooks/stop-orchestrator.sh +13 -3
- package/assets/initializer-question-pack.v4.json +11 -7
- package/assets/partials/05-workflow.partial.md +18 -73
- package/assets/partials/07-footer.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +1 -2
- package/assets/partials-agents/04-task-protocol.partial.md +14 -59
- package/assets/partials-agents/06-quality-safety.partial.md +11 -16
- package/assets/partials-agents/08-deep-docs.partial.md +1 -2
- package/assets/plan-map.json +11 -11
- package/assets/plugin-registry.v1.json +9 -3
- package/assets/plugin-trust-policy.v1.json +6 -0
- package/assets/recovery/ForgeRecovery.ps1 +100 -0
- package/assets/recovery/forge-wsl-rescue +271 -0
- package/assets/reference-configs/development-protocol.md +11 -15
- package/assets/reference-configs/document-generation.md +1 -1
- package/assets/reference-configs/global-working-rules.md +9 -1
- package/assets/reference-configs/harness-overview.md +22 -112
- package/assets/reference-configs/hook-operations.md +1 -1
- package/assets/reference-configs/sprint-contracts.md +2 -2
- package/assets/skill-version.json +2 -2
- package/assets/templates/helpers/architecture-event.ts +3 -34
- package/assets/templates/helpers/architecture-queue.sh +61 -10
- package/assets/templates/helpers/archive-workflow.sh +90 -180
- package/assets/templates/helpers/capability-config.ts +8 -11
- package/assets/templates/helpers/capability-resolver.ts +37 -19
- package/assets/templates/helpers/capture-plan.sh +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +1 -9
- package/assets/templates/helpers/check-task-sync.sh +82 -11
- package/assets/templates/helpers/check-task-workflow.sh +1 -3
- package/assets/templates/helpers/context-contract-sync.sh +1 -12
- package/assets/templates/helpers/contract-worktree.sh +26 -24
- package/assets/templates/helpers/ensure-task-workflow.sh +6 -8
- package/assets/templates/helpers/inspect-project-state.ts +1 -1
- package/assets/templates/helpers/migrate-project-template.sh +1 -1
- package/assets/templates/helpers/migrate-workflow-docs.ts +53 -239
- package/assets/templates/helpers/new-plan.sh +2 -2
- package/assets/templates/helpers/plan-to-todo.sh +3 -31
- package/assets/templates/helpers/sprint-backlog.sh +1 -1
- package/assets/templates/helpers/switch-plan.sh +1 -1
- package/assets/templates/helpers/workflow-contract.ts +1 -0
- package/assets/workflow-contract.v1.json +63 -171
- package/assets/workflows/xiaohongshu/xiaohongshu.collect-metrics.v1.draft.json +118 -0
- package/assets/workflows/xiaohongshu/xiaohongshu.publish-image-note.v1.draft.json +316 -0
- package/assets/workflows/xiaohongshu/xiaohongshu.publish-long-text.v1.draft.json +324 -0
- package/docs/architecture/CURRENT.md +148 -13
- package/docs/architecture/EVOLUTION.md +13 -0
- package/docs/architecture/decisions/20260801-controller-home-sqlite-state.md +2 -1
- package/docs/architecture/decisions/20260831-independent-windows-wsl-host-rescue.md +59 -0
- package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +120 -0
- package/docs/architecture/decisions/20260904-repository-runtime-data-boundary.md +42 -0
- package/docs/architecture/decisions/20260907-assistant-learning-loop.md +35 -0
- package/docs/architecture/decisions/20260907-controller-round-transition-policy.md +296 -0
- package/docs/architecture/decisions/20260907-maintenance-diagnosis-bounded-read.md +39 -0
- package/docs/architecture/domains/verification.md +7 -0
- package/docs/architecture/domains/workflow-engine.md +1 -1
- package/docs/architecture/index.md +3 -3
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +19 -8
- package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +124 -0
- package/docs/forge-chatgpt-mcp-setup.md +5 -3
- package/docs/forge-plugin-management.md +20 -4
- package/docs/forge-runtime-self-healing-loop.md +2 -0
- package/docs/operations/benchmark-cross-version-freeze.md +38 -0
- package/docs/operations/controller-browser-plugin.md +3 -1
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/platform-support.md +16 -8
- package/docs/operations/platform-support.zh-CN.md +2 -2
- package/docs/operations/standalone-disaster-recovery.md +26 -1
- package/docs/operations/uu-remote-rescue.md +41 -0
- package/docs/operations/windows-wsl-host-rescue.md +133 -0
- package/docs/public-usage-guide.md +1 -1
- package/docs/public-usage-guide.zh-CN.md +1 -1
- package/docs/tutorials/01-install-and-start.md +1 -1
- package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
- package/docs/tutorials/02-connect-chatgpt.md +4 -4
- package/docs/tutorials/02-connect-chatgpt.zh-CN.md +4 -4
- package/docs/wiki/Implementation.md +1 -1
- package/package.json +23 -14
- package/packages/kernel/controller/api/index.ts +2 -0
- package/packages/kernel/controller/application/controller-round-service.ts +29 -0
- package/packages/kernel/controller/application/controller-service.ts +30 -0
- package/packages/kernel/controller/domain/controller-round-transition-policy.ts +308 -0
- package/packages/kernel/controller/domain/controller-round.ts +107 -0
- package/packages/kernel/controller/domain/execution-quality.ts +133 -0
- package/packages/kernel/controller/domain/types.ts +56 -0
- package/packages/kernel/controller/index.ts +1 -0
- package/packages/kernel/controller/infrastructure/controller-binding-store.ts +84 -0
- package/packages/kernel/controller/infrastructure/controller-round-store.ts +1384 -0
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +578 -0
- package/packages/kernel/controller/ports/controller-host.ts +16 -0
- package/packages/kernel/goal/api/index.ts +1 -0
- package/packages/kernel/goal/domain/types.ts +40 -0
- package/packages/kernel/goal/index.ts +1 -0
- package/packages/kernel/identity/api/index.ts +5 -0
- package/packages/kernel/identity/application/identity-service.ts +67 -0
- package/packages/kernel/identity/domain/scope.ts +63 -0
- package/packages/kernel/identity/domain/semantic-sync.ts +81 -0
- package/packages/kernel/identity/domain/types.ts +44 -0
- package/packages/kernel/identity/domain/workspace.ts +56 -0
- package/packages/kernel/identity/index.ts +1 -0
- package/packages/kernel/identity/infrastructure/identity-store.ts +75 -0
- package/packages/kernel/memory/api/index.ts +5 -0
- package/packages/kernel/memory/application/experience-service.ts +118 -0
- package/packages/kernel/memory/application/outcome-service.ts +77 -0
- package/packages/kernel/memory/domain/experience.ts +103 -0
- package/packages/kernel/memory/domain/operational-prior.ts +92 -0
- package/packages/kernel/memory/index.ts +1 -0
- package/packages/kernel/progression/api/index.ts +2 -0
- package/packages/kernel/progression/application/projector.ts +211 -0
- package/packages/kernel/progression/domain/types.ts +116 -0
- package/packages/kernel/progression/index.ts +1 -0
- package/packages/kernel/scheduler/api/index.ts +6 -0
- package/packages/kernel/scheduler/application/continuation-service.ts +212 -0
- package/packages/kernel/scheduler/application/eligibility.ts +252 -0
- package/packages/kernel/scheduler/application/schedule-service.ts +24 -0
- package/packages/kernel/scheduler/application/settlement.ts +197 -0
- package/packages/kernel/scheduler/domain/continuation.ts +38 -0
- package/packages/kernel/scheduler/domain/schedule.ts +149 -0
- package/packages/kernel/scheduler/index.ts +1 -0
- package/packages/kernel/scheduler/infrastructure/continuation-dispatch-store.ts +38 -0
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +785 -0
- package/packages/kernel/work/api/index.ts +15 -0
- package/packages/kernel/work/application/work-service.ts +148 -0
- package/packages/kernel/work/domain/admission-policy.ts +34 -0
- package/packages/kernel/work/domain/check-receipt.ts +43 -0
- package/packages/kernel/work/domain/context-closure-receipt.ts +32 -0
- package/packages/kernel/work/domain/engineering-contracts.ts +157 -0
- package/packages/kernel/work/domain/engineering-design.ts +281 -0
- package/packages/kernel/work/domain/engineering-profile.ts +242 -0
- package/packages/kernel/work/domain/execution-concurrency.ts +254 -0
- package/packages/kernel/work/domain/execution-snapshot.ts +33 -0
- package/packages/kernel/work/domain/implementation-review.ts +510 -0
- package/packages/kernel/work/domain/project-engineering-contract.ts +202 -0
- package/packages/kernel/work/domain/repository-completion-receipt.ts +73 -0
- package/packages/kernel/work/domain/state-machine.ts +259 -0
- package/packages/kernel/work/domain/types.ts +528 -0
- package/packages/kernel/work/index.ts +1 -0
- package/packages/kernel/work/infrastructure/work-contract-store.ts +1876 -0
- package/packages/kernel/work/ports/work-contract-store.ts +18 -0
- package/packages/plugin-runtime/browser/index.ts +3 -0
- package/packages/plugin-runtime/browser/provider-registry.ts +110 -0
- package/packages/plugin-runtime/browser/runtime-contract.ts +150 -0
- package/packages/plugin-runtime/browser/session-authority.ts +61 -0
- package/packages/plugin-runtime/computer/index.ts +6 -0
- package/packages/plugin-runtime/computer/provider-error.ts +26 -0
- package/packages/plugin-runtime/computer/provider-registration.ts +52 -0
- package/packages/plugin-runtime/computer/provider-registry.ts +63 -0
- package/packages/plugin-runtime/computer/provider.ts +19 -0
- package/packages/plugin-runtime/computer/target-authority.ts +190 -0
- package/packages/plugin-runtime/computer/target-persistence.ts +54 -0
- package/packages/plugin-runtime/external/index.ts +1 -0
- package/packages/plugin-runtime/external/unix-jsonl-transport.ts +457 -0
- package/packages/plugin-runtime/index.ts +3 -0
- package/packages/protocols/browser/index.ts +1 -0
- package/packages/protocols/browser/session.ts +98 -0
- package/packages/protocols/computer/contract.ts +199 -0
- package/packages/protocols/computer/index.ts +1 -0
- package/packages/protocols/failure/contract.ts +158 -0
- package/packages/protocols/failure/index.ts +1 -0
- package/packages/protocols/handoff/index.ts +1 -0
- package/packages/protocols/handoff/status.ts +22 -0
- package/packages/protocols/mcp/execution-context.ts +11 -0
- package/packages/protocols/mcp/index.ts +2 -0
- package/packages/protocols/mcp/tool-contract.ts +42 -0
- package/packages/workflow-runtime/api/index.ts +2 -0
- package/packages/workflow-runtime/application/interpreter.ts +342 -0
- package/packages/workflow-runtime/domain/workflow-asset.ts +223 -0
- package/packages/workflow-runtime/index.ts +1 -0
- package/scripts/assemble-template.ts +1 -1
- package/scripts/benchmark-computer-hotpath.ts +255 -0
- package/scripts/benchmark-controller-round2.ts +54 -2
- package/scripts/benchmark-ios-agent-device.ts +3 -6
- package/scripts/benchmark-mcp-transport.ts +3 -4
- package/scripts/benchmark-operational-memory-activation.ts +235 -0
- package/scripts/benchmark-operational-shadow.ts +28 -0
- package/scripts/bootstrap-runtime-maintenance-recovery.sh +4 -1
- package/scripts/canary-chatgpt-provider-delivery.ts +97 -0
- package/scripts/canary-controller-semantic-wait.ts +195 -0
- package/scripts/canary-global-hook.sh +2 -2
- package/scripts/check-mcp-compatibility.ts +173 -7
- package/scripts/check-platform-support.mjs +28 -2
- package/scripts/check-public-docs.sh +1 -1
- package/scripts/check-release-readiness.sh +1 -1
- package/scripts/check-repository-hygiene.mjs +92 -0
- package/scripts/check-runtime-architecture.mjs +1206 -95
- package/scripts/check-source-duplication.mjs +9 -1
- package/scripts/check-tarball-install-smoke.sh +98 -15
- package/scripts/controller-ngrok-rotation.sh +5 -4
- package/scripts/create-project-dirs.sh +10 -74
- package/scripts/forge-local-recovery-helper.mjs +204 -0
- package/scripts/forge-uu-remote-rescue-helper.d.mts +31 -0
- package/scripts/forge-uu-remote-rescue-helper.mjs +409 -0
- package/scripts/forge-windows-host-recovery-helper.mjs +136 -0
- package/scripts/hook-shim.sh +2 -2
- package/scripts/init-project.sh +12 -70
- package/scripts/install-desktop-operator-registration.ts +4 -2
- package/scripts/install-independent-windows-wsl-recovery.ts +125 -0
- package/scripts/install-standalone-recovery.ts +122 -10
- package/scripts/install-uu-remote-rescue-registration.ts +74 -0
- package/scripts/install-windows-host-recovery-registration.ts +22 -0
- package/scripts/lib/controller-home-env.sh +6 -3
- package/scripts/lib/project-init-lib.sh +39 -582
- package/scripts/migrate-chatgpt-automation-schedules.ts +2 -2
- package/scripts/migrate-windows-wsl-controller-home.ts +306 -0
- package/scripts/open-source-audit-allowlist.txt +12 -1
- package/scripts/portability-bindings.mjs +70 -0
- package/scripts/run-bounded-command.mjs +55 -0
- package/scripts/run-bun-test-file.ts +22 -6
- package/scripts/run-governed-gate.ts +4 -1
- package/scripts/smoke-mcp-http-runtime.ts +1 -1
- package/scripts/smoke-runtime-recovery.ts +34 -1
- package/scripts/smoke-schedule-engine.ts +1 -1
- package/scripts/stage-runtime-release.ts +6 -1
- package/scripts/test-governance.ts +51 -2
- package/src/cli/agent-jobs/job-manager.ts +10 -1
- package/src/cli/chatgpt-browser/bind-server.ts +2 -1
- package/src/cli/chatgpt-browser/binding.ts +20 -10
- package/src/cli/chatgpt-browser/bridge-extension.ts +75 -0
- package/src/cli/chatgpt-browser/bridge-provider.ts +376 -11
- package/src/cli/chatgpt-browser/engine.ts +10 -11
- package/src/cli/chatgpt-browser/native-provider.ts +24 -83
- package/src/cli/chatgpt-browser/oracle-provider.ts +5 -3
- package/src/cli/chatgpt-browser/types.ts +1 -0
- package/src/cli/commands/bootstrap-control.ts +334 -0
- package/src/cli/commands/brain-assistant.ts +38 -0
- package/src/cli/commands/brain.ts +193 -40
- package/src/cli/commands/chatgpt.ts +127 -0
- package/src/cli/commands/computer.ts +437 -0
- package/src/cli/commands/doctor.ts +18 -1
- package/src/cli/commands/init-hook.ts +71 -61
- package/src/cli/commands/init.ts +3 -1
- package/src/cli/commands/mcp.ts +16 -10
- package/src/cli/commands/plugin.ts +38 -12
- package/src/cli/commands/recovery.ts +493 -80
- package/src/cli/commands/runtime.ts +9 -4
- package/src/cli/commands/setup-profile.ts +89 -39
- package/src/cli/commands/status.ts +2 -1
- package/src/cli/controller/check-runner.ts +487 -98
- package/src/cli/controller/context/types.ts +7 -1
- package/src/cli/controller/context-pack.ts +23 -3
- package/src/cli/controller/issue-store.ts +1 -1
- package/src/cli/controller/systemd-user.ts +110 -0
- package/src/cli/controller/types.ts +10 -70
- package/src/cli/controller/worklog.ts +67 -13
- package/src/cli/editing/edit-operation-contract.ts +92 -0
- package/src/cli/editing/edit-session.ts +289 -13
- package/src/cli/github/plugin.ts +17 -12
- package/src/cli/hook/route-registry.ts +3 -5
- package/src/cli/hook/runtime.ts +49 -3
- package/src/cli/index.ts +3 -0
- package/src/cli/local-bridge/connector-freshness.ts +2 -2
- package/src/cli/local-bridge/console-automations.ts +2 -2
- package/src/cli/local-bridge/facade-api.ts +41 -14
- package/src/cli/local-bridge/job-store.ts +1 -1
- package/src/cli/local-bridge/server.ts +24 -27
- package/src/cli/mcp/access-mode.ts +2 -132
- package/src/cli/mcp/access-tools.ts +2 -387
- package/src/cli/mcp/audit.ts +2 -32
- package/src/cli/mcp/auth.ts +2 -404
- package/src/cli/mcp/instructions.ts +2 -34
- package/src/cli/mcp/legacy-context.ts +2 -16
- package/src/cli/mcp/legacy-tool-service.ts +2 -5308
- package/src/cli/mcp/multi-repository.ts +2 -436
- package/src/cli/mcp/oauth.ts +2 -375
- package/src/cli/mcp/openai-secure-tunnel.ts +2 -0
- package/src/cli/mcp/paths.ts +2 -140
- package/src/cli/mcp/policy.ts +2 -232
- package/src/cli/mcp/post-finalize-work-attribution.ts +2 -150
- package/src/cli/mcp/proxy-env.ts +2 -62
- package/src/cli/mcp/readiness-projection.ts +2 -24
- package/src/cli/mcp/redaction.ts +2 -21
- package/src/cli/mcp/repo.ts +2 -24
- package/src/cli/mcp/repository-tools.ts +2 -1613
- package/src/cli/mcp/server.ts +2 -951
- package/src/cli/mcp/setup.ts +2 -737
- package/src/cli/mcp/tool-capability-cache.ts +2 -87
- package/src/cli/mcp/tool-contract.ts +2 -14
- package/src/cli/mcp/tools.ts +2 -9
- package/src/cli/mcp/toolset-names.ts +2 -70
- package/src/cli/mcp/toolset-selection.ts +2 -41
- package/src/cli/mcp/toolset.ts +2 -336
- package/src/cli/mcp/transports/AGENTS.md +1 -10
- package/src/cli/mcp/transports/CLAUDE.md +1 -10
- package/src/cli/mcp/transports/http.ts +2 -1414
- package/src/cli/mcp/transports/session-registry.ts +2 -490
- package/src/cli/mcp/transports/stdio.ts +2 -8
- package/src/cli/mcp/types.ts +2 -41
- package/src/cli/mcp/umbrella-tools.ts +2 -117
- package/src/cli/repositories/command-executor.ts +64 -18
- package/src/cli/repositories/command-scope.ts +117 -1
- package/src/cli/repositories/controller-home.ts +119 -1
- package/src/cli/repositories/identity.ts +13 -0
- package/src/cli/repositories/registry.ts +68 -49
- package/src/cli/repositories/repository-snapshot.ts +53 -7
- package/src/cli/repositories/runtime-storage.ts +27 -2
- package/src/cli/repositories/safe-patch.ts +34 -38
- package/src/cli/repositories/selected-path-actions.ts +22 -2
- package/src/cli/repositories/structured-git.ts +105 -25
- package/src/cli/runtime/helper-runner.ts +7 -0
- package/src/cli/runtime-invocation.ts +8 -1
- package/src/cli/tools/codegraph.ts +44 -25
- package/src/core/adoption/manifest-templates.ts +1 -1
- package/src/core/adoption/plan.ts +3 -26
- package/src/core/adoption/workflow-contract-plan.ts +17 -9
- package/src/effects/process-runner.ts +8 -14
- package/src/runtime/context/assistant-context.ts +154 -0
- package/src/runtime/context/assistant-work-context.ts +147 -0
- package/src/runtime/context/codegraph-cache-boundary.ts +255 -0
- package/src/runtime/context/codegraph-read-provider.ts +55 -22
- package/src/runtime/context/codegraph-sidecar.cjs +8 -1
- package/src/runtime/context/context-closure.ts +268 -0
- package/src/runtime/context/context-plane.ts +211 -0
- package/src/runtime/context/project-engineering-contract.ts +60 -0
- package/src/runtime/control-plane/bootstrap/capability-provider.ts +74 -0
- package/src/runtime/control-plane/bootstrap/control-api.ts +57 -0
- package/src/runtime/control-plane/bootstrap/index.ts +5 -0
- package/src/runtime/control-plane/bootstrap/state-machine.ts +141 -0
- package/src/runtime/control-plane/bootstrap/store.ts +21 -0
- package/src/runtime/control-plane/bootstrap/types.ts +87 -0
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +328 -0
- package/src/runtime/control-plane/codegraph-cache-retention.ts +164 -0
- package/src/runtime/control-plane/concurrency/work-execution-concurrency.ts +320 -0
- package/src/runtime/control-plane/execution/content-equivalent-commit-authority.ts +169 -0
- package/src/runtime/control-plane/execution/controller-authority-recovery.ts +350 -0
- package/src/runtime/control-plane/execution/direct-canonical-work-reconciliation.ts +85 -0
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +369 -99
- package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +103 -15
- package/src/runtime/control-plane/execution/implementation-review-content.ts +95 -0
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +2 -2
- package/src/runtime/control-plane/execution/retained-work-resume.ts +336 -6
- package/src/runtime/control-plane/execution/validation.ts +28 -3
- package/src/runtime/control-plane/execution/work-authority-reconciler.ts +116 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +44 -2
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +34 -3
- package/src/runtime/control-plane/execution/work-execution-support.ts +42 -22
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1103 -166
- package/src/runtime/control-plane/execution/work-handle-authority.ts +219 -22
- package/src/runtime/control-plane/execution/work-handle-store.ts +77 -0
- package/src/runtime/control-plane/execution/work-head-settlement.ts +75 -0
- package/src/runtime/control-plane/execution/work-lifecycle-audit.ts +145 -23
- package/src/runtime/control-plane/execution/work-operation-service.ts +49 -13
- package/src/runtime/control-plane/execution/work-preparation-service.ts +31 -15
- package/src/runtime/control-plane/execution/work-remote-delivery.ts +1 -1
- package/src/runtime/control-plane/execution/work-task-receipt.ts +20 -1
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +407 -76
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +88 -18
- package/src/runtime/control-plane/execution/work-verification-context.ts +1 -1
- package/src/runtime/control-plane/execution/work-verification-service.ts +258 -4
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +200 -15
- package/src/runtime/control-plane/facade/capability-registry.ts +21 -10
- package/src/runtime/control-plane/facade/controller-round-relay.ts +3 -1118
- package/src/runtime/control-plane/facade/controller-session-store.ts +2 -488
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +6 -3
- package/src/runtime/control-plane/facade/goal-workloop.ts +972 -137
- package/src/runtime/control-plane/facade/handoff-inbox-application.ts +158 -0
- package/src/runtime/control-plane/facade/handoff-inbox-store.ts +10 -0
- package/src/runtime/control-plane/facade/index.ts +4 -2
- package/src/runtime/control-plane/facade/operation-digest.ts +22 -58
- package/src/runtime/control-plane/facade/plan-contract-store.ts +1004 -38
- package/src/runtime/control-plane/facade/repository-work-admission.ts +19 -1
- package/src/runtime/control-plane/facade/requirement-authority.ts +218 -0
- package/src/runtime/control-plane/facade/requirement-board.ts +6 -1
- package/src/runtime/control-plane/facade/rh-work-operation-contract.ts +48 -0
- package/src/runtime/control-plane/facade/semantic-admission.ts +8 -16
- package/src/runtime/control-plane/facade/suggested-actions.ts +4 -1
- package/src/runtime/control-plane/facade/types.ts +189 -532
- package/src/runtime/control-plane/facade/work-admission-policy.ts +84 -35
- package/src/runtime/control-plane/facade/work-contract-store.ts +2 -1043
- package/src/runtime/control-plane/facade/work-implementation-review.ts +2 -0
- package/src/runtime/control-plane/facade/work-state-machine.ts +2 -250
- package/src/runtime/control-plane/generated-cache-retention.ts +239 -18
- package/src/runtime/control-plane/global-scheduler/durable-admission.ts +12 -1
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +76 -13
- package/src/runtime/control-plane/global-scheduler/periodic-cleanup-entry.ts +55 -0
- package/src/runtime/control-plane/global-scheduler/periodic-cleanup-process.ts +98 -0
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -1
- package/src/runtime/control-plane/global-scheduler/scheduler-worker-entry.ts +10 -0
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +173 -81
- package/src/runtime/control-plane/global-scheduler/worker-launch.ts +18 -6
- package/src/runtime/control-plane/launcher/chatgpt-round-continuation.ts +397 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +2 -177
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +301 -560
- package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +20 -4
- package/src/runtime/control-plane/launcher/thin-launcher.ts +50 -4
- package/src/runtime/control-plane/lifecycle-retention-metrics.ts +60 -0
- package/src/runtime/control-plane/persistence/experience-store.ts +169 -0
- package/src/runtime/control-plane/persistence/operational-prior-store.ts +348 -0
- package/src/runtime/control-plane/persistence/requirement-store.ts +30 -22
- package/src/runtime/control-plane/persistence/sqlite-store.ts +545 -76
- package/src/runtime/control-plane/persistence/workflow-content-store.ts +98 -0
- package/src/runtime/control-plane/persistence/workflow-registry-store.ts +186 -0
- package/src/runtime/control-plane/persistence/workflow-run-store.ts +123 -0
- package/src/runtime/control-plane/release-retention.ts +56 -16
- package/src/runtime/control-plane/repository-namespace-retention.ts +208 -0
- package/src/runtime/control-plane/routing/route-policy.ts +19 -0
- package/src/runtime/control-plane/runtime-cleanup.ts +574 -37
- package/src/runtime/control-plane/runtime-generation.ts +6 -0
- package/src/runtime/control-plane/workspace/semantic-sync-service.ts +465 -0
- package/src/runtime/control-plane/workspace/workspace-store.ts +80 -0
- package/src/runtime/diagnostics/incident-repair.ts +406 -0
- package/src/runtime/diagnostics/mcp-timing.ts +125 -6
- package/src/runtime/diagnostics/performance.ts +6 -14
- package/src/runtime/diagnostics/read-only-tool.ts +1 -1
- package/src/runtime/evidence/artifact-store.ts +65 -2
- package/src/runtime/evidence/operational-shadow.ts +38 -0
- package/src/runtime/evidence/process-check-receipt.ts +5 -43
- package/src/runtime/evidence/sensitive-output.ts +4 -4
- package/src/runtime/execution/jobs/receipt-recovery.ts +1 -1
- package/src/runtime/execution/jobs/store.ts +121 -2
- package/src/runtime/execution/managed-workspace.ts +55 -5
- package/src/runtime/execution/process-runtime/canary.ts +19 -5
- package/src/runtime/execution/process-runtime/check-classification.ts +48 -0
- package/src/runtime/execution/process-runtime/check-facade.ts +23 -9
- package/src/runtime/execution/process-runtime/check-receipt.ts +1 -1
- package/src/runtime/execution/process-runtime/check-result-retention.ts +132 -0
- package/src/runtime/execution/process-runtime/check-result.ts +73 -2
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -3
- package/src/runtime/execution/process-runtime/check-storage.ts +187 -0
- package/src/runtime/execution/process-runtime/command-facade.ts +38 -87
- package/src/runtime/execution/process-runtime/index.ts +1 -0
- package/src/runtime/execution/process-runtime/interactive-admission.ts +2 -1
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +32 -1
- package/src/runtime/execution/process-runtime/persisted-check.ts +128 -21
- package/src/runtime/execution/process-runtime/resource-claims.ts +60 -3
- package/src/runtime/execution/process-runtime/runtime.ts +132 -15
- package/src/runtime/execution/process-runtime/types.ts +22 -0
- package/src/runtime/execution/workers/executor.ts +16 -13
- package/src/runtime/execution/workers/worker-entry.ts +1 -1
- package/src/runtime/gateway/mcp/execution-tools.ts +2 -207
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +2 -61
- package/src/runtime/gateway/mcp/persisted-check-process.ts +2 -3
- package/src/runtime/gateway/mcp/process-tools.ts +2 -289
- package/src/runtime/gateway/mcp/router.ts +2 -1125
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +2 -565
- package/src/runtime/gateway/mcp/runtime-tools.ts +2 -6655
- package/src/runtime/gateway/mcp/work-validation-reconciler.ts +2 -1
- package/src/runtime/maintenance/cleanup.ts +38 -24
- package/src/runtime/platform/browser-product-discovery.ts +174 -0
- package/src/runtime/platform/computer-platform.ts +14 -0
- package/src/runtime/platform/executable-discovery.ts +54 -0
- package/src/runtime/platform/fetch-http-server.ts +90 -0
- package/src/runtime/platform/service-manager.ts +138 -0
- package/src/runtime/platform/windows-host-discovery.ts +118 -0
- package/src/runtime/platform/windows-recovery-deployment.ts +67 -0
- package/src/runtime/plugins/action-application.ts +135 -0
- package/src/runtime/plugins/app-store-connect-adapter.ts +9 -21
- package/src/runtime/plugins/browser-adapter.ts +140 -100
- package/src/runtime/plugins/browser-automation-service.ts +15 -36
- package/src/runtime/plugins/browser-macos-bridge.ts +69 -21
- package/src/runtime/plugins/browser-manifest-surface.ts +30 -6
- package/src/runtime/plugins/browser-native-session-service.ts +1 -1
- package/src/runtime/plugins/browser-provider-registry.ts +2 -109
- package/src/runtime/plugins/browser-registration.ts +16 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +2 -154
- package/src/runtime/plugins/browser-runtime.ts +41 -9
- package/src/runtime/plugins/browser-session-authority.ts +101 -291
- package/src/runtime/plugins/browser-session-legacy-migration.ts +203 -0
- package/src/runtime/plugins/browser-session-store.ts +229 -36
- package/src/runtime/plugins/browser-session-types.ts +2 -98
- package/src/runtime/plugins/capability-authorization-grants.ts +17 -0
- package/src/runtime/plugins/catalog-trust.ts +82 -0
- package/src/runtime/plugins/computer-registration.ts +839 -0
- package/src/runtime/plugins/config-store.ts +119 -0
- package/src/runtime/plugins/desktop-operator-external-policy.ts +932 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +111 -8
- package/src/runtime/plugins/errors.ts +8 -1
- package/src/runtime/plugins/external-adapter.ts +45 -322
- package/src/runtime/plugins/external-provider-policy.ts +48 -0
- package/src/runtime/plugins/external-registration.ts +9 -1
- package/src/runtime/plugins/external-unix-socket-probe.cjs +9 -3
- package/src/runtime/plugins/external-unix-socket.ts +64 -193
- package/src/runtime/plugins/first-party-external-registration.ts +163 -0
- package/src/runtime/plugins/first-party-registry.ts +3 -1
- package/src/runtime/plugins/github-adapter.ts +1 -2
- package/src/runtime/plugins/gmail-adapter.ts +6 -6
- package/src/runtime/plugins/google-calendar-adapter.ts +6 -6
- package/src/runtime/plugins/google-shared.ts +31 -46
- package/src/runtime/plugins/google-tasks-adapter.ts +6 -6
- package/src/runtime/plugins/ios-adapter.ts +1 -2
- package/src/runtime/plugins/local-system-adapter.ts +180 -0
- package/src/runtime/plugins/macos-capability-broker.ts +15 -105
- package/src/runtime/plugins/resend-adapter.ts +15 -24
- package/src/runtime/plugins/store.ts +493 -51
- package/src/runtime/plugins/types.ts +8 -1
- package/src/runtime/plugins/uu-remote-rescue-registration.ts +155 -0
- package/src/runtime/plugins/windows-host-recovery-install.ts +68 -0
- package/src/runtime/plugins/windows-host-recovery-registration.ts +85 -0
- package/src/runtime/plugins/xiaohongshu-publish.ts +86 -430
- package/src/runtime/projections/controller-context.ts +12 -6
- package/src/runtime/projections/git-status-sampler.ts +73 -22
- package/src/runtime/projections/materialized-view.ts +14 -8
- package/src/runtime/recovery/capability-action-application.ts +228 -0
- package/src/runtime/recovery/index.ts +3 -0
- package/src/runtime/recovery/lifecycle-inventory.ts +338 -0
- package/src/runtime/recovery/local-jobs-repair.ts +14 -14
- package/src/runtime/recovery/maintenance-executor.ts +358 -76
- package/src/runtime/recovery/quarantine-retention.ts +256 -0
- package/src/runtime/release/identity.ts +6 -0
- package/src/runtime/resources/leases/store.ts +1 -1
- package/src/runtime/root/active-execution-power-assertion.ts +139 -0
- package/src/runtime/root/assistant-learning-loop.ts +45 -0
- package/src/runtime/root/browser-session-composition.ts +59 -0
- package/src/runtime/root/computer-composition.ts +191 -0
- package/src/runtime/root/computer-target-composition.ts +16 -0
- package/src/runtime/root/computer-target-persistence.ts +39 -0
- package/src/runtime/root/controller-round-composition.ts +107 -0
- package/src/runtime/root/controller-services.ts +2 -0
- package/src/runtime/root/entry.ts +4 -3
- package/src/runtime/root/gateway-adapter.ts +3 -3
- package/src/runtime/root/local-bridge.ts +5 -2
- package/src/runtime/root/mcp-transport.ts +5 -5
- package/src/runtime/root/package-connector-service.ts +108 -56
- package/src/runtime/root/package-runtime-release.ts +85 -18
- package/src/runtime/root/package-runtime-service.ts +60 -97
- package/src/runtime/root/release-execution-canary.ts +71 -0
- package/src/runtime/root/release-loader.ts +68 -0
- package/src/runtime/root/release-manifest.ts +106 -2
- package/src/runtime/root/release-materialize.ts +103 -4
- package/src/runtime/root/release-store.ts +31 -2
- package/src/runtime/root/runtime.ts +240 -25
- package/src/runtime/root/scheduled-controller-composition.ts +51 -0
- package/src/runtime/root/scheduler.ts +12 -4
- package/src/runtime/root/service-runner.ts +1 -1
- package/src/runtime/root/service.ts +41 -16
- package/src/runtime/root/status.ts +1 -0
- package/src/runtime/root/types.ts +24 -1
- package/src/runtime/shared/local-bridge-surface.ts +1 -1
- package/src/runtime/shared/process-environment.ts +19 -4
- package/src/runtime/shared/storage-capacity.ts +68 -0
- package/src/runtime/standalone-recovery/controller-home-migration.ts +1116 -0
- package/src/runtime/standalone-recovery/core.ts +984 -230
- package/src/runtime/standalone-recovery/entry.ts +182 -51
- package/src/runtime/standalone-recovery/independent-host-rescue.ts +172 -0
- package/src/runtime/standalone-recovery/installer.ts +212 -104
- package/src/runtime/standalone-recovery/mcp-server.ts +243 -0
- package/src/runtime/standalone-recovery/mutation-identity-contract.ts +21 -0
- package/src/runtime/standalone-recovery/operation-lock.ts +160 -0
- package/src/runtime/standalone-recovery/performance.ts +135 -0
- package/src/runtime/standalone-recovery/release.ts +5 -0
- package/src/runtime/watchdog/workflow-watchdog.ts +1 -1
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -1
- package/src/runtime/workflow/schedules/engine.ts +191 -343
- package/src/runtime/workflow/schedules/pending-activation.ts +1 -1
- package/src/runtime/workflow/schedules/settlement.ts +2 -191
- package/src/runtime/workflow/schedules/store.ts +2 -607
- package/src/runtime/workflow/schedules/types.ts +2 -127
- package/src/runtime/workflow/schedules/work-continuation.ts +180 -15
- package/src/runtime/workflows/first-party/xiaohongshu.ts +122 -0
- package/src/runtime/workflows/runtime.ts +486 -0
- package/src/testing/test-governance.ts +90 -29
- package/assets/templates/helpers/archive-architecture-request.sh +0 -244
- package/docs/architecture/history/README.md +0 -7
- package/docs/architecture/history/chatgpt-handoff-facade.md +0 -397
- package/docs/architecture/history/global-hook-runtime.md +0 -166
- package/docs/architecture/history/ios-semantic-automation-provider-v2.md +0 -170
- package/docs/architecture/requests/archive/2026/20260528-154740-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-154816-assets-hooks-assets-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161851-ai-harness-workflow-contract-json-ai-harness-workflow-contract-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161853-scripts-check-task-workflow-sh-scripts-check-task-workflow-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-161911-assets-workflow-contract-v1-json-assets-workflow-contract-v1-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222416-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222444-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222457-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222648-ai-hooks-ai-hooks-pre-edit-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222705-ai-hooks-ai-hooks-worktree-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222726-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-222727-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-224736-ai-hooks-ai-hooks-hook-input-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233259-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233335-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233456-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233457-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233637-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260528-233638-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-000322-root-package-json.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-004238-ai-hooks-ai-hooks-lib-workflow-state-sh.md +0 -59
- package/docs/architecture/requests/archive/2026/20260529-020654-ai-harness-policy-json-ai-harness-policy-json.md +0 -63
- package/docs/architecture/requests/archive/2026/20260529-094236-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094323-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094331-ai-hooks-ai-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094339-assets-hooks-assets-hooks-prompt-guard-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094430-assets-hooks-assets-hooks-session-start-context-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260529-094446-ai-hooks-ai-hooks-session-start-context-sh.md +0 -60
- package/docs/architecture/requests/archive/2026/20260613-002040-runtime-harness-hook-adapters.md +0 -68
- package/docs/architecture/requests/archive/2026/root.md +0 -68
- package/docs/architecture/requests/archive/2026/runtime-harness-hook-adapters.md +0 -76
- package/docs/architecture/requests/archive/2026/verification-evals-checks.md +0 -68
- package/docs/architecture/requests/archive/2026/workflow-engine-contract-assets.md +0 -69
- package/scripts/archive-architecture-request.sh +0 -4
- package/scripts/run-skill-evals.ts +0 -1022
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
type BrowserAutomationTrustedInput,
|
|
10
10
|
} from './browser-automation-service';
|
|
11
11
|
import { AssistantPluginError } from './errors';
|
|
12
|
-
import type { BrowserNativeAttachAttempt, BrowserNativeProduct } from '
|
|
12
|
+
import type { BrowserNativeAttachAttempt, BrowserNativeProduct } from '../../../packages/protocols/browser/index';
|
|
13
13
|
|
|
14
14
|
const RECORD_SEPARATOR = String.fromCharCode(30);
|
|
15
15
|
const DEFAULT_NATIVE_TIMEOUT_MS = 5_000;
|
|
@@ -267,7 +267,7 @@ async function sendBrowserTrustedInput(
|
|
|
267
267
|
|| /\bBROWSER_AUTOMATION_ACTION_UNSUPPORTED\b/.test(message)) {
|
|
268
268
|
throw new AssistantPluginError(
|
|
269
269
|
'PLUGIN_BROWSER_TRUSTED_INPUT_UNAVAILABLE',
|
|
270
|
-
'
|
|
270
|
+
'The configured Computer input provider does not support native browser trusted input. Keep the exact tab explicitly foregrounded and use a separately grounded Computer interaction, or upgrade the configured provider.',
|
|
271
271
|
{ retryable: false, details: { browserProduct: request.product, requiredProviderAction: 'trusted_input' } },
|
|
272
272
|
);
|
|
273
273
|
}
|
|
@@ -333,6 +333,15 @@ export function getMacOsBrowserAttachObservation(): MacOsBrowserAttachObservatio
|
|
|
333
333
|
: undefined;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
+
function recordSuccessfulMacOsBrowserAttachment(attachment: MacOsBrowserAttachment): void {
|
|
337
|
+
lastAttachObservation = {
|
|
338
|
+
checkedAt: new Date().toISOString(),
|
|
339
|
+
ready: true,
|
|
340
|
+
selectedProduct: attachment.metadata.product,
|
|
341
|
+
attempts: attachment.attempts.map((attempt) => ({ ...attempt })),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
336
345
|
const BROWSERS: Record<MacOsBrowserProduct, MacOsBrowserDefinition> = {
|
|
337
346
|
chrome: {
|
|
338
347
|
product: 'chrome',
|
|
@@ -513,12 +522,17 @@ function createOwnedTabScript(browser: MacOsBrowserDefinition): string {
|
|
|
513
522
|
return `on run argv
|
|
514
523
|
set targetUrl to item 1 of argv
|
|
515
524
|
${browserTellScript(browser, `
|
|
516
|
-
if (count of windows) is 0 then
|
|
517
|
-
set targetWindow to
|
|
518
|
-
set
|
|
519
|
-
set
|
|
525
|
+
if (count of windows) is 0 then
|
|
526
|
+
set targetWindow to make new window
|
|
527
|
+
set targetTab to active tab of targetWindow
|
|
528
|
+
set URL of targetTab to targetUrl
|
|
529
|
+
else
|
|
530
|
+
set targetWindow to front window
|
|
531
|
+
set originalActiveIndex to active tab index of targetWindow
|
|
532
|
+
set targetTab to make new tab at end of tabs of targetWindow with properties {URL:targetUrl}
|
|
533
|
+
set active tab index of targetWindow to originalActiveIndex
|
|
534
|
+
end if
|
|
520
535
|
set targetTabId to id of targetTab
|
|
521
|
-
set active tab index of targetWindow to originalActiveIndex
|
|
522
536
|
set separator to ASCII character 30
|
|
523
537
|
return ((id of targetWindow) as text) & separator & (targetTabId as text)
|
|
524
538
|
`)}
|
|
@@ -674,18 +688,14 @@ export async function discoverMacOsBrowserAttachment(
|
|
|
674
688
|
}
|
|
675
689
|
const selectedAttempt = attempts.find((entry) => entry.product === selected.metadata.product);
|
|
676
690
|
if (selectedAttempt) selectedAttempt.status = 'selected';
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
selectedProduct: selected.metadata.product,
|
|
681
|
-
attempts: attempts.map((attempt) => ({ ...attempt })),
|
|
691
|
+
const attachment: MacOsBrowserAttachment = {
|
|
692
|
+
metadata: selected.metadata,
|
|
693
|
+
attempts,
|
|
682
694
|
};
|
|
695
|
+
recordSuccessfulMacOsBrowserAttachment(attachment);
|
|
683
696
|
return {
|
|
684
697
|
attempts,
|
|
685
|
-
attachment
|
|
686
|
-
metadata: selected.metadata,
|
|
687
|
-
attempts,
|
|
688
|
-
},
|
|
698
|
+
attachment,
|
|
689
699
|
};
|
|
690
700
|
}
|
|
691
701
|
|
|
@@ -1230,10 +1240,13 @@ export class MacOsAppleEventsPage {
|
|
|
1230
1240
|
|
|
1231
1241
|
private async setChecked(selector: string, checked: boolean): Promise<void> {
|
|
1232
1242
|
await this.evaluate(selectorSource(selector, `
|
|
1233
|
-
if (!('checked' in element)
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
element.
|
|
1243
|
+
if (!('checked' in element) || typeof element.click !== 'function') {
|
|
1244
|
+
throw new Error('Element is not checkable.');
|
|
1245
|
+
}
|
|
1246
|
+
if (element.checked !== ${checked}) element.click();
|
|
1247
|
+
if (element.checked !== ${checked}) {
|
|
1248
|
+
throw new Error('Requested checked state did not persist.');
|
|
1249
|
+
}
|
|
1237
1250
|
return true;
|
|
1238
1251
|
`));
|
|
1239
1252
|
}
|
|
@@ -1341,7 +1354,7 @@ async function resolveCurrentMacOsBrowserTabRef(
|
|
|
1341
1354
|
): Promise<MacOsBrowserTabRef> {
|
|
1342
1355
|
// Existing unit-level AppleScript hooks historically model one exact script at a time.
|
|
1343
1356
|
// Preserve that narrow test seam unless a live inventory hook is explicitly supplied;
|
|
1344
|
-
// production always resolves through the
|
|
1357
|
+
// production always resolves through the configured Computer provider inventory.
|
|
1345
1358
|
const inventory = runtimeHooks.tabInventory
|
|
1346
1359
|
? await runtimeHooks.tabInventory(product, timeoutMs)
|
|
1347
1360
|
: runtimeHooks.runAppleScript
|
|
@@ -1464,6 +1477,40 @@ export async function createMacOsBrowserOwnedPage(
|
|
|
1464
1477
|
return page;
|
|
1465
1478
|
}
|
|
1466
1479
|
|
|
1480
|
+
export async function createMacOsBrowserOwnedPageForProduct(
|
|
1481
|
+
product: MacOsBrowserProduct,
|
|
1482
|
+
url: string,
|
|
1483
|
+
attempts: MacOsBrowserAttachAttempt[],
|
|
1484
|
+
timeoutMs = DEFAULT_NATIVE_TIMEOUT_MS,
|
|
1485
|
+
): Promise<{ page: MacOsAppleEventsPage; attachment: MacOsBrowserAttachment }> {
|
|
1486
|
+
const browser = browserDefinition(product);
|
|
1487
|
+
const creationEvidence = await runCreateTabAutomation(
|
|
1488
|
+
{ action: 'create_tab', product, url },
|
|
1489
|
+
createOwnedTabScript(browser),
|
|
1490
|
+
[url],
|
|
1491
|
+
timeoutMs,
|
|
1492
|
+
);
|
|
1493
|
+
const ref = creationEvidence.ref;
|
|
1494
|
+
const attachment: MacOsBrowserAttachment = {
|
|
1495
|
+
attempts: attempts.map((attempt) => ({ ...attempt })),
|
|
1496
|
+
metadata: {
|
|
1497
|
+
product,
|
|
1498
|
+
appName: browser.appName,
|
|
1499
|
+
bundleId: browser.bundleId,
|
|
1500
|
+
frontmost: false,
|
|
1501
|
+
url,
|
|
1502
|
+
title: '',
|
|
1503
|
+
bounds: { x: 0, y: 0, width: 0, height: 0 },
|
|
1504
|
+
windowId: ref.windowId,
|
|
1505
|
+
tabId: ref.tabId,
|
|
1506
|
+
active: false,
|
|
1507
|
+
},
|
|
1508
|
+
};
|
|
1509
|
+
const page = new MacOsAppleEventsPage(attachment, timeoutMs, ref, creationEvidence);
|
|
1510
|
+
rememberMacOsBrowserPageHandle(product, ref, page);
|
|
1511
|
+
return { page, attachment };
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1467
1514
|
export async function reattachMacOsBrowserOwnedPage(
|
|
1468
1515
|
product: MacOsBrowserProduct,
|
|
1469
1516
|
ref: MacOsBrowserTabRef,
|
|
@@ -1488,6 +1535,7 @@ export async function reattachMacOsBrowserOwnedPage(
|
|
|
1488
1535
|
: ref;
|
|
1489
1536
|
const page = new MacOsAppleEventsPage(attachment, timeoutMs, resolvedRef);
|
|
1490
1537
|
rememberMacOsBrowserPageHandle(product, resolvedRef, page);
|
|
1538
|
+
recordSuccessfulMacOsBrowserAttachment(attachment);
|
|
1491
1539
|
return { page, attachment };
|
|
1492
1540
|
}
|
|
1493
1541
|
|
|
@@ -7,8 +7,8 @@ import type {
|
|
|
7
7
|
import {
|
|
8
8
|
DEFAULT_BROWSER_SESSION_LIST_LIMIT,
|
|
9
9
|
MAX_BROWSER_SESSION_LIST_LIMIT,
|
|
10
|
-
} from '
|
|
11
|
-
import { MAX_BROWSER_CDP_ENDPOINT_CANDIDATES } from '
|
|
10
|
+
} from '../../../packages/plugin-runtime/browser/session-authority';
|
|
11
|
+
import { MAX_BROWSER_CDP_ENDPOINT_CANDIDATES } from '../../../packages/plugin-runtime/browser/runtime-contract';
|
|
12
12
|
|
|
13
13
|
export function browserPermissions(ready: boolean): AssistantPluginPermissionScope[] {
|
|
14
14
|
return [
|
|
@@ -59,7 +59,7 @@ export function browserCapabilities(): AssistantPluginCapability[] {
|
|
|
59
59
|
scopes: ['browser.read', 'browser.profile'],
|
|
60
60
|
actions: [
|
|
61
61
|
'open_page', 'navigate', 'reload', 'go_back', 'wait_for_load_state',
|
|
62
|
-
'get_text', 'get_html', 'query_selector', 'query_all', 'get_attribute', 'list_frames', 'verify_state',
|
|
62
|
+
'get_text', 'get_html', 'query_selector', 'query_all', 'get_attribute', 'list_frames', 'verify_state', 'reconcile_effect',
|
|
63
63
|
'screenshot', 'extract_links', 'extract_tables', 'extract_forms', 'snapshot_interactive',
|
|
64
64
|
'get_console_errors', 'get_failed_requests',
|
|
65
65
|
],
|
|
@@ -104,7 +104,7 @@ const frameScopeProperties = {
|
|
|
104
104
|
|
|
105
105
|
function interactSchema(extra: Record<string, unknown>, required: string[]): Record<string, unknown> {
|
|
106
106
|
return sessionTargetSchema({
|
|
107
|
-
post_action_wait_ms: { type: 'number' },
|
|
107
|
+
post_action_wait_ms: { type: 'number', minimum: 0, description: 'Optional explicit compatibility settle delay after a semantic action. Omit for normal provider completion; native foreground activation retains its provider-specific verification budget.' },
|
|
108
108
|
...extra,
|
|
109
109
|
}, required);
|
|
110
110
|
}
|
|
@@ -318,7 +318,7 @@ export function browserActions(): AssistantPluginActionDescriptor[] {
|
|
|
318
318
|
description: 'Return matching element summaries (bounded).',
|
|
319
319
|
readOnly: true, risk: 'readonly', confirmation: 'none', defaultTimeoutMs: 60_000, cancellable: true, idempotent: true,
|
|
320
320
|
scopes: ['browser.read'], resourceClaims: [{ resource: 'remote', mode: 'read' }],
|
|
321
|
-
argumentsSchema: sessionTargetSchema({ selector: { type: 'string' }, limit: { type: 'number' }, ...frameScopeProperties }, ['selector']),
|
|
321
|
+
argumentsSchema: sessionTargetSchema({ selector: { type: 'string' }, limit: { type: 'number' }, from_end: { type: 'boolean' }, ...frameScopeProperties }, ['selector']),
|
|
322
322
|
},
|
|
323
323
|
{
|
|
324
324
|
actionId: 'get_attribute',
|
|
@@ -345,13 +345,37 @@ export function browserActions(): AssistantPluginActionDescriptor[] {
|
|
|
345
345
|
argumentsSchema: sessionTargetSchema({
|
|
346
346
|
expected_url: { type: 'string' },
|
|
347
347
|
url_contains: { type: 'string' },
|
|
348
|
+
url_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 2000 } },
|
|
349
|
+
url_contains_none: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 2000 } },
|
|
348
350
|
selector: { type: 'string' },
|
|
349
351
|
require_visible: { type: 'boolean' },
|
|
350
352
|
text_contains: { type: 'string', maxLength: 10000 },
|
|
353
|
+
text_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 10000 } },
|
|
354
|
+
text_contains_none: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 10000 } },
|
|
351
355
|
max_chars: { type: 'number', minimum: 1, maximum: 100000 },
|
|
352
356
|
...frameScopeProperties,
|
|
353
357
|
}, ['session_id']),
|
|
354
358
|
},
|
|
359
|
+
{
|
|
360
|
+
actionId: 'reconcile_effect',
|
|
361
|
+
title: 'Reconcile browser effect',
|
|
362
|
+
description: 'Read the already-bound browser session and classify one exact prior effect request as applied, not_applied, or unknown from declared observation criteria. Never navigates or replays the effect.',
|
|
363
|
+
readOnly: true, risk: 'readonly', confirmation: 'none', defaultTimeoutMs: 60_000, cancellable: true, idempotent: true,
|
|
364
|
+
scopes: ['browser.read'], resourceClaims: [{ resource: 'remote', mode: 'read' }],
|
|
365
|
+
argumentsSchema: sessionTargetSchema({
|
|
366
|
+
effect_request_id: { type: 'string' },
|
|
367
|
+
applied_url_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 2000 } },
|
|
368
|
+
applied_url_contains_none: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 2000 } },
|
|
369
|
+
applied_text_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 10000 } },
|
|
370
|
+
applied_text_contains_none: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 10000 } },
|
|
371
|
+
applied_selector: { type: 'string' },
|
|
372
|
+
not_applied_url_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 2000 } },
|
|
373
|
+
not_applied_text_contains_any: { type: 'array', minItems: 1, maxItems: 16, items: { type: 'string', maxLength: 10000 } },
|
|
374
|
+
not_applied_selector: { type: 'string' },
|
|
375
|
+
max_chars: { type: 'number', minimum: 1, maximum: 100000 },
|
|
376
|
+
...frameScopeProperties,
|
|
377
|
+
}, ['session_id', 'effect_request_id']),
|
|
378
|
+
},
|
|
355
379
|
{
|
|
356
380
|
actionId: 'screenshot',
|
|
357
381
|
title: 'Screenshot',
|
|
@@ -515,7 +539,7 @@ export function browserActions(): AssistantPluginActionDescriptor[] {
|
|
|
515
539
|
{
|
|
516
540
|
actionId: 'trusted_input',
|
|
517
541
|
title: 'Trusted browser input',
|
|
518
|
-
description: 'Send bounded mouse, wheel, drag, key, or text input after authorization. Playwright/CDP uses page input primitives; native
|
|
542
|
+
description: 'Send bounded mouse, wheel, drag, key, or text input after authorization. Playwright/CDP uses page input primitives; native sessions require the exact saved tab to already be foreground/active and use the configured Computer input provider without activating another tab.',
|
|
519
543
|
readOnly: false, risk: 'remote_write', confirmation: 'authorization', defaultTimeoutMs: 60_000, cancellable: true, idempotent: false,
|
|
520
544
|
scopes: ['browser.interact', 'browser.profile'], resourceClaims: writeRemote,
|
|
521
545
|
argumentsSchema: interactSchema({
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type MacOsBrowserProduct,
|
|
8
8
|
} from './browser-macos-bridge';
|
|
9
9
|
import { listSavedBrowserSessions, removeBrowserSession } from './browser-session-store';
|
|
10
|
-
import type { BrowserSessionInventoryItem, BrowserSessionState } from '
|
|
10
|
+
import type { BrowserSessionInventoryItem, BrowserSessionState } from '../../../packages/protocols/browser/index';
|
|
11
11
|
|
|
12
12
|
export interface NativeOwnedSessionInspection {
|
|
13
13
|
items: Map<string, BrowserSessionInventoryItem>;
|
|
@@ -1,109 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
providerSupports,
|
|
4
|
-
type BrowserForegroundRequirement,
|
|
5
|
-
type BrowserProviderCapabilities,
|
|
6
|
-
type BrowserProviderCapability,
|
|
7
|
-
} from './browser-runtime-contract';
|
|
8
|
-
|
|
9
|
-
export interface BrowserRuntimeProvider<TInput, TResult> extends BrowserProviderCapabilities {
|
|
10
|
-
/** Lower values are preferred when multiple providers satisfy the same capability contract. */
|
|
11
|
-
priority: number;
|
|
12
|
-
/** Availability is decided before execution; ordinary provider failures are never fallback signals. */
|
|
13
|
-
supportsInput(input: TInput): boolean;
|
|
14
|
-
execute(input: TInput): Promise<TResult>;
|
|
15
|
-
/** Runs only after an explicit stale/restart/configuration boundary. */
|
|
16
|
-
revalidate?: () => Promise<void> | void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface BrowserProviderState<TInput, TResult> {
|
|
20
|
-
provider: BrowserRuntimeProvider<TInput, TResult>;
|
|
21
|
-
generation: number;
|
|
22
|
-
invalidatedReason?: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface BrowserProviderSelection<TInput, TResult> {
|
|
26
|
-
provider: BrowserRuntimeProvider<TInput, TResult>;
|
|
27
|
-
generation: number;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* A typed pre-action rejection. Runtime may select another provider because this proves the action
|
|
32
|
-
* was not attempted. Arbitrary provider errors are intentionally not mapped to this signal.
|
|
33
|
-
*/
|
|
34
|
-
export class BrowserProviderUnavailableBeforeActionError extends Error {
|
|
35
|
-
readonly providerId: string;
|
|
36
|
-
readonly reason: string;
|
|
37
|
-
|
|
38
|
-
constructor(providerId: string, reason: string) {
|
|
39
|
-
super(`${providerId} unavailable before action: ${reason}`);
|
|
40
|
-
this.name = 'BrowserProviderUnavailableBeforeActionError';
|
|
41
|
-
this.providerId = providerId;
|
|
42
|
-
this.reason = reason;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function foregroundCompatible(
|
|
47
|
-
provider: BrowserProviderCapabilities,
|
|
48
|
-
requested: BrowserForegroundRequirement,
|
|
49
|
-
): boolean {
|
|
50
|
-
// Background-safe providers may execute explicit foreground transactions; foreground-only
|
|
51
|
-
// providers may not satisfy a background-safe transaction.
|
|
52
|
-
return requested === 'explicit_required' || provider.foreground === 'none';
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export class BrowserProviderRegistry<TInput, TResult> {
|
|
56
|
-
private readonly providers = new Map<string, BrowserProviderState<TInput, TResult>>();
|
|
57
|
-
|
|
58
|
-
register(provider: BrowserRuntimeProvider<TInput, TResult>): void {
|
|
59
|
-
const current = this.providers.get(provider.providerId);
|
|
60
|
-
if (current) {
|
|
61
|
-
// Refresh call-local closures without discarding the warm provider generation.
|
|
62
|
-
current.provider = provider;
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
this.providers.set(provider.providerId, { provider, generation: 1 });
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
invalidate(providerId: string, reason: string): void {
|
|
69
|
-
const state = this.providers.get(providerId);
|
|
70
|
-
if (state) state.invalidatedReason = reason;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
invalidateAll(reason: string): void {
|
|
74
|
-
for (const state of this.providers.values()) state.invalidatedReason = reason;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
private async prepare(state: BrowserProviderState<TInput, TResult>): Promise<void> {
|
|
78
|
-
if (!state.invalidatedReason) return;
|
|
79
|
-
await state.provider.revalidate?.();
|
|
80
|
-
state.invalidatedReason = undefined;
|
|
81
|
-
state.generation += 1;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async select(options: {
|
|
85
|
-
input: TInput;
|
|
86
|
-
requiredCapabilities: readonly BrowserProviderCapability[];
|
|
87
|
-
foreground: BrowserForegroundRequirement;
|
|
88
|
-
excludedProviderIds?: ReadonlySet<string>;
|
|
89
|
-
}): Promise<BrowserProviderSelection<TInput, TResult>> {
|
|
90
|
-
const candidates = [...this.providers.values()]
|
|
91
|
-
.filter(({ provider }) => !options.excludedProviderIds?.has(provider.providerId))
|
|
92
|
-
.filter(({ provider }) => provider.supportsInput(options.input))
|
|
93
|
-
.filter(({ provider }) => providerSupports(provider, options.requiredCapabilities))
|
|
94
|
-
.filter(({ provider }) => foregroundCompatible(provider, options.foreground))
|
|
95
|
-
.sort((left, right) => left.provider.priority - right.provider.priority
|
|
96
|
-
|| left.provider.providerId.localeCompare(right.provider.providerId));
|
|
97
|
-
|
|
98
|
-
const selected = candidates[0];
|
|
99
|
-
if (!selected) {
|
|
100
|
-
throw new AssistantPluginError(
|
|
101
|
-
'PLUGIN_BROWSER_PROVIDER_UNAVAILABLE',
|
|
102
|
-
`No Browser provider satisfies required capabilities: ${options.requiredCapabilities.join(', ') || 'browser.transaction'}.`,
|
|
103
|
-
{ retryable: true },
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
await this.prepare(selected);
|
|
107
|
-
return { provider: selected.provider, generation: selected.generation };
|
|
108
|
-
}
|
|
109
|
-
}
|
|
1
|
+
/** @deprecated C0 compatibility shim. Browser provider selection lives in packages/plugin-runtime/browser. */
|
|
2
|
+
export * from '../../../packages/plugin-runtime/browser/provider-registry';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildBrowserPluginManifest,
|
|
3
|
+
executeBrowserPluginAction,
|
|
4
|
+
resolveBrowserPluginAuthorizationContext,
|
|
5
|
+
} from './browser-adapter';
|
|
6
|
+
import type { AssistantPluginAdapter } from './types';
|
|
7
|
+
|
|
8
|
+
/** Thin first-party registration. Browser execution remains an adapter implementation detail. */
|
|
9
|
+
export const browserPluginAdapter: AssistantPluginAdapter = {
|
|
10
|
+
pluginId: 'browser',
|
|
11
|
+
scope: 'controller_with_repository_overlay',
|
|
12
|
+
exposure: 'internal',
|
|
13
|
+
buildManifest: buildBrowserPluginManifest,
|
|
14
|
+
executeAction: executeBrowserPluginAction,
|
|
15
|
+
resolveAuthorizationContext: resolveBrowserPluginAuthorizationContext,
|
|
16
|
+
};
|
|
@@ -1,154 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export type BrowserProviderCapability =
|
|
4
|
-
| 'dom.read'
|
|
5
|
-
| 'dom.interact'
|
|
6
|
-
| 'browser.internal_resources'
|
|
7
|
-
| 'browser.screenshot'
|
|
8
|
-
| 'browser.trusted_input'
|
|
9
|
-
| 'browser.foreground'
|
|
10
|
-
| 'browser.transaction'
|
|
11
|
-
| 'browser.persistent_handle';
|
|
12
|
-
|
|
13
|
-
export type BrowserTargetOwnership = 'plugin_owned' | 'user_owned' | 'provider_owned';
|
|
14
|
-
export type BrowserTargetKind = 'page' | 'tab' | 'browser_internal_resource';
|
|
15
|
-
export type BrowserForegroundRequirement = 'none' | 'explicit_required';
|
|
16
|
-
export type BrowserActionReplaySafety = 'read_only' | 'idempotent' | 'non_idempotent';
|
|
17
|
-
|
|
18
|
-
/** Stable resource identity. URL/title are deliberately excluded because they are mutable observations. */
|
|
19
|
-
export interface BrowserTargetIdentity {
|
|
20
|
-
providerId: string;
|
|
21
|
-
resourceKind: BrowserTargetKind;
|
|
22
|
-
resourceId: string;
|
|
23
|
-
browserProduct?: string;
|
|
24
|
-
ownership: BrowserTargetOwnership;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface BrowserObservedState {
|
|
28
|
-
url: string;
|
|
29
|
-
title?: string;
|
|
30
|
-
observedAt: string;
|
|
31
|
-
providerRevision?: string;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface BrowserProviderCapabilities {
|
|
35
|
-
providerId: string;
|
|
36
|
-
capabilities: readonly BrowserProviderCapability[];
|
|
37
|
-
foreground: BrowserForegroundRequirement;
|
|
38
|
-
/** True only when the provider can verify postconditions in the same provider call that performs the action. */
|
|
39
|
-
verifiesPostconditions: boolean;
|
|
40
|
-
/** True only when an already-bound provider handle can be reused across bounded consecutive actions. */
|
|
41
|
-
persistentHandle: boolean;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export type BrowserCondition =
|
|
45
|
-
| { kind: 'target_identity'; target: BrowserTargetIdentity }
|
|
46
|
-
| { kind: 'url_equals'; url: string }
|
|
47
|
-
| { kind: 'url_matches'; pattern: string }
|
|
48
|
-
| { kind: 'selector_exists'; selector: string }
|
|
49
|
-
| { kind: 'selector_visible'; selector: string }
|
|
50
|
-
| { kind: 'text_contains'; text: string; selector?: string }
|
|
51
|
-
| { kind: 'attribute_equals'; selector: string; attribute: string; value: string }
|
|
52
|
-
| { kind: 'provider_assertion'; assertion: string; expected: string | number | boolean };
|
|
53
|
-
|
|
54
|
-
export type BrowserTransactionAction =
|
|
55
|
-
| { kind: 'read'; operation: string; arguments?: Record<string, unknown> }
|
|
56
|
-
| { kind: 'dom'; operation: string; arguments?: Record<string, unknown> }
|
|
57
|
-
| { kind: 'internal_resource'; operation: string; arguments?: Record<string, unknown> }
|
|
58
|
-
| { kind: 'trusted_input'; operation: string; arguments?: Record<string, unknown> };
|
|
59
|
-
|
|
60
|
-
export interface BrowserTransaction {
|
|
61
|
-
transactionId: string;
|
|
62
|
-
target: BrowserTargetIdentity;
|
|
63
|
-
requiredCapabilities: readonly BrowserProviderCapability[];
|
|
64
|
-
foreground: BrowserForegroundRequirement;
|
|
65
|
-
replaySafety: BrowserActionReplaySafety;
|
|
66
|
-
preconditions?: readonly BrowserCondition[];
|
|
67
|
-
action: BrowserTransactionAction;
|
|
68
|
-
/** Writes/interactions require at least one postcondition unless the action itself returns a typed read result. */
|
|
69
|
-
postconditions?: readonly BrowserCondition[];
|
|
70
|
-
timeoutMs: number;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export interface BrowserConditionEvidence {
|
|
74
|
-
condition: BrowserCondition;
|
|
75
|
-
satisfied: boolean;
|
|
76
|
-
observed?: unknown;
|
|
77
|
-
reason?: string;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export interface BrowserTransactionTiming {
|
|
81
|
-
providerCalls: number;
|
|
82
|
-
providerDurationMs: number;
|
|
83
|
-
totalDurationMs: number;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export interface BrowserTransactionResult<T = unknown> {
|
|
87
|
-
transactionId: string;
|
|
88
|
-
target: BrowserTargetIdentity;
|
|
89
|
-
transportSucceeded: boolean;
|
|
90
|
-
actionPerformed: boolean;
|
|
91
|
-
/** Authoritative success bit. AX/transport success alone must never set this true. */
|
|
92
|
-
verified: boolean;
|
|
93
|
-
result?: T;
|
|
94
|
-
observedState?: BrowserObservedState;
|
|
95
|
-
preconditionEvidence: readonly BrowserConditionEvidence[];
|
|
96
|
-
postconditionEvidence: readonly BrowserConditionEvidence[];
|
|
97
|
-
timing: BrowserTransactionTiming;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export interface BrowserRuntimeBudget {
|
|
101
|
-
p95Ms: number;
|
|
102
|
-
maxProviderCallsWarm: number;
|
|
103
|
-
maxProviderCallsCold: number;
|
|
104
|
-
foregroundAllowed: boolean;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Architecture targets, not per-host promises. Live V2 gates report p50/p95 and fail when a
|
|
109
|
-
* regression materially exceeds these budgets without attributable provider evidence.
|
|
110
|
-
*/
|
|
111
|
-
export const BROWSER_RUNTIME_V2_BUDGETS = {
|
|
112
|
-
read: { p95Ms: 350, maxProviderCallsWarm: 1, maxProviderCallsCold: 2, foregroundAllowed: false },
|
|
113
|
-
domInteraction: { p95Ms: 600, maxProviderCallsWarm: 1, maxProviderCallsCold: 2, foregroundAllowed: false },
|
|
114
|
-
internalResource: { p95Ms: 700, maxProviderCallsWarm: 1, maxProviderCallsCold: 2, foregroundAllowed: false },
|
|
115
|
-
physicalInput: { p95Ms: 1_500, maxProviderCallsWarm: 1, maxProviderCallsCold: 2, foregroundAllowed: true },
|
|
116
|
-
} as const satisfies Record<string, BrowserRuntimeBudget>;
|
|
117
|
-
|
|
118
|
-
export function browserTargetKey(target: BrowserTargetIdentity): string {
|
|
119
|
-
return [target.providerId, target.browserProduct ?? '', target.resourceKind, target.resourceId, target.ownership].join(':');
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export function providerSupports(
|
|
123
|
-
provider: BrowserProviderCapabilities,
|
|
124
|
-
required: readonly BrowserProviderCapability[],
|
|
125
|
-
): boolean {
|
|
126
|
-
const available = new Set(provider.capabilities);
|
|
127
|
-
return required.every((capability) => available.has(capability));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export function browserTransactionVerified(result: BrowserTransactionResult): boolean {
|
|
131
|
-
return result.transportSucceeded
|
|
132
|
-
&& result.actionPerformed
|
|
133
|
-
&& result.verified
|
|
134
|
-
&& result.preconditionEvidence.every((entry) => entry.satisfied)
|
|
135
|
-
&& result.postconditionEvidence.every((entry) => entry.satisfied);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export function browserTransactionRequiresPostcondition(transaction: BrowserTransaction): boolean {
|
|
139
|
-
return transaction.replaySafety !== 'read_only';
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export function validateBrowserTransaction(transaction: BrowserTransaction): string[] {
|
|
143
|
-
const errors: string[] = [];
|
|
144
|
-
if (!transaction.transactionId.trim()) errors.push('transactionId is required');
|
|
145
|
-
if (!transaction.target.providerId.trim() || !transaction.target.resourceId.trim()) errors.push('stable target identity is incomplete');
|
|
146
|
-
if (!Number.isFinite(transaction.timeoutMs) || transaction.timeoutMs <= 0) errors.push('timeoutMs must be positive');
|
|
147
|
-
if (transaction.foreground === 'none' && transaction.requiredCapabilities.includes('browser.foreground')) {
|
|
148
|
-
errors.push('foreground capability cannot be required by a foreground-free transaction');
|
|
149
|
-
}
|
|
150
|
-
if (browserTransactionRequiresPostcondition(transaction) && (transaction.postconditions?.length ?? 0) === 0) {
|
|
151
|
-
errors.push('interactive transactions require at least one postcondition');
|
|
152
|
-
}
|
|
153
|
-
return errors;
|
|
154
|
-
}
|
|
1
|
+
/** @deprecated C0 compatibility shim. Browser runtime contracts live in packages/plugin-runtime/browser. */
|
|
2
|
+
export * from '../../../packages/plugin-runtime/browser/runtime-contract';
|
|
@@ -7,12 +7,13 @@ import {
|
|
|
7
7
|
type BrowserProviderCapability,
|
|
8
8
|
type BrowserTargetIdentity,
|
|
9
9
|
type BrowserTransaction,
|
|
10
|
-
} from '
|
|
10
|
+
} from '../../../packages/plugin-runtime/browser/runtime-contract';
|
|
11
11
|
import {
|
|
12
12
|
BrowserProviderRegistry,
|
|
13
|
+
BrowserProviderSelectionError,
|
|
13
14
|
BrowserProviderUnavailableBeforeActionError,
|
|
14
15
|
type BrowserRuntimeProvider,
|
|
15
|
-
} from '
|
|
16
|
+
} from '../../../packages/plugin-runtime/browser/provider-registry';
|
|
16
17
|
|
|
17
18
|
export const ALL_BROWSER_PROVIDER_CAPABILITIES = [
|
|
18
19
|
'dom.read',
|
|
@@ -25,9 +26,32 @@ export const ALL_BROWSER_PROVIDER_CAPABILITIES = [
|
|
|
25
26
|
'browser.persistent_handle',
|
|
26
27
|
] as const satisfies readonly BrowserProviderCapability[];
|
|
27
28
|
|
|
29
|
+
export const DEFAULT_NATIVE_FOREGROUND_VERIFICATION_WAIT_MS = 750;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Normal Browser semantic actions already await the provider primitive and return
|
|
33
|
+
* bounded post-action evidence. A caller may request an additional compatibility
|
|
34
|
+
* settle delay explicitly, but omission never creates a hidden fixed sleep.
|
|
35
|
+
*/
|
|
36
|
+
export function browserExplicitPostActionWaitMs(value: unknown): number {
|
|
37
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? Math.trunc(value) : 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Native foreground activation is different from ordinary semantic mutation: it
|
|
42
|
+
* must observe system foreground authority after an Apple Events/Computer action.
|
|
43
|
+
* Keep its provider-specific verification budget unless the caller explicitly
|
|
44
|
+
* supplies a non-negative compatibility value.
|
|
45
|
+
*/
|
|
46
|
+
export function browserNativeForegroundVerificationWaitMs(value: unknown): number {
|
|
47
|
+
return typeof value === 'number' && Number.isFinite(value) && value >= 0
|
|
48
|
+
? Math.trunc(value)
|
|
49
|
+
: DEFAULT_NATIVE_FOREGROUND_VERIFICATION_WAIT_MS;
|
|
50
|
+
}
|
|
51
|
+
|
|
28
52
|
const READ_ACTIONS = new Set([
|
|
29
53
|
'list_sessions', 'reconcile_sessions', 'get_handoff_status',
|
|
30
|
-
'get_text', 'get_html', 'query_selector', 'query_all', 'get_attribute', 'list_frames', 'verify_state',
|
|
54
|
+
'get_text', 'get_html', 'query_selector', 'query_all', 'get_attribute', 'list_frames', 'verify_state', 'reconcile_effect',
|
|
31
55
|
'extract_links', 'extract_tables', 'extract_forms', 'snapshot_interactive', 'get_console_errors', 'get_failed_requests',
|
|
32
56
|
'wait_for_load_state', 'wait_for_selector', 'await_file_transfer',
|
|
33
57
|
]);
|
|
@@ -166,12 +190,20 @@ export async function executeBrowserRuntimeAction(options: {
|
|
|
166
190
|
const policy = browserRuntimeActionPolicy(options.input.actionId);
|
|
167
191
|
const excluded = new Set<string>();
|
|
168
192
|
while (true) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
193
|
+
let selection;
|
|
194
|
+
try {
|
|
195
|
+
selection = await registry.select({
|
|
196
|
+
input: options.input,
|
|
197
|
+
requiredCapabilities: policy.requiredCapabilities,
|
|
198
|
+
foreground: policy.foreground,
|
|
199
|
+
excludedProviderIds: excluded,
|
|
200
|
+
});
|
|
201
|
+
} catch (error) {
|
|
202
|
+
if (error instanceof BrowserProviderSelectionError) {
|
|
203
|
+
throw new AssistantPluginError(error.code, error.message, { retryable: error.retryable });
|
|
204
|
+
}
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
175
207
|
const transaction = transactionFor(options.input, selection.provider.providerId, policy);
|
|
176
208
|
const validationErrors = validateBrowserTransaction(transaction);
|
|
177
209
|
if (validationErrors.length > 0) {
|