machine-bridge-mcp 2.0.0 → 3.0.0-beta.102
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/CHANGELOG.md +1142 -0
- package/CONTRIBUTING.md +23 -25
- package/GOVERNANCE.md +2 -2
- package/README.md +58 -20
- package/SECURITY.md +161 -120
- package/SUPPORT.md +1 -1
- package/browser-extension/broker-auth.js +83 -0
- package/browser-extension/broker-liveness.js +35 -0
- package/browser-extension/browser-error-boundary.js +96 -0
- package/browser-extension/browser-operations.js +1456 -101
- package/browser-extension/devtools-input.js +195 -34
- package/browser-extension/devtools-observation.js +429 -0
- package/browser-extension/devtools-session.js +48 -0
- package/browser-extension/manifest.json +4 -3
- package/browser-extension/page-automation.js +578 -118
- package/browser-extension/pairing-bootstrap.js +42 -0
- package/browser-extension/pairing.js +28 -12
- package/browser-extension/service-worker.js +126 -106
- package/docs/AGENT_CONTEXT.md +13 -10
- package/docs/ARCHITECTURE.md +159 -67
- package/docs/AUDIT.md +1302 -4
- package/docs/CLIENTS.md +19 -6
- package/docs/COMPUTER_USE.md +297 -0
- package/docs/ENGINEERING.md +72 -13
- package/docs/GETTING_STARTED.md +18 -20
- package/docs/LOCAL_AUTHORIZATION.md +115 -72
- package/docs/LOCAL_AUTOMATION.md +27 -21
- package/docs/LOGGING.md +40 -19
- package/docs/MANAGED_JOBS.md +37 -34
- package/docs/MULTI_ACCOUNT.md +98 -37
- package/docs/OPERATIONS.md +145 -51
- package/docs/OVERVIEW.md +14 -11
- package/docs/POLICY_REFERENCE.md +71 -3
- package/docs/PRIVACY.md +41 -2
- package/docs/PROJECT_STANDARDS.md +29 -6
- package/docs/RELEASING.md +238 -64
- package/docs/TESTING.md +150 -39
- package/docs/THREAT_MODEL.md +164 -67
- package/docs/TOOL_REFERENCE.md +653 -60
- package/docs/UPGRADING.md +78 -18
- package/native/macos/MachineBridgeBackgroundInput.swift +1051 -0
- package/native/macos/MachineBridgeBackgroundInputSmokeFixture.swift +295 -0
- package/native/macos/MachineBridgeTrustBroker.swift +233 -0
- package/package.json +94 -16
- package/scripts/accepted-candidate-tarball.mjs +77 -0
- package/scripts/candidate-runtime-store.mjs +93 -0
- package/scripts/check-plan.mjs +73 -3
- package/scripts/check-runner.mjs +129 -17
- package/scripts/commit-message-check.mjs +5 -2
- package/scripts/consumer-package-security.mjs +293 -0
- package/scripts/coverage-check.mjs +251 -15
- package/scripts/coverage-generation.mjs +41 -0
- package/scripts/coverage-range-merge.mjs +41 -0
- package/scripts/foreground-daemon-recovery.mjs +88 -0
- package/scripts/generate-policy-reference.mjs +28 -5
- package/scripts/generate-tool-reference.mjs +1 -1
- package/scripts/generate-worker-types.mjs +21 -11
- package/scripts/github-backlog.mjs +11 -10
- package/scripts/github-push.mjs +62 -16
- package/scripts/github-release-asset.mjs +58 -0
- package/scripts/github-release.mjs +241 -132
- package/scripts/global-package-installation.mjs +68 -0
- package/scripts/hardened-npm-session.mjs +42 -0
- package/scripts/install-published-prerelease.mjs +198 -0
- package/scripts/local-release-acceptance.mjs +103 -45
- package/scripts/macos-background-input-smoke.mjs +515 -0
- package/scripts/network-retry.mjs +8 -1
- package/scripts/npm-global-prefix.mjs +27 -0
- package/scripts/npm-publication-policy.mjs +17 -0
- package/scripts/official-mcp-conformance.mjs +267 -0
- package/scripts/persistent-activation-process.mjs +101 -0
- package/scripts/prepare-pinned-npm.mjs +12 -69
- package/scripts/prerelease-activation.mjs +160 -0
- package/scripts/privacy-check.mjs +14 -6
- package/scripts/promotion-digest.mjs +128 -0
- package/scripts/publish-npm.mjs +260 -0
- package/scripts/published-release.mjs +132 -0
- package/scripts/release-acceptance.mjs +62 -54
- package/scripts/release-browser-extension-store.mjs +172 -0
- package/scripts/release-candidate-manifest.mjs +52 -0
- package/scripts/release-channel.mjs +106 -0
- package/scripts/release-diagnostic.mjs +41 -0
- package/scripts/release-impact-check.mjs +12 -22
- package/scripts/release-oauth-canary-core.mjs +325 -0
- package/scripts/release-oauth-canary-evidence.mjs +100 -0
- package/scripts/release-oauth-canary.mjs +127 -0
- package/scripts/release-publication-guard.mjs +67 -0
- package/scripts/release-soak.mjs +284 -0
- package/scripts/release-state.mjs +1 -1
- package/scripts/run-checks.mjs +44 -7
- package/scripts/run-worker-dry-run.mjs +21 -0
- package/scripts/sarif-security-gate.mjs +2 -1
- package/scripts/sbom-check.mjs +106 -0
- package/scripts/start-release-candidate.mjs +267 -44
- package/scripts/syntax-check.mjs +36 -14
- package/scripts/verification-generation-guard.mjs +15 -0
- package/scripts/verification-idle-sleep-guard.mjs +37 -0
- package/scripts/verification-state.mjs +108 -0
- package/scripts/wrangler-command-lifecycle.mjs +115 -0
- package/src/local/account-access.mjs +13 -1
- package/src/local/account-admin-response.mjs +92 -0
- package/src/local/account-admin.mjs +52 -19
- package/src/local/agent-context-projection.mjs +26 -7
- package/src/local/agent-context.mjs +88 -49
- package/src/local/agent-skill-discovery.mjs +16 -5
- package/src/local/app-automation-macos-jxa.mjs +350 -0
- package/src/local/app-automation.mjs +873 -163
- package/src/local/application-capability-projection.mjs +24 -0
- package/src/local/authority-context.mjs +106 -0
- package/src/local/autostart-log-maintenance.mjs +36 -0
- package/src/local/browser-bridge-http.mjs +5 -3
- package/src/local/browser-bridge.mjs +109 -31
- package/src/local/browser-broker-auth-http.mjs +67 -0
- package/src/local/browser-broker-auth.mjs +98 -0
- package/src/local/browser-broker-routes.mjs +63 -20
- package/src/local/browser-broker-server.mjs +17 -7
- package/src/local/browser-command.mjs +79 -30
- package/src/local/browser-computer-observation-service.mjs +266 -0
- package/src/local/browser-extension-identity.mjs +50 -0
- package/src/local/browser-extension-path.mjs +22 -0
- package/src/local/browser-extension-protocol.mjs +50 -11
- package/src/local/browser-operation-service.mjs +147 -117
- package/src/local/browser-pairing-grant.mjs +109 -0
- package/src/local/browser-pairing-http.mjs +36 -0
- package/src/local/browser-pairing-launch.mjs +58 -0
- package/src/local/browser-pairing-store.mjs +85 -48
- package/src/local/browser-request-registry.mjs +40 -14
- package/src/local/browser-request-settlement.mjs +78 -0
- package/src/local/browser-resource-input.mjs +74 -0
- package/src/local/browser-trusted-input-health.mjs +63 -0
- package/src/local/call-authority.mjs +21 -0
- package/src/local/call-capacity.mjs +45 -0
- package/src/local/call-registry-drain.mjs +54 -0
- package/src/local/call-registry.mjs +30 -15
- package/src/local/capability-observer.mjs +5 -0
- package/src/local/capability-ranking.mjs +3 -2
- package/src/local/child-process-settlement.mjs +132 -0
- package/src/local/cli-account-admin.mjs +40 -6
- package/src/local/cli-activate.mjs +162 -0
- package/src/local/cli-local-admin.mjs +20 -45
- package/src/local/cli-options.mjs +12 -13
- package/src/local/cli-ready-output.mjs +52 -0
- package/src/local/cli-service.mjs +91 -11
- package/src/local/cli.mjs +232 -150
- package/src/local/computer-use-application-observation.mjs +224 -0
- package/src/local/computer-use-arguments.mjs +270 -0
- package/src/local/computer-use-deadline.mjs +50 -0
- package/src/local/computer-use-dispatch-settlement.mjs +40 -0
- package/src/local/computer-use-expectation.mjs +171 -0
- package/src/local/computer-use-observation.mjs +769 -0
- package/src/local/computer-use-recovery.mjs +82 -0
- package/src/local/computer-use-result-budget.mjs +145 -0
- package/src/local/computer-use-snapshot-store.mjs +67 -0
- package/src/local/computer-use.mjs +2255 -0
- package/src/local/daemon-http-relay-auth.mjs +26 -0
- package/src/local/daemon-http-relay-connection.mjs +298 -0
- package/src/local/daemon-http-relay-request.mjs +64 -0
- package/src/local/daemon-http-relay-sequence.mjs +49 -0
- package/src/local/daemon-process.mjs +40 -7
- package/src/local/delegated-process-sandbox.mjs +148 -0
- package/src/local/device-identity.mjs +156 -49
- package/src/local/device-root-provider.mjs +81 -0
- package/src/local/directory-metadata.mjs +47 -0
- package/src/local/doctor-reporting.mjs +23 -0
- package/src/local/durable-process-spec.mjs +80 -0
- package/src/local/errors.mjs +25 -15
- package/src/local/exclusive-file.mjs +74 -26
- package/src/local/execution-limits.mjs +9 -0
- package/src/local/execution-routing.mjs +276 -0
- package/src/local/execution-surface.mjs +23 -0
- package/src/local/file-mutation-coordinator.mjs +47 -0
- package/src/local/file-snapshot-preservation.mjs +24 -0
- package/src/local/filesystem-identity.mjs +54 -0
- package/src/local/fixed-process-environment.mjs +21 -0
- package/src/local/full-access-test.mjs +31 -13
- package/src/local/git-commit.mjs +69 -0
- package/src/local/git-config-safety.mjs +55 -0
- package/src/local/git-log-parser.mjs +41 -0
- package/src/local/git-metadata-boundary.mjs +77 -0
- package/src/local/git-metadata-tree-safety.mjs +59 -0
- package/src/local/git-operation-state.mjs +19 -0
- package/src/local/git-service.mjs +165 -30
- package/src/local/hardened-npm-download-timeout.mjs +46 -0
- package/src/local/hardened-npm-download.mjs +109 -0
- package/src/local/hardened-npm-extract.mjs +20 -0
- package/src/local/hardened-npm-verification.mjs +104 -0
- package/src/local/hardened-npm.mjs +199 -0
- package/src/local/job-runner.mjs +244 -89
- package/src/local/lifecycle.mjs +6 -0
- package/src/local/log.mjs +19 -45
- package/src/local/macos-background-input.mjs +398 -0
- package/src/local/macos-idle-sleep-assertion.mjs +65 -0
- package/src/local/macos-trust-broker.mjs +404 -0
- package/src/local/managed-job-cancellation.mjs +42 -0
- package/src/local/managed-job-capacity.mjs +16 -0
- package/src/local/managed-job-directory-generation.mjs +60 -0
- package/src/local/managed-job-directory.mjs +75 -0
- package/src/local/managed-job-durable-process.mjs +49 -0
- package/src/local/managed-job-lock.mjs +46 -14
- package/src/local/managed-job-plan.mjs +38 -14
- package/src/local/managed-job-projection.mjs +23 -15
- package/src/local/managed-job-retention.mjs +128 -0
- package/src/local/managed-job-runner-claim.mjs +70 -0
- package/src/local/managed-job-runner.mjs +35 -10
- package/src/local/managed-job-storage.mjs +22 -6
- package/src/local/managed-job-terminal-maintenance.mjs +40 -0
- package/src/local/managed-job-terminal.mjs +150 -0
- package/src/local/managed-jobs.mjs +424 -287
- package/src/local/npm-cli.mjs +42 -0
- package/src/local/npm-environment.mjs +37 -0
- package/src/local/operation-authorization.mjs +68 -324
- package/src/local/operation-risk.mjs +51 -4
- package/src/local/owner-state-lock.mjs +118 -0
- package/src/local/package-identity.mjs +9 -0
- package/src/local/patch.mjs +20 -18
- package/src/local/path-inspection.mjs +23 -0
- package/src/local/policy.mjs +19 -0
- package/src/local/private-toolchain-integrity.mjs +54 -0
- package/src/local/process-execution.mjs +87 -75
- package/src/local/process-foreground-timeout.mjs +50 -0
- package/src/local/process-identity.mjs +41 -7
- package/src/local/process-nonreplayable-settlement.mjs +50 -0
- package/src/local/process-result-projection.mjs +22 -0
- package/src/local/process-session-events.mjs +47 -0
- package/src/local/process-session-remote-activity.mjs +10 -0
- package/src/local/process-session-termination.mjs +73 -0
- package/src/local/process-sessions.mjs +144 -112
- package/src/local/process-tracker.mjs +140 -13
- package/src/local/process-tree-ownership-types.d.ts +37 -0
- package/src/local/process-tree-ownership.mjs +57 -0
- package/src/local/process-tree-signal.mjs +34 -0
- package/src/local/process-tree-snapshot.mjs +77 -0
- package/src/local/process-tree-supervisor.mjs +69 -0
- package/src/local/process-tree.mjs +11 -53
- package/src/local/project-metadata.mjs +19 -6
- package/src/local/relay-call-recovery.mjs +58 -38
- package/src/local/relay-connection-classification.mjs +131 -0
- package/src/local/relay-connection-support.mjs +91 -0
- package/src/local/relay-connection.mjs +179 -272
- package/src/local/relay-diagnostics.mjs +91 -0
- package/src/local/relay-heartbeat.mjs +119 -0
- package/src/local/relay-liveness.mjs +109 -0
- package/src/local/relay-peer-diagnostics.mjs +29 -0
- package/src/local/release-runtime-lock.mjs +18 -0
- package/src/local/remote-activity-idle-sleep-guard.mjs +77 -0
- package/src/local/remote-configuration.mjs +48 -0
- package/src/local/resilient-relay-connection.mjs +178 -0
- package/src/local/resource-admission-diagnostics.mjs +52 -0
- package/src/local/resource-admission-policy.mjs +115 -0
- package/src/local/resource-admission.mjs +339 -0
- package/src/local/resource-build-root.mjs +83 -0
- package/src/local/resource-cargo-concurrency.mjs +38 -0
- package/src/local/resource-cmake-concurrency.mjs +42 -0
- package/src/local/resource-command-concurrency.mjs +37 -0
- package/src/local/resource-command-profile.mjs +176 -0
- package/src/local/resource-coordinator-accounting.mjs +21 -0
- package/src/local/resource-cpu-window.mjs +20 -0
- package/src/local/resource-disk-headroom.mjs +13 -0
- package/src/local/resource-elastic-memory.mjs +19 -0
- package/src/local/resource-elastic-request.mjs +36 -0
- package/src/local/resource-foreground-wait.mjs +29 -0
- package/src/local/resource-go-concurrency.mjs +43 -0
- package/src/local/resource-gradle-concurrency.mjs +57 -0
- package/src/local/resource-host-cache.mjs +39 -0
- package/src/local/resource-host-darwin.mjs +54 -0
- package/src/local/resource-host-linux.mjs +35 -0
- package/src/local/resource-host-sample-file.mjs +23 -0
- package/src/local/resource-host-snapshot.mjs +99 -0
- package/src/local/resource-lease-accounting.mjs +119 -0
- package/src/local/resource-light-command.mjs +6 -0
- package/src/local/resource-make-concurrency.mjs +42 -0
- package/src/local/resource-maven-concurrency.mjs +38 -0
- package/src/local/resource-ninja-command-concurrency.mjs +20 -0
- package/src/local/resource-ninja-concurrency.mjs +28 -0
- package/src/local/resource-operations.mjs +26 -10
- package/src/local/resource-pressure.mjs +67 -0
- package/src/local/resource-probe-command.mjs +35 -0
- package/src/local/resource-process-admission.mjs +59 -0
- package/src/local/resource-process-ancestry-cache.mjs +43 -0
- package/src/local/resource-process-ancestry.mjs +32 -0
- package/src/local/resource-process-priority.mjs +15 -0
- package/src/local/resource-project-key.mjs +53 -0
- package/src/local/resource-pytest-concurrency.mjs +33 -0
- package/src/local/resource-release-control-classification.mjs +14 -0
- package/src/local/resource-release-control-executable.mjs +70 -0
- package/src/local/resource-release-control-workspace.mjs +41 -0
- package/src/local/resource-request-contract.mjs +30 -0
- package/src/local/resource-script-classification.mjs +44 -0
- package/src/local/resource-shell-analysis.mjs +58 -0
- package/src/local/resource-staging-recovery.mjs +97 -0
- package/src/local/resource-swift-concurrency.mjs +31 -0
- package/src/local/resource-transaction-lock.mjs +189 -0
- package/src/local/resource-wait.mjs +48 -0
- package/src/local/resource-waiters.mjs +139 -0
- package/src/local/resource-xcode-command.mjs +7 -0
- package/src/local/resource-xcode-concurrency.mjs +34 -0
- package/src/local/resource-xcode-non-build.mjs +19 -0
- package/src/local/runtime-activation.mjs +700 -0
- package/src/local/runtime-activity-projection.mjs +48 -0
- package/src/local/runtime-capabilities.mjs +48 -15
- package/src/local/runtime-diagnostic-state.mjs +14 -0
- package/src/local/runtime-diagnostics.mjs +40 -13
- package/src/local/runtime-info-projection.mjs +60 -0
- package/src/local/runtime-info-relay-projection.mjs +21 -0
- package/src/local/runtime-paths.mjs +2 -1
- package/src/local/runtime-process-routing.mjs +33 -0
- package/src/local/runtime-relay-connection-options.mjs +44 -0
- package/src/local/runtime-relay-control.mjs +98 -0
- package/src/local/runtime-relay.mjs +26 -50
- package/src/local/runtime-reporting.mjs +37 -21
- package/src/local/runtime-resource-service.mjs +77 -0
- package/src/local/runtime-tool-handlers.mjs +13 -10
- package/src/local/runtime.mjs +244 -208
- package/src/local/secure-file.mjs +73 -20
- package/src/local/security-audit-dispatch.mjs +35 -0
- package/src/local/security-audit-log.mjs +215 -0
- package/src/local/security-audit-state.mjs +139 -0
- package/src/local/security-audit-storage.mjs +135 -0
- package/src/local/security-audit-warning.mjs +31 -0
- package/src/local/security-audit-worker.mjs +87 -0
- package/src/local/service-convergence.mjs +42 -1
- package/src/local/service-definition.mjs +24 -0
- package/src/local/service-environment.mjs +18 -10
- package/src/local/service-owner.mjs +146 -0
- package/src/local/service-ownership.mjs +17 -0
- package/src/local/service-restart-handoff.mjs +64 -0
- package/src/local/service-restart-scheduler.mjs +49 -0
- package/src/local/service-runtime-convergence.mjs +52 -0
- package/src/local/service-runtime.mjs +105 -0
- package/src/local/service-status.mjs +60 -0
- package/src/local/service.mjs +385 -92
- package/src/local/shell.mjs +39 -19
- package/src/local/ssh-key.mjs +158 -42
- package/src/local/state-inventory.mjs +50 -24
- package/src/local/state-owner-lock-inventory.mjs +23 -0
- package/src/local/state-root-owned-namespaces.mjs +83 -0
- package/src/local/state-root-retirement.mjs +89 -0
- package/src/local/state.mjs +386 -96
- package/src/local/stdio.mjs +96 -66
- package/src/local/support-state-projection.mjs +30 -0
- package/src/local/system-network-route.mjs +76 -0
- package/src/local/systemd-removal.mjs +20 -0
- package/src/local/tool-executor.mjs +85 -20
- package/src/local/tool-result-boundary.mjs +51 -0
- package/src/local/toolchain-operation-lock.mjs +41 -0
- package/src/local/tools.mjs +7 -5
- package/src/local/trusted-executable.mjs +53 -0
- package/src/local/trusted-git-executable.mjs +34 -0
- package/src/local/trusted-github-cli.mjs +24 -0
- package/src/local/windows-service-convergence.mjs +49 -0
- package/src/local/windows-service.mjs +52 -45
- package/src/local/worker-deployment-fingerprint.mjs +102 -0
- package/src/local/worker-deployment.mjs +48 -60
- package/src/local/worker-health.mjs +12 -4
- package/src/local/worker-secret-file.mjs +37 -17
- package/src/local/workspace-file-service.mjs +156 -239
- package/src/local/workspace-file-transaction.mjs +189 -0
- package/src/local/workspace-search.mjs +55 -0
- package/src/local/wrangler-toolchain/package-lock.json +1505 -0
- package/src/local/wrangler-toolchain/package.json +23 -0
- package/src/local/wrangler-toolchain-verification.mjs +135 -0
- package/src/local/wrangler-toolchain.mjs +188 -0
- package/src/shared/access-contract.json +7 -1
- package/src/shared/activation-recovery.mjs +49 -0
- package/src/shared/admin-auth.d.mts +2 -1
- package/src/shared/admin-auth.mjs +3 -3
- package/src/shared/authority-revocation.d.mts +9 -0
- package/src/shared/authority-revocation.mjs +28 -0
- package/src/shared/daemon-auth.d.mts +11 -0
- package/src/shared/daemon-auth.mjs +17 -0
- package/src/shared/device-session-auth.d.mts +20 -0
- package/src/shared/device-session-auth.mjs +51 -0
- package/src/shared/foreground-timeout.d.mts +15 -0
- package/src/shared/foreground-timeout.mjs +70 -0
- package/src/shared/log-redaction.d.mts +9 -0
- package/src/shared/log-redaction.mjs +51 -0
- package/src/shared/mcp-protocol.d.mts +27 -0
- package/src/shared/mcp-protocol.mjs +275 -0
- package/src/shared/project-overview-projection.d.mts +4 -0
- package/src/shared/project-overview-projection.mjs +96 -0
- package/src/shared/relay-contract.json +28 -0
- package/src/shared/result-projection.d.mts +2 -1
- package/src/shared/result-projection.mjs +13 -2
- package/src/shared/server-metadata.json +15 -9
- package/src/shared/tool-argument-validation.d.mts +17 -0
- package/src/shared/tool-argument-validation.mjs +325 -0
- package/src/shared/tool-call-capacity.d.mts +41 -0
- package/src/shared/tool-call-capacity.mjs +59 -0
- package/src/shared/tool-catalog.json +626 -57
- package/src/worker/access.ts +12 -0
- package/src/worker/account-admin.ts +55 -33
- package/src/worker/authority-revocations.ts +174 -0
- package/src/worker/authority.ts +52 -6
- package/src/worker/daemon-auth.ts +49 -68
- package/src/worker/daemon-channel.ts +36 -0
- package/src/worker/daemon-http-auth.ts +63 -0
- package/src/worker/daemon-http-channel.ts +120 -0
- package/src/worker/daemon-http-controller.ts +163 -0
- package/src/worker/daemon-http-protocol.ts +62 -0
- package/src/worker/daemon-http-registry.ts +82 -0
- package/src/worker/daemon-last-observation.ts +30 -0
- package/src/worker/daemon-liveness.ts +8 -6
- package/src/worker/daemon-ready-dispatch.ts +17 -0
- package/src/worker/daemon-ready-messages.ts +73 -0
- package/src/worker/daemon-ready-waiters.ts +79 -0
- package/src/worker/daemon-recovery-budget.ts +13 -0
- package/src/worker/daemon-registry.ts +58 -0
- package/src/worker/daemon-relay-diagnostics.ts +127 -0
- package/src/worker/daemon-socket-attachment.ts +55 -0
- package/src/worker/daemon-sockets.ts +72 -62
- package/src/worker/daemon-status.ts +38 -0
- package/src/worker/device-session-verifier.ts +129 -0
- package/src/worker/dpop.ts +157 -0
- package/src/worker/durable-process-timeout.ts +29 -0
- package/src/worker/errors.ts +57 -0
- package/src/worker/http.ts +112 -26
- package/src/worker/index.ts +446 -440
- package/src/worker/mcp-access.ts +57 -0
- package/src/worker/mcp-controller.ts +188 -0
- package/src/worker/mcp-http-accept.ts +11 -0
- package/src/worker/mcp-http-contract.ts +322 -0
- package/src/worker/mcp-initialization-compat.ts +141 -0
- package/src/worker/mcp-jsonrpc.ts +11 -29
- package/src/worker/mcp-removed-protocol.ts +17 -0
- package/src/worker/mcp-response-proxy.ts +135 -0
- package/src/worker/mcp-response-stream.ts +65 -0
- package/src/worker/mcp-stale-schema-compat.ts +57 -0
- package/src/worker/mcp-stream-proxy-contract.ts +48 -0
- package/src/worker/mcp-tool-call-input.ts +23 -0
- package/src/worker/nonce-store.ts +33 -35
- package/src/worker/oauth-authorization-page.ts +21 -1
- package/src/worker/oauth-client-admin.ts +52 -0
- package/src/worker/oauth-client-contract.ts +38 -0
- package/src/worker/oauth-controller.ts +107 -47
- package/src/worker/oauth-field-contract.ts +31 -0
- package/src/worker/oauth-record-contract.ts +7 -0
- package/src/worker/oauth-refresh-authority.ts +27 -0
- package/src/worker/oauth-refresh-exchange.ts +162 -0
- package/src/worker/oauth-refresh-families.ts +130 -27
- package/src/worker/oauth-refresh-persistence.ts +116 -0
- package/src/worker/oauth-state.ts +33 -18
- package/src/worker/oauth-store-validation.ts +131 -0
- package/src/worker/oauth-token-derivation.ts +33 -0
- package/src/worker/oauth-token-issuance.ts +119 -0
- package/src/worker/oauth-tokens.ts +56 -190
- package/src/worker/observability.ts +38 -5
- package/src/worker/pending-admission.ts +15 -0
- package/src/worker/pending-call-capacity.ts +108 -0
- package/src/worker/pending-call-contract.ts +42 -5
- package/src/worker/pending-call-deadlines.ts +75 -0
- package/src/worker/pending-calls.ts +131 -125
- package/src/worker/runtime-alarm-storage.ts +37 -0
- package/src/worker/runtime-alarm.ts +136 -0
- package/src/worker/server-info-activity.ts +36 -0
- package/src/worker/server-info-tool-delivery.ts +15 -0
- package/src/worker/server-info.ts +168 -0
- package/src/worker/tool-catalog.ts +47 -1
- package/src/worker/tool-timeout.ts +75 -14
- package/src/worker/websocket-protocol.ts +26 -2
- package/src/worker/worker-edge-guard.ts +90 -0
- package/src/worker/worker-edge-log.ts +65 -0
- package/src/worker/worker-entry.ts +52 -0
- package/src/worker/worker-mcp-config.ts +23 -0
- package/src/worker/worker-metadata.ts +48 -0
- package/src/worker/worker-rate-limit-key.ts +30 -0
- package/src/worker/worker-runtime-config.ts +20 -0
- package/src/worker/worker-static-routes.ts +54 -0
- package/src/worker/worker-task-lifetime.ts +18 -0
- package/tsconfig.local.json +17 -1
- package/wrangler.jsonc +13 -0
- package/src/local/cli-approval.mjs +0 -117
- package/src/local/operation-state-lock.mjs +0 -92
- package/src/worker/mcp-session.ts +0 -72
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const TOKEN = /^[A-Za-z0-9_-]{32,100}$/;
|
|
3
|
+
const NONCE = /^[A-Za-z0-9_-]{32}$/;
|
|
4
|
+
const PROOF = /^[A-Za-z0-9_-]{43}$/;
|
|
5
|
+
const BROKER_AUTH_REQUEST_HEADER = "x-machine-bridge-broker-auth";
|
|
6
|
+
const BROKER_AUTH_REQUEST_VALUE = "machine-bridge-browser-v2";
|
|
7
|
+
|
|
8
|
+
async function extensionProtocol(endpoint, token) {
|
|
9
|
+
if (!TOKEN.test(String(token || ""))) throw new Error("browser pairing token is invalid");
|
|
10
|
+
const parsed = parseEndpoint(endpoint);
|
|
11
|
+
if (!parsed) throw new Error("browser broker endpoint is invalid");
|
|
12
|
+
const clientChallenge = randomBase64Url(24);
|
|
13
|
+
const authUrl = new URL(endpoint);
|
|
14
|
+
authUrl.protocol = "http:";
|
|
15
|
+
authUrl.pathname = "/extension-auth";
|
|
16
|
+
const initProof = await hmac(token, `machine-bridge-browser-extension-init-v2\0${clientChallenge}`);
|
|
17
|
+
authUrl.search = `?challenge=${encodeURIComponent(clientChallenge)}&init=${encodeURIComponent(initProof)}`;
|
|
18
|
+
const response = await brokerFetch(authUrl, "GET");
|
|
19
|
+
if (response.status !== 204) throw new Error("browser broker authentication failed");
|
|
20
|
+
const serverNonce = String(response.headers.get("x-machine-bridge-broker-nonce") || "");
|
|
21
|
+
const serverProof = String(response.headers.get("x-machine-bridge-broker-proof") || "");
|
|
22
|
+
if (!NONCE.test(serverNonce) || !PROOF.test(serverProof)) throw new Error("browser broker authentication failed");
|
|
23
|
+
const expected = await hmac(token, `machine-bridge-browser-extension-server-v2\0${clientChallenge}\0${serverNonce}`);
|
|
24
|
+
if (!fixedEqual(expected, serverProof)) throw new Error("browser broker authentication failed");
|
|
25
|
+
const clientProof = await hmac(token, `machine-bridge-browser-extension-client-v2\0${clientChallenge}\0${serverNonce}`);
|
|
26
|
+
return `mbm-extension-v2.${clientChallenge}.${serverNonce}.${clientProof}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function parseEndpoint(value) {
|
|
30
|
+
let parsed;
|
|
31
|
+
try { parsed = new URL(String(value || "")); } catch { return null; }
|
|
32
|
+
const port = Number(parsed.port);
|
|
33
|
+
if (parsed.protocol !== "ws:" || parsed.hostname !== "127.0.0.1" || parsed.pathname !== "/extension"
|
|
34
|
+
|| parsed.username || parsed.password || parsed.search || parsed.hash
|
|
35
|
+
|| !Number.isInteger(port) || port < 1024 || port > 65535) return null;
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
function pairingUrlFromEndpoint(endpoint) {
|
|
39
|
+
const parsed = parseEndpoint(endpoint);
|
|
40
|
+
return parsed ? `http://127.0.0.1:${parsed.port}/pair` : "";
|
|
41
|
+
}
|
|
42
|
+
function parsePairingPage(value) {
|
|
43
|
+
let parsed;
|
|
44
|
+
try { parsed = new URL(String(value || "")); } catch { return null; }
|
|
45
|
+
const port = Number(parsed.port);
|
|
46
|
+
if (parsed.protocol !== "http:" || parsed.hostname !== "127.0.0.1" || parsed.pathname !== "/pair"
|
|
47
|
+
|| parsed.username || parsed.password || parsed.search || parsed.hash
|
|
48
|
+
|| !Number.isInteger(port) || port < 1024 || port > 65535) return null;
|
|
49
|
+
return parsed;
|
|
50
|
+
}
|
|
51
|
+
async function brokerFetch(url, method) {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timer = setTimeout(() => controller.abort(), 1500);
|
|
54
|
+
try {
|
|
55
|
+
return await fetch(url, {
|
|
56
|
+
method, redirect: "error", cache: "no-store", signal: controller.signal,
|
|
57
|
+
headers: { [BROKER_AUTH_REQUEST_HEADER]: BROKER_AUTH_REQUEST_VALUE },
|
|
58
|
+
});
|
|
59
|
+
} finally { clearTimeout(timer); }
|
|
60
|
+
}
|
|
61
|
+
async function hmac(token, message) {
|
|
62
|
+
const key = await crypto.subtle.importKey("raw", new TextEncoder().encode(token), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
63
|
+
return base64Url(new Uint8Array(await crypto.subtle.sign("HMAC", key, new TextEncoder().encode(message))));
|
|
64
|
+
}
|
|
65
|
+
function randomBase64Url(size) {
|
|
66
|
+
const bytes = new Uint8Array(size); crypto.getRandomValues(bytes); return base64Url(bytes);
|
|
67
|
+
}
|
|
68
|
+
function base64Url(bytes) {
|
|
69
|
+
let binary = ""; for (const value of bytes) binary += String.fromCharCode(value);
|
|
70
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
71
|
+
}
|
|
72
|
+
function fixedEqual(left, right) {
|
|
73
|
+
if (left.length !== right.length) return false;
|
|
74
|
+
let difference = 0;
|
|
75
|
+
for (let index = 0; index < left.length; index += 1) difference |= left.charCodeAt(index) ^ right.charCodeAt(index);
|
|
76
|
+
return difference === 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
globalThis.__machineBridgeBrokerAuth = Object.freeze({
|
|
80
|
+
extensionProtocol, pairingUrlFromEndpoint, parseBrokerEndpoint: parseEndpoint, parsePairingPage,
|
|
81
|
+
internal: Object.freeze({ brokerFetch, fixedEqual, hmac, randomBase64Url, tokenPattern: TOKEN, noncePattern: NONCE, proofPattern: PROOF }),
|
|
82
|
+
});
|
|
83
|
+
})();
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
globalThis.__machineBridgeBrokerLiveness = (() => {
|
|
2
|
+
const PONG_TIMEOUT_MS = 10000;
|
|
3
|
+
function initialize(socket) {
|
|
4
|
+
socket.pongTimer = null;
|
|
5
|
+
socket.pongWatchdog = false;
|
|
6
|
+
socket.pingSequence = 0;
|
|
7
|
+
}
|
|
8
|
+
function clear(socket) {
|
|
9
|
+
clearTimeout(socket?.pongTimer);
|
|
10
|
+
if (socket) socket.pongTimer = null;
|
|
11
|
+
}
|
|
12
|
+
function negotiate(socket, enabled) { socket.pongWatchdog = enabled === true; }
|
|
13
|
+
function keepalive(socket, current, send, close) {
|
|
14
|
+
if (!current || !socket.bridgeReady || socket.readyState !== WebSocket.OPEN) return;
|
|
15
|
+
const seq = socket.pongWatchdog ? ++socket.pingSequence : 0;
|
|
16
|
+
if (!send(socket, JSON.stringify({ type: "ping", ...(seq ? { seq } : {}) }))) {
|
|
17
|
+
close(socket, 1011, "browser extension keepalive failed");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (!seq) return;
|
|
21
|
+
clear(socket);
|
|
22
|
+
socket.pongTimer = setTimeout(() => {
|
|
23
|
+
if (socket.bridgeReady && socket.pingSequence === seq) close(socket, 1012, "browser broker pong timed out");
|
|
24
|
+
}, PONG_TIMEOUT_MS);
|
|
25
|
+
}
|
|
26
|
+
function handlePong(socket, message, close) {
|
|
27
|
+
if (!socket.pongWatchdog) return;
|
|
28
|
+
if (!Number.isSafeInteger(message.seq) || message.seq !== socket.pingSequence) {
|
|
29
|
+
close(socket, 1002, "invalid browser broker pong");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
clear(socket);
|
|
33
|
+
}
|
|
34
|
+
return Object.freeze({ initialize, clear, negotiate, keepalive, handlePong });
|
|
35
|
+
})();
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const SAFE_EXACT = new Set([
|
|
3
|
+
"unsupported browser tab action",
|
|
4
|
+
"no active browser tab",
|
|
5
|
+
"navigate requires url",
|
|
6
|
+
"trusted input is unavailable for this action",
|
|
7
|
+
"trusted input currently requires the top frame; use input_mode=dom for a subframe",
|
|
8
|
+
"this page cannot be scripted by a browser extension",
|
|
9
|
+
"page automation module is unavailable",
|
|
10
|
+
"page automation module version mismatch",
|
|
11
|
+
"browser request cancelled",
|
|
12
|
+
"snapshot browser tab changed before navigation dispatch; observe again",
|
|
13
|
+
"snapshot browser tab could not be verified before navigation dispatch; observe again",
|
|
14
|
+
"snapshot history document changed before dispatch; observe again",
|
|
15
|
+
"snapshot history document could not be verified before dispatch; observe again",
|
|
16
|
+
"snapshot history entry changed before dispatch; observe again",
|
|
17
|
+
"snapshot history entry could not be verified before dispatch; observe again",
|
|
18
|
+
"snapshot browser history has no back entry before dispatch; observe again",
|
|
19
|
+
"snapshot browser history has no forward entry before dispatch; observe again",
|
|
20
|
+
"snapshot history mutation API is unavailable before dispatch; observe again",
|
|
21
|
+
"browser tab activation completed but its current window is unavailable before focus; inspect tabs before retrying",
|
|
22
|
+
"browser tab activation completed but the target tab could not be verified before focus; inspect tabs before retrying",
|
|
23
|
+
"browser tab activation completed but the target tab was no longer active before focus; inspect tabs before retrying",
|
|
24
|
+
"browser tab activation and window focus completed but the target tab could not be verified; inspect tabs before retrying",
|
|
25
|
+
"browser tab activation and window focus completed but the target tab moved windows; inspect tabs before retrying",
|
|
26
|
+
"browser tab activation and window focus completed but the target tab was no longer active; inspect tabs before retrying",
|
|
27
|
+
"tab closed during navigation wait",
|
|
28
|
+
"element reference is stale; inspect the page again",
|
|
29
|
+
"element did not become geometrically stable before timeout",
|
|
30
|
+
"matched element is not a file input",
|
|
31
|
+
"no form or submit control found",
|
|
32
|
+
"matched element is not associated with a form",
|
|
33
|
+
"select option was not found",
|
|
34
|
+
"trusted input requires a valid tab",
|
|
35
|
+
"trusted input target has no usable viewport point",
|
|
36
|
+
"browser screenshot cannot safely switch tabs without a restore baseline",
|
|
37
|
+
"browser screenshot could not revalidate the active tab before temporary activation",
|
|
38
|
+
"browser screenshot active tab changed before temporary activation",
|
|
39
|
+
"browser screenshot could not verify target tab at capture boundary",
|
|
40
|
+
"browser screenshot target tab was not active at capture boundary",
|
|
41
|
+
"browser screenshot could not verify the active tab after capture",
|
|
42
|
+
"browser screenshot active tab changed during capture",
|
|
43
|
+
"browser screenshot could not verify active-tab restoration",
|
|
44
|
+
"browser screenshot could not restore the previous active tab",
|
|
45
|
+
"browser tab became unavailable during computer observation",
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
function publicError(error) {
|
|
49
|
+
const message = String(error?.message || error || "");
|
|
50
|
+
if (message.startsWith("unknown browser method:")) return "unknown browser method";
|
|
51
|
+
if (message.startsWith("invalid CSS selector:")) return "invalid CSS selector";
|
|
52
|
+
if (/^selector matched \d+ elements;/.test(message)) return "selector matched multiple elements; use ref or index to disambiguate";
|
|
53
|
+
if (message.startsWith("browser wait timed out")) return "browser wait timed out";
|
|
54
|
+
if (message.startsWith("trusted browser input may have been partially dispatched")) {
|
|
55
|
+
return "trusted browser input may have been partially dispatched; the action outcome is unknown. Inspect the page before retrying.";
|
|
56
|
+
}
|
|
57
|
+
if (message.startsWith("browser action may have been dispatched; the action outcome is unknown")) {
|
|
58
|
+
return "browser action may have been dispatched; the action outcome is unknown. Inspect the page before retrying.";
|
|
59
|
+
}
|
|
60
|
+
if (message.startsWith("browser tab mutation may have been dispatched; the outcome is unknown")) {
|
|
61
|
+
return "browser tab mutation may have been dispatched; the outcome is unknown. Inspect tabs before retrying.";
|
|
62
|
+
}
|
|
63
|
+
if (message.startsWith("browser screenshot temporary tab activation may have been dispatched; the outcome is unknown")) {
|
|
64
|
+
return "browser screenshot temporary tab activation may have been dispatched; the outcome is unknown. Inspect tabs before retrying.";
|
|
65
|
+
}
|
|
66
|
+
if (message.startsWith("browser screenshot restoration may have been dispatched; the active-tab outcome is unknown")) {
|
|
67
|
+
return "browser screenshot restoration may have been dispatched; the active-tab outcome is unknown. Inspect tabs before retrying.";
|
|
68
|
+
}
|
|
69
|
+
if (message.startsWith("trusted browser input unavailable: visual_snapshot_changed_before_dispatch")) {
|
|
70
|
+
return "visual snapshot changed before trusted input; observe again";
|
|
71
|
+
}
|
|
72
|
+
if (message.startsWith("snapshot_backend_target_changed_before_dispatch")) {
|
|
73
|
+
return "snapshot backend target changed before trusted input; observe again";
|
|
74
|
+
}
|
|
75
|
+
if (message.startsWith("snapshot_ref_identity_changed_before_dispatch")) {
|
|
76
|
+
return "snapshot ref identity changed before dispatch; observe again";
|
|
77
|
+
}
|
|
78
|
+
if (message.startsWith("snapshot_backend_geometry_unavailable_before_dispatch")
|
|
79
|
+
|| message.startsWith("snapshot_backend_trusted_input_unavailable_before_dispatch")) {
|
|
80
|
+
return "snapshot backend trusted input unavailable before dispatch";
|
|
81
|
+
}
|
|
82
|
+
if (message.startsWith("form submission failed after")) {
|
|
83
|
+
return "form submission failed after partial changes; inspect the page before retrying";
|
|
84
|
+
}
|
|
85
|
+
if (message.startsWith("element was not actionable before timeout")) return "element was not actionable before timeout";
|
|
86
|
+
if (message.startsWith("element was not clickable before timeout")) return "element was not clickable before timeout";
|
|
87
|
+
if (message.startsWith("unsupported element action:")) return "unsupported element action";
|
|
88
|
+
if (message.startsWith("unsupported key modifier:") || message.startsWith("unsupported key:")) return "unsupported keyboard input";
|
|
89
|
+
return SAFE_EXACT.has(message) ? message : "browser operation failed";
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
Object.defineProperty(globalThis, "__machineBridgeBrowserErrorBoundary", {
|
|
93
|
+
value: Object.freeze({ publicError }),
|
|
94
|
+
configurable: false,
|
|
95
|
+
});
|
|
96
|
+
})();
|