The host source remembers the native levels a finished recovery accepted, keyed by resolved target id, app generation, and producer, and sends them as nativeLevelsHint so the guest's first request skips the known rejection. The hint changes request strategy only: delivered depth, node bounds, and completeness rules are unchanged. It is learned only after the delivered tree validated, expires after eight hinted captures, is never renewed by a hinted success, and never crosses apps, generations, or producers; explicit raw-depth requests neither use nor teach it. The route's generation circuit stays the only lifecycle owner. The guest reports its request accounting (requests, rejected, continuations, accepted levels) as recovery, which the host emits as the ios_snapshot_source_recovery diagnostic; the source version moves to v1.5.5. The shared recovery fixture gains the host column of every hint case and the hinted recovery cases, replayed through the source adapter itself. The test app gains a deep-tree screen that reproduces the native depth rejection for paired benchmarks.
Examples
Runnable, typechecked Node.js examples for the agent-device SDK surface exposed to Node
consumers. Source of truth for the API itself is
Node.js API. Two guards keep these files in sync with that
doc: src/__tests__/client-api-examples-drift.test.ts checks the doc's subpath API manifest against
what these examples import, and test/integration/client-api-doc-snippets.test.ts compiles every
fenced TypeScript code block in the doc itself against the real agent-device/* sources.
sdk/
Standalone scripts under sdk/ exercise the published agent-device export map —
agent-device, agent-device/metro, agent-device/contracts, agent-device/batch, and
agent-device/ai-sdk — the same way a Node consumer or the agent-device-cloud bridge would. Each
file:
- has a top comment stating what it demonstrates and its prerequisites (daemon running, device/simulator available);
- typechecks without live hardware —
pnpm typecheckresolves theagent-device/...imports againstsrc/sdk/viaexamples/sdk/tsconfig.json'spaths, so CI checks them without a build or publish step; - imports the package by name (
agent-device/...), not a relativesrc/path, so it exercises the same surface a real consumer sees; - is runnable on its own with
node --experimental-strip-types(repo Node is >=22.12) once the package is built (pnpm build) — running for real resolvesagent-deviceas a self-referencing package, the same way an installed consumer would.
| Example | Subpath | Demonstrates |
|---|---|---|
client-session.ts |
agent-device |
createAgentDeviceClient → open → snapshot/tap → close, with typed error handling |
metro-runtime.ts |
agent-device/metro |
normalizeBaseUrl, resolveRuntimeTransport |
contracts-result.ts |
agent-device/contracts |
typed result consumption via centerOfRect |
batch-orchestration.ts |
agent-device/batch |
runBatch for a custom transport |
ai-sdk-tools.ts |
agent-device/ai-sdk |
createAgentDeviceTools driven by a ToolLoopAgent |
test-app/
test-app/ is the Expo dogfood fixture used for agent-device experiments (see
its own README) — it is a test fixture, not an SDK usage example.