Proposal: non-activating observations, inline screenshot reuse, private input comparison and early response evidence
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 20/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 技術スタック
- android, ios, typescript
調査の方向性
Start with the agent-device snapshot -i --observe-only --json entry point and review implementation PR #3108, including its refusal, capability, runner-continuity, and live-simulator coverage. Treat the remaining checklist items as separate follow-ups; the issue is done only when each selected contract has applicable local gates and live evidence without changing the stated existing behavior.
索引モデルが issue の本文から書いたものです。
説明
Purpose
Propose small contributions from an existing fork: non-activating observations, inline screenshot reuse, private Android input comparison, and bounded early post-action response evidence. These complement existing upstream owners. Default foreground repair and its targetActivation disclosure remain unchanged.
First contribution: iOS snapshot without activation
The first PR is intentionally narrower than trustworthy foreground-owner verification:
agent-device snapshot -i --observe-only --json
Successful data.observation:
{
"mode": "observe-only",
"activationPerformed": false,
"appState": "runningForeground",
"appStateSource": "xcuiapplication-state"
}
The guarantee is no activation or foreground repair, not verified screen ownership. XCTest must report runningForeground before and after capture, and the process identity must remain unchanged. The capture does not substitute a system surface and never emits targetActivation.
Admission requires an explicit app session and an already-ready local iOS runner. A non-activating capability probe and the snapshot stay pinned to the same runner session. Unsupported capability, missing state provenance, changed process/session, or unavailable observation fails closed; this mode never starts/restarts a runner or falls back to an activating capture.
Native refusal is OBSERVATION_UNAVAILABLE, also retained in error.details.runnerErrorCode. Host/capability refusals use COMMAND_FAILED with details.reason: "observation-unavailable"; unsupported owners/platforms use UNSUPPORTED_OPERATION. Ordinary snapshot repair/disclosure is unchanged.
Why the narrower contract matters
#2682, #2691 and #2693 implement disclose; this adds opt-in prevent. It addresses the absence of positive no-activation evidence raised around #2694, but does not close #2694's ordinary coordinate/live-ref interaction disclosure gap.
#2696 records false XCUIApplication.state == runningForeground reports while another app is on screen. AX activeApplications/otherActiveApplicationPid establishes accessibility-session liveness, not foreground ownership. Neither is promoted into a certainty guarantee. Stronger ownership remains a separate research follow-up. Live verification also sees foreground state briefly persist after Home, reinforcing the need for explicitly sourced state rather than a screen-ownership assertion.
Follow-up use cases and safety
- Post-action observation policy: proposed
--settle-observe-onlyconstrains the settled captures, not the caller's explicitly requested mutation. Reuse the existing observation/readiness engine and preserve mutation admission/dispatch disclosure. - Early response history: retain bounded, privacy-projected captures already made during settle so brief toasts/validation responses survive. Include timestamps, truncation and provenance. Historical nodes grant no refs, coordinates, current-state authority or secret readback; the final ref-issuing frame stays separate.
- Inline screenshots: reuse existing inline PNG capture and non-activating display resolution rather than add a parallel stream protocol. Investigate the remaining CLI/transport memory-only path, bounded PNG validation, captured-app/process/session provenance and incompatible file/tracing options. Never log image-bearing payloads; a requested bundle ID alone is not pixel provenance.
- Private Android comparison: extend #2289 through the existing IME helper, receiving expectations through bounded private stdin/transport, never process arguments. Return
match,mismatchorunknown, not text or implicit length disclosure. Preserve nonce/target/focus/input-connection-generation binding, fresh complete extraction, authenticated transport and IME restore gates. Partial/stale/truncated/null/changed-focus reads remain unknown. - Prerelease helper version codes: separately fix the current mapping of prereleases to version code
1, deriving a bounded/range-checked code from the semver core without porting fork release metadata.
Existing coverage / remaining delta
- #2290 already preserves Android editable/password/hint/selection metadata: exclude that fork commit.
- #2925 fixes iOS software-keyboard focus reporting; Android already reports focus. Reuse both, not another focus field.
- #2926 improves Android fill-verification sampling; private comparison of masked values remains #2289.
- #2864 carries post-gesture outcomes; #3072 and #3081 own observation/readiness polling and waits. Remaining deltas are early content history and an opt-in observation policy, not another polling engine.
- #3071 owns failed-interaction dispatch disclosure; keep that distinct from post-action content evidence and do not change resend policy.
- #2728 and the existing inline PNG response already cover non-activating native screenshot capture. Reuse them.
- #1626 concerns observation cost, not a no-repair policy. Preserve existing system-surface handling and comparison lineage (#2450) outside observe-only.
Small PR checklist
- iOS
snapshot --observe-only: implementation submitted in #3108 (awaiting upstream review/CI), with the narrowed contract, preserved default disclosure, refusal/capability/runner-continuity regressions and live simulator evidence. - Extend policy to settled post-action captures without changing mutation admission or dispatch disclosure.
- Retain bounded privacy-projected early settle history while preserving the final ref frame.
- Reuse inline PNG capture for a guarded memory-only CLI/transport path; prove no files or image-bearing diagnostics are produced.
- Extend #2289's Android private comparison with same-length wrong-value and privacy/focus/generation/partial-read cases.
- Fix prerelease helper version codes separately.
- Research stronger foreground-owner evidence and fail-closed unsupported environments separately; do not infer ownership from AX PID ordering.
No downstream product naming or fork release metadata belongs in these contributions. Each implementation PR should include applicable local gates and live evidence before being called merge-ready.
- 主要言語
- TypeScript
- スター
- 4.9k
- フォーク
- 328
- 平均マージ
- 12時間 16分
- マージ済み PR(30日)
- 538
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
callstack/agent-device のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
callstack/agent-device#3353 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
callstack/agent-device#1869 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 半日 初心者へのやさしさ 42/100
callstack/agent-device#3360 ·
メンテナーはふだん 1 日以内に返信
-
needs-triage
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
callstack/agent-device#3359 ·
メンテナーはふだん 1 日以内に返信
-
Limrun Android: `fill` inserts at the cursor instead of replacing the field's text対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 62/100
callstack/agent-device#3358 ·
メンテナーはふだん 1 日以内に返信
callstack/agent-device の issue をすべて見る
似ている issue
-
check:passed streams:add
難易度 1/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 2 日以内に返信
-
beta technical-medium ui
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
walletbeat/walletbeat#1625 ·
メンテナーはふだん 1 日以内に返信
-
[Good First Issue]: Add unit tests for NetworkVersionInfo対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンGood First Issue hacktoberfest
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
hiero-ledger/hiero-sdk-js#4489 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] The clients language filter cannot select the rows the page labels as unknown対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/rocketmq-dashboard#6103 ·
メンテナーはふだん 4 日以内に返信
-
Bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
payloadcms/payload#18652 ·
メンテナーはふだん 1 日以内に返信