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.
Files changed (473) hide show
  1. package/CHANGELOG.md +1142 -0
  2. package/CONTRIBUTING.md +23 -25
  3. package/GOVERNANCE.md +2 -2
  4. package/README.md +58 -20
  5. package/SECURITY.md +161 -120
  6. package/SUPPORT.md +1 -1
  7. package/browser-extension/broker-auth.js +83 -0
  8. package/browser-extension/broker-liveness.js +35 -0
  9. package/browser-extension/browser-error-boundary.js +96 -0
  10. package/browser-extension/browser-operations.js +1456 -101
  11. package/browser-extension/devtools-input.js +195 -34
  12. package/browser-extension/devtools-observation.js +429 -0
  13. package/browser-extension/devtools-session.js +48 -0
  14. package/browser-extension/manifest.json +4 -3
  15. package/browser-extension/page-automation.js +578 -118
  16. package/browser-extension/pairing-bootstrap.js +42 -0
  17. package/browser-extension/pairing.js +28 -12
  18. package/browser-extension/service-worker.js +126 -106
  19. package/docs/AGENT_CONTEXT.md +13 -10
  20. package/docs/ARCHITECTURE.md +159 -67
  21. package/docs/AUDIT.md +1302 -4
  22. package/docs/CLIENTS.md +19 -6
  23. package/docs/COMPUTER_USE.md +297 -0
  24. package/docs/ENGINEERING.md +72 -13
  25. package/docs/GETTING_STARTED.md +18 -20
  26. package/docs/LOCAL_AUTHORIZATION.md +115 -72
  27. package/docs/LOCAL_AUTOMATION.md +27 -21
  28. package/docs/LOGGING.md +40 -19
  29. package/docs/MANAGED_JOBS.md +37 -34
  30. package/docs/MULTI_ACCOUNT.md +98 -37
  31. package/docs/OPERATIONS.md +145 -51
  32. package/docs/OVERVIEW.md +14 -11
  33. package/docs/POLICY_REFERENCE.md +71 -3
  34. package/docs/PRIVACY.md +41 -2
  35. package/docs/PROJECT_STANDARDS.md +29 -6
  36. package/docs/RELEASING.md +238 -64
  37. package/docs/TESTING.md +150 -39
  38. package/docs/THREAT_MODEL.md +164 -67
  39. package/docs/TOOL_REFERENCE.md +653 -60
  40. package/docs/UPGRADING.md +78 -18
  41. package/native/macos/MachineBridgeBackgroundInput.swift +1051 -0
  42. package/native/macos/MachineBridgeBackgroundInputSmokeFixture.swift +295 -0
  43. package/native/macos/MachineBridgeTrustBroker.swift +233 -0
  44. package/package.json +94 -16
  45. package/scripts/accepted-candidate-tarball.mjs +77 -0
  46. package/scripts/candidate-runtime-store.mjs +93 -0
  47. package/scripts/check-plan.mjs +73 -3
  48. package/scripts/check-runner.mjs +129 -17
  49. package/scripts/commit-message-check.mjs +5 -2
  50. package/scripts/consumer-package-security.mjs +293 -0
  51. package/scripts/coverage-check.mjs +251 -15
  52. package/scripts/coverage-generation.mjs +41 -0
  53. package/scripts/coverage-range-merge.mjs +41 -0
  54. package/scripts/foreground-daemon-recovery.mjs +88 -0
  55. package/scripts/generate-policy-reference.mjs +28 -5
  56. package/scripts/generate-tool-reference.mjs +1 -1
  57. package/scripts/generate-worker-types.mjs +21 -11
  58. package/scripts/github-backlog.mjs +11 -10
  59. package/scripts/github-push.mjs +62 -16
  60. package/scripts/github-release-asset.mjs +58 -0
  61. package/scripts/github-release.mjs +241 -132
  62. package/scripts/global-package-installation.mjs +68 -0
  63. package/scripts/hardened-npm-session.mjs +42 -0
  64. package/scripts/install-published-prerelease.mjs +198 -0
  65. package/scripts/local-release-acceptance.mjs +103 -45
  66. package/scripts/macos-background-input-smoke.mjs +515 -0
  67. package/scripts/network-retry.mjs +8 -1
  68. package/scripts/npm-global-prefix.mjs +27 -0
  69. package/scripts/npm-publication-policy.mjs +17 -0
  70. package/scripts/official-mcp-conformance.mjs +267 -0
  71. package/scripts/persistent-activation-process.mjs +101 -0
  72. package/scripts/prepare-pinned-npm.mjs +12 -69
  73. package/scripts/prerelease-activation.mjs +160 -0
  74. package/scripts/privacy-check.mjs +14 -6
  75. package/scripts/promotion-digest.mjs +128 -0
  76. package/scripts/publish-npm.mjs +260 -0
  77. package/scripts/published-release.mjs +132 -0
  78. package/scripts/release-acceptance.mjs +62 -54
  79. package/scripts/release-browser-extension-store.mjs +172 -0
  80. package/scripts/release-candidate-manifest.mjs +52 -0
  81. package/scripts/release-channel.mjs +106 -0
  82. package/scripts/release-diagnostic.mjs +41 -0
  83. package/scripts/release-impact-check.mjs +12 -22
  84. package/scripts/release-oauth-canary-core.mjs +325 -0
  85. package/scripts/release-oauth-canary-evidence.mjs +100 -0
  86. package/scripts/release-oauth-canary.mjs +127 -0
  87. package/scripts/release-publication-guard.mjs +67 -0
  88. package/scripts/release-soak.mjs +284 -0
  89. package/scripts/release-state.mjs +1 -1
  90. package/scripts/run-checks.mjs +44 -7
  91. package/scripts/run-worker-dry-run.mjs +21 -0
  92. package/scripts/sarif-security-gate.mjs +2 -1
  93. package/scripts/sbom-check.mjs +106 -0
  94. package/scripts/start-release-candidate.mjs +267 -44
  95. package/scripts/syntax-check.mjs +36 -14
  96. package/scripts/verification-generation-guard.mjs +15 -0
  97. package/scripts/verification-idle-sleep-guard.mjs +37 -0
  98. package/scripts/verification-state.mjs +108 -0
  99. package/scripts/wrangler-command-lifecycle.mjs +115 -0
  100. package/src/local/account-access.mjs +13 -1
  101. package/src/local/account-admin-response.mjs +92 -0
  102. package/src/local/account-admin.mjs +52 -19
  103. package/src/local/agent-context-projection.mjs +26 -7
  104. package/src/local/agent-context.mjs +88 -49
  105. package/src/local/agent-skill-discovery.mjs +16 -5
  106. package/src/local/app-automation-macos-jxa.mjs +350 -0
  107. package/src/local/app-automation.mjs +873 -163
  108. package/src/local/application-capability-projection.mjs +24 -0
  109. package/src/local/authority-context.mjs +106 -0
  110. package/src/local/autostart-log-maintenance.mjs +36 -0
  111. package/src/local/browser-bridge-http.mjs +5 -3
  112. package/src/local/browser-bridge.mjs +109 -31
  113. package/src/local/browser-broker-auth-http.mjs +67 -0
  114. package/src/local/browser-broker-auth.mjs +98 -0
  115. package/src/local/browser-broker-routes.mjs +63 -20
  116. package/src/local/browser-broker-server.mjs +17 -7
  117. package/src/local/browser-command.mjs +79 -30
  118. package/src/local/browser-computer-observation-service.mjs +266 -0
  119. package/src/local/browser-extension-identity.mjs +50 -0
  120. package/src/local/browser-extension-path.mjs +22 -0
  121. package/src/local/browser-extension-protocol.mjs +50 -11
  122. package/src/local/browser-operation-service.mjs +147 -117
  123. package/src/local/browser-pairing-grant.mjs +109 -0
  124. package/src/local/browser-pairing-http.mjs +36 -0
  125. package/src/local/browser-pairing-launch.mjs +58 -0
  126. package/src/local/browser-pairing-store.mjs +85 -48
  127. package/src/local/browser-request-registry.mjs +40 -14
  128. package/src/local/browser-request-settlement.mjs +78 -0
  129. package/src/local/browser-resource-input.mjs +74 -0
  130. package/src/local/browser-trusted-input-health.mjs +63 -0
  131. package/src/local/call-authority.mjs +21 -0
  132. package/src/local/call-capacity.mjs +45 -0
  133. package/src/local/call-registry-drain.mjs +54 -0
  134. package/src/local/call-registry.mjs +30 -15
  135. package/src/local/capability-observer.mjs +5 -0
  136. package/src/local/capability-ranking.mjs +3 -2
  137. package/src/local/child-process-settlement.mjs +132 -0
  138. package/src/local/cli-account-admin.mjs +40 -6
  139. package/src/local/cli-activate.mjs +162 -0
  140. package/src/local/cli-local-admin.mjs +20 -45
  141. package/src/local/cli-options.mjs +12 -13
  142. package/src/local/cli-ready-output.mjs +52 -0
  143. package/src/local/cli-service.mjs +91 -11
  144. package/src/local/cli.mjs +232 -150
  145. package/src/local/computer-use-application-observation.mjs +224 -0
  146. package/src/local/computer-use-arguments.mjs +270 -0
  147. package/src/local/computer-use-deadline.mjs +50 -0
  148. package/src/local/computer-use-dispatch-settlement.mjs +40 -0
  149. package/src/local/computer-use-expectation.mjs +171 -0
  150. package/src/local/computer-use-observation.mjs +769 -0
  151. package/src/local/computer-use-recovery.mjs +82 -0
  152. package/src/local/computer-use-result-budget.mjs +145 -0
  153. package/src/local/computer-use-snapshot-store.mjs +67 -0
  154. package/src/local/computer-use.mjs +2255 -0
  155. package/src/local/daemon-http-relay-auth.mjs +26 -0
  156. package/src/local/daemon-http-relay-connection.mjs +298 -0
  157. package/src/local/daemon-http-relay-request.mjs +64 -0
  158. package/src/local/daemon-http-relay-sequence.mjs +49 -0
  159. package/src/local/daemon-process.mjs +40 -7
  160. package/src/local/delegated-process-sandbox.mjs +148 -0
  161. package/src/local/device-identity.mjs +156 -49
  162. package/src/local/device-root-provider.mjs +81 -0
  163. package/src/local/directory-metadata.mjs +47 -0
  164. package/src/local/doctor-reporting.mjs +23 -0
  165. package/src/local/durable-process-spec.mjs +80 -0
  166. package/src/local/errors.mjs +25 -15
  167. package/src/local/exclusive-file.mjs +74 -26
  168. package/src/local/execution-limits.mjs +9 -0
  169. package/src/local/execution-routing.mjs +276 -0
  170. package/src/local/execution-surface.mjs +23 -0
  171. package/src/local/file-mutation-coordinator.mjs +47 -0
  172. package/src/local/file-snapshot-preservation.mjs +24 -0
  173. package/src/local/filesystem-identity.mjs +54 -0
  174. package/src/local/fixed-process-environment.mjs +21 -0
  175. package/src/local/full-access-test.mjs +31 -13
  176. package/src/local/git-commit.mjs +69 -0
  177. package/src/local/git-config-safety.mjs +55 -0
  178. package/src/local/git-log-parser.mjs +41 -0
  179. package/src/local/git-metadata-boundary.mjs +77 -0
  180. package/src/local/git-metadata-tree-safety.mjs +59 -0
  181. package/src/local/git-operation-state.mjs +19 -0
  182. package/src/local/git-service.mjs +165 -30
  183. package/src/local/hardened-npm-download-timeout.mjs +46 -0
  184. package/src/local/hardened-npm-download.mjs +109 -0
  185. package/src/local/hardened-npm-extract.mjs +20 -0
  186. package/src/local/hardened-npm-verification.mjs +104 -0
  187. package/src/local/hardened-npm.mjs +199 -0
  188. package/src/local/job-runner.mjs +244 -89
  189. package/src/local/lifecycle.mjs +6 -0
  190. package/src/local/log.mjs +19 -45
  191. package/src/local/macos-background-input.mjs +398 -0
  192. package/src/local/macos-idle-sleep-assertion.mjs +65 -0
  193. package/src/local/macos-trust-broker.mjs +404 -0
  194. package/src/local/managed-job-cancellation.mjs +42 -0
  195. package/src/local/managed-job-capacity.mjs +16 -0
  196. package/src/local/managed-job-directory-generation.mjs +60 -0
  197. package/src/local/managed-job-directory.mjs +75 -0
  198. package/src/local/managed-job-durable-process.mjs +49 -0
  199. package/src/local/managed-job-lock.mjs +46 -14
  200. package/src/local/managed-job-plan.mjs +38 -14
  201. package/src/local/managed-job-projection.mjs +23 -15
  202. package/src/local/managed-job-retention.mjs +128 -0
  203. package/src/local/managed-job-runner-claim.mjs +70 -0
  204. package/src/local/managed-job-runner.mjs +35 -10
  205. package/src/local/managed-job-storage.mjs +22 -6
  206. package/src/local/managed-job-terminal-maintenance.mjs +40 -0
  207. package/src/local/managed-job-terminal.mjs +150 -0
  208. package/src/local/managed-jobs.mjs +424 -287
  209. package/src/local/npm-cli.mjs +42 -0
  210. package/src/local/npm-environment.mjs +37 -0
  211. package/src/local/operation-authorization.mjs +68 -324
  212. package/src/local/operation-risk.mjs +51 -4
  213. package/src/local/owner-state-lock.mjs +118 -0
  214. package/src/local/package-identity.mjs +9 -0
  215. package/src/local/patch.mjs +20 -18
  216. package/src/local/path-inspection.mjs +23 -0
  217. package/src/local/policy.mjs +19 -0
  218. package/src/local/private-toolchain-integrity.mjs +54 -0
  219. package/src/local/process-execution.mjs +87 -75
  220. package/src/local/process-foreground-timeout.mjs +50 -0
  221. package/src/local/process-identity.mjs +41 -7
  222. package/src/local/process-nonreplayable-settlement.mjs +50 -0
  223. package/src/local/process-result-projection.mjs +22 -0
  224. package/src/local/process-session-events.mjs +47 -0
  225. package/src/local/process-session-remote-activity.mjs +10 -0
  226. package/src/local/process-session-termination.mjs +73 -0
  227. package/src/local/process-sessions.mjs +144 -112
  228. package/src/local/process-tracker.mjs +140 -13
  229. package/src/local/process-tree-ownership-types.d.ts +37 -0
  230. package/src/local/process-tree-ownership.mjs +57 -0
  231. package/src/local/process-tree-signal.mjs +34 -0
  232. package/src/local/process-tree-snapshot.mjs +77 -0
  233. package/src/local/process-tree-supervisor.mjs +69 -0
  234. package/src/local/process-tree.mjs +11 -53
  235. package/src/local/project-metadata.mjs +19 -6
  236. package/src/local/relay-call-recovery.mjs +58 -38
  237. package/src/local/relay-connection-classification.mjs +131 -0
  238. package/src/local/relay-connection-support.mjs +91 -0
  239. package/src/local/relay-connection.mjs +179 -272
  240. package/src/local/relay-diagnostics.mjs +91 -0
  241. package/src/local/relay-heartbeat.mjs +119 -0
  242. package/src/local/relay-liveness.mjs +109 -0
  243. package/src/local/relay-peer-diagnostics.mjs +29 -0
  244. package/src/local/release-runtime-lock.mjs +18 -0
  245. package/src/local/remote-activity-idle-sleep-guard.mjs +77 -0
  246. package/src/local/remote-configuration.mjs +48 -0
  247. package/src/local/resilient-relay-connection.mjs +178 -0
  248. package/src/local/resource-admission-diagnostics.mjs +52 -0
  249. package/src/local/resource-admission-policy.mjs +115 -0
  250. package/src/local/resource-admission.mjs +339 -0
  251. package/src/local/resource-build-root.mjs +83 -0
  252. package/src/local/resource-cargo-concurrency.mjs +38 -0
  253. package/src/local/resource-cmake-concurrency.mjs +42 -0
  254. package/src/local/resource-command-concurrency.mjs +37 -0
  255. package/src/local/resource-command-profile.mjs +176 -0
  256. package/src/local/resource-coordinator-accounting.mjs +21 -0
  257. package/src/local/resource-cpu-window.mjs +20 -0
  258. package/src/local/resource-disk-headroom.mjs +13 -0
  259. package/src/local/resource-elastic-memory.mjs +19 -0
  260. package/src/local/resource-elastic-request.mjs +36 -0
  261. package/src/local/resource-foreground-wait.mjs +29 -0
  262. package/src/local/resource-go-concurrency.mjs +43 -0
  263. package/src/local/resource-gradle-concurrency.mjs +57 -0
  264. package/src/local/resource-host-cache.mjs +39 -0
  265. package/src/local/resource-host-darwin.mjs +54 -0
  266. package/src/local/resource-host-linux.mjs +35 -0
  267. package/src/local/resource-host-sample-file.mjs +23 -0
  268. package/src/local/resource-host-snapshot.mjs +99 -0
  269. package/src/local/resource-lease-accounting.mjs +119 -0
  270. package/src/local/resource-light-command.mjs +6 -0
  271. package/src/local/resource-make-concurrency.mjs +42 -0
  272. package/src/local/resource-maven-concurrency.mjs +38 -0
  273. package/src/local/resource-ninja-command-concurrency.mjs +20 -0
  274. package/src/local/resource-ninja-concurrency.mjs +28 -0
  275. package/src/local/resource-operations.mjs +26 -10
  276. package/src/local/resource-pressure.mjs +67 -0
  277. package/src/local/resource-probe-command.mjs +35 -0
  278. package/src/local/resource-process-admission.mjs +59 -0
  279. package/src/local/resource-process-ancestry-cache.mjs +43 -0
  280. package/src/local/resource-process-ancestry.mjs +32 -0
  281. package/src/local/resource-process-priority.mjs +15 -0
  282. package/src/local/resource-project-key.mjs +53 -0
  283. package/src/local/resource-pytest-concurrency.mjs +33 -0
  284. package/src/local/resource-release-control-classification.mjs +14 -0
  285. package/src/local/resource-release-control-executable.mjs +70 -0
  286. package/src/local/resource-release-control-workspace.mjs +41 -0
  287. package/src/local/resource-request-contract.mjs +30 -0
  288. package/src/local/resource-script-classification.mjs +44 -0
  289. package/src/local/resource-shell-analysis.mjs +58 -0
  290. package/src/local/resource-staging-recovery.mjs +97 -0
  291. package/src/local/resource-swift-concurrency.mjs +31 -0
  292. package/src/local/resource-transaction-lock.mjs +189 -0
  293. package/src/local/resource-wait.mjs +48 -0
  294. package/src/local/resource-waiters.mjs +139 -0
  295. package/src/local/resource-xcode-command.mjs +7 -0
  296. package/src/local/resource-xcode-concurrency.mjs +34 -0
  297. package/src/local/resource-xcode-non-build.mjs +19 -0
  298. package/src/local/runtime-activation.mjs +700 -0
  299. package/src/local/runtime-activity-projection.mjs +48 -0
  300. package/src/local/runtime-capabilities.mjs +48 -15
  301. package/src/local/runtime-diagnostic-state.mjs +14 -0
  302. package/src/local/runtime-diagnostics.mjs +40 -13
  303. package/src/local/runtime-info-projection.mjs +60 -0
  304. package/src/local/runtime-info-relay-projection.mjs +21 -0
  305. package/src/local/runtime-paths.mjs +2 -1
  306. package/src/local/runtime-process-routing.mjs +33 -0
  307. package/src/local/runtime-relay-connection-options.mjs +44 -0
  308. package/src/local/runtime-relay-control.mjs +98 -0
  309. package/src/local/runtime-relay.mjs +26 -50
  310. package/src/local/runtime-reporting.mjs +37 -21
  311. package/src/local/runtime-resource-service.mjs +77 -0
  312. package/src/local/runtime-tool-handlers.mjs +13 -10
  313. package/src/local/runtime.mjs +244 -208
  314. package/src/local/secure-file.mjs +73 -20
  315. package/src/local/security-audit-dispatch.mjs +35 -0
  316. package/src/local/security-audit-log.mjs +215 -0
  317. package/src/local/security-audit-state.mjs +139 -0
  318. package/src/local/security-audit-storage.mjs +135 -0
  319. package/src/local/security-audit-warning.mjs +31 -0
  320. package/src/local/security-audit-worker.mjs +87 -0
  321. package/src/local/service-convergence.mjs +42 -1
  322. package/src/local/service-definition.mjs +24 -0
  323. package/src/local/service-environment.mjs +18 -10
  324. package/src/local/service-owner.mjs +146 -0
  325. package/src/local/service-ownership.mjs +17 -0
  326. package/src/local/service-restart-handoff.mjs +64 -0
  327. package/src/local/service-restart-scheduler.mjs +49 -0
  328. package/src/local/service-runtime-convergence.mjs +52 -0
  329. package/src/local/service-runtime.mjs +105 -0
  330. package/src/local/service-status.mjs +60 -0
  331. package/src/local/service.mjs +385 -92
  332. package/src/local/shell.mjs +39 -19
  333. package/src/local/ssh-key.mjs +158 -42
  334. package/src/local/state-inventory.mjs +50 -24
  335. package/src/local/state-owner-lock-inventory.mjs +23 -0
  336. package/src/local/state-root-owned-namespaces.mjs +83 -0
  337. package/src/local/state-root-retirement.mjs +89 -0
  338. package/src/local/state.mjs +386 -96
  339. package/src/local/stdio.mjs +96 -66
  340. package/src/local/support-state-projection.mjs +30 -0
  341. package/src/local/system-network-route.mjs +76 -0
  342. package/src/local/systemd-removal.mjs +20 -0
  343. package/src/local/tool-executor.mjs +85 -20
  344. package/src/local/tool-result-boundary.mjs +51 -0
  345. package/src/local/toolchain-operation-lock.mjs +41 -0
  346. package/src/local/tools.mjs +7 -5
  347. package/src/local/trusted-executable.mjs +53 -0
  348. package/src/local/trusted-git-executable.mjs +34 -0
  349. package/src/local/trusted-github-cli.mjs +24 -0
  350. package/src/local/windows-service-convergence.mjs +49 -0
  351. package/src/local/windows-service.mjs +52 -45
  352. package/src/local/worker-deployment-fingerprint.mjs +102 -0
  353. package/src/local/worker-deployment.mjs +48 -60
  354. package/src/local/worker-health.mjs +12 -4
  355. package/src/local/worker-secret-file.mjs +37 -17
  356. package/src/local/workspace-file-service.mjs +156 -239
  357. package/src/local/workspace-file-transaction.mjs +189 -0
  358. package/src/local/workspace-search.mjs +55 -0
  359. package/src/local/wrangler-toolchain/package-lock.json +1505 -0
  360. package/src/local/wrangler-toolchain/package.json +23 -0
  361. package/src/local/wrangler-toolchain-verification.mjs +135 -0
  362. package/src/local/wrangler-toolchain.mjs +188 -0
  363. package/src/shared/access-contract.json +7 -1
  364. package/src/shared/activation-recovery.mjs +49 -0
  365. package/src/shared/admin-auth.d.mts +2 -1
  366. package/src/shared/admin-auth.mjs +3 -3
  367. package/src/shared/authority-revocation.d.mts +9 -0
  368. package/src/shared/authority-revocation.mjs +28 -0
  369. package/src/shared/daemon-auth.d.mts +11 -0
  370. package/src/shared/daemon-auth.mjs +17 -0
  371. package/src/shared/device-session-auth.d.mts +20 -0
  372. package/src/shared/device-session-auth.mjs +51 -0
  373. package/src/shared/foreground-timeout.d.mts +15 -0
  374. package/src/shared/foreground-timeout.mjs +70 -0
  375. package/src/shared/log-redaction.d.mts +9 -0
  376. package/src/shared/log-redaction.mjs +51 -0
  377. package/src/shared/mcp-protocol.d.mts +27 -0
  378. package/src/shared/mcp-protocol.mjs +275 -0
  379. package/src/shared/project-overview-projection.d.mts +4 -0
  380. package/src/shared/project-overview-projection.mjs +96 -0
  381. package/src/shared/relay-contract.json +28 -0
  382. package/src/shared/result-projection.d.mts +2 -1
  383. package/src/shared/result-projection.mjs +13 -2
  384. package/src/shared/server-metadata.json +15 -9
  385. package/src/shared/tool-argument-validation.d.mts +17 -0
  386. package/src/shared/tool-argument-validation.mjs +325 -0
  387. package/src/shared/tool-call-capacity.d.mts +41 -0
  388. package/src/shared/tool-call-capacity.mjs +59 -0
  389. package/src/shared/tool-catalog.json +626 -57
  390. package/src/worker/access.ts +12 -0
  391. package/src/worker/account-admin.ts +55 -33
  392. package/src/worker/authority-revocations.ts +174 -0
  393. package/src/worker/authority.ts +52 -6
  394. package/src/worker/daemon-auth.ts +49 -68
  395. package/src/worker/daemon-channel.ts +36 -0
  396. package/src/worker/daemon-http-auth.ts +63 -0
  397. package/src/worker/daemon-http-channel.ts +120 -0
  398. package/src/worker/daemon-http-controller.ts +163 -0
  399. package/src/worker/daemon-http-protocol.ts +62 -0
  400. package/src/worker/daemon-http-registry.ts +82 -0
  401. package/src/worker/daemon-last-observation.ts +30 -0
  402. package/src/worker/daemon-liveness.ts +8 -6
  403. package/src/worker/daemon-ready-dispatch.ts +17 -0
  404. package/src/worker/daemon-ready-messages.ts +73 -0
  405. package/src/worker/daemon-ready-waiters.ts +79 -0
  406. package/src/worker/daemon-recovery-budget.ts +13 -0
  407. package/src/worker/daemon-registry.ts +58 -0
  408. package/src/worker/daemon-relay-diagnostics.ts +127 -0
  409. package/src/worker/daemon-socket-attachment.ts +55 -0
  410. package/src/worker/daemon-sockets.ts +72 -62
  411. package/src/worker/daemon-status.ts +38 -0
  412. package/src/worker/device-session-verifier.ts +129 -0
  413. package/src/worker/dpop.ts +157 -0
  414. package/src/worker/durable-process-timeout.ts +29 -0
  415. package/src/worker/errors.ts +57 -0
  416. package/src/worker/http.ts +112 -26
  417. package/src/worker/index.ts +446 -440
  418. package/src/worker/mcp-access.ts +57 -0
  419. package/src/worker/mcp-controller.ts +188 -0
  420. package/src/worker/mcp-http-accept.ts +11 -0
  421. package/src/worker/mcp-http-contract.ts +322 -0
  422. package/src/worker/mcp-initialization-compat.ts +141 -0
  423. package/src/worker/mcp-jsonrpc.ts +11 -29
  424. package/src/worker/mcp-removed-protocol.ts +17 -0
  425. package/src/worker/mcp-response-proxy.ts +135 -0
  426. package/src/worker/mcp-response-stream.ts +65 -0
  427. package/src/worker/mcp-stale-schema-compat.ts +57 -0
  428. package/src/worker/mcp-stream-proxy-contract.ts +48 -0
  429. package/src/worker/mcp-tool-call-input.ts +23 -0
  430. package/src/worker/nonce-store.ts +33 -35
  431. package/src/worker/oauth-authorization-page.ts +21 -1
  432. package/src/worker/oauth-client-admin.ts +52 -0
  433. package/src/worker/oauth-client-contract.ts +38 -0
  434. package/src/worker/oauth-controller.ts +107 -47
  435. package/src/worker/oauth-field-contract.ts +31 -0
  436. package/src/worker/oauth-record-contract.ts +7 -0
  437. package/src/worker/oauth-refresh-authority.ts +27 -0
  438. package/src/worker/oauth-refresh-exchange.ts +162 -0
  439. package/src/worker/oauth-refresh-families.ts +130 -27
  440. package/src/worker/oauth-refresh-persistence.ts +116 -0
  441. package/src/worker/oauth-state.ts +33 -18
  442. package/src/worker/oauth-store-validation.ts +131 -0
  443. package/src/worker/oauth-token-derivation.ts +33 -0
  444. package/src/worker/oauth-token-issuance.ts +119 -0
  445. package/src/worker/oauth-tokens.ts +56 -190
  446. package/src/worker/observability.ts +38 -5
  447. package/src/worker/pending-admission.ts +15 -0
  448. package/src/worker/pending-call-capacity.ts +108 -0
  449. package/src/worker/pending-call-contract.ts +42 -5
  450. package/src/worker/pending-call-deadlines.ts +75 -0
  451. package/src/worker/pending-calls.ts +131 -125
  452. package/src/worker/runtime-alarm-storage.ts +37 -0
  453. package/src/worker/runtime-alarm.ts +136 -0
  454. package/src/worker/server-info-activity.ts +36 -0
  455. package/src/worker/server-info-tool-delivery.ts +15 -0
  456. package/src/worker/server-info.ts +168 -0
  457. package/src/worker/tool-catalog.ts +47 -1
  458. package/src/worker/tool-timeout.ts +75 -14
  459. package/src/worker/websocket-protocol.ts +26 -2
  460. package/src/worker/worker-edge-guard.ts +90 -0
  461. package/src/worker/worker-edge-log.ts +65 -0
  462. package/src/worker/worker-entry.ts +52 -0
  463. package/src/worker/worker-mcp-config.ts +23 -0
  464. package/src/worker/worker-metadata.ts +48 -0
  465. package/src/worker/worker-rate-limit-key.ts +30 -0
  466. package/src/worker/worker-runtime-config.ts +20 -0
  467. package/src/worker/worker-static-routes.ts +54 -0
  468. package/src/worker/worker-task-lifetime.ts +18 -0
  469. package/tsconfig.local.json +17 -1
  470. package/wrangler.jsonc +13 -0
  471. package/src/local/cli-approval.mjs +0 -117
  472. package/src/local/operation-state-lock.mjs +0 -92
  473. package/src/worker/mcp-session.ts +0 -72
@@ -2,9 +2,9 @@
2
2
 
3
3
  > Generated from `src/shared/tool-catalog.json`. Do not edit this file manually.
4
4
 
5
- This catalog is the authoritative public tool contract for names, availability classes, behavior annotations, and JSON input schemas. Runtime authorization is additionally determined by the active policy described in [POLICY_REFERENCE.md](POLICY_REFERENCE.md).
5
+ This catalog is the authoritative public tool contract for names, local-daemon availability classes, behavior annotations, and JSON input schemas. An availability value describes the daemon policy ceiling, not authenticated remote-account entitlement. Remote account-role ceilings (including owner-only tools) and the effective-authority intersection are generated in [POLICY_REFERENCE.md](POLICY_REFERENCE.md).
6
6
 
7
- Tool count: **51**.
7
+ Tool count: **54**.
8
8
 
9
9
  ## Index
10
10
 
@@ -14,10 +14,12 @@ Tool count: **51**.
14
14
  | [`project_overview`](#project_overview) | `always` | yes | no | yes | no |
15
15
  | [`session_bootstrap`](#session_bootstrap) | `always` | yes | no | yes | no |
16
16
  | [`resolve_task_capabilities`](#resolve_task_capabilities) | `always` | yes | no | yes | no |
17
- | [`list_local_applications`](#list_local_applications) | `full` | yes | no | yes | yes |
17
+ | [`list_local_applications`](#list_local_applications) | `always` | yes | no | yes | yes |
18
18
  | [`open_local_application`](#open_local_application) | `full` | no | no | no | yes |
19
19
  | [`inspect_local_application`](#inspect_local_application) | `full` | yes | no | yes | yes |
20
20
  | [`operate_local_application`](#operate_local_application) | `full` | no | yes | no | yes |
21
+ | [`computer_observe`](#computer_observe) | `full` | no | no | no | yes |
22
+ | [`computer_act`](#computer_act) | `full` | no | yes | no | yes |
21
23
  | [`browser_status`](#browser_status) | `full` | no | no | yes | yes |
22
24
  | [`pair_browser_extension`](#pair_browser_extension) | `full` | no | no | no | yes |
23
25
  | [`browser_list_tabs`](#browser_list_tabs) | `full` | yes | no | yes | yes |
@@ -47,6 +49,7 @@ Tool count: **51**.
47
49
  | [`git_diff`](#git_diff) | `always` | yes | no | yes | no |
48
50
  | [`git_log`](#git_log) | `always` | yes | no | yes | no |
49
51
  | [`git_show`](#git_show) | `always` | yes | no | yes | no |
52
+ | [`git_commit`](#git_commit) | `direct-exec` | no | no | no | no |
50
53
  | [`run_process`](#run_process) | `direct-exec` | no | yes | no | yes |
51
54
  | [`start_process`](#start_process) | `direct-exec` | no | yes | no | yes |
52
55
  | [`read_process`](#read_process) | `direct-exec` | yes | no | yes | no |
@@ -66,7 +69,7 @@ Tool count: **51**.
66
69
 
67
70
  **Server information**
68
71
 
69
- Return authenticated account authority, effective policy/tools, daemon capability ceiling, runtime metadata, and protocol status. Treat authorization.effective_policy and authorization.effective_tools as authoritative; daemon.policy is only a ceiling.
72
+ Return live authorization and daemon status. Use detail=summary for routine version, authority, readiness, relay, capacity, and timeout checks; use the default/full projection for exact tool membership, OAuth metadata, account identity, and detailed observability.
70
73
 
71
74
  | Contract field | Value |
72
75
  |---|---|
@@ -81,6 +84,17 @@ Return authenticated account authority, effective policy/tools, daemon capabilit
81
84
  ```json
82
85
  {
83
86
  "type": "object",
87
+ "properties": {
88
+ "detail": {
89
+ "type": "string",
90
+ "enum": [
91
+ "summary",
92
+ "full"
93
+ ],
94
+ "default": "full",
95
+ "description": "Use summary for compact health/authority status; use full for complete tool, OAuth, and observability diagnostics."
96
+ }
97
+ },
84
98
  "additionalProperties": false
85
99
  }
86
100
  ```
@@ -89,7 +103,7 @@ Return authenticated account authority, effective policy/tools, daemon capabilit
89
103
 
90
104
  **Project overview**
91
105
 
92
- Summarize the connected workspace and repository. Remote responses report the authenticated account effective policy/tools at policy and tools, with the daemon capability ceiling preserved separately as daemonPolicy and daemonTools.
106
+ Summarize the connected workspace, repository root, top-level entries, and project-facing runtime context. Use detail=summary for a compact inventory/readiness projection; use full for exact tool membership, account authority detail, and complete top-level metadata.
93
107
 
94
108
  | Contract field | Value |
95
109
  |---|---|
@@ -104,6 +118,17 @@ Summarize the connected workspace and repository. Remote responses report the au
104
118
  ```json
105
119
  {
106
120
  "type": "object",
121
+ "properties": {
122
+ "detail": {
123
+ "type": "string",
124
+ "enum": [
125
+ "summary",
126
+ "full"
127
+ ],
128
+ "default": "full",
129
+ "description": "Use summary for compact workspace/inventory and authority counts; use full for exact tools, account identity, routing detail, and per-entry paths/sizes."
130
+ }
131
+ },
107
132
  "additionalProperties": false
108
133
  }
109
134
  ```
@@ -112,7 +137,7 @@ Summarize the connected workspace and repository. Remote responses report the au
112
137
 
113
138
  **Load session bootstrap**
114
139
 
115
- Load built-in working agreements, bounded automatic project facts, user-global and root workspace instructions, and capability refresh metadata for MCP session initialization.
140
+ Load built-in working agreements, bounded automatic project facts, authority-permitted user-global guidance, root workspace instructions, and capability refresh metadata. Delegated remote accounts do not read the daemon owner's home-scoped agent config unless their effective authority permits unrestricted paths. Clients call it explicitly when refreshed authority-scoped project context is needed; MCP 2026-07-28 has no initialization-time compatibility adapter.
116
141
 
117
142
  | Contract field | Value |
118
143
  |---|---|
@@ -142,7 +167,7 @@ Load built-in working agreements, bounded automatic project facts, user-global a
142
167
 
143
168
  **Resolve task capabilities**
144
169
 
145
- Rescan built-in and automatic project context, local instruction files, skills, explicit and automatic package commands, installed applications, and browser capability metadata; rank the capabilities relevant to the current task and optionally load the best skill.
170
+ Rescan authority-permitted task-relevant instructions, skills, registered commands, installed applications, browser metadata, and the effective tool catalog. Delegated remote accounts remain confined to project-scoped capability context unless their effective authority permits unrestricted paths. Return bounded set-level execution routes, ranked tools, routing ambiguity, and an optional selected skill. Pass known_refresh_fingerprint to omit unchanged static instructions while recomputing task-specific ranking. The result is advisory: direct Bash and every other policy-allowed tool remain available.
146
171
 
147
172
  | Contract field | Value |
148
173
  |---|---|
@@ -178,6 +203,12 @@ Rescan built-in and automatic project context, local instruction files, skills,
178
203
  "include_selected_skill": {
179
204
  "type": "boolean",
180
205
  "default": true
206
+ },
207
+ "known_refresh_fingerprint": {
208
+ "type": "string",
209
+ "pattern": "^[a-f0-9]{64}$",
210
+ "maxLength": 64,
211
+ "description": "Previous refresh fingerprint. When it still matches, unchanged static instructions are omitted while task-specific ranking is recomputed."
181
212
  }
182
213
  },
183
214
  "required": [
@@ -194,7 +225,7 @@ Discover installed local applications and launchers without reading their docume
194
225
 
195
226
  | Contract field | Value |
196
227
  |---|---|
197
- | Availability | `full` |
228
+ | Availability | `always` |
198
229
  | Read-only hint | yes |
199
230
  | Destructive hint | no |
200
231
  | Idempotent hint | yes |
@@ -226,7 +257,7 @@ Discover installed local applications and launchers without reading their docume
226
257
 
227
258
  **Open local application**
228
259
 
229
- Open a named local application, optionally with a document or URL target, using the operating system launcher.
260
+ Open a named local application, optionally with a document or URL target, using the operating system launcher. Launch is non-idempotent: cancellation is checked immediately before invoking the launcher, but once the launcher process invocation is attempted, timeout, cancellation, or response loss is an unknown launch outcome and callers should inspect application state before retrying. That fixed ambiguous settlement is returned as a public, non-retryable MCP error. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
230
261
 
231
262
  | Contract field | Value |
232
263
  |---|---|
@@ -259,7 +290,7 @@ Open a named local application, optionally with a document or URL target, using
259
290
  "timeout_seconds": {
260
291
  "type": "integer",
261
292
  "minimum": 1,
262
- "maximum": 120,
293
+ "maximum": 60,
263
294
  "default": 30
264
295
  }
265
296
  },
@@ -273,7 +304,7 @@ Open a named local application, optionally with a document or URL target, using
273
304
 
274
305
  **Inspect local application UI**
275
306
 
276
- Inspect a bounded macOS Accessibility tree for a running application. Requires local Accessibility permission and never executes arbitrary AppleScript supplied by the caller.
307
+ Inspect a bounded macOS Accessibility tree for a running application. Requires local Accessibility permission and never executes arbitrary AppleScript supplied by the caller. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
277
308
 
278
309
  | Contract field | Value |
279
310
  |---|---|
@@ -319,7 +350,7 @@ Inspect a bounded macOS Accessibility tree for a running application. Requires l
319
350
  "timeout_seconds": {
320
351
  "type": "integer",
321
352
  "minimum": 1,
322
- "maximum": 120,
353
+ "maximum": 60,
323
354
  "default": 30
324
355
  }
325
356
  },
@@ -333,7 +364,7 @@ Inspect a bounded macOS Accessibility tree for a running application. Requires l
333
364
 
334
365
  **Operate local application UI**
335
366
 
336
- Perform a structured macOS Accessibility action on a matched UI element. Text can be supplied through a registered local resource so secret values do not enter MCP arguments.
367
+ Perform a structured macOS Accessibility action on a matched UI element. check/uncheck are desired-state operations: they read the current checkbox/radio state at dispatch time, skip input when already satisfied, and otherwise issue at most one AXPress (uncheck is checkbox-only). Text can be supplied through a registered local resource so secret values do not enter MCP arguments. keystroke focuses the matched AX target and delivers surrogate-safe Unicode chunks with public PID-scoped CoreGraphics keyboard events; key_press delivers a layout-independent special key (Enter, Tab, Escape, Backspace, Delete, arrows, Home/End, PageUp/PageDown, or Space) with optional Shift+, likewise PID-scoped and without making the application frontmost. Both return input_transport=public-cgevent-pid; Meta/Control/Alt and character shortcuts are deliberately unsupported because inactive-AppKit validation did not establish reliable command-shortcut semantics. Cancellation is re-checked after asynchronous local-resource resolution and before invoking the fixed JXA mutation helper. Explicit JXA selector/geometry/action preflight errors remain definite, but once the mutating osascript invocation is attempted, timeout, cancellation, missing output, or malformed helper settlement is an unknown action outcome and must not be replayed blindly. Fixed launch/Accessibility/visual ambiguous settlements are returned as public, non-retryable MCP errors. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
337
368
 
338
369
  | Contract field | Value |
339
370
  |---|---|
@@ -357,13 +388,17 @@ Perform a structured macOS Accessibility action on a matched UI element. Text ca
357
388
  },
358
389
  "action": {
359
390
  "type": "string",
391
+ "description": "Structured Accessibility action. check/uncheck are idempotent desired-state actions; check accepts checkbox or radio-button targets, while uncheck accepts checkbox targets.",
360
392
  "enum": [
361
393
  "activate",
362
394
  "click",
395
+ "check",
396
+ "uncheck",
363
397
  "set_value",
364
398
  "focus",
365
399
  "press",
366
- "keystroke"
400
+ "keystroke",
401
+ "key_press"
367
402
  ]
368
403
  },
369
404
  "selector": {
@@ -409,6 +444,11 @@ Perform a structured macOS Accessibility action on a matched UI element. Text ca
409
444
  "type": "string",
410
445
  "pattern": "^[a-z][a-z0-9._-]{0,63}$"
411
446
  },
447
+ "key": {
448
+ "type": "string",
449
+ "maxLength": 100,
450
+ "description": "Required for key_press. One layout-independent special key: Enter, Tab, Escape, Backspace, Delete, ArrowLeft, ArrowUp, ArrowRight, ArrowDown, Home, End, PageUp, PageDown, or Space, optionally prefixed with Shift+."
451
+ },
412
452
  "include_menus": {
413
453
  "type": "boolean",
414
454
  "default": false,
@@ -423,7 +463,7 @@ Perform a structured macOS Accessibility action on a matched UI element. Text ca
423
463
  "timeout_seconds": {
424
464
  "type": "integer",
425
465
  "minimum": 1,
426
- "maximum": 120,
466
+ "maximum": 60,
427
467
  "default": 30
428
468
  }
429
469
  },
@@ -434,11 +474,504 @@ Perform a structured macOS Accessibility action on a matched UI element. Text ca
434
474
  }
435
475
  ```
436
476
 
477
+ ## `computer_observe`
478
+
479
+ **Observe computer surface**
480
+
481
+ Create a snapshot-bound browser or desktop observation. Browser mode combines executable DOM refs with a real Chromium Accessibility snapshot, layout geometry, document epoch, and an optional screenshot captured through the same bounded CDP session when available; high-confidence AX nodes are fused back to executable action_ref values, while executable DOM candidates are salience-ranked globally across accessible frames. Cancellation is checked again after asynchronous capture and before snapshot publication, so a cancelled observe cannot leave an actionable snapshot_id in the bounded store. Use computer_act with the exact snapshot_id instead of carrying selectors across changing UI state. timeout_seconds is one end-to-end observation budget; compound screenshot/semantic/window-revalidation stages consume the remaining deadline rather than restarting it.
482
+
483
+ | Contract field | Value |
484
+ |---|---|
485
+ | Availability | `full` |
486
+ | Read-only hint | no |
487
+ | Destructive hint | no |
488
+ | Idempotent hint | no |
489
+ | Open-world hint | yes |
490
+
491
+ ### Input schema
492
+
493
+ ```json
494
+ {
495
+ "type": "object",
496
+ "additionalProperties": false,
497
+ "properties": {
498
+ "surface": {
499
+ "type": "string",
500
+ "enum": [
501
+ "browser",
502
+ "application"
503
+ ]
504
+ },
505
+ "tab_id": {
506
+ "type": "integer",
507
+ "minimum": 1,
508
+ "description": "Browser tab to observe. Omit to use the active tab."
509
+ },
510
+ "application": {
511
+ "type": "string",
512
+ "minLength": 1,
513
+ "maxLength": 300,
514
+ "description": "Required when surface=application."
515
+ },
516
+ "include_screenshot": {
517
+ "type": "boolean",
518
+ "default": true,
519
+ "description": "Include a browser viewport screenshot or, for macOS application observations, a best-effort target-window screenshot. Application screenshot failure does not discard Accessibility state."
520
+ },
521
+ "screenshot_format": {
522
+ "type": "string",
523
+ "enum": [
524
+ "png",
525
+ "jpeg"
526
+ ],
527
+ "default": "png"
528
+ },
529
+ "screenshot_quality": {
530
+ "type": "integer",
531
+ "minimum": 1,
532
+ "maximum": 100,
533
+ "default": 90
534
+ },
535
+ "max_elements": {
536
+ "type": "integer",
537
+ "minimum": 1,
538
+ "maximum": 1000,
539
+ "default": 300
540
+ },
541
+ "max_ax_nodes": {
542
+ "type": "integer",
543
+ "minimum": 1,
544
+ "maximum": 2000,
545
+ "default": 600,
546
+ "description": "Browser only. Maximum Chromium Accessibility nodes retained after salience ranking."
547
+ },
548
+ "max_frames": {
549
+ "type": "integer",
550
+ "minimum": 1,
551
+ "maximum": 64,
552
+ "default": 32,
553
+ "description": "Browser only. Maximum CDP frame documents considered for the Accessibility snapshot."
554
+ },
555
+ "ax_depth": {
556
+ "type": "integer",
557
+ "minimum": 1,
558
+ "maximum": 16,
559
+ "default": 12,
560
+ "description": "Browser only. Maximum Chromium Accessibility tree depth requested per frame."
561
+ },
562
+ "focus_query": {
563
+ "type": "string",
564
+ "maxLength": 1000,
565
+ "description": "Optional task/target hint used only to rank bounded browser DOM/Chromium Accessibility or macOS application Accessibility observations; it never becomes a selector or action. Observation metadata reports whether the bounded scan matched the query and whether absence was searched exhaustively."
566
+ },
567
+ "max_depth": {
568
+ "type": "integer",
569
+ "minimum": 1,
570
+ "maximum": 12,
571
+ "default": 6,
572
+ "description": "Application accessibility traversal depth."
573
+ },
574
+ "include_values": {
575
+ "type": "boolean",
576
+ "default": false
577
+ },
578
+ "include_menus": {
579
+ "type": "boolean",
580
+ "default": false,
581
+ "description": "Application only. Include menu subtrees."
582
+ },
583
+ "all_frames": {
584
+ "type": "boolean",
585
+ "default": true,
586
+ "description": "Browser only. Inspect accessible frames within the aggregate element budget."
587
+ },
588
+ "timeout_seconds": {
589
+ "type": "integer",
590
+ "minimum": 1,
591
+ "maximum": 60,
592
+ "default": 30
593
+ }
594
+ },
595
+ "required": [
596
+ "surface"
597
+ ]
598
+ }
599
+ ```
600
+
601
+ ## `computer_act`
602
+
603
+ **Act on computer snapshot**
604
+
605
+ Perform one snapshot-bound browser or desktop action and then observe/verify the effect. Semantic targets use refs from computer_observe. Browser click/double-click/hover/scroll may use normalized_viewport coordinates from the same navigation-coherent CDP screenshot; browser drag uses a source target plus destination from that same snapshot and requires ref-to-ref or point-to-point evidence. macOS application drag uses two normalized points from the same window screenshot, and application scroll uses one normalized point plus bounded wheel deltas; both require the opt-in snapshot-bound native pixel backend and do not guess Accessibility fallbacks. Point dispatch revalidates the exact screenshot immediately before native/trusted input; browser ref drag revalidates both trusted backend identities and in-viewport geometry before any drag input; browser ref scroll revalidates the anchor identity and requires its content quad to remain in viewport before one trusted wheel event. Browser reload/back/forward also bind the observed tab URL, document epoch, and current history-list slot and revalidate those authorities immediately before the navigation mutation; stale or unavailable history authority fails before dispatch. Results distinguish dispatch_status from effect_status; unknown outcomes must be inspected before retrying. dispatch_status=unknown is driven only by fixed lower-layer mutation-settlement markers, so a resource or preflight timeout before mutation remains a definite failure. Deterministic post-observation checks expose `verification.post_checks[].evidence_source` (`browser_tab_state`, `browser_semantic`, `application_process`, `application_workspace`, `application_accessibility`, or `screenshot`) so callers can distinguish state evidence from pixel evidence. Browser post-state defaults to a compact summary plus bounded semantic delta; post_screenshot=auto avoids redundant images unless visual evidence or ambiguous dispatch requires one. Request post_observation_detail=full only when the full tree is needed. timeout_seconds is one end-to-end action budget spanning preflight, the single dispatch attempt, verification, and post-observation; internal stages receive only the remaining deadline.
606
+
607
+ | Contract field | Value |
608
+ |---|---|
609
+ | Availability | `full` |
610
+ | Read-only hint | no |
611
+ | Destructive hint | yes |
612
+ | Idempotent hint | no |
613
+ | Open-world hint | yes |
614
+
615
+ ### Input schema
616
+
617
+ ```json
618
+ {
619
+ "type": "object",
620
+ "additionalProperties": false,
621
+ "properties": {
622
+ "surface": {
623
+ "type": "string",
624
+ "enum": [
625
+ "browser",
626
+ "application"
627
+ ]
628
+ },
629
+ "snapshot_id": {
630
+ "type": "string",
631
+ "pattern": "^cu_[A-Za-z0-9_-]{8,80}$"
632
+ },
633
+ "action": {
634
+ "type": "string",
635
+ "description": "Surface action. For application refs, check/uncheck are idempotent desired-state actions verified by post-observation checked state; their required target state cannot be weakened by expect. Application key_press is ref-only and sends one layout-independent special key, optionally Shift-modified, through PID-scoped CoreGraphics without activating the app.",
636
+ "enum": [
637
+ "navigate",
638
+ "reload",
639
+ "back",
640
+ "forward",
641
+ "click",
642
+ "double_click",
643
+ "hover",
644
+ "drag",
645
+ "scroll",
646
+ "fill",
647
+ "type_text",
648
+ "select",
649
+ "check",
650
+ "uncheck",
651
+ "focus",
652
+ "press",
653
+ "submit",
654
+ "scroll_into_view",
655
+ "activate",
656
+ "set_value",
657
+ "keystroke",
658
+ "key_press"
659
+ ]
660
+ },
661
+ "target": {
662
+ "oneOf": [
663
+ {
664
+ "type": "object",
665
+ "additionalProperties": false,
666
+ "properties": {
667
+ "ref": {
668
+ "type": "string",
669
+ "minLength": 1,
670
+ "maxLength": 100
671
+ }
672
+ },
673
+ "required": [
674
+ "ref"
675
+ ]
676
+ },
677
+ {
678
+ "type": "object",
679
+ "additionalProperties": false,
680
+ "properties": {
681
+ "point": {
682
+ "type": "object",
683
+ "additionalProperties": false,
684
+ "properties": {
685
+ "x": {
686
+ "type": "number",
687
+ "minimum": 0,
688
+ "exclusiveMaximum": 1
689
+ },
690
+ "y": {
691
+ "type": "number",
692
+ "minimum": 0,
693
+ "exclusiveMaximum": 1
694
+ },
695
+ "space": {
696
+ "type": "string",
697
+ "enum": [
698
+ "normalized_viewport"
699
+ ],
700
+ "default": "normalized_viewport"
701
+ }
702
+ },
703
+ "required": [
704
+ "x",
705
+ "y"
706
+ ]
707
+ }
708
+ },
709
+ "required": [
710
+ "point"
711
+ ]
712
+ }
713
+ ],
714
+ "description": "Snapshot-bound semantic ref; a normalized point is also allowed for browser click/double-click/hover/drag/scroll against the exact navigation-coherent CDP screenshot, and for macOS application click/double-click/drag/scroll against the exact window screenshot. Application click point delivery may prefer one unique addressable Accessibility control under the point. Application double_click is deliberately point-only and always uses one snapshot-bound native pixel settlement; it is never approximated by repeated AXPress. Arbitrary/custom-drawn single-click pixels plus all application double-click, drag, and scroll points require the snapshot's opt-in native pixel backend. For drag this is the source endpoint; for scroll this is the wheel anchor. Omit only for targetless actions."
715
+ },
716
+ "destination": {
717
+ "oneOf": [
718
+ {
719
+ "type": "object",
720
+ "additionalProperties": false,
721
+ "properties": {
722
+ "ref": {
723
+ "type": "string",
724
+ "minLength": 1,
725
+ "maxLength": 100
726
+ }
727
+ },
728
+ "required": [
729
+ "ref"
730
+ ]
731
+ },
732
+ {
733
+ "type": "object",
734
+ "additionalProperties": false,
735
+ "properties": {
736
+ "point": {
737
+ "type": "object",
738
+ "additionalProperties": false,
739
+ "properties": {
740
+ "x": {
741
+ "type": "number",
742
+ "minimum": 0,
743
+ "exclusiveMaximum": 1
744
+ },
745
+ "y": {
746
+ "type": "number",
747
+ "minimum": 0,
748
+ "exclusiveMaximum": 1
749
+ },
750
+ "space": {
751
+ "type": "string",
752
+ "enum": [
753
+ "normalized_viewport"
754
+ ],
755
+ "default": "normalized_viewport"
756
+ }
757
+ },
758
+ "required": [
759
+ "x",
760
+ "y"
761
+ ]
762
+ }
763
+ },
764
+ "required": [
765
+ "point"
766
+ ]
767
+ }
768
+ ],
769
+ "description": "Drag destination from the same computer snapshot. Browser drag requires ref-to-ref or normalized-point-to-point evidence; mixed evidence types are rejected. macOS application drag currently requires normalized point source and destination from the same window screenshot and the snapshot-bound native pixel backend."
770
+ },
771
+ "delta_x": {
772
+ "type": "number",
773
+ "minimum": -10000,
774
+ "maximum": 10000,
775
+ "default": 0,
776
+ "description": "Browser or macOS application scroll only. Horizontal trusted wheel delta in logical pixels; positive values scroll right. At least one of delta_x or delta_y must be non-zero."
777
+ },
778
+ "delta_y": {
779
+ "type": "number",
780
+ "minimum": -10000,
781
+ "maximum": 10000,
782
+ "default": 0,
783
+ "description": "Browser or macOS application scroll only. Vertical trusted wheel delta in logical pixels; positive values scroll down. At least one of delta_x or delta_y must be non-zero."
784
+ },
785
+ "url": {
786
+ "type": "string",
787
+ "maxLength": 32768,
788
+ "description": "Required for browser navigate."
789
+ },
790
+ "value": {
791
+ "type": "string",
792
+ "maxLength": 131072
793
+ },
794
+ "value_resource": {
795
+ "type": "string",
796
+ "pattern": "^[a-z][a-z0-9._-]{0,63}$"
797
+ },
798
+ "key": {
799
+ "type": "string",
800
+ "maxLength": 100,
801
+ "description": "Browser press key, or application key_press special key. Application supports Enter, Tab, Escape, Backspace, Delete, ArrowLeft, ArrowUp, ArrowRight, ArrowDown, Home, End, PageUp, PageDown, Space, with optional Shift+."
802
+ },
803
+ "wait_for": {
804
+ "type": "string",
805
+ "enum": [
806
+ "none",
807
+ "domcontentloaded",
808
+ "complete"
809
+ ],
810
+ "default": "none"
811
+ },
812
+ "input_mode": {
813
+ "type": "string",
814
+ "enum": [
815
+ "auto",
816
+ "trusted",
817
+ "dom"
818
+ ],
819
+ "default": "auto",
820
+ "description": "Browser only."
821
+ },
822
+ "element_timeout_seconds": {
823
+ "type": "integer",
824
+ "minimum": 1,
825
+ "maximum": 60,
826
+ "default": 10
827
+ },
828
+ "timeout_seconds": {
829
+ "type": "integer",
830
+ "minimum": 1,
831
+ "maximum": 60,
832
+ "default": 30
833
+ },
834
+ "verify_timeout_seconds": {
835
+ "type": "integer",
836
+ "minimum": 1,
837
+ "maximum": 60,
838
+ "default": 5,
839
+ "description": "Bounded effect-verification window. Browser conditions use the browser wait backend; application expectations may retry at most nine read-only post-action observations with bounded backoff, and each retry capture is capped by the remaining verification budget. Verification retries never replay the dispatched action; post-dispatch cancellation or incomplete readback makes unsettled effect evidence unknown rather than retryable."
840
+ },
841
+ "include_post_screenshot": {
842
+ "type": "boolean",
843
+ "description": "Legacy explicit boolean override for post_screenshot: true maps to always and false maps to never. Mutually exclusive with post_screenshot."
844
+ },
845
+ "post_screenshot": {
846
+ "type": "string",
847
+ "enum": [
848
+ "auto",
849
+ "always",
850
+ "never"
851
+ ],
852
+ "default": "auto",
853
+ "description": "auto includes the post-action screenshot only for snapshot-bound visual-point actions, explicit expect.visual_change, or an unknown dispatch outcome on either browser or application surfaces; always/never force the choice. Mutually exclusive with include_post_screenshot."
854
+ },
855
+ "post_max_elements": {
856
+ "type": "integer",
857
+ "minimum": 1,
858
+ "maximum": 1000,
859
+ "default": 180
860
+ },
861
+ "post_max_ax_nodes": {
862
+ "type": "integer",
863
+ "minimum": 1,
864
+ "maximum": 2000,
865
+ "default": 180,
866
+ "description": "Browser only. Bound Chromium Accessibility nodes in the automatic post-action observation."
867
+ },
868
+ "post_max_depth": {
869
+ "type": "integer",
870
+ "minimum": 1,
871
+ "maximum": 12,
872
+ "default": 6,
873
+ "description": "Application only. Accessibility depth for the new post-action observation. It does not change target dispatch identity; dispatch and preflight reuse the source snapshot's max_depth."
874
+ },
875
+ "post_observation_detail": {
876
+ "type": "string",
877
+ "enum": [
878
+ "summary",
879
+ "full"
880
+ ],
881
+ "description": "Return a compact post-state summary or the full post-action semantic observation. Both browser and application surfaces default to summary; application summaries retain a bounded set of actionable post-snapshot refs. Request full only when the complete tree is required."
882
+ },
883
+ "include_menus": {
884
+ "type": "boolean",
885
+ "default": false,
886
+ "description": "Application only. Include menu trees in the new post-action observation. It does not change target dispatch identity; observe with include_menus=true when the source target itself is in a menu."
887
+ },
888
+ "expect": {
889
+ "type": "object",
890
+ "additionalProperties": false,
891
+ "properties": {
892
+ "url_contains": {
893
+ "type": "string",
894
+ "minLength": 1,
895
+ "maxLength": 32768
896
+ },
897
+ "url_changed": {
898
+ "type": "boolean"
899
+ },
900
+ "semantic_change": {
901
+ "type": "boolean",
902
+ "description": "Explicitly require the bounded semantic observation fingerprint to change or remain unchanged."
903
+ },
904
+ "visual_change": {
905
+ "type": "boolean",
906
+ "description": "Explicitly require the screenshot SHA-256 fingerprint to change or remain unchanged. Requires screenshots in both the referenced and post-action observations; animations can satisfy this condition, so use it only when visual change is the intended effect."
907
+ },
908
+ "text": {
909
+ "type": "string",
910
+ "minLength": 1,
911
+ "maxLength": 4000
912
+ },
913
+ "load_state": {
914
+ "type": "string",
915
+ "enum": [
916
+ "domcontentloaded",
917
+ "complete"
918
+ ]
919
+ },
920
+ "target_state": {
921
+ "type": "string",
922
+ "enum": [
923
+ "attached",
924
+ "detached",
925
+ "visible",
926
+ "hidden",
927
+ "enabled",
928
+ "editable",
929
+ "checked",
930
+ "unchecked"
931
+ ]
932
+ },
933
+ "frontmost": {
934
+ "type": "boolean"
935
+ },
936
+ "target_exists": {
937
+ "type": "boolean"
938
+ },
939
+ "target_enabled": {
940
+ "type": "boolean"
941
+ },
942
+ "target_focused": {
943
+ "type": "boolean"
944
+ },
945
+ "target_checked": {
946
+ "type": "boolean"
947
+ },
948
+ "target_selected": {
949
+ "type": "boolean"
950
+ },
951
+ "target_expanded": {
952
+ "type": "boolean"
953
+ },
954
+ "target_value_matches": {
955
+ "type": "boolean",
956
+ "description": "Application set_value only. Compare the post-action AXValue with the value being written inside the local application backend and return only a Boolean result. Non-sensitive set_value actions require this to remain true; sensitive targets do not support this readback."
957
+ }
958
+ },
959
+ "description": "Browser expectations use url/text/load/target_state and optional explicit semantic_change/visual_change checks; application expectations use frontmost and semantic target state fields including enabled/focused/checked/selected/expanded, plus private target_value_matches readback for non-sensitive set_value actions."
960
+ }
961
+ },
962
+ "required": [
963
+ "surface",
964
+ "snapshot_id",
965
+ "action"
966
+ ]
967
+ }
968
+ ```
969
+
437
970
  ## `browser_status`
438
971
 
439
972
  **Browser bridge status**
440
973
 
441
- Start or inspect the loopback bridge for the Chromium profile where the extension is installed. Machine Bridge does not launch Playwright or another browser process, but cannot infer whether that profile is the user's daily or isolated profile; status reports authenticated extension version, protocol, capabilities, and reload state.
974
+ Start or inspect the loopback bridge for the Chromium profile where the extension is installed. Machine Bridge does not launch Playwright or another browser process, but cannot infer whether that profile is the user's daily or isolated profile; status reports authenticated extension version, protocol, capabilities, and reload state. Concurrent callers may share one broker-startup operation, but each caller re-checks its own cancellation after shared startup settles, so cancelling one request does not cancel startup for another waiter or return completion to the cancelled caller.
442
975
 
443
976
  | Contract field | Value |
444
977
  |---|---|
@@ -461,7 +994,7 @@ Start or inspect the loopback bridge for the Chromium profile where the extensio
461
994
 
462
995
  **Pair browser extension**
463
996
 
464
- Open the local pairing page and return the packaged unpacked-extension path for installation in the user's intended Chromium profile. Pairing is persisted only after an acknowledged version/capability handshake.
997
+ Open the local pairing page and return the packaged unpacked-extension path for installation in the user's intended Chromium profile. Pairing is persisted only after an acknowledged version/capability handshake. Opening the pairing page is non-idempotent: cancellation is checked immediately before the OS launcher, but once that launcher invocation is attempted, timeout/cancellation/response loss is an unknown launch outcome and callers should inspect the browser before opening it again. That fixed ambiguous settlement is returned as a public, non-retryable MCP error.
465
998
 
466
999
  | Contract field | Value |
467
1000
  |---|---|
@@ -490,7 +1023,7 @@ Open the local pairing page and return the packaged unpacked-extension path for
490
1023
 
491
1024
  **List browser tabs**
492
1025
 
493
- List tabs from the paired user's existing Chromium browser profile.
1026
+ Read the tab inventory from the paired existing Chromium profile without creating, activating, or closing a tab. Use browser_manage_tabs for tab mutations. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
494
1027
 
495
1028
  | Contract field | Value |
496
1029
  |---|---|
@@ -518,7 +1051,7 @@ List tabs from the paired user's existing Chromium browser profile.
518
1051
  "timeout_seconds": {
519
1052
  "type": "integer",
520
1053
  "minimum": 1,
521
- "maximum": 120,
1054
+ "maximum": 60,
522
1055
  "default": 30
523
1056
  }
524
1057
  }
@@ -529,7 +1062,7 @@ List tabs from the paired user's existing Chromium browser profile.
529
1062
 
530
1063
  **Manage browser tabs**
531
1064
 
532
- Create, activate, or close tabs in the paired existing browser profile.
1065
+ Create, activate, or close tabs in the paired existing Chromium profile. Tab mutations are non-idempotent: if Chrome rejects a mutation request after invocation, or the broker loses the extension response after attempting dispatch, the outcome is reported as unknown and callers should inspect browser_list_tabs before retrying. If a completed mutating extension result cannot be serialized or fit within the bounded response budget, that result settlement is also unknown and must not be used as evidence that activation/close/create did not run. Fixed ambiguous browser settlements are returned as public, non-retryable MCP errors. Activation is verified between its two mutation stages: after tab activation resolves, the target is re-read and must still be active before its freshly observed current window is focused; after focus resolves, the target is re-read again and success returns only the final verified tab provenance. Concurrent tab/window moves or user tab switches are reported as partial completion with inspection guidance and are never automatically re-activated or re-focused. Cancellation is re-checked after asynchronous tab lookup and before each later mutation stage; a stage not yet started is skipped, while an earlier completed stage is not rolled back. Use browser_list_tabs when only a read-only tab inventory is needed. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
533
1066
 
534
1067
  | Contract field | Value |
535
1068
  |---|---|
@@ -571,7 +1104,7 @@ Create, activate, or close tabs in the paired existing browser profile.
571
1104
  "timeout_seconds": {
572
1105
  "type": "integer",
573
1106
  "minimum": 1,
574
- "maximum": 120,
1107
+ "maximum": 60,
575
1108
  "default": 30
576
1109
  }
577
1110
  },
@@ -585,7 +1118,7 @@ Create, activate, or close tabs in the paired existing browser profile.
585
1118
 
586
1119
  **Read browser page source**
587
1120
 
588
- Read bounded serialized current DOM HTML from the active or selected browser tab. max_bytes is one aggregate budget across at most 64 accessible frames, with explicit frame, node, and byte truncation metadata.
1121
+ Read bounded raw serialized DOM HTML from the active or selected tab only when source markup is genuinely required. Raw source can contain hidden bootstrap, session, account, authentication, or other sensitive data that is not visible in the rendered page; treat the entire result as sensitive and do not use it for routine semantic inspection. Prefer browser_inspect_page for semantic elements, actionability, reusable refs, and structured interaction planning. max_bytes is one aggregate budget across at most 64 accessible frames. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
589
1122
 
590
1123
  | Contract field | Value |
591
1124
  |---|---|
@@ -615,7 +1148,7 @@ Read bounded serialized current DOM HTML from the active or selected browser tab
615
1148
  "timeout_seconds": {
616
1149
  "type": "integer",
617
1150
  "minimum": 1,
618
- "maximum": 120,
1151
+ "maximum": 60,
619
1152
  "default": 30
620
1153
  },
621
1154
  "frame_id": {
@@ -634,7 +1167,7 @@ Read bounded serialized current DOM HTML from the active or selected browser tab
634
1167
 
635
1168
  **Inspect browser page**
636
1169
 
637
- Inspect a bounded snapshot-version-2 semantic representation across at most 64 accessible frames, with one aggregate element budget, bounded reusable refs, actionability state, bounded page-controlled metadata, and explicit scan/frame truncation.
1170
+ Inspect a bounded semantic/actionability snapshot with reusable element refs for structured browser decisions and actions. Candidates are salience-ranked globally across accessible frames instead of consuming the aggregate budget in frame traversal order. This is not raw page source; use browser_get_source when serialized DOM HTML is required. The aggregate element budget spans at most 64 accessible frames. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
638
1171
 
639
1172
  | Contract field | Value |
640
1173
  |---|---|
@@ -668,7 +1201,7 @@ Inspect a bounded snapshot-version-2 semantic representation across at most 64 a
668
1201
  "timeout_seconds": {
669
1202
  "type": "integer",
670
1203
  "minimum": 1,
671
- "maximum": 120,
1204
+ "maximum": 60,
672
1205
  "default": 30
673
1206
  },
674
1207
  "frame_id": {
@@ -687,7 +1220,7 @@ Inspect a bounded snapshot-version-2 semantic representation across at most 64 a
687
1220
 
688
1221
  **Wait for browser state**
689
1222
 
690
- Wait until all supplied URL, load, text, and element-state conditions are satisfied in an existing browser tab.
1223
+ Wait until all supplied URL, load, text, and element-state conditions are satisfied in an existing browser tab. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
691
1224
 
692
1225
  | Contract field | Value |
693
1226
  |---|---|
@@ -788,7 +1321,7 @@ Wait until all supplied URL, load, text, and element-state conditions are satisf
788
1321
  "timeout_seconds": {
789
1322
  "type": "integer",
790
1323
  "minimum": 1,
791
- "maximum": 120,
1324
+ "maximum": 60,
792
1325
  "default": 30
793
1326
  }
794
1327
  }
@@ -799,7 +1332,7 @@ Wait until all supplied URL, load, text, and element-state conditions are satisf
799
1332
 
800
1333
  **Operate browser page**
801
1334
 
802
- Perform one structured navigation or page action in the user's existing browser tab without arbitrary JavaScript. Automatic trusted-input fallback occurs only before any DevTools Input command starts; ambiguous post-dispatch failures require inspection before retry.
1335
+ Perform one structured navigation or page action in the user's existing browser tab without arbitrary JavaScript. Automatic trusted-input fallback occurs only before any trusted preparation (including DOM focus/scroll) or DevTools Input mutation starts; ambiguous post-dispatch failures require inspection before retry. Broker timeout, disconnect, extension replacement, or response loss after WebSocket dispatch is attempted is also an unknown mutation outcome, not proof that the action did not run. If the mutating extension call completes but its success result cannot be serialized or fit within the bounded response budget, that result settlement is likewise unknown and callers must inspect state rather than replay. Fixed ambiguous browser settlements are returned as public, non-retryable MCP errors. DOM/trusted-preparation page calls use a structured settlement envelope: an explicit page preflight error remains definite, while loss of the mutating scripting invocation response after that invocation is attempted is an unknown action outcome and must not be replayed blindly. Cancellation is re-checked after asynchronous target/preparation steps and before each later mutation stage; a stage not yet started is skipped, while earlier focus/scroll/input effects are not rolled back. A successful action is not converted to failure by a later tab-metadata read: current tab provenance is returned only when verified, otherwise tab_metadata_verified is false and stale pre-action title/URL metadata is omitted. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
803
1336
 
804
1337
  | Contract field | Value |
805
1338
  |---|---|
@@ -913,7 +1446,7 @@ Perform one structured navigation or page action in the user's existing browser
913
1446
  "timeout_seconds": {
914
1447
  "type": "integer",
915
1448
  "minimum": 1,
916
- "maximum": 120,
1449
+ "maximum": 60,
917
1450
  "default": 30
918
1451
  },
919
1452
  "frame_id": {
@@ -947,7 +1480,7 @@ Perform one structured navigation or page action in the user's existing browser
947
1480
 
948
1481
  **Fill complex browser form**
949
1482
 
950
- Fill multiple fields and optionally submit a complex form. Sensitive values can come from registered local resources; errors identify possible earlier mutations without returning field values.
1483
+ Fill multiple fields and optionally submit a complex form. Sensitive values can come from registered local resources; errors identify possible earlier mutations without returning field values. If the broker has attempted extension dispatch and the response is then lost, times out, disconnects, or is interrupted by extension replacement, the mutation outcome is unknown and browser state must be inspected before retrying. If the completed mutating extension result cannot be serialized or fit within the bounded response budget, that result settlement is also unknown and the form must not be replayed blindly. Fixed ambiguous browser settlements are returned as public, non-retryable MCP errors. The mutating page-world scripting call also uses a structured settlement envelope: explicit selector/field preflight errors remain definite, but loss of the scripting invocation response after the invocation is attempted is an unknown form outcome and must be inspected before retrying. Cancellation observed after asynchronous target lookup but before page mutation skips the fill stage; once page mutation starts, earlier field changes are not rolled back. Successful results attach current tab title/URL only when a fresh metadata read verifies them; otherwise tab_metadata_verified is false and stale pre-fill provenance is omitted. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
951
1484
 
952
1485
  | Contract field | Value |
953
1486
  |---|---|
@@ -1109,7 +1642,7 @@ Fill multiple fields and optionally submit a complex form. Sensitive values can
1109
1642
  "timeout_seconds": {
1110
1643
  "type": "integer",
1111
1644
  "minimum": 1,
1112
- "maximum": 180,
1645
+ "maximum": 60,
1113
1646
  "default": 60
1114
1647
  },
1115
1648
  "frame_id": {
@@ -1133,7 +1666,7 @@ Fill multiple fields and optionally submit a complex form. Sensitive values can
1133
1666
 
1134
1667
  **Capture browser screenshot**
1135
1668
 
1136
- Capture the visible area of the active or selected tab from the paired existing browser profile, restore the previous active tab when safe, avoid focusing another window, and return native MCP image content.
1669
+ Capture the visible area of the active or selected tab from the paired existing browser profile and return native MCP image content without focusing another window. Selecting an inactive tab may temporarily activate it. Immediately before activation, the extension revalidates that the same restore-baseline tab is still active in that window; a concurrent user tab switch fails definite pre-dispatch without activating anything. If the activation response is then lost, or if the resolved activation no longer verifies the same target tab in the restore-baseline window, the outcome is unknown, no capture or automatic rollback is attempted, and callers should inspect browser_list_tabs before retrying. Broker response loss after extension dispatch is attempted is also reported as unknown because the temporary activation/capture lifecycle may already have run. If the completed mutating extension result cannot be serialized or fit within the bounded response budget, that result settlement is likewise unknown because temporary tab activation/restoration may already have occurred. Fixed ambiguous browser settlements are returned as public, non-retryable MCP errors. Cancellation observed before temporary activation prevents activation; if it arrives after confirmed temporary activation but before capture, capture is skipped and the previous active tab is restored when safely verifiable. After confirmed temporary activation, later capture or verification failures restore the previous active tab when safe while preserving a concurrent user tab switch; restoration revalidates that the baseline tab still belongs to the capture window before activating it. Once the restore activation API is invoked, a rejected response, returned window mismatch, or failed post-restore verification is an unknown active-tab outcome and callers must inspect browser_list_tabs before retrying; no same screenshot is replayed automatically. Successful results use the verified post-capture active-tab observation for title/URL provenance and report tab_metadata_verified=true. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
1137
1670
 
1138
1671
  | Contract field | Value |
1139
1672
  |---|---|
@@ -1171,7 +1704,7 @@ Capture the visible area of the active or selected tab from the paired existing
1171
1704
  "timeout_seconds": {
1172
1705
  "type": "integer",
1173
1706
  "minimum": 1,
1174
- "maximum": 120,
1707
+ "maximum": 60,
1175
1708
  "default": 30
1176
1709
  }
1177
1710
  }
@@ -1182,7 +1715,7 @@ Capture the visible area of the active or selected tab from the paired existing
1182
1715
 
1183
1716
  **Upload browser files**
1184
1717
 
1185
- Populate a browser file input from registered local resource files without returning file contents through MCP results.
1718
+ Populate a browser file input from registered local resource files without returning file contents through MCP results. If the broker has attempted extension dispatch and the response is then lost, times out, disconnects, or is interrupted by extension replacement, the mutation outcome is unknown and browser state must be inspected before retrying. If the completed mutating extension result cannot be serialized or fit within the bounded response budget, that result settlement is also unknown and the upload must not be replayed blindly. Fixed ambiguous browser settlements are returned as public, non-retryable MCP errors. The mutating page-world scripting call also uses a structured settlement envelope: explicit selector/file-input preflight errors remain definite, but loss of the scripting invocation response after the invocation is attempted is an unknown upload outcome and must be inspected before retrying. Cancellation observed after asynchronous target lookup but before the file-input mutation skips that stage; once the page mutation starts, resulting input/change handlers are not rolled back. Successful results attach current tab title/URL only when a fresh metadata read verifies them; otherwise tab_metadata_verified is false and stale pre-upload provenance is omitted. Foreground execution is limited to 60 seconds; use process sessions or managed jobs for longer work.
1186
1719
 
1187
1720
  | Contract field | Value |
1188
1721
  |---|---|
@@ -1274,7 +1807,7 @@ Populate a browser file input from registered local resource files without retur
1274
1807
  "timeout_seconds": {
1275
1808
  "type": "integer",
1276
1809
  "minimum": 1,
1277
- "maximum": 180,
1810
+ "maximum": 60,
1278
1811
  "default": 60
1279
1812
  },
1280
1813
  "frame_id": {
@@ -1300,7 +1833,7 @@ Populate a browser file input from registered local resource files without retur
1300
1833
 
1301
1834
  **Load agent context**
1302
1835
 
1303
- Discover built-in defaults, bounded automatic project facts, Codex-compatible global/root-to-target instruction precedence, progressively disclosed local skills, explicit commands, and safe automatic package-script command aliases for a target path.
1836
+ Discover the instruction, skill, and registered-command inventory for a target path, including precedence and provenance. Use this when the caller needs the context itself; use resolve_task_capabilities when it needs task-specific ranking and execution-route advice.
1304
1837
 
1305
1838
  | Contract field | Value |
1306
1839
  |---|---|
@@ -1455,7 +1988,7 @@ List effective direct-argv commands from project manifests and safe automatic pa
1455
1988
 
1456
1989
  **Run registered local command**
1457
1990
 
1458
- Run an effective manifest or automatic package-script command through its fixed argv, cwd, timeout ceiling, and extra-argument policy. Large stdout/stderr is previewed inline and retained temporarily for paged read_process continuation.
1991
+ Prefer this when the repository already defines the desired operation as a registered command or package script. It runs the fixed argv/cwd/timeout contract without shell reinterpretation; use exec_command for ad hoc pipelines or run_process for an unregistered executable argv. Local foreground execution remains request-scoped. Remote execution is durable-first: the command is committed as a principal-bound one-step managed job and the response returns a job_id for read_job recovery across MCP disconnects or daemon replacement. Supply idempotency_key when retry-safe recovery of an ambiguous acceptance response is required.
1459
1992
 
1460
1993
  | Contract field | Value |
1461
1994
  |---|---|
@@ -1490,10 +2023,15 @@ Run an effective manifest or automatic package-script command through its fixed
1490
2023
  "maxItems": 64,
1491
2024
  "default": []
1492
2025
  },
2026
+ "idempotency_key": {
2027
+ "type": "string",
2028
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:-]{0,127}$"
2029
+ },
1493
2030
  "timeout_seconds": {
1494
2031
  "type": "integer",
1495
2032
  "minimum": 1,
1496
- "maximum": 600
2033
+ "maximum": 60,
2034
+ "default": 60
1497
2035
  }
1498
2036
  },
1499
2037
  "required": [
@@ -1670,7 +2208,7 @@ Read a bounded PNG, JPEG, GIF, or WebP image from the workspace and return nativ
1670
2208
 
1671
2209
  **Write text file**
1672
2210
 
1673
- Atomically write a UTF-8 file up to 5 MiB. Supports create-only and optimistic SHA-256 checks; symbolic-link destinations are rejected.
2211
+ Atomically write a UTF-8 file up to 5 MiB. Supports create-only and optimistic SHA-256 checks; expected state failures return typed conflict reasons without exposing file content or hashes.
1674
2212
 
1675
2213
  | Contract field | Value |
1676
2214
  |---|---|
@@ -1713,7 +2251,7 @@ Atomically write a UTF-8 file up to 5 MiB. Supports create-only and optimistic S
1713
2251
 
1714
2252
  **Edit text file**
1715
2253
 
1716
- Atomically replace an exact text fragment in one UTF-8 file. By default the old text must occur exactly once.
2254
+ Atomically replace an exact text fragment in one UTF-8 file. Missing text returns not_found; ambiguous text, stale SHA-256 preconditions, and unsupported targets return typed conflicts.
1717
2255
 
1718
2256
  | Contract field | Value |
1719
2257
  |---|---|
@@ -1761,7 +2299,7 @@ Atomically replace an exact text fragment in one UTF-8 file. By default the old
1761
2299
 
1762
2300
  **Apply structured patch**
1763
2301
 
1764
- Apply a bounded Begin Patch/End Patch envelope containing add, update, move, or delete file operations. All paths are prevalidated and mutations are serialized.
2302
+ Apply a bounded Begin Patch/End Patch envelope containing add, update, move, or delete operations. Syntax errors are invalid_request; stale contexts and target collisions are typed conflicts; mutations remain serialized and transactional. A failed transaction is rolled back when possible; if rollback itself is incomplete after mutations began, the tool returns a public non-retryable patch_recovery_incomplete settlement because affected files may be partially modified and must be inspected before retrying.
1765
2303
 
1766
2304
  | Contract field | Value |
1767
2305
  |---|---|
@@ -1860,7 +2398,8 @@ Return bounded Git porcelain status for the repository containing a workspace pa
1860
2398
  "properties": {
1861
2399
  "path": {
1862
2400
  "type": "string",
1863
- "default": "."
2401
+ "default": ".",
2402
+ "maxLength": 32768
1864
2403
  }
1865
2404
  },
1866
2405
  "additionalProperties": false
@@ -1889,7 +2428,8 @@ Return bounded unified Git diff with external diff, text conversion, and filesys
1889
2428
  "properties": {
1890
2429
  "path": {
1891
2430
  "type": "string",
1892
- "default": "."
2431
+ "default": ".",
2432
+ "maxLength": 32768
1893
2433
  },
1894
2434
  "staged": {
1895
2435
  "type": "boolean",
@@ -1928,7 +2468,8 @@ Return recent commits in a bounded, machine-readable format. Author email addres
1928
2468
  "properties": {
1929
2469
  "path": {
1930
2470
  "type": "string",
1931
- "default": "."
2471
+ "default": ".",
2472
+ "maxLength": 32768
1932
2473
  },
1933
2474
  "max_count": {
1934
2475
  "type": "integer",
@@ -1967,11 +2508,13 @@ Return bounded metadata and patch output for one revision without running reposi
1967
2508
  "properties": {
1968
2509
  "path": {
1969
2510
  "type": "string",
1970
- "default": "."
2511
+ "default": ".",
2512
+ "maxLength": 32768
1971
2513
  },
1972
2514
  "revision": {
1973
2515
  "type": "string",
1974
- "default": "HEAD"
2516
+ "default": "HEAD",
2517
+ "maxLength": 256
1975
2518
  },
1976
2519
  "max_bytes": {
1977
2520
  "type": "integer",
@@ -1984,11 +2527,49 @@ Return bounded metadata and patch output for one revision without running reposi
1984
2527
  }
1985
2528
  ```
1986
2529
 
2530
+ ## `git_commit`
2531
+
2532
+ **Create Git commit**
2533
+
2534
+ Create one local Git commit from the repository's existing staged index. This tool refuses repositories with an in-progress merge, rebase, cherry-pick, revert, bisect, or sequencer operation. It never stages files, amends history, signs, runs Git hooks, launches an editor, or pushes. The commit message is delivered over stdin rather than process argv; repository-local Git author identity must already be configured.
2535
+
2536
+ | Contract field | Value |
2537
+ |---|---|
2538
+ | Availability | `direct-exec` |
2539
+ | Read-only hint | no |
2540
+ | Destructive hint | no |
2541
+ | Idempotent hint | no |
2542
+ | Open-world hint | no |
2543
+
2544
+ ### Input schema
2545
+
2546
+ ```json
2547
+ {
2548
+ "type": "object",
2549
+ "properties": {
2550
+ "path": {
2551
+ "type": "string",
2552
+ "default": ".",
2553
+ "maxLength": 32768
2554
+ },
2555
+ "message": {
2556
+ "type": "string",
2557
+ "minLength": 1,
2558
+ "maxLength": 16384
2559
+ }
2560
+ },
2561
+ "required": [
2562
+ "message"
2563
+ ],
2564
+ "additionalProperties": false
2565
+ }
2566
+ ```
2567
+
1987
2568
  ## `run_process`
1988
2569
 
1989
2570
  **Run process directly**
1990
2571
 
1991
- Execute an argv array without a command shell. This avoids shell parsing but does not sandbox the executable or code it launches. Large stdout/stderr is previewed inline and retained temporarily for paged read_process continuation.
2572
+ Run an explicit executable plus argv when no shell syntax is needed and no registered command fits. This avoids quoting, globbing, pipelines, and redirection, but it is not a sandbox; use exec_command when Bash composition is the convenient choice. Local foreground execution remains request-scoped. Remote execution is durable-first: the argv is committed as a principal-bound one-step managed job and the response returns a job_id for read_job recovery across MCP disconnects or daemon replacement. Supply idempotency_key when retry-safe recovery of an ambiguous acceptance response is required.
1992
2573
 
1993
2574
  | Contract field | Value |
1994
2575
  |---|---|
@@ -2016,11 +2597,15 @@ Execute an argv array without a command shell. This avoids shell parsing but doe
2016
2597
  "type": "string",
2017
2598
  "default": "."
2018
2599
  },
2600
+ "idempotency_key": {
2601
+ "type": "string",
2602
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:-]{0,127}$"
2603
+ },
2019
2604
  "timeout_seconds": {
2020
2605
  "type": "integer",
2021
2606
  "minimum": 1,
2022
- "maximum": 600,
2023
- "default": 120
2607
+ "maximum": 60,
2608
+ "default": 60
2024
2609
  }
2025
2610
  },
2026
2611
  "required": [
@@ -2034,7 +2619,7 @@ Execute an argv array without a command shell. This avoids shell parsing but doe
2034
2619
 
2035
2620
  **Start process session**
2036
2621
 
2037
- Start a direct argv process without a shell and retain bounded stdout, stderr, and stdin state across MCP calls.
2622
+ Start a direct argv process without a shell and retain bounded stdout, stderr, and stdin state across MCP calls. Cancellation before spawn is definite. If cancellation or deadline arrives after the child has spawned but before the start result settles, the server requests termination and returns a public non-retryable unknown outcome with the allocated session_id; the retained session remains inspectable so callers can verify its state instead of starting the command again blindly. Process sessions are daemon-lifetime state: use start_job/read_job when work must survive a Machine Bridge daemon restart, service replacement, or MCP disconnect. For an authorized remote call on macOS, a successfully admitted session keeps an idle-sleep assertion for the child lifetime; this does not override explicit sleep or lid-close behavior.
2038
2623
 
2039
2624
  | Contract field | Value |
2040
2625
  |---|---|
@@ -2131,7 +2716,7 @@ Read bounded stdout and stderr deltas from a running process session or a recent
2131
2716
 
2132
2717
  **Write process stdin**
2133
2718
 
2134
- Write bounded UTF-8 data to a live process session and optionally close its stdin stream.
2719
+ Write bounded UTF-8 data to a live process session and optionally close its stdin stream. Cancellation before any stdin mutation is definite. Once stdin.write or stdin.end has been invoked, callback/error/cancellation ambiguity is returned as a public non-retryable unknown outcome with the session_id; inspect the session before writing the same data again because the child may already have consumed it.
2135
2720
 
2136
2721
  | Contract field | Value |
2137
2722
  |---|---|
@@ -2205,7 +2790,7 @@ Terminate a live server-managed process tree with graceful or forced termination
2205
2790
 
2206
2791
  **Diagnose runtime layers**
2207
2792
 
2208
- Run fixed, non-user-controlled local probes to distinguish MCP policy, local filesystem, process-spawn, shell, managed-job storage, and registered-resource failures. A successful response proves the request reached the local daemon; it cannot diagnose a host refusal that blocks the tool call itself.
2793
+ Run fixed, non-user-controlled local probes and return privacy-safe control-plane state (call capacity, draining processes, execution guardrails, relay liveness, and audit health) to distinguish MCP policy, local filesystem, process-spawn, shell, managed-job storage, and registered-resource failures. A successful response proves the request reached the local daemon; it cannot diagnose a host refusal that blocks the tool call itself.
2209
2794
 
2210
2795
  | Contract field | Value |
2211
2796
  |---|---|
@@ -2293,9 +2878,9 @@ Generate or reuse an Ed25519 SSH key pair on the local machine and register the
2293
2878
 
2294
2879
  ## `stage_job`
2295
2880
 
2296
- **Stage managed job for local approval**
2881
+ **Stage managed job draft**
2297
2882
 
2298
- Validate and persist a managed-job plan without starting any process. Use this when execution tools are unavailable or local operator review is required; launch later with machine-mcp job approve JOB_ID.
2883
+ Validate and persist a durable managed-job draft without starting any process. This is a non-executing record only; a trusted owner client starts work with start_job after reviewing or reconstructing the plan.
2299
2884
 
2300
2885
  | Contract field | Value |
2301
2886
  |---|---|
@@ -2498,7 +3083,7 @@ Validate and persist a managed-job plan without starting any process. Use this w
2498
3083
 
2499
3084
  **Start managed job**
2500
3085
 
2501
- Durably accept a detached argv-based job with ordered steps, job-scoped temporary files, and guaranteed-attempt finally steps. The independent local runner continues if the MCP connection disappears. Use {{temp:name}}, {{resource:name}}, env_resources, or stdin_resource; registered resource contents never enter MCP arguments.
3086
+ Durably accept a detached argv-based job with ordered steps, job-scoped temporary files, and guaranteed-attempt finally steps. The independent local runner continues if the MCP connection disappears. On macOS, an authorized remote account job keeps a runner-owned idle-sleep assertion only after the runner ownership claim is confirmed and persisted account ownership is validated, then through admission, steps, cleanup, and terminal persistence; local managed jobs do not acquire this remote-continuity assertion, and it does not override explicit sleep or lid-close behavior. Use an idempotency_key to deduplicate an uncertain retry while the original job record is retained; eviction/retention expiry ends that deduplication window, so this is not permanent exactly-once execution. Use {{temp:name}}, {{resource:name}}, env_resources, or stdin_resource; registered resource contents never enter MCP arguments.
2502
3087
 
2503
3088
  | Contract field | Value |
2504
3089
  |---|---|
@@ -2518,6 +3103,10 @@ Durably accept a detached argv-based job with ordered steps, job-scoped temporar
2518
3103
  "type": "string",
2519
3104
  "maxLength": 128
2520
3105
  },
3106
+ "idempotency_key": {
3107
+ "type": "string",
3108
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:-]{0,127}$"
3109
+ },
2521
3110
  "steps": {
2522
3111
  "type": "array",
2523
3112
  "minItems": 1,
@@ -2701,7 +3290,7 @@ Durably accept a detached argv-based job with ordered steps, job-scoped temporar
2701
3290
 
2702
3291
  **List managed jobs**
2703
3292
 
2704
- List recent detached managed jobs and their lifecycle status without returning step output.
3293
+ List recent detached managed jobs and their lifecycle status without returning step output. Owner/local callers also receive coarse retained-state capacity counts, including unreadable retired cleanup blockers, without internal retired filenames or filesystem identities.
2705
3294
 
2706
3295
  | Contract field | Value |
2707
3296
  |---|---|
@@ -2732,7 +3321,7 @@ List recent detached managed jobs and their lifecycle status without returning s
2732
3321
 
2733
3322
  **Read managed job**
2734
3323
 
2735
- Return one managed job status plus bounded, resource-redacted step results. Registered resource paths and contents are never returned.
3324
+ Return one managed job status plus bounded, resource-redacted step results. current_phase=resource_admission means the runner is still in cooperative pre-spawn resource admission and no child for that step has started yet. Completed step results keep duration_ms as total orchestration duration; local/owner reads additionally expose resource_admission_ms as the pre-spawn portion, while delegated non-owner reads omit that machine-user scheduling timing. Registered resource paths and contents are never returned.
2736
3325
 
2737
3326
  | Contract field | Value |
2738
3327
  |---|---|
@@ -2796,7 +3385,7 @@ Request cancellation of a detached managed job. The runner terminates the active
2796
3385
 
2797
3386
  **Execute shell command**
2798
3387
 
2799
- Execute a shell command with workspace cwd. This is not a sandbox and has the operating-system authority of the local user. Large stdout/stderr is previewed inline and retained temporarily for paged read_process continuation.
3388
+ Run Bash-compatible shell composition in the workspace: pipelines, redirection, globbing, conditionals, or compact multi-command probes. This is the convenient general escape hatch, not a sandbox, and has the local user's operating-system authority. Prefer run_local_command for an existing fixed project command and run_process when no shell syntax is needed. Local foreground execution remains request-scoped. Remote execution is durable-first: the shell argv is committed as a principal-bound one-step managed job and the response returns a job_id for read_job recovery across MCP disconnects or daemon replacement. Supply idempotency_key when retry-safe recovery of an ambiguous acceptance response is required.
2800
3389
 
2801
3390
  | Contract field | Value |
2802
3391
  |---|---|
@@ -2817,11 +3406,15 @@ Execute a shell command with workspace cwd. This is not a sandbox and has the op
2817
3406
  "minLength": 1,
2818
3407
  "maxLength": 65536
2819
3408
  },
3409
+ "idempotency_key": {
3410
+ "type": "string",
3411
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._~:-]{0,127}$"
3412
+ },
2820
3413
  "timeout_seconds": {
2821
3414
  "type": "integer",
2822
3415
  "minimum": 1,
2823
- "maximum": 600,
2824
- "default": 120
3416
+ "maximum": 60,
3417
+ "default": 60
2825
3418
  }
2826
3419
  },
2827
3420
  "required": [