machine-bridge-mcp 3.0.0-beta.206 → 3.0.0-beta.209
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -20
- package/README.md +5 -0
- package/browser-extension/manifest.json +1 -1
- package/docs/AGENT_CONTEXT.md +33 -2
- package/docs/AUDIT.md +35 -22
- package/docs/CLIENTS.md +6 -1
- package/docs/OPERATIONS.md +5 -38
- package/docs/THREAT_MODEL.md +5 -1
- package/docs/TOOL_REFERENCE.md +2466 -36
- package/docs/UPGRADING.md +1 -1
- package/package.json +16 -38
- package/scripts/release-acceptance.mjs +33 -0
- package/src/local/agent-context.mjs +48 -16
- package/src/local/agent-memory.mjs +110 -0
- package/src/local/agent-skill-discovery.mjs +1 -9
- package/src/local/agent-text-file.mjs +2 -1
- package/src/local/authority-context.mjs +14 -0
- package/src/local/bounded-output.mjs +33 -2
- package/src/local/browser-operation-service.mjs +19 -2
- package/src/local/cf-network-integrity.mjs +8 -4
- package/src/local/cli-options.mjs +4 -4
- package/src/local/cli.mjs +7 -1
- package/src/local/computer-use-verification.mjs +210 -0
- package/src/local/computer-use.mjs +6 -216
- package/src/local/default-instructions.mjs +19 -0
- package/src/local/errors.mjs +110 -16
- package/src/local/exclusive-file.mjs +38 -13
- package/src/local/exclusive-publication-repair.mjs +246 -0
- package/src/local/git-content-service.mjs +1 -7
- package/src/local/hosted-file-read-budget.mjs +10 -2
- package/src/local/job-runner.mjs +37 -6
- package/src/local/managed-job-listing.mjs +64 -4
- package/src/local/managed-job-projection.mjs +12 -4
- package/src/local/managed-job-terminal.mjs +6 -6
- package/src/local/owner-state-lock.mjs +3 -2
- package/src/local/patch.mjs +118 -13
- package/src/local/policy.mjs +2 -0
- package/src/local/process-execution.mjs +6 -1
- package/src/local/process-result-projection.mjs +74 -9
- package/src/local/process-sessions.mjs +1 -1
- package/src/local/project-package.mjs +1 -0
- package/src/local/relay-call-recovery.mjs +2 -2
- package/src/local/relay-connection.mjs +1 -1
- package/src/local/relay-recovery.mjs +146 -0
- package/src/local/resource-admission.mjs +16 -9
- package/src/local/resource-coordinator-health.mjs +147 -0
- package/src/local/resource-request-contract.mjs +28 -3
- package/src/local/resource-staging-recovery.mjs +10 -0
- package/src/local/resource-state-file.mjs +6 -0
- package/src/local/resource-transaction-lock.mjs +6 -3
- package/src/local/resource-waiters.mjs +9 -10
- package/src/local/runtime-activation.mjs +0 -21
- package/src/local/runtime-diagnostic-state.mjs +1 -1
- package/src/local/runtime-info-projection.mjs +25 -1
- package/src/local/runtime-reporting.mjs +2 -0
- package/src/local/runtime.mjs +3 -4
- package/src/local/state.mjs +19 -62
- package/src/local/stdio-task-projection.mjs +41 -0
- package/src/local/stdio.mjs +197 -23
- package/src/local/symbol-outline.mjs +581 -0
- package/src/local/tool-executor.mjs +1 -1
- package/src/local/tools.mjs +3 -0
- package/src/local/workspace-file-service.mjs +136 -13
- package/src/local/workspace-paths.mjs +103 -0
- package/src/local/workspace-search-service.mjs +1 -9
- package/src/local/wrangler-toolchain/package-lock.json +46 -46
- package/src/local/wrangler-toolchain/package.json +4 -4
- package/src/local/wrangler-toolchain-installed-tree.mjs +34 -8
- package/src/local/wrangler-toolchain.mjs +7 -5
- package/src/shared/admin-auth.mjs +3 -9
- package/src/shared/daemon-auth.mjs +3 -9
- package/src/shared/device-session-auth.mjs +3 -9
- package/src/shared/error-guidance.d.mts +2 -0
- package/src/shared/error-guidance.mjs +61 -0
- package/src/shared/help-resources.d.mts +9 -0
- package/src/shared/help-resources.mjs +42 -0
- package/src/shared/mcp-protocol.d.mts +1 -0
- package/src/shared/mcp-protocol.mjs +4 -0
- package/src/shared/mcp-task-contract.d.mts +8 -0
- package/src/shared/mcp-task-contract.mjs +54 -4
- package/src/shared/prompt-projection.d.mts +3 -0
- package/src/shared/prompt-projection.mjs +34 -0
- package/src/shared/records.mjs +10 -0
- package/src/shared/result-projection.mjs +0 -2
- package/src/shared/server-metadata.json +12 -27
- package/src/shared/tool-catalog.json +2169 -9
- package/src/shared/tool-groups.d.mts +16 -0
- package/src/shared/tool-groups.mjs +125 -0
- package/src/shared/trusted-origin.d.mts +1 -0
- package/src/shared/trusted-origin.mjs +18 -0
- package/src/worker/errors.ts +17 -3
- package/src/worker/index.ts +1 -1
- package/src/worker/mcp-job-monitor-claims.ts +0 -12
- package/src/worker/mcp-job-monitor-ui.ts +9 -11
- package/src/worker/mcp-prompts.ts +4 -3
- package/src/worker/mcp-response-proxy.ts +28 -2
- package/src/worker/mcp-task-projection.ts +5 -32
- package/src/worker/mcp-task-seed.ts +4 -4
- package/src/worker/tool-catalog.ts +12 -1
- package/tsconfig.local.json +16 -8
- package/native/macos/MachineBridgeBackgroundInputSmokeFixture.swift +0 -295
- package/native/macos/MachineBridgeTrustBroker.swift +0 -277
- package/scripts/accepted-candidate-tarball.mjs +0 -115
- package/scripts/candidate-runtime-store.mjs +0 -93
- package/scripts/consumer-package-security.mjs +0 -322
- package/scripts/coverage-generation.mjs +0 -41
- package/scripts/foreground-daemon-recovery.mjs +0 -88
- package/scripts/github-backlog.mjs +0 -147
- package/scripts/github-push.mjs +0 -99
- package/scripts/github-release-asset.mjs +0 -58
- package/scripts/github-release.mjs +0 -551
- package/scripts/global-package-installation.mjs +0 -68
- package/scripts/hardened-npm-session.mjs +0 -44
- package/scripts/install-published-prerelease.mjs +0 -199
- package/scripts/local-release-acceptance.mjs +0 -244
- package/scripts/network-retry.mjs +0 -59
- package/scripts/npm-global-prefix.mjs +0 -27
- package/scripts/npm-publication-policy.mjs +0 -17
- package/scripts/persistent-activation-process.mjs +0 -82
- package/scripts/privacy-check.mjs +0 -487
- package/scripts/publish-npm.mjs +0 -343
- package/scripts/published-release.mjs +0 -134
- package/scripts/release-browser-extension-store.mjs +0 -172
- package/scripts/release-ci.mjs +0 -102
- package/scripts/release-impact-check.mjs +0 -85
- package/scripts/release-publication-guard.mjs +0 -50
- package/scripts/release-soak.mjs +0 -287
- package/scripts/release-state.mjs +0 -10
- package/scripts/sbom-check.mjs +0 -106
- package/scripts/source-dependency-tree.mjs +0 -21
- package/scripts/start-release-candidate.mjs +0 -335
- package/scripts/sync-worker-version.mjs +0 -73
- package/scripts/verification-state.mjs +0 -109
- package/src/local/bounded-output-helpers.mjs +0 -29
- package/src/local/managed-job-activity.mjs +0 -27
- package/src/local/managed-job-recovery-listing.mjs +0 -29
- package/src/local/process-error-message.mjs +0 -12
- package/src/local/progress-reporter.mjs +0 -3
- package/src/local/relay-recovery-admission.mjs +0 -21
- package/src/local/relay-recovery-capacity.mjs +0 -29
- package/src/local/relay-recovery-diagnostics.mjs +0 -28
- package/src/local/relay-redelivery-safety.mjs +0 -43
- package/src/local/runtime-info-relay-projection.mjs +0 -25
- package/src/local/short-identifiers.mjs +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 3.0.0-beta.
|
|
3
|
+
## 3.0.0-beta.209 - 2026-10-23
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- Centralize MCP task job-ID validation in the shared task contract so task creation, dispatch and durable-record validation use one pattern.
|
|
18
|
-
- Add actionable error guidance (actionable_remedy) for agent reflexion on tool execution failures.
|
|
19
|
-
- Expand local TypeScript type checking coverage to 74 checked modules with strict JSDoc typing.
|
|
20
|
-
- Consolidate cross-module integer validation helpers into shared runtime modules.
|
|
21
|
-
- Add standard npm test script mapped to the verification runner.
|
|
22
|
-
- Tighten TypeScript compiler checks with noFallthroughCasesInSwitch, noImplicitReturns, and noUncheckedIndexedAccess.
|
|
23
|
-
- Include previously orphaned tests into the check runner plan.
|
|
5
|
+
- Preserve the nearest project instructions when the shared context budget is exhausted, and report omitted guidance with policy-projected paths.
|
|
6
|
+
- Load persistent project memory only on demand (`agent_context` remains strictly read-only), validating versioned metadata, expiry timestamps, and canonical path containment without exposing unreferenced memory-mutation exports.
|
|
7
|
+
- Bound asynchronous symbol-outline traversal, file reads, cancellation, rendered lines, and 16 KiB UTF-8 byte ceiling; omit default parameter values, fix zero-parameter arrow function signature parsing (`() =>`), and enforce per-file policy checks.
|
|
8
|
+
- Require exact editing and patch contexts; add `with_line_numbers` read support, 1-based line-numbered `near_miss` edit candidates, and bounded `conflict_hint` line candidates on `apply_patch` conflicts.
|
|
9
|
+
- Share typed instruction, Git-diff, and skill projections across stdio and Worker prompts. Preserve failures, truncation, and sensitive-file omissions instead of reporting missing data as empty results.
|
|
10
|
+
- Make optional progressive stdio discovery reachable through nine initial tools, canonical groups, and bounded request-scoped catalog subscriptions. Add compact Code Mode TypeScript SDK signature projection (`projectToolCatalogAsTypeScript`) across shared catalog helpers.
|
|
11
|
+
- Share reason-level remedies across transports, surface underlying error reasons in managed-job runner failures (`error_reason`), and add interactive prompt stall detection (`[y/N]`, `Password:`) to process failure advisories.
|
|
12
|
+
- Gate Worker SSE heartbeat comments on complete frame boundaries (`\n\n` / `\r\n\r\n`) via O(1) tail-byte inspection while keeping heartbeats active across multi-step streams.
|
|
13
|
+
- Advance the tool schema generation and bind the catalog digest to its contract (40 verified output schemas and 14 environment-dependent interactive tools across 54 tools).
|
|
14
|
+
- Unify MCP Tasks active/terminal/successful job status sets in `src/shared/mcp-task-contract.mjs`, deduplicate resource-request normalization in `src/local/resource-request-contract.mjs`, and centralize loopback origin parsing in `src/shared/trusted-origin.mjs`.
|
|
15
|
+
- Remove dead barrel re-exports and unused development scripts, enforce static dead-export detection in `tests/architecture/module-boundaries.mjs`, and exempt generated reference documents (`docs/TOOL_REFERENCE.md`, `docs/POLICY.md`) from the hand-written documentation file count cap.
|
|
16
|
+
- Move the native development smoke fixture and tool output-schema contract baseline out of the consumer package; verify nested and deduplicated Wrangler 4.151.3 dependencies at their exact locked locations.
|
|
24
17
|
|
|
25
18
|
## Historical releases
|
|
26
19
|
|
package/README.md
CHANGED
|
@@ -324,8 +324,13 @@ Detailed release-governance instructions are source-repository maintenance mater
|
|
|
324
324
|
- [Upgrading](docs/UPGRADING.md)
|
|
325
325
|
- [Computer use](docs/COMPUTER_USE.md)
|
|
326
326
|
- [Managed jobs](docs/MANAGED_JOBS.md)
|
|
327
|
+
- [Agent context](docs/AGENT_CONTEXT.md)
|
|
327
328
|
- [Audit status](docs/AUDIT.md)
|
|
328
329
|
- [Privacy hygiene](docs/PRIVACY.md)
|
|
330
|
+
- [Architecture](https://github.com/YuLeiFuYun/machine-bridge-mcp/blob/main/docs/ARCHITECTURE.md)
|
|
331
|
+
- [Engineering](https://github.com/YuLeiFuYun/machine-bridge-mcp/blob/main/docs/ENGINEERING.md)
|
|
332
|
+
- [Project standards](https://github.com/YuLeiFuYun/machine-bridge-mcp/blob/main/docs/PROJECT_STANDARDS.md)
|
|
333
|
+
- [Testing](https://github.com/YuLeiFuYun/machine-bridge-mcp/blob/main/docs/TESTING.md)
|
|
329
334
|
|
|
330
335
|
Architecture, engineering, testing, project-standard, release-governance, contribution, conduct, and governance documents remain available in the source repository but are not part of the npm consumer payload.
|
|
331
336
|
|
|
@@ -29,6 +29,6 @@
|
|
|
29
29
|
"action": {
|
|
30
30
|
"default_title": "Machine Bridge Browser"
|
|
31
31
|
},
|
|
32
|
-
"version_name": "3.0.0-beta.
|
|
32
|
+
"version_name": "3.0.0-beta.209",
|
|
33
33
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxryYkpZhq8+VAQLHcGS9BAHQcyKX8RHGIpIwvtIVRU/rcOcE0bNdnM0aZJ/h6xWQsGDHlhvjT2+1aJaAn/9k8473BRWajzVXld961CdHYVFVHoce2hHiSJ0xydWrHMMZhAm0mN0UzjEpgZ0tMw209efcZHIvSwuxhteZMRy4kyiVjwFlOf5oXFCxRuCJnPj3AK9CmCf4XgEBuPIJ0TZmjGHOOdBvJmbCNnAWXYEo5/mf7MfCGhV4IJ1hNuhpoNQfOFKMUcw9/v/IpT62XpfXdGYTfGYCmCjC+gntK1spbkr2P4/2+sYMQtLpse71mpSNGXfcf3abU55Vpn+gncSxRQIDAQAB"
|
|
34
34
|
}
|
package/docs/AGENT_CONTEXT.md
CHANGED
|
@@ -7,7 +7,7 @@ This approximates a local coding agent without pretending that the MCP server ow
|
|
|
7
7
|
## MCP tools
|
|
8
8
|
|
|
9
9
|
- `session_bootstrap` returns built-in working agreements, bounded automatic project facts, explicit instruction text, and a refresh fingerprint.
|
|
10
|
-
- `agent_context` returns the
|
|
10
|
+
- `agent_context` returns the bounded target-specific instruction chain, skill summaries, and command registry.
|
|
11
11
|
- `resolve_task_capabilities` rescans default/project context, ranks skills/commands and effective-policy-visible tools, returns bounded set-level execution routes with ambiguity/fallback metadata, and optionally loads the best skill. Direct Bash remains available whenever the effective policy permits it.
|
|
12
12
|
- `list_local_skills` searches discovered `SKILL.md` bundles.
|
|
13
13
|
- `load_local_skill` returns one skill entrypoint and bounded file inventory without execution.
|
|
@@ -50,7 +50,34 @@ These are behavioral defaults, not hard enforcement. Machine Bridge policy profi
|
|
|
50
50
|
|
|
51
51
|
The scanner does not execute commands, inspect dependency values, read package script bodies, summarize source files, or claim that declared commands work. Oversized, invalid-UTF-8, symbolic-link, or unsupported metadata is skipped or described conservatively. The generated block is capped independently at 16 KiB.
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
### Cross-session persistent agent memory
|
|
54
|
+
|
|
55
|
+
`agent_context` reads `.project-local/agent-memory.json` on demand. Automatic project facts may announce that the file exists; `session_bootstrap` and `resolve_task_capabilities` do not load its body. Memory is outside their static refresh fingerprint. It is untrusted project context and never expands execution authority.
|
|
56
|
+
|
|
57
|
+
Version 1 accepts four optional arrays: `project_insights`, `ci_guidelines`, `user_preferences`, and `notes`. Entries are non-empty strings or objects with `text`, optional finite `importance` from 1 to 10, parseable `updated_at` / `expires_at`, and an optional bounded `source`. An explicit finite millisecond `timestamp` can supply `updated_at`. Prefer ISO timestamps:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"version": 1,
|
|
62
|
+
"project_insights": [{
|
|
63
|
+
"text": "Preserve Python indentation when editing.",
|
|
64
|
+
"updated_at": "2026-10-21T00:00:00.000Z",
|
|
65
|
+
"source": "verified regression"
|
|
66
|
+
}]
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The result contains one canonical object-entry view in source order. Plain strings acquire no invented timestamp or freshness score. Expired entries and duplicate text within a category are omitted. No `scored_memories` copy or research-derived ranking is applied.
|
|
71
|
+
|
|
72
|
+
Protected, regular-file reads reject symbolic links, multiple hard links, changing identities and canonical parent escapes, and apply the request's path authority. The 64 KiB input ceiling is enforced before allocation or JSON parsing. Each text is at most 2 KiB, each category returns at most 10 entries, and all returned entries share a 16 KiB serialized budget. `truncated` describes output selection. Oversized files return `too_large` without a body; malformed version/metadata returns `invalid`; unsafe or inaccessible paths return `unavailable`. Cancellation propagates. The reader never modifies the file, and Machine Bridge exposes no dedicated memory-mutation tool; users or authorized workspace file tools (`write_file`, `edit_file`, `apply_patch`) maintain `.project-local/agent-memory.json`. Keep memory local and review its content before sharing context.
|
|
73
|
+
|
|
74
|
+
### Lexical Symbol Outline (Repo Map)
|
|
75
|
+
|
|
76
|
+
`agent_context` can return a bounded lexical overview with `include_symbol_outline: true` or a specific `symbol_path`. `max_symbol_files` defaults to 30 (maximum 100); `max_symbol_lines` defaults to 300 (maximum 1000), including headers, separators and truncation notices. Rendered text also has a 16 KiB byte ceiling; notices count inside both budgets. Parameter values are omitted rather than copied into the outline. A lexical match is navigation assistance, not an AST-backed semantic guarantee.
|
|
77
|
+
|
|
78
|
+
Filesystem I/O is asynchronous. Default traversal visits at most 2048 entries and eight directory levels, reads at most 256 KiB per file and 2 MiB in total, and checks cancellation and per-file policy. Protected reads reject nonregular, linked or changing files. Paths use the same display projection as other context. Hitting a budget or omitting a source makes the result explicitly incomplete.
|
|
79
|
+
|
|
80
|
+
Keep always-loaded instructions short and verifiable; use nested rules and linked topic documents for detail. Prose is guidance, while policy, OS permissions and operation gates enforce authority.
|
|
54
81
|
|
|
55
82
|
### Disable either automatic layer
|
|
56
83
|
|
|
@@ -101,6 +128,8 @@ In remote mode, selected instruction text and enabled automatic project facts ne
|
|
|
101
128
|
|
|
102
129
|
## Instruction precedence
|
|
103
130
|
|
|
131
|
+
Explicit files retain global-to-nearest precedence in the result. When the shared byte budget is exceeded, nearer project guidance takes priority over earlier global/root files; omitted paths and budget reasons appear in `instruction_warnings`. An individually oversized file is omitted with a warning. Inspect these warnings before assuming the inventory is complete.
|
|
132
|
+
|
|
104
133
|
For a target path, Machine Bridge chooses the nearest Git ancestor as scope root, falling back to the configured workspace or target directory. The default candidate priority in each directory is:
|
|
105
134
|
|
|
106
135
|
```json
|
|
@@ -190,6 +219,8 @@ No persistent skill or project-context index is trusted as authoritative. `sessi
|
|
|
190
219
|
|
|
191
220
|
## Progressive disclosure and task selection
|
|
192
221
|
|
|
222
|
+
The default tool catalog remains full. Opt-in stdio mode `MBM_PROGRESSIVE_TOOLS=1` starts with nine tools, including the discoverable `resolve_task_capabilities` entry point. Call that listed tool to request `activate_tool_groups`: `browser`, `app`, `jobs`, `git`, `process`, `diagnostics`, `skills`, or `files`. Only policy-visible tools activate. Hidden names are not a discovery shortcut. Progressive mode advertises `tools.listChanged=true`; notifications are delivered only to an accepted `subscriptions/listen` request with `toolsListChanged=true`, carrying that subscription's ID. Full mode remains static. Mode is selected at process startup, not by an ad hoc `tools/list` parameter.
|
|
223
|
+
|
|
193
224
|
`agent_context` returns bounded skill metadata. `load_local_skill` returns full instructions only for one selected bundle. `resolve_task_capabilities` tokenizes the current task, ranks skill names/descriptions, command names/descriptions/argv, and public tool definitions, then scores compatible execution surfaces as sets. It returns a schema-versioned envelope with the primary route, alternatives, ambiguity, fallback routes, ranked tools, and failure-aware guidance. Scores are relative within the current response, not probabilities or values to compare across package versions. Registered commands, direct Bash/argv, interactive sessions, durable jobs, files/Git, browser, applications, protected resources, and diagnostics remain separate choices; the advice does not hide or disable any effective-policy-visible tool.
|
|
194
225
|
|
|
195
226
|
The resolver compares the task with cached installed-application names for every authenticated policy profile. An exact full application name may match directly; weaker lexical name fragments require an application-operation intent such as opening, inspecting, focusing, or operating an application. Repository/version words that merely overlap an installed application name are therefore not application intent. This is an intentional read-only inventory surface: delegated roles may see application names and launcher/bundle identifiers, while external paths remain projected. Action routes are still filtered through the authenticated account/daemon policy intersection, so a delegated reviewer connected to a full daemon can discover an installed application without acquiring launch, Accessibility, browser, shell, or write authority.
|
package/docs/AUDIT.md
CHANGED
|
@@ -12,28 +12,17 @@ This review is scoped to source contracts, risk-bearing control paths, isolated
|
|
|
12
12
|
|
|
13
13
|
## Current conclusions
|
|
14
14
|
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
25
|
-
- **
|
|
26
|
-
- **Durable execution owns continuity explicitly.** Managed jobs persist recovery state independently of the hosted MCP response. Idempotency keys bind uncertain acceptance retries only while the retained record exists; cancellation, dependency state, cleanup, output budgets, and terminal persistence have explicit fail-closed boundaries. Terminal evidence validation is bound to stable status/result file generations, and a live runner retains ownership of its final cleanup-status write. Routine inventory throttles full retention scans to 30 seconds, while capacity pressure, unreadable state, expired staged plans, and dependency-bearing active/staged jobs force maintenance. Callers recover the same accepted job instead of replaying its side effect.
|
|
27
|
-
- **Daemon-owned Node children use a verified runtime launcher.** A live concrete runtime executable is preferred; if it disappears after a package-manager upgrade, only the original absolute Node launcher is eligible as fallback. Diagnostics expose provenance booleans rather than executable paths, and an unavailable launcher requires service restart instead of PATH guessing.
|
|
28
|
-
- **Relay recovery separates transport, execution and quota pacing.** Authenticated WebSocket/HTTPS state is scoped to the current transport generation; ended-generation controls are discarded, and protocol violations affect their originating transport. Ambiguous side effects are not replayed. Cancellation removes ownership, terminal retention is bounded, and reconnects cannot accumulate execution time or delivery grace. Diagnostics retain sanitized classifications rather than peer text. The quota evidence and polling limits below distinguish repository mechanisms from provider usage.
|
|
29
|
-
- **Operating-system sleep is an observable suspension boundary, not a network guarantee.** On supported macOS hosts, diagnostics correlate bounded sleep history with runtime stalls and recovered relay outages. Machine Bridge cannot keep JavaScript or a socket executing while the machine is suspended, and sleep correlation does not identify unrelated upstream network causes.
|
|
30
|
-
- **Browser automation remains existing-profile and snapshot-bound.** The extension controls an already installed Chromium profile; hosted calls bind explicit tab identity, and later Computer Use actions bind the exact observation snapshot. Mutation response loss, timeout, extension replacement, or ambiguous trusted-input settlement yields an unknown/non-retryable boundary that must be inspected before any retry.
|
|
31
|
-
- **Desktop automation is permission- and evidence-bound.** Application actions use structured Accessibility operations or an explicitly enabled snapshot-bound visual backend. The runtime does not silently substitute arbitrary scripting or unverified pixel guessing when required authority/evidence is unavailable.
|
|
32
|
-
- **Logging and diagnostics are privacy-minimized by contract.** Runtime logs are structured and must not contain tool arguments, command output, credentials, account identity, arbitrary URLs, private paths, or other user content. Explicit local CLI/tool results are a separate user-requested output surface. Security-audit telemetry is content-free, bounded, and hash-chained; diagnostics expose coarse provenance/health rather than secrets or private values.
|
|
33
|
-
- **Effect-settlement evidence is time-scoped.** Audit events retain the settlement state observed when a tool response was recorded. Recent `unknown_effect_settlements_last_15m` and `pending_effect_settlements_last_15m` are historical event counts, not a live queue. Current local process termination is reported separately by `runtime.processes.terminating_processes` and `termination_escalations_pending`; a later process exit does not rewrite the append-only audit event.
|
|
34
|
-
- **Resource admission is cooperative scheduling, not a hostile-code sandbox.** CPU, memory, I/O, disk-reserve, queue, and result budgets protect service continuity, but ordinary execution still has the daemon OS user's ambient authority unless a dedicated low-privilege account or VM/container supplies the stronger boundary.
|
|
35
|
-
- **Deployment audits cover bundled code as well as the dependency graph.** The consumer runtime excludes cf, Wrangler, and Miniflare. Deployment uses an exact private toolchain whose registry signatures, dependency audit, and artifact bytes are checked before execution. A zero-vulnerability dependency audit is insufficient for bundled code: the unchanged upstream cf bundle is hash-bound and its custom connector and TLS-verification preservation are exercised offline. No third-party bundle rewriting or standalone network-library substitution remains. Unknown artifact bytes fail closed. Structured cf authentication must be positive before unattended activation can mutate the Worker or service; source snapshots, generated manifests, Worker identity, SQLite export, preserved secrets, and typed rate-limit bindings with exact parameters are validated before upload. Module paths, counts and aggregate bytes are bounded; staging cleanup preserves the primary failure. These local controls still require candidate-bound deployed-edge acceptance.
|
|
36
|
-
- **Release and package evidence remain separate from audit prose.** Shipped-source or packed-document changes require synchronized package identity and fresh verification. Candidate acceptance, publication, activation, and stable promotion must be proven by their dedicated records and external systems; no sentence in this audit summary inherits or confers release authority.
|
|
15
|
+
- **Authority is an intersection.** Account role, daemon capability ceiling, and tool policy apply on every call. Remote arbitrary execution is owner-only; reconnects, discovery and recovery cannot expand access. Current request-scoped MCP metadata is mandatory; removed handshakes remain rejected.
|
|
16
|
+
- **Reads and persistence fail closed.** Protected readers enforce canonical paths, regular-file identity, hard-link rejection, encoding and byte budgets. Sensitive-path filtering covers delegated content; filename checks cannot recognize secrets stored under arbitrary names. State-authority failures are never interpreted as empty records, and coercible values cannot become PID, lock or lease authority.
|
|
17
|
+
- **Writes retain their generation.** Atomic claims are complete before publication. Bounded sharing-error retries preserve the visible destination and recheck the expected digest. Cross-process optimistic checks do not provide an OS compare-and-swap against uncoordinated external writers; Windows CI supplies provider evidence.
|
|
18
|
+
- **Budgets cover allocation and work.** Output buffers trim before retaining backing bytes and copy independent snapshots. The stdio writer has an 8 MiB queue with backpressure and closes input at the hard cap. Context indexing and subscriptions separately bound traversal, input, rendering, retained IDs and count.
|
|
19
|
+
- **Durable execution owns continuity.** Managed jobs retain recovery independently of MCP delivery. Idempotency deduplicates only while the original record is retained. Callers recover the same job after ambiguous acceptance. Cancellation, dependencies, terminal persistence, stable file generations and cleanup have distinct ownership. Successful settlement terminates retry classification.
|
|
20
|
+
- **Relay generations do not confer replay authority.** Ended transport controls are discarded, reconnects cannot accumulate execution or delivery grace, and unknown mutations are not repeated. Routine retention scans are throttled; pressure and risky retained states force maintenance. Node children use a verified runtime launcher; unavailable executable identity requires service recovery rather than PATH guessing.
|
|
21
|
+
- **UI actions consume exact evidence.** Browser actions bind the existing profile, explicit tab and observation generation; desktop actions bind process/window identity and an authorized backend. Timeout, response loss or ambiguous dispatch becomes non-retryable unknown settlement requiring observation. No arbitrary browser/application evaluation is substituted.
|
|
22
|
+
- **Diagnostics preserve privacy and time scope.** Logs exclude tool inputs, output, credentials and private identifiers. Audit events retain the settlement observed at recording time; recent unknown/pending counts are historical, while process termination counters describe current state. OS sleep can explain suspension but cannot prove an unrelated network cause or uninterrupted execution.
|
|
23
|
+
- **OAuth replay evidence remains narrow.** Refresh retries return only an active derived pair; consumed replacements and revoked families fail. Local regression fixtures do not establish deployed OAuth persistence, which requires the candidate-bound canary.
|
|
24
|
+
- **Supply-chain checks include actual bytes.** Consumer runtime excludes cf/Wrangler/Miniflare. The private toolchain checks exact locks, installation policy, registry signatures, audit and the unchanged pinned cf artifact before execution. Authentication must be positive before deployment; deployment identity, snapshot paths/bytes, preserved state and rate-limit bindings remain validated. A zero-vulnerability audit cannot certify bundled code or deployed behavior.
|
|
25
|
+
- **Identity and release authority are explicit.** Branch routing and prerelease routing use their own evidence, not directory names or dirty package metadata. Full verification, package integrity, activation, observed acceptance, external checks, publication and soak each require their dedicated records. Audit prose grants none of that authority.
|
|
37
26
|
|
|
38
27
|
## Relay quota incident evidence boundary
|
|
39
28
|
|
|
@@ -59,3 +48,27 @@ The fast SARIF regression now loads both real checked-in exception documents aga
|
|
|
59
48
|
## Historical findings
|
|
60
49
|
|
|
61
50
|
Historical incidents, closed hypotheses, release-by-release evidence, and superseded candidate details belong in Git history/tags and the [changelog](../CHANGELOG.md), not in this current summary. Inspect the file at the corresponding historical revision when reconstructing an old incident or release decision.
|
|
51
|
+
|
|
52
|
+
## 2026-10-21 follow-up dispositions
|
|
53
|
+
|
|
54
|
+
The follow-up rechecked 31 findings against the dirty development tree and the deployed runtime boundary. These are implementation dispositions, not a claim of published or live release acceptance. The numbered evidence remains traceable to the retained audit report; native verification and live acceptance have separate records.
|
|
55
|
+
|
|
56
|
+
| Findings | Disposition and executable evidence |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| 01 | Nearest instruction precedence and explicit omission reasons; `agent-audit:test`, `agent-context:test`. |
|
|
59
|
+
| 02–03, 14–16 | On-demand protected memory reads, strict entries, bounded input/text/result, no duplicate scores; memory boundary and budget fixtures in `agent-audit:test`. |
|
|
60
|
+
| 04–06 | Asynchronous bounded outline traversal, per-file policy and path projection, complete rendering budget; `symbol-outline:test`, `agent-audit:test`. |
|
|
61
|
+
| 07 | Exact-only editing and patch contexts; negative indentation/CRLF cases in `atomic-fs:test`. |
|
|
62
|
+
| 08–09 | Shared typed projections use real producer fields; real Git/stdin integration and `worker-prompts:test`. |
|
|
63
|
+
| 10–11 | Reachable resolver, canonical groups, advertised bounded subscriptions with cancellation; `catalog:test`, `stdio:integration-test`. |
|
|
64
|
+
| 12–13 | Shared reason guidance gives recovery and unknown settlement priority; `agent-audit:test`. |
|
|
65
|
+
| 17–20 | Remove unused configuration duplicate; correct obsolete compatibility, JSON storage, concurrency, Linux isolation, and pinned comparison claims. |
|
|
66
|
+
| 21–22 | Consumer link points to source testing guide; native fixture is repository-only; `package:test`, `macos-native-build:test`. |
|
|
67
|
+
| 23 | Monotonic tool generation plus actual catalog digest; `architecture:test`, `catalog:test`. |
|
|
68
|
+
| 24–26 | Shared strict parser, selected behavioral replacements, cohesive helper merges, pure effect verification; existing architecture and Computer Use trajectory fixtures remain required. Further source-string replacements and browser-domain decomposition are incremental maintenance, not proof of existing runtime defects. |
|
|
69
|
+
| 27–28 | Short automation entry point, corrected topic contracts, advisory dependency-aware `check:changed`; `affected-checks:test` verifies conservative fallback and reports uncovered evidence classes. Large specialist references remain for operational detail. |
|
|
70
|
+
| 29 | Wrangler 4.151.3 in both locked toolchains. Registry, signatures, package, private-toolchain and Worker dry-run evidence must pass before release; used production dependencies remain. |
|
|
71
|
+
| 30 | Deterministic final-state workflows cover stale edits and accepted-job continuity; `agent-workflows:test`. These fixtures do not measure model task success rates. |
|
|
72
|
+
| 31 | **Delivery-boundary hardening.** `mcp-response-proxy.ts` gates SSE heartbeat comments on complete frame boundaries (`\n\n` / `\r\n\r\n`) so heartbeats cannot split partial upstream chunks; idempotency-key job recovery remains the authoritative settlement path (`mcp-response-proxy:test`). |
|
|
73
|
+
|
|
74
|
+
The research comparison records 51 unique pinned upstreams and seven primary papers in [COMPARATIVE_REVIEW.md](https://github.com/YuLeiFuYun/machine-bridge-mcp/blob/main/docs/COMPARATIVE_REVIEW.md). This is selected design/documentation evidence with explicit adoption boundaries, not an exhaustive source audit or transferred benchmark score.
|
package/docs/CLIENTS.md
CHANGED
|
@@ -116,12 +116,17 @@ Claude Desktop, Cursor, and many generic clients use a shape similar to:
|
|
|
116
116
|
"/path/to/project",
|
|
117
117
|
"--profile",
|
|
118
118
|
"full"
|
|
119
|
-
]
|
|
119
|
+
],
|
|
120
|
+
"env": {
|
|
121
|
+
"MBM_PROGRESSIVE_TOOLS": "1"
|
|
122
|
+
}
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
```
|
|
124
127
|
|
|
128
|
+
Setting `MBM_PROGRESSIVE_TOOLS: "1"` selects opt-in progressive stdio discovery at startup. The initial nine tools include `resolve_task_capabilities`; use its validated `activate_tool_groups` names (`browser`, `app`, `jobs`, `git`, `process`, `diagnostics`, `skills`, `files`) to expose relevant policy-visible groups. Discovery advertises `tools.listChanged=true`. A client requesting `subscriptions/listen` with `notifications.toolsListChanged=true` receives an acknowledgement and subsequent `notifications/tools/list_changed` messages bound to that subscription ID; cancel the request to complete it. Without a subscription no unsolicited change notification is sent. The default full catalog remains static. Token savings depend on client formatting and tokenizer; no fixed savings claim is made.
|
|
129
|
+
|
|
125
130
|
Use the exact output of `client-config`; application-specific configuration locations and UI flows can change.
|
|
126
131
|
|
|
127
132
|
## Codex configuration
|
package/docs/OPERATIONS.md
CHANGED
|
@@ -989,44 +989,11 @@ The elasticity marker remains process-local and never enters the waiter/lease sc
|
|
|
989
989
|
Verification plans use the same rule through `MBM_CHECK_CONCURRENCY`; because their memory reservation is explicitly derived from fan-out, it contracts with the fitted worker count down to the plan's 2048 MiB floor instead of retaining a stale larger-worker reservation.
|
|
990
990
|
An empty `MBM_CHECK_CONCURRENCY` has the runner's normal implicit/default meaning and may be replaced by the fitted worker count; a non-empty value outside the runner's `1..16` integer contract is preserved and classified unbounded rather than silently rewritten or charged as the default.
|
|
991
991
|
Explicit worker counts and valid `CARGO_BUILD_JOBS`/`CMAKE_BUILD_PARALLEL_LEVEL` values are never shrunk; they are preserved and charged at their declared concurrency.
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
Core-multiplier forms such as `-T2.5C` are translated to Maven's current integer `multiplier × available processors` degree for admission accounting.
|
|
998
|
-
Visible GNU make configuration in `GNUMAKEFLAGS`/`MAKEFLAGS` (including make's implicit leading dash, compact short-option clusters, and jobserver state) is likewise charged without injecting a higher-precedence replacement flag.
|
|
999
|
-
Gradle fan-out follows its current configuration layers: `JAVA_OPTS` is applied before `GRADLE_OPTS` by the launcher, direct `-Dorg.gradle.workers.max=...`/`--system-prop=...` updates the system-property map after those JVM options, and `--max-workers` is the final build-option override.
|
|
1000
|
-
The last system-property value is charged when it is valid; a valid CLI `--max-workers` then supersedes that bound.
|
|
1001
|
-
Invalid final worker properties fail before the CLI build-option converter can recover them, while repeated or invalid `--max-workers` values also fail during command-line/build-option validation, so those forms use the lightweight pre-build validation profile rather than waiting for heavy capacity.
|
|
1002
|
-
Malformed JVM-option quoting and valid worker counts above Machine Bridge's modeled maximum remain fail-closed as unbounded.
|
|
1003
|
-
Go fan-out follows the current go command's own ordering and validation semantics: quoted `GOFLAGS` is applied first, direct `-p`/`--p` values then override it, and repeated numeric settings use the final effective value.
|
|
1004
|
-
`go test` build flags remain recognizable through its package-list parser but stop at `-args`/`--args`/`--` or once positional test arguments begin; ordinary `go build` stops flag parsing at its first package operand.
|
|
1005
|
-
A final nonpositive numeric `-p` is treated as lightweight pre-build validation because the go command rejects it before compiler fan-out, while malformed/non-numeric `GOFLAGS` is fatal before a later CLI value can recover it.
|
|
1006
|
-
If a direct `-p` could instead be the value of a preceding flag whose arity is not provable from the command shape, Machine Bridge fails closed as unbounded rather than using the validation fast path.
|
|
1007
|
-
SwiftPM fan-out now follows its scalar `UInt32` `@Option(.shortAndLong)` semantics: repeated `-j`/`--jobs` settings use the final value; `-j N`, `-j=N`, `--jobs N`, and `--jobs=N` are modeled, including `+N` values accepted by `UInt32`.
|
|
1008
|
-
A final zero remains unbounded because SwiftPM forwards zero to llbuild and llbuild substitutes hardware concurrency; a valid count above the modeled maximum is likewise unbounded unless a later scalar option replaces it.
|
|
1009
|
-
Direct missing, non-UInt32, or unsupported joined-short forms such as `-j8` use the lightweight pre-build validation profile, while shell-composed Swift is bounded only when the shell contains a single provable Swift segment; multi-segment or otherwise ambiguous compositions remain unbounded.
|
|
1010
|
-
Xcodebuild now distinguishes actual build/test invocations from its independent query, package-resolution, export/import, platform/component-maintenance, and other non-build modes before build-root handling, so commands such as `-help`, `-usage`, `-resolvePackageDependencies`, `-showBuildSettings`, and `-exportArchive` are never polluted by injected `-jobs` or `-derivedDataPath`.
|
|
1011
|
-
Non-build resource admission is workload-specific rather than the generic 0.5-CPU adaptive fallback: metadata/settings queries use a small adaptive profile; package resolution is a project-serialized mixed workload with a 4 GiB disk safety reservation; archive/localization/xcframework import-export is project-serialized I/O with an 8 GiB reservation; platform/component install/download/prepare operations are unbounded high-I/O with an 8 GiB minimum safety reservation; component deletion remains I/O-heavy but does not invent future disk consumption or receive the privileged disk-reclaim bypass.
|
|
1012
|
-
These disk figures are admission safety reservations, not claims that the native operation cannot consume more space.
|
|
1013
|
-
For build concurrency, current Xcode uses separated `-jobs NUMBER` for the native jobs option and accepts a leading `+` there.
|
|
1014
|
-
Lookalike `-jobs=...` tokens do not receive the same native jobs validation, so Machine Bridge never treats them as hard concurrency bounds.
|
|
1015
|
-
Canonical zero/negative separated values fail before building, and a second real `-jobs` option is rejected outright; those proven validation failures use the lightweight pre-build profile.
|
|
1016
|
-
Canonical positive separated values within the modeled range are charged exactly, while equals forms, noncanonical values that Xcode may parse by numeric prefix, and oversized values remain conservatively unbounded rather than being guessed into a hard ceiling.
|
|
1017
|
-
Xcode test/test-without-building remains overall unbounded even when build-phase `-jobs` is known, because the native command exposes independent destination concurrency and parallel-testing runner counts; a known/default build-phase cap is still enforced separately without pretending it bounds test execution.
|
|
1018
|
-
Direct Ninja `-j` now follows current getopt semantics rather than generic first-match parsing: repeated `-j` options use the final value, `-j0` is effectively infinite/unbounded, and negative/non-numeric jobs or the unsupported `--jobs` spelling use the lightweight pre-build validation path because Ninja exits before starting the build.
|
|
1019
|
-
Any valid positive direct `-jN` is an exact local worker bound and disables inherited jobserver participation.
|
|
1020
|
-
Ninja 1.13+ jobserver coordination is preserved when no direct `-j` is present and `MAKEFLAGS` contains a jobserver form Ninja actually supports: FIFO authentication on POSIX or semaphore authentication on Windows.
|
|
1021
|
-
A jobserver-aware Ninja root is treated as cooperative/unbounded for admission even when `MAKEFLAGS` also exposes `-jN`, because current Ninja can fail to initialize the inherited jobserver and then continue with its native local parallelism; Machine Bridge therefore does not claim that inherited token count is a hard execution ceiling or inject a local `-j`.
|
|
1022
|
-
The jobserver parser follows Ninja's current MAKEFLAGS rules: dry-run flag letters disable jobserver use, the last recognized auth/fds descriptor wins, negative descriptors disable the feature, POSIX pipe descriptors are rejected, and FIFO/semaphore modes are platform-specific.
|
|
1023
|
-
The preservation marker is process-local and never enters the schema-1 coordinator record.
|
|
1024
|
-
For pytest-xdist, explicit numeric `-n` is charged directly, `-n 0` is treated as single-process execution, and dynamic `-n auto`/`logical` remains unbounded unless an explicit `--maxprocesses=N` supplies a hard worker ceiling; environment auto-worker hints are not treated as hard limits because project hooks can override them.
|
|
1025
|
-
CMake build concurrency follows the current build-driver precedence rather than generic first-match parsing: repeated `-j`/`--parallel` options use the final CMake-level value, a positive CLI value overrides `CMAKE_BUILD_PARALLEL_LEVEL`, and invalid/zero/too-large pure CLI or environment values use the lightweight pre-build validation path because CMake rejects them before invoking the native build tool.
|
|
1026
|
-
A value-less `-j`/`--parallel` or defined-empty parallel environment remains unbounded because it delegates to the native tool.
|
|
1027
|
-
An uninspected `--preset` build or any native-tool arguments after CMake's `--` separator are also conservatively unbounded and are not rewritten with an injected worker cap: build presets can supply `jobs` and `nativeToolOptions`, while native options are generator-specific and can change fan-out independently of the CMake-level setting.
|
|
1028
|
-
Explicit concurrency forms that cannot be bounded safely (for example unlimited/value-less or out-of-contract fan-out) are treated conservatively as unbounded instead of being under-accounted.
|
|
1029
|
-
Shell-wrapped implicit Swift and generic builds that cannot be safely rewritten likewise remain unbounded; on POSIX, unbounded heavy work runs at a small positive nice increment to protect interactive responsiveness, while background heavy work uses the stronger background nice increment.
|
|
992
|
+
Each supported build driver (`cargo`, `mvn`/`MAVEN_ARGS`, `gradle`/`JAVA_OPTS`/`GRADLE_OPTS`, `go`/`GOFLAGS`, `swift`, `xcodebuild`, `ninja`/`MAKEFLAGS`, `pytest-xdist`, and `cmake`) follows its native CLI/environment precedence:
|
|
993
|
+
- Provable pre-build validation errors (for example negative/invalid worker flags or duplicate Xcode `-jobs` options) use the lightweight pre-build validation profile so they fail fast without waiting for heavy capacity.
|
|
994
|
+
- Valid explicit worker counts within the modeled ceiling are charged at their effective concurrency; implicit builds without explicit concurrency use the coordinator's elastic ceiling.
|
|
995
|
+
- Non-build `xcodebuild` invocations (`-help`, `-resolvePackageDependencies`, `-showBuildSettings`, `-exportArchive`, and component maintenance) are classified before build-root injection with workload-appropriate CPU/I/O/disk safety reservations.
|
|
996
|
+
- Ambiguous, value-less, preset-driven, jobserver-inherited, or out-of-contract concurrency forms fail closed as `unbounded` rather than being under-accounted or rewritten; on POSIX, unbounded heavy roots run with a small positive `nice` increment, and background heavy roots use the stronger background `nice` increment.
|
|
1030
997
|
|
|
1031
998
|
## Upgrade behavior
|
|
1032
999
|
|
package/docs/THREAT_MODEL.md
CHANGED
|
@@ -44,7 +44,7 @@ A client registration is not authority. Authority begins only after successful a
|
|
|
44
44
|
|
|
45
45
|
Capability discovery is also an authorization boundary. Task routing and application/browser metadata are built from the effective account/daemon policy intersection, not from the daemon ceiling. Route scores and fallbacks are advisory and cannot manufacture authority; direct Bash remains available only when the effective policy already exposes it. A restricted account must not learn hidden local application inventory or receive names of unavailable execution tools through the resolver.
|
|
46
46
|
|
|
47
|
-
Mirrored MCP headers are an intermediary-routing boundary. The Worker compares every required native current header with the JSON-RPC body before authorization-dependent dispatch; a mismatch fails with `-32020` before the daemon can observe the call. The reserved mirror namespace is closed as well: an inapplicable `Mcp-Name` or a `Mcp-Param-*` header that is not declared by the selected tool schema is rejected rather than ignored. Tool schemas are compiled from a bounded JSON Schema 2020-12 subset at startup and runtime traversal charges every array item and own object property to a fixed work budget. Open request metadata/capability JSON also has a fixed structural-node/depth/key budget. Remote HTTP advertises `tools.listChanged=true`. A supported `toolsListChanged` subscription receives the correlated acknowledgement and an initial list-change notification, then retains only bounded authority-scoped in-memory stream state until cancellation, revocation, observable abort, or the advertised ten-second lease. A request with no supported notification filter is acknowledged with an empty subset and completed immediately.
|
|
47
|
+
Mirrored MCP headers are an intermediary-routing boundary. The Worker compares every required native current header with the JSON-RPC body before authorization-dependent dispatch; a mismatch fails with `-32020` before the daemon can observe the call. The reserved mirror namespace is closed as well: an inapplicable `Mcp-Name` or a `Mcp-Param-*` header that is not declared by the selected tool schema is rejected rather than ignored. Tool schemas are compiled from a bounded JSON Schema 2020-12 subset at startup and runtime traversal charges every array item and own object property to a fixed work budget. Open request metadata/capability JSON also has a fixed structural-node/depth/key budget. Remote HTTP advertises `tools.listChanged=true`. A supported `toolsListChanged` subscription receives the correlated acknowledgement and an initial list-change notification, then retains only bounded authority-scoped in-memory stream state until cancellation, revocation, observable abort, or the advertised ten-second lease. A request with no supported notification filter is acknowledged with an empty subset and completed immediately. Default full stdio advertises `listChanged=false` and completes validated subscription requests immediately. Opt-in progressive stdio advertises list changes, bounds active subscriptions to 32, correlates notifications to accepted subscription IDs and completes them on cancellation or EOF. Unsupported dialects or keywords fail closed, external network `$ref` values are not dereferenced, and validation diagnostics omit argument values and unbounded caller identifiers.
|
|
48
48
|
|
|
49
49
|
Current response-stream cancellation deliberately crosses the OAuth boundary only through an unguessable internal stream capability. The public Worker strips caller-provided control headers before the service binding, the cancellation request contains no bearer token or DPoP proof, and the Durable Object consumes the capability before OAuth only to cancel a currently indexed call. Guessing remains bounded by 256-bit randomness; a compromised service binding or Worker runtime is already inside this trust boundary.
|
|
50
50
|
|
|
@@ -165,6 +165,10 @@ Machine Bridge does not claim to provide:
|
|
|
165
165
|
- third-party public binary-store identity or independent distributor attestations;
|
|
166
166
|
- independent human review while the project has only one active maintainer.
|
|
167
167
|
|
|
168
|
+
### Untrusted project memory and lexical indexing
|
|
169
|
+
|
|
170
|
+
Memory and symbol outlines use bounded protected regular-file reads, request-scoped path authority and cancellation. Memory must remain canonically inside its project scope; symbolic/hard links, changing identities, oversized inputs and invalid metadata fail closed or return an explicit unavailable/invalid status without a body. It is loaded only on demand and does not become execution authority. Lexical indexing bounds traversal entries, depth, per-file bytes, aggregate bytes and rendered lines; parameter values and hidden external paths are not copied into its output. These controls do not certify that user-authored instructions, skill content or memory are trustworthy.
|
|
171
|
+
|
|
168
172
|
## Residual risks
|
|
169
173
|
|
|
170
174
|
### Owner and canonical `full`
|