Proxy lease by device spec: --os and --image-tag, honoured or refused by the backend
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- node.js, typescript
- Lĩnh vực
- backend-api-design, cli, mobile
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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).
- Ngôn ngữ chính
- TypeScript
- Star
- 5.1k
- Fork
- 339
- Merge trung bình
- 11 giờ 54 phút
- Pull request đã merge (30 ngày)
- 745
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của callstack/agent-device
-
bug ready-for-agent
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
callstack/agent-device#3921 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Limrun iOS fill reports success but drops non-ASCII textCó thể đã có người làm @mvanhorn đã nhận 2 ngày trước. Đang mởbug ready-for-agent
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 87/100
callstack/agent-device#3819 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
callstack/agent-device#1869 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
callstack/agent-device#3931 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 55/100
callstack/agent-device#3929 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của callstack/agent-device
Issue tương tự
-
bug hacktoberfest help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
libredb/libredb-studio#1941 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
chore other
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
alastair-smith/card-games#308 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 86/100
paperclipai/paperclip#17379 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[good first issue, hacktoberfest] 🏯 Hacktoberfest Task - Add new Anime Quote 626 (good-first-issue)Đang mởcommunity first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 76/100
lingdojo/kana-dojo#33040 · 1 bình luận · 5 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug mobile ui
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày