Proxy lease by device spec: --os and --image-tag, honoured or refused by the backend
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 25/100
- Issue-Typ
- Feature
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- node.js, typescript
- Bereich
- backend-api-design, cli, mobile
Rechercherichtung
Start with the proxy lease flow and the exported keys beside LEASE_ALLOCATE_PROVIDER_FLAG_KEYS in packages/contracts/src/lease-scope.ts; trace how LeaseAllocateOptions and the MCP open schema carry allocation options. Use the completion conditions to map the required proxy, daemon, live-lease, and documentation changes. Done means the listed behaviors, schemas, remote-proxy docs, help text, and ADR amendment are complete; an open linked pull request (#3865) already covers this work.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Purpose
open through connect proxy already allocates by spec: without --udid/--serial it sends platform, target, device, and the backend picks the device (#3487). Simlock, as the backend, can also pick by OS version and Android image tag. This adds those two keys to the proxy lease, and makes a backend that cannot honour them refuse instead of silently ignoring them.
Simlock side: callstackincubator/simlock#814.
Flow
sequenceDiagram
participant CLI as agent-device CLI
participant B as backend (simlock front)
participant D as agent-device daemon
CLI->>B: lease.allocate {leaseId, platform, target, device?, osVersion?, imageTag?}
alt backend consumes the spec
B->>B: pick device by spec (validate os grammar, class, tag)
B->>D: lease.allocate {leaseId, udid|serial, ttlMs} (spec keys stripped)
D-->>B: lease {deviceKey}
B-->>CLI: lease {deviceKey, device: {model, osVersion, imageTag?}}
else plain daemon receives a spec key
D-->>CLI: UNSUPPORTED_OPERATION reason device-spec-unsupported, keys: [...]
else backend older than this feature
B-->>CLI: lease {deviceKey} without device facts
CLI->>B: lease.release
CLI-->>CLI: fail: device-spec-unsupported
end
Wire
New keys on agent_device.lease.allocate, one exported list beside LEASE_ALLOCATE_PROVIDER_FLAG_KEYS in packages/contracts/src/lease-scope.ts, also on LeaseAllocateOptions:
| Flag | Key | Type | Validated by |
|---|---|---|---|
--os <version|range> |
osVersion |
string, opaque | backend (simlock: exact or range, Android = API level) |
--image-tag <tag> |
imageTag |
string | backend (Android only) |
Echo on the returned lease (data.lease.device), written by the backend that honoured the request:
| Field | Type | Meaning |
|---|---|---|
lease.device.model |
string | model granted |
lease.device.osVersion |
string | exact OS granted |
lease.device.imageTag |
string? | Android image tag granted |
deviceKey stays the identity. lease.device is the proof the spec was understood.
Rules
- Flags on
open,install,reinstall,uninstall;connect proxystores them as defaults likeplatformanddevice. --targetstays the class selector (mobile,tv,desktop); the backend maps it. No--device-class.- A daemon that receives either key on an allocate refuses:
UNSUPPORTED_OPERATION,details.reason: 'device-spec-unsupported',details.keys. Local daemon and plainagent-device proxyincluded. No partial honouring. - A lease returned without
lease.deviceafter a request that named a spec key: the CLI releases it and fails with the same reason. - A live lease serves a later
openonly when its spec matches the request's; otherwiseCONNECTION_DEVICE_CONFLICT. - Keys are agent-visible in MCP and the SDK schemas (not
operatorField). - No
--allow-download,--mode, lease-wait: downloads and mode are backend config. - Decision recorded as an amendment to ADR 0007, no new ADR.
Example
agent-device connect proxy --daemon-base-url http://worker:7700/v1/agent-device
agent-device open MyApp --platform ios --device "iPhone 17 Pro" --os ">=26"
agent-device open MyApp --platform android --os 34 --image-tag google_apis_playstore
agent-device open MyApp --platform ios --os ">=26" # local daemon
# Error: UNSUPPORTED_OPERATION device-spec-unsupported (keys: osVersion)
open --json prints lease.device.
Completion conditions
-
open --os/--image-tagthrough a proxy sends the keys on allocate;devices.listis not called first. - A fake backend that echoes
lease.device→opensucceeds and reports the granted model and OS. - A fake backend that returns no
lease.device→ the lease is released,openfails withdevice-spec-unsupported. - Local daemon and
agent-device proxyrefuse the keys with the typed reason; the lease registry records nothing. - Second
openwith a different--oson a live lease →CONNECTION_DEVICE_CONFLICT. - MCP
opentool schema andLeaseAllocateOptionscarry the two keys;remote-proxy.mdandhelp remotedocument them. - ADR 0007 amended.
Postponed
--physical was in the first cut and is dropped (Decision comment below): neither phone reaches the daemon simlock runs today (iOS: the daemon-wide simulator set hides physical devices in agent-device's inventory; Android: phones sit on the default adb server, the daemon on simlock's). Simlock will spec a phone path on its side first.
Sequencing
- This issue (agent-device release).
- Simlock front maps the keys and echoes
lease.device(callstackincubator/simlock#814).
- Vorherrschende Sprache
- TypeScript
- Sterne
- 5.1k
- Forks
- 339
- Ø Merge
- 12 Std. 22 Min.
- Gemergte PRs (30 T.)
- 701
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus callstack/agent-device
-
iOS: the alert-unrecognized warning of `open --launch-url` says to `alert accept`, which grants App Tracking Transparency when that is the alertEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offenbug ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
callstack/agent-device#3921 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Limrun iOS fill reports success but drops non-ASCII textEvtl. vergeben @mvanhorn hat das vor 3 Tagen übernommen. Offenbug ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 87/100
callstack/agent-device#3819 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
callstack/agent-device#1869 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
callstack/agent-device#3931 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
callstack/agent-device#3929 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in callstack/agent-device
Ähnliche Issues
-
area:desktop bug documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
anthropics/claude-code#104801 ·
Maintainer antworten meist innerhalb von 1 Tag
-
check:passed streams:add
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
spudly/design-system#110 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug]: REST API URL starting with "http" but no scheme (e.g. httpbin.org/get) is not given an http:// prefixEvtl. vergeben @ItsDeadlyProgrammer hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
appsmithorg/appsmith#42471 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen