@swmansion/argent 0.28.1-next.21 → 0.28.1-next.22

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.
Files changed (31) hide show
  1. package/agents/argent-environment-inspector.md +7 -7
  2. package/agents/references/quality-control-checklist.md +14 -14
  3. package/dist/cli-cmds.mjs +1 -1
  4. package/dist/installer.mjs +1 -1
  5. package/dist/tool-args.generated.d.ts +76 -76
  6. package/dist/tool-server.cjs +174 -174
  7. package/package.json +1 -1
  8. package/rules/argent.md +16 -16
  9. package/skills/argent-android-emulator-setup/SKILL.md +9 -9
  10. package/skills/argent-create-flow/references/flow-yaml.md +11 -11
  11. package/skills/argent-create-flow/references/live-authoring.md +9 -9
  12. package/skills/argent-create-flow/references/reliability-and-recovery.md +13 -13
  13. package/skills/argent-device-interact/SKILL.md +47 -47
  14. package/skills/argent-device-interact/references/chromium.md +1 -1
  15. package/skills/argent-device-interact/references/gesture-examples.md +7 -7
  16. package/skills/argent-device-interact/references/secrets.md +6 -6
  17. package/skills/argent-lens/SKILL.md +21 -21
  18. package/skills/argent-metro-debugger/SKILL.md +22 -22
  19. package/skills/argent-metro-debugger/references/failure-scenarios.md +11 -11
  20. package/skills/argent-metro-debugger/references/source-maps.md +4 -4
  21. package/skills/argent-native-profiler/SKILL.md +13 -13
  22. package/skills/argent-qa-flows/SKILL.md +3 -3
  23. package/skills/argent-react-native-app-workflow/SKILL.md +18 -18
  24. package/skills/argent-react-native-optimization/SKILL.md +12 -12
  25. package/skills/argent-react-native-optimization/references/fix-reference.md +10 -10
  26. package/skills/argent-react-native-optimization/references/lint-rules.md +1 -1
  27. package/skills/argent-react-native-profiler/SKILL.md +25 -25
  28. package/skills/argent-react-native-profiler/references/diagnostic-tools.md +19 -19
  29. package/skills/argent-screen-recording/SKILL.md +14 -14
  30. package/skills/argent-test-ui-flow/SKILL.md +9 -9
  31. package/skills/argent-tv-interact/SKILL.md +19 -19
@@ -12,7 +12,7 @@ export interface ArgentToolArgs {
12
12
  "await-ui-element": {
13
13
  /** Target device id from `list-devices` (iOS UDID, Android serial, or Chromium id). */
14
14
  udid: string;
15
- /** What to wait for. `exists`: selector is anywhere in the tree. `visible`: selector is present with a non-zero on-screen frame. `hidden`: selector is absent or zero-area. `text`: the first visible match in reading order (topmost), falling back to the first match overall if none is visible, contains (or, with textMatch `equals`, exactly matches) expectedText — if a loose selector hits several elements, only that one is checked, so narrow it to target the intended element. */
15
+ /** What to wait for. `exists`: selector is anywhere in the tree. `visible`: selector is present with a non-zero on-screen frame. `hidden`: selector is absent or zero-area. `text`: the first visible match in reading order (topmost), falling back to the first match overall if none is visible, contains (or, with textMatch `equals`, exactly matches) expectedText. If a loose selector hits several elements, only that one is checked, so narrow it to target the intended element. */
16
16
  condition: "exists" | "visible" | "hidden" | "text";
17
17
  /** Element to match (text / identifier / role). */
18
18
  selector: {
@@ -23,7 +23,7 @@ export interface ArgentToolArgs {
23
23
  /** Case-insensitive substring of the element's role (e.g. AXButton, button, TextView). */
24
24
  role?: string;
25
25
  };
26
- /** For condition `text`: the string the first visible matched element (topmost in reading order; the first match overall if none is visible) must contain (default) or equal — see `textMatch`. Case-insensitive. */
26
+ /** For condition `text`: the string the first visible matched element (topmost in reading order; the first match overall if none is visible) must contain (default) or equal (see `textMatch`). Case-insensitive. */
27
27
  expectedText?: string;
28
28
  /** For condition `text`: how expectedText is compared. `contains` (default) is a case-insensitive substring; `equals` is a case-insensitive full-string match. */
29
29
  textMatch?: "contains" | "equals";
@@ -35,7 +35,7 @@ export interface ArgentToolArgs {
35
35
  pollIntervalMs?: number;
36
36
  };
37
37
  await_user_selection: {
38
- /** Max seconds to block this call before returning a re-awaitable { status: 'pending' } result (default 1800). The user's proposals stay live across timeouts — on 'pending' just call await_user_selection again. Lower this if your MCP client enforces a short request timeout. */
38
+ /** Max seconds to block this call before returning a re-awaitable { status: 'pending' } result (default 1800). The user's proposals stay live across timeouts; on 'pending' just call await_user_selection again. Lower this if your MCP client enforces a short request timeout. */
39
39
  timeoutSeconds?: number;
40
40
  };
41
41
  "boot-device": {
@@ -43,13 +43,13 @@ export interface ArgentToolArgs {
43
43
  udid?: string;
44
44
  /** Android: AVD name to launch a new emulator from (from `list-devices` → `avds[].name`). Provide exactly one of `udid`, `avdName`, `vvdImage`, or `electronAppPath`. */
45
45
  avdName?: string;
46
- /** Vega (Fire TV): VVD image to boot — the `vvdImage` of a Vega device from `list-devices` (e.g. `tv`). Starts the single SDK-managed Vega Virtual Device. Provide exactly one of `udid`, `avdName`, `vvdImage`, or `electronAppPath`. */
46
+ /** Vega (Fire TV): VVD image to boot: the `vvdImage` of a Vega device from `list-devices` (e.g. `tv`). Starts the single SDK-managed Vega Virtual Device. Provide exactly one of `udid`, `avdName`, `vvdImage`, or `electronAppPath`. */
47
47
  vvdImage?: string;
48
48
  /** Android/Vega: overall budget for the boot sequence. Default 480000 (8 min) on Android, 120000 (2 min) on Vega. Clamped to [30s, 15min]. Ignored on iOS. */
49
49
  bootTimeoutMs?: number;
50
50
  /** Shut down and re-boot the device even if already running. */
51
51
  force?: boolean;
52
- /** Android only: boot the emulator with audio output enabled. Defaults to false — argent boots emulators MUTED so several agent-driven devices don't all play sound on the host machine; pass `true` when the task involves playing, hearing, or testing audio. Takes effect at boot: if the emulator is already running muted, add `force: true` to reboot it with sound. A boot snapshot saved in the other audio mode can't be reused, so the first boot after toggling is a slower cold boot. The `boot-sound` argent flag flips this default to true. Ignored on iOS/Vega/Electron, which argent never mutes. */
52
+ /** Android only: boot the emulator with audio output enabled. Defaults to false: argent boots emulators MUTED so several agent-driven devices don't all play sound on the host machine; pass `true` when the task involves playing, hearing, or testing audio. Takes effect at boot: if the emulator is already running muted, add `force: true` to reboot it with sound. A boot snapshot saved in the other audio mode can't be reused, so the first boot after toggling is a slower cold boot. The `boot-sound` argent flag flips this default to true. Ignored on iOS/Vega/Electron, which argent never mutes. */
53
53
  sound?: boolean;
54
54
  /** iOS only: boot the simulator core WITHOUT opening its GUI window (Simulator.app, or Device Hub on Xcode 27+). The device still streams via simulator-server; used by Argent Lens. Set the `ARGENT_SIMULATOR_NO_WINDOW` env var (1/true/yes) to force this host-wide without passing the flag per call (the iOS analog of `ARGENT_EMULATOR_NO_WINDOW`). Ignored on Android/Vega/Electron, which have no equivalent GUI step. */
55
55
  headless?: boolean;
@@ -115,9 +115,9 @@ export interface ArgentToolArgs {
115
115
  label?: string;
116
116
  };
117
117
  "debugger-component-tree": {
118
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
118
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
119
119
  port?: number;
120
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
120
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
121
121
  device_id: string;
122
122
  /** iOS simulator UDID from list-devices. Pass it when device_id is a logicalDeviceId (two or more devices share one Metro), so that the tap coordinates of a landscape UI are on the screen's axes. Give the UDID of the simulator that shows the app. */
123
123
  udid?: string;
@@ -129,23 +129,23 @@ export interface ArgentToolArgs {
129
129
  includeSkipped?: boolean;
130
130
  };
131
131
  "debugger-connect": {
132
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
132
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
133
133
  port?: number;
134
- /** Device id from list-devices: iOS simulator UDID, Android serial, Vega serial (amazon-...), or Chromium device id (chromium-cdp-<port>). Pass this SAME id as device_id to every subsequent debugger-* call to pin them to this device. The returned logicalDeviceId is informational (Metro's own per-connection handle, absent on Vega); you do not switch to it — forwarding it still resolves here, but the list-devices id is the stable one. */
134
+ /** Device id from list-devices: iOS simulator UDID, Android serial, Vega serial (amazon-...), or Chromium device id (chromium-cdp-<port>). Pass this SAME id as device_id to every subsequent debugger-* call to pin them to this device. The returned logicalDeviceId is informational (Metro's own per-connection handle, absent on Vega); you do not switch to it. Forwarding it still resolves here, but the list-devices id is the stable one. */
135
135
  device_id: string;
136
136
  };
137
137
  "debugger-evaluate": {
138
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
138
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
139
139
  port?: number;
140
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
140
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
141
141
  device_id: string;
142
142
  /** JavaScript expression to evaluate in the app runtime */
143
143
  expression: string;
144
144
  };
145
145
  "debugger-inspect-element": {
146
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
146
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
147
147
  port?: number;
148
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
148
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
149
149
  device_id: string;
150
150
  /** Logical X coordinate on device screen */
151
151
  x: number;
@@ -155,27 +155,27 @@ export interface ArgentToolArgs {
155
155
  contextLines?: number;
156
156
  /** When true, resolves bundled frame locations to original source files via Metro symbolication and includes a code fragment. When false, returns the raw bundled frame info (file, line, column) without symbolication or source reading. */
157
157
  resolveSourceMaps?: boolean;
158
- /** Maximum number of hierarchy items to return, counted from the bottom (most specific component first). The hierarchy walks from the tapped element up to the root — the first items are the most relevant for editing. Increase to 70+ if you need to understand the broader navigation/screen structure. */
158
+ /** Maximum number of hierarchy items to return, counted from the bottom (most specific component first). The hierarchy walks from the tapped element up to the root, so the first items are the most relevant for editing. Increase to 70+ if you need to understand the broader navigation/screen structure. */
159
159
  maxItems?: number;
160
160
  /** When true, items that would normally be filtered are kept in the response with skipped=true and a skipReason. Useful for understanding what was pruned. */
161
161
  includeSkipped?: boolean;
162
162
  };
163
163
  "debugger-log-registry": {
164
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
164
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
165
165
  port?: number;
166
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
166
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
167
167
  device_id: string;
168
168
  };
169
169
  "debugger-reload-metro": {
170
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
170
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
171
171
  port?: number;
172
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
172
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
173
173
  device_id: string;
174
174
  };
175
175
  "debugger-status": {
176
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
176
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
177
177
  port?: number;
178
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
178
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID, Android serial, Vega serial, or Chromium device id). The logicalDeviceId debugger-connect returns also resolves here, but prefer the stable list-devices id. */
179
179
  device_id: string;
180
180
  };
181
181
  describe: {
@@ -189,9 +189,9 @@ export interface ArgentToolArgs {
189
189
  hours: number;
190
190
  };
191
191
  "flow-add-echo": {
192
- /** Name of the flow being recorded — the one passed to flow-start-recording. */
192
+ /** Name of the flow being recorded: the one passed to flow-start-recording. */
193
193
  name: string;
194
- /** Absolute path to the project root of the flow being recorded — the same value passed to flow-start-recording. Together with `name` it identifies which recording this echo belongs to. */
194
+ /** Absolute path to the project root of the flow being recorded: the same value passed to flow-start-recording. Together with `name` it identifies which recording this echo belongs to. */
195
195
  project_root: string;
196
196
  /** Message to echo when the flow is replayed */
197
197
  message: string;
@@ -207,9 +207,9 @@ export interface ArgentToolArgs {
207
207
  timeout?: number;
208
208
  };
209
209
  "flow-add-step": {
210
- /** Name of the flow being recorded — the one passed to flow-start-recording. */
210
+ /** Name of the flow being recorded: the one passed to flow-start-recording. */
211
211
  name: string;
212
- /** Absolute path to the project root of the flow being recorded — the same value passed to flow-start-recording. Together with `name` it identifies which recording this step belongs to. */
212
+ /** Absolute path to the project root of the flow being recorded: the same value passed to flow-start-recording. Together with `name` it identifies which recording this step belongs to. */
213
213
  project_root: string;
214
214
  /** MCP tool to execute and record, for example "gesture-tap". Do not pass a flow directive or a recording tool. Call flow-add-script directly for a requested script step. */
215
215
  command: string;
@@ -221,15 +221,15 @@ export interface ArgentToolArgs {
221
221
  "flow-execute": {
222
222
  /** Name of a saved flow to run from `.argent/flows` (e.g. "settings-explore"). Omit when flow_path is set. */
223
223
  name?: string;
224
- /** Absolute path to the calling agent's project root — the cwd it is working in. With name, the saved flow is read from `.argent/flows/<name>.yaml` under this root; with flow_path, the flow, its run: siblings, its script: paths and baselines all resolve beside the YAML instead, so pass the agent's cwd. A script still RUNS in this root whichever source was used. */
224
+ /** Absolute path to the calling agent's project root: the cwd it is working in. With name, the saved flow is read from `.argent/flows/<name>.yaml` under this root; with flow_path, the flow, its run: siblings, its script: paths and baselines all resolve beside the YAML instead, so pass the agent's cwd. A script still RUNS in this root whichever source was used. */
225
225
  project_root: string;
226
- /** Path to the flow .yaml as readable by the tool-server. Internal — the argent client derives it from project_root and name automatically; leave unset. */
226
+ /** Path to the flow .yaml as readable by the tool-server. Internal: the argent client derives it from project_root and name automatically; leave unset. */
227
227
  flow_file?: string;
228
228
  /** Omit when name is set. Absolute path to a flow .yaml on the client. Over a link (argent link or ARGENT_TOOLS_URL), the argent client uploads the file, its run: fragments and the snapshot baselines of each run, and the tool-server runs those copies. Keep run: fragments under project_root or beside the flow file. With updateBaselines, the client writes the new baselines when the run ends. The client also uploads each absolute .png or .yaml path that a tool: step takes as a file argument, when the file is under project_root or beside the flow file. A tool: flow-execute step that names a flow with name and an absolute project_root without a .. segment runs: the client also uploads that flow and its own files. Over a link, the uploaded flows must not have: script: steps; tool: steps that run a flow another way or record a flow; tool: steps that take a directory, an app or an output directory; tool: steps whose tool builds a file path from several arguments; tool: steps that name a relative path or a file other than .png or .yaml. Without a link, the tool-server reads the files in place and all step kinds run. */
229
229
  flow_path?: string;
230
- /** Device id to run against (iOS UDID, Android/Vega serial, Chromium id) — the id list-devices reports. Auto-detected when omitted, but only when exactly one booted device matches (optionally narrowed by `platform`); with several booted the run fails and lists them, so pass this explicitly whenever more than one device is up. */
230
+ /** Device id to run against (iOS UDID, Android/Vega serial, Chromium id), as list-devices reports it. Auto-detected when omitted, but only when exactly one booted device matches (optionally narrowed by `platform`); with several booted the run fails and lists them, so pass this explicitly whenever more than one device is up. */
231
231
  device?: string;
232
- /** Restrict auto-detection to this platform when several devices are booted. `ios` selects local simulators only — pass `ios-remote` to select a remote one. `chromium` does more than filter: with no `device` it SELECTS the self-boot branch for an e2e flow - the runner boots an Electron instance from the `launch` step's chromium value and tears it down after the run (a single-key `launch: { chromium: … }` map selects it on its own, without this parameter). When it selects that branch it never falls back to device auto-detection (a fragment, or an e2e launch map with no `chromium` key, still does), and the launch value must be a real Electron app path on the tool-server host: a bare-string `launch:` - what the recorder writes - holds an installed-app bundle id, so passing `chromium` for one fails the whole run with `Electron boot: path does not exist`. Edit the launch to `{ chromium: <app path> }` first. */
232
+ /** Restrict auto-detection to this platform when several devices are booted. `ios` selects local simulators only; pass `ios-remote` to select a remote one. `chromium` does more than filter: with no `device` it SELECTS the self-boot branch for an e2e flow - the runner boots an Electron instance from the `launch` step's chromium value and tears it down after the run (a single-key `launch: { chromium: … }` map selects it on its own, without this parameter). When it selects that branch it never falls back to device auto-detection (a fragment, or an e2e launch map with no `chromium` key, still does), and the launch value must be a real Electron app path on the tool-server host: a bare-string `launch:` - what the recorder writes - holds an installed-app bundle id, so passing `chromium` for one fails the whole run with `Electron boot: path does not exist`. Edit the launch to `{ chromium: <app path> }` first. */
233
233
  platform?: "ios" | "android" | "chromium" | "vega" | "ios-remote";
234
234
  /** Write/refresh screenshot baselines for `snapshot` steps instead of diffing against them, also in the flows that tool: flow-execute steps run, unless such a step sets updateBaselines itself. */
235
235
  updateBaselines?: boolean;
@@ -237,27 +237,27 @@ export interface ArgentToolArgs {
237
237
  prerequisiteAcknowledged?: boolean;
238
238
  };
239
239
  "flow-finish-recording": {
240
- /** Name of the flow being recorded — the one passed to flow-start-recording. */
240
+ /** Name of the flow being recorded: the one passed to flow-start-recording. */
241
241
  name: string;
242
- /** Absolute path to the project root of the flow being recorded — the same value passed to flow-start-recording. Together with `name` it identifies which recording to finish. */
242
+ /** Absolute path to the project root of the flow being recorded: the same value passed to flow-start-recording. Together with `name` it identifies which recording to finish. */
243
243
  project_root: string;
244
244
  };
245
245
  "flow-read-prerequisite": {
246
246
  /** Name of a saved flow to inspect from `.argent/flows` (e.g. "settings-explore"). Omit when flow_path is set. */
247
247
  name?: string;
248
- /** Absolute path to the calling agent's project root — the cwd it is working in. With name, the saved flow is read from `.argent/flows/<name>.yaml` under this root; with flow_path, the prerequisite is read from that YAML instead, so pass the agent's cwd. */
248
+ /** Absolute path to the calling agent's project root: the cwd it is working in. With name, the saved flow is read from `.argent/flows/<name>.yaml` under this root; with flow_path, the prerequisite is read from that YAML instead, so pass the agent's cwd. */
249
249
  project_root: string;
250
- /** Path to the flow .yaml as readable by the tool-server. Internal — the argent client derives it from project_root and name automatically; leave unset. */
250
+ /** Path to the flow .yaml as readable by the tool-server. Internal: the argent client derives it from project_root and name automatically; leave unset. */
251
251
  flow_file?: string;
252
252
  /** Omit when name is set. Absolute path to a flow .yaml on the client. Over a link (argent link or ARGENT_TOOLS_URL), the argent client uploads the file and the tool-server reads the uploaded copy; without a link, the tool-server reads the file in place. Pass the path through the argent client; a raw path that the file-input boundary did not verify is rejected. Pass the same flow source here as to flow-execute, so the prerequisite you read belongs to the flow that will run. */
253
253
  flow_path?: string;
254
254
  };
255
255
  "flow-start-recording": {
256
- /** Name for this flow (e.g. "settings-explore") — letters, digits, underscore and hyphen only. */
256
+ /** Name for this flow (e.g. "settings-explore"): letters, digits, underscore and hyphen only. */
257
257
  name: string;
258
258
  /** Absolute path to the project root directory (the directory that contains or should contain `.argent/flows/`). The flow file is created at `<project_root>/.argent/flows/<name>.yaml`. */
259
259
  project_root: string;
260
- /** Fragments only: the app/device state assumed on entry (e.g. "Settings app open on General page"). For a self-contained e2e flow, omit this and record a `restart-app` as the first step instead — it is captured as the flow's `launch` step. restart-app has no chromium support, so a chromium flow records as a fragment; add the `launch: { chromium: <app path> }` line to the YAML afterward, deleting the executionPrerequisite line if you passed one — a flow that starts with a launch must not declare it. */
260
+ /** Fragments only: the app/device state assumed on entry (e.g. "Settings app open on General page"). For a self-contained e2e flow, omit this and record a `restart-app` as the first step instead; it is captured as the flow's `launch` step. restart-app has no chromium support, so a chromium flow records as a fragment; add the `launch: { chromium: <app path> }` line to the YAML afterward, deleting the executionPrerequisite line if you passed one, since a flow that starts with a launch must not declare it. */
261
261
  executionPrerequisite?: string;
262
262
  };
263
263
  fold: {
@@ -310,7 +310,7 @@ export interface ArgentToolArgs {
310
310
  toY: number;
311
311
  /** Total drag duration in milliseconds (default 300, at most 10000 - the button stays down for exactly this long), interpolated at ~60fps. */
312
312
  durationMs?: number;
313
- /** Whether the drag releases with momentum; default true (a constant-speed drag). Pass false to decelerate into the release point (ease-out) so an app deriving fling from pointer release velocity (carousels, drag libraries) reads ~0 and applies little to no momentum — use it when the drag must stop where it was aimed rather than fling past. Deceleration needs wall clock: under ~100ms the whole drag fits inside the velocity window a page averages over (tens of ms), so some fling survives, and under ~70ms its extra frames cannot dispatch fast enough to fit durationMs. Keep durationMs at its default when the fling must be fully suppressed. */
313
+ /** Whether the drag releases with momentum; default true (a constant-speed drag). Pass false to decelerate into the release point (ease-out) so an app deriving fling from pointer release velocity (carousels, drag libraries) reads ~0 and applies little to no momentum. Use it when the drag must stop where it was aimed rather than fling past. Deceleration needs wall clock: under ~100ms the whole drag fits inside the velocity window a page averages over (tens of ms), so some fling survives, and under ~70ms its extra frames cannot dispatch fast enough to fit durationMs. Keep durationMs at its default when the fling must be fully suppressed. */
314
314
  momentum?: boolean;
315
315
  };
316
316
  "gesture-pinch": {
@@ -340,11 +340,11 @@ export interface ArgentToolArgs {
340
340
  centerX: number;
341
341
  /** Center of rotation, vertical: normalized 0.0–1.0 (fraction of screen height, not pixels) */
342
342
  centerY: number;
343
- /** Distance from center to each finger: normalized 0.0–1.0 (fraction of screen, not pixels). E.g. 0.15 = fingers placed 15% of screen away from center. One value for both axes, so on a non-square screen the orbit is a physical ellipse — pass radiusX+radiusY instead for a true circle. Required unless radiusX and radiusY are given. */
343
+ /** Distance from center to each finger: normalized 0.0–1.0 (fraction of screen, not pixels). E.g. 0.15 = fingers placed 15% of screen away from center. One value for both axes, so on a non-square screen the orbit is a physical ellipse; pass radiusX+radiusY instead for a true circle. Required unless radiusX and radiusY are given. */
344
344
  radius?: number;
345
- /** Per-axis finger distance, horizontal: normalized 0.0–1.0 fraction of screen WIDTH. Give both radiusX and radiusY (they override radius) with radiusX·screenWidth = radiusY·screenHeight for a physically circular orbit — constant finger separation, no pinch coupled into the turn. */
345
+ /** Per-axis finger distance, horizontal: normalized 0.0–1.0 fraction of screen WIDTH. Give both radiusX and radiusY (they override radius) with radiusX·screenWidth = radiusY·screenHeight for a physically circular orbit: constant finger separation, no pinch coupled into the turn. */
346
346
  radiusX?: number;
347
- /** Per-axis finger distance, vertical: normalized 0.0–1.0 fraction of screen HEIGHT. Always paired with radiusX — see radiusX. */
347
+ /** Per-axis finger distance, vertical: normalized 0.0–1.0 fraction of screen HEIGHT. Always paired with radiusX; see radiusX. */
348
348
  radiusY?: number;
349
349
  /** Starting angle in degrees (0 = right, 90 = down) */
350
350
  startAngle: number;
@@ -356,7 +356,7 @@ export interface ArgentToolArgs {
356
356
  "gesture-scroll": {
357
357
  /** Target Chromium device id from `list-devices` (chromium-cdp-<port>). */
358
358
  udid: string;
359
- /** Anchor x: normalized 0.0–1.0 (fraction of window width, not pixels). The wheel events land here — put it over the element you want to scroll. */
359
+ /** Anchor x: normalized 0.0–1.0 (fraction of window width, not pixels). The wheel events land here; put it over the element you want to scroll. */
360
360
  x: number;
361
361
  /** Anchor y: normalized 0.0–1.0 (fraction of window height, not pixels). */
362
362
  y: number;
@@ -396,7 +396,7 @@ export interface ArgentToolArgs {
396
396
  keyboard: {
397
397
  /** Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, or Chromium id). */
398
398
  udid: string;
399
- /** Text to type character by character. Cannot be combined with `key` in one call — one call per action; to type and then press a key, put two `keyboard` steps in one `run-sequence`. Handles uppercase and common punctuation. To type a credential without its plaintext ever entering your context, use a secret placeholder: `{{secret:<NAME>}}` — e.g. text: "{{secret:APP_PASSWORD}}". The value is resolved on the machine running the tool-server, from the first source that defines the name: the `ARGENT_SECRET_<NAME>` environment variable, `.argent/secrets.env` in the project, the project's `.env.local` / `.env` (only their `ARGENT_SECRET_`-prefixed keys), then `~/.argent/secrets.env`. Nothing else on the host is reachable. Placeholders can be embedded in longer text and are never echoed back resolved. If the secret you need is not set, the failure lists the available names and every source it looked in — ask the user to add it to one of them (a secrets file applies immediately; an env var needs a restart), NEVER ask the user to paste the secret value into the conversation. */
399
+ /** Text to type character by character. Cannot be combined with `key` in one call (one call per action); to type and then press a key, put two `keyboard` steps in one `run-sequence`. Handles uppercase and common punctuation. To type a credential without its plaintext ever entering your context, use a secret placeholder: `{{secret:<NAME>}}`, e.g. text: "{{secret:APP_PASSWORD}}". The value is resolved on the machine running the tool-server, from the first source that defines the name: the `ARGENT_SECRET_<NAME>` environment variable, `.argent/secrets.env` in the project, the project's `.env.local` / `.env` (only their `ARGENT_SECRET_`-prefixed keys), then `~/.argent/secrets.env`. Nothing else on the host is reachable. Placeholders can be embedded in longer text and are never echoed back resolved. If the secret you need is not set, the failure lists the available names and every source it looked in; ask the user to add it to one of them (a secrets file applies immediately; an env var needs a restart), NEVER ask the user to paste the secret value into the conversation. */
400
400
  text?: string;
401
401
  /** Named key to press: enter, escape, backspace, tab, space, arrow-up, arrow-down, arrow-left, arrow-right, f1-f12. Cannot be combined with `text` in one call: one call per action; to type and then press a key, put two `keyboard` steps in one `run-sequence`. Not supported on TV targets; move focus with `tv-remote` (up/down/left/right) instead. Physical iOS: only `enter` and `backspace`. */
402
402
  key?: string;
@@ -461,7 +461,7 @@ export interface ArgentToolArgs {
461
461
  fields?: Array<string>;
462
462
  /** Exact UIView class names whose entire subtree should be pruned (e.g. ["UIImageView"] to drop image leaf nodes) */
463
463
  skipClasses?: Array<string>;
464
- /** Class name prefixes to prune entire subtrees. For SwiftUI apps use ["_TtGC7SwiftUI"] to drop mangled SwiftUI generic type subtrees while keeping _UIHostingView and UIKit bridges. Avoid broad prefixes like "_UI" — they prune useful system views. */
464
+ /** Class name prefixes to prune entire subtrees. For SwiftUI apps use ["_TtGC7SwiftUI"] to drop mangled SwiftUI generic type subtrees while keeping _UIHostingView and UIKit bridges. Avoid broad prefixes like "_UI": they prune useful system views. */
465
465
  skipClassPrefixes?: Array<string>;
466
466
  /** Maximum recursion depth (default 8). Increase for deeper inspection, decrease to reduce output size. */
467
467
  maxDepth?: number;
@@ -487,7 +487,7 @@ export interface ArgentToolArgs {
487
487
  app_process?: string;
488
488
  /** iOS-only: path to an Instruments .tracetemplate file (defaults to bundled Argent template). Ignored on Android. */
489
489
  template_path?: string;
490
- /** iOS-only. When true, cold-launches the app under the profiler with Malloc Stack Logging enabled so memory leaks carry an allocation backtrace (responsible frame + library). Without it, leaks are still detected but unattributable — Instruments reports '<Call stack limit reached>'. Trade-offs: this RESTARTS the app (current state is lost), adds memory/CPU overhead, and makes the app noticeably slow to launch (every startup allocation records a backtrace), so leave it off for pure CPU/hang profiling. Requires a non-degraded Xcode: on Xcode 26.4 and later the cold-launch path is broken, so the call is rejected up front (re-run without the flag, or set ARGENT_IOS_CAPTURE=device to override if the device path works on your host). ARGENT_IOS_CAPTURE=all-processes — e.g. exported globally for the normal capture path — also rejects this flag up front, since that fallback cannot cold-launch; unset it (or set it to device) first. Ignored on Android. */
490
+ /** iOS-only. When true, cold-launches the app under the profiler with Malloc Stack Logging enabled so memory leaks carry an allocation backtrace (responsible frame + library). Without it, leaks are still detected but unattributable: Instruments reports '<Call stack limit reached>'. Trade-offs: this RESTARTS the app (current state is lost), adds memory/CPU overhead, and makes the app noticeably slow to launch (every startup allocation records a backtrace), so leave it off for pure CPU/hang profiling. Requires a non-degraded Xcode: on Xcode 26.4 and later the cold-launch path is broken, so the call is rejected up front (re-run without the flag, or set ARGENT_IOS_CAPTURE=device to override if the device path works on your host). ARGENT_IOS_CAPTURE=all-processes (e.g. exported globally for the normal capture path) also rejects this flag up front, since that fallback cannot cold-launch; unset it (or set it to device) first. Ignored on Android. */
491
491
  malloc_stack_logging?: boolean;
492
492
  };
493
493
  "native-profiler-stop": {
@@ -549,17 +549,17 @@ export interface ArgentToolArgs {
549
549
  paste: {
550
550
  /** Target device id from `list-devices` (iOS simulator UDID or Android emulator serial). */
551
551
  udid: string;
552
- /** Text to put on the device clipboard and paste into the focused field. Supports `{{secret:<NAME>}}` placeholders, resolved on the tool-server from the `ARGENT_SECRET_<NAME>` environment variable or an argent secrets file — the same sources as `keyboard` — so a credential never enters your context. If the secret is not set, the failure lists the available names and every source it looked in; ask the user to add it there, NEVER ask for the value in the conversation. */
552
+ /** Text to put on the device clipboard and paste into the focused field. Supports `{{secret:<NAME>}}` placeholders, resolved on the tool-server from the `ARGENT_SECRET_<NAME>` environment variable or an argent secrets file (the same sources as `keyboard`), so a credential never enters your context. If the secret is not set, the failure lists the available names and every source it looked in; ask the user to add it there, NEVER ask for the value in the conversation. */
553
553
  text: string;
554
554
  };
555
555
  "profiler-combined-report": {
556
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
556
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
557
557
  port?: number;
558
558
  /** iOS Simulator/device UDID or Android serial */
559
559
  device_id: string;
560
560
  };
561
561
  "profiler-commit-query": {
562
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
562
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
563
563
  port?: number;
564
564
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
565
565
  device_id: string;
@@ -569,28 +569,28 @@ export interface ArgentToolArgs {
569
569
  component_name?: string;
570
570
  /** Time range filter for by_time_range mode */
571
571
  time_range_ms?: {
572
- /** Start of range in ms since profiling started — the same clock profiler-commit-query prints */
572
+ /** Start of range in ms since profiling started, the same clock profiler-commit-query prints */
573
573
  start: number;
574
- /** End of range in ms since profiling started — the same clock profiler-commit-query prints */
574
+ /** End of range in ms since profiling started, the same clock profiler-commit-query prints */
575
575
  end: number;
576
576
  };
577
577
  /** Commit index for by_index and cascade_tree modes */
578
578
  commit_index?: number;
579
- /** Max results to return. Defaults to 20 for by_component / by_time_range, which count commits. by_index counts individual fibers and returns all of them unless this is set, because one commit's fibers collapse to far fewer distinct components — a small cap there can show less than the analyze report it is meant to expand on. */
579
+ /** Max results to return. Defaults to 20 for by_component / by_time_range, which count commits. by_index counts individual fibers and returns all of them unless this is set, because one commit's fibers collapse to far fewer distinct components, and a small cap there can show less than the analyze report it is meant to expand on. */
580
580
  top_n?: number;
581
581
  };
582
582
  "profiler-cpu-query": {
583
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
583
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
584
584
  port?: number;
585
585
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
586
586
  device_id: string;
587
587
  /** Query mode: top_functions (global hotspots), time_window (CPU in a time range), call_tree (callers/callees of a function), component_cpu (CPU during a component's commits) */
588
588
  mode: "top_functions" | "time_window" | "call_tree" | "component_cpu";
589
- /** Time window filter for time_window mode (ms since profiling started — the same clock profiler-commit-query prints) */
589
+ /** Time window filter for time_window mode (ms since profiling started, the same clock profiler-commit-query prints) */
590
590
  time_window_ms?: {
591
- /** Start of window in ms since profiling started — the same clock profiler-commit-query prints */
591
+ /** Start of window in ms since profiling started, the same clock profiler-commit-query prints */
592
592
  start: number;
593
- /** End of window in ms since profiling started — the same clock profiler-commit-query prints */
593
+ /** End of window in ms since profiling started, the same clock profiler-commit-query prints */
594
594
  end: number;
595
595
  };
596
596
  /** Component name for component_cpu mode */
@@ -607,7 +607,7 @@ export interface ArgentToolArgs {
607
607
  mode: "list" | "load_react" | "load_native";
608
608
  /** Timestamp-based session identifier (e.g. '20250313-143022') from the list output. Required for load_react and load_native modes. */
609
609
  session_id?: string;
610
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
610
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
611
611
  port?: number;
612
612
  /** Target device id from `list-devices`. Used to cache the loaded React session under the correct port+device key, and required to resolve the native profiler session for load_native. */
613
613
  device_id: string;
@@ -633,7 +633,7 @@ export interface ArgentToolArgs {
633
633
  propose_variant: {
634
634
  /** Human name of the on-screen element this variant targets, e.g. "Foo button" or "profile header". Repeated calls with the same element accumulate multiple variants on it. Used as the default screen matcher when `match` is omitted. */
635
635
  element: string;
636
- /** Device id (iOS udid / Android serial) the variants were captured on. The preview window streams THIS device directly — pass the same udid you screenshotted/described with, so the human never has to pick a simulator. Set it on the first propose_variant of a round; later calls may omit it (the last non-empty value wins). */
636
+ /** Device id (iOS udid / Android serial) the variants were captured on. The preview window streams THIS device directly; pass the same udid you screenshotted/described with, so the human never has to pick a simulator. Set it on the first propose_variant of a round; later calls may omit it (the last non-empty value wins). */
637
637
  udid?: string;
638
638
  /** Optional precise matcher so the floating variant bubble anchors to the right element on the streamed screen. Defaults to { by: 'text', value: element }. Get exact labels/identifiers from the `describe` tool first for reliable anchoring. */
639
639
  match?: {
@@ -654,7 +654,7 @@ export interface ArgentToolArgs {
654
654
  filePath?: string;
655
655
  /** Required preview of how the variant looks, shown on the floating card. An http(s) URL, a data: URI, or a local image file path (e.g. a screenshot path returned by the screenshot tool after you rendered the variant). */
656
656
  previewImage: string;
657
- /** Normalized [0..1] bounds (fractions of screen width/height) of the target element AS IT APPEARS IN THIS VARIANT — read the matched node's `frame` from `describe` AFTER applying this variant. The preview window crops the screenshot to these bounds, so each variant shows its own re-laid-out element instead of every variant sharing one stale frame. The element moves/resizes between variants, so capture it per variant. Omit if unknown. */
657
+ /** Normalized [0..1] bounds (fractions of screen width/height) of the target element AS IT APPEARS IN THIS VARIANT. Read the matched node's `frame` from `describe` AFTER applying this variant. The preview window crops the screenshot to these bounds, so each variant shows its own re-laid-out element instead of every variant sharing one stale frame. The element moves/resizes between variants, so capture it per variant. Omit if unknown. */
658
658
  frame?: {
659
659
  x: number;
660
660
  y: number;
@@ -664,7 +664,7 @@ export interface ArgentToolArgs {
664
664
  };
665
665
  };
666
666
  "react-profiler-analyze": {
667
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
667
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
668
668
  port?: number;
669
669
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
670
670
  device_id: string;
@@ -689,7 +689,7 @@ export interface ArgentToolArgs {
689
689
  project_root: string;
690
690
  };
691
691
  "react-profiler-cpu-summary": {
692
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
692
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
693
693
  port?: number;
694
694
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
695
695
  device_id: string;
@@ -699,7 +699,7 @@ export interface ArgentToolArgs {
699
699
  react_only?: boolean;
700
700
  };
701
701
  "react-profiler-fiber-tree": {
702
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
702
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
703
703
  port?: number;
704
704
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
705
705
  device_id: string;
@@ -709,7 +709,7 @@ export interface ArgentToolArgs {
709
709
  filter?: string;
710
710
  };
711
711
  "react-profiler-renders": {
712
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
712
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
713
713
  port?: number;
714
714
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
715
715
  device_id: string;
@@ -717,9 +717,9 @@ export interface ArgentToolArgs {
717
717
  top_n?: number;
718
718
  };
719
719
  "react-profiler-start": {
720
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
720
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
721
721
  port?: number;
722
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
722
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
723
723
  device_id: string;
724
724
  /** CPU sampling interval in microseconds (default 100) */
725
725
  sample_interval_us?: number;
@@ -727,15 +727,15 @@ export interface ArgentToolArgs {
727
727
  force?: boolean;
728
728
  };
729
729
  "react-profiler-status": {
730
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
730
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
731
731
  port?: number;
732
732
  /** Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId). */
733
733
  device_id: string;
734
734
  };
735
735
  "react-profiler-stop": {
736
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
736
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
737
737
  port?: number;
738
- /** Device id from list-devices — the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
738
+ /** Device id from list-devices: the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial). */
739
739
  device_id: string;
740
740
  };
741
741
  "reinstall-app": {
@@ -763,11 +763,11 @@ export interface ArgentToolArgs {
763
763
  orientation: "Portrait" | "LandscapeLeft" | "LandscapeRight" | "PortraitUpsideDown";
764
764
  };
765
765
  "run-sequence": {
766
- /** Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, or Chromium id) — shared across all steps. */
766
+ /** Target device id from `list-devices` (iOS UDID, Android serial, Vega serial, or Chromium id), shared across all steps. */
767
767
  udid: string;
768
768
  /** Ordered list of interaction steps to execute sequentially */
769
769
  steps: Array<{
770
- /** Tool name — one of: gesture-tap, gesture-swipe, gesture-scroll, gesture-drag, gesture-custom, gesture-pinch, gesture-rotate, button, keyboard, paste, rotate, shake, fold, tv-remote, await-ui-element. On a TV target (Apple TV / Android TV / Vega) use tv-remote (remote presses) and keyboard (text). */
770
+ /** Tool name, one of: gesture-tap, gesture-swipe, gesture-scroll, gesture-drag, gesture-custom, gesture-pinch, gesture-rotate, button, keyboard, paste, rotate, shake, fold, tv-remote, await-ui-element. On a TV target (Apple TV / Android TV / Vega) use tv-remote (remote presses) and keyboard (text). */
771
771
  tool: string;
772
772
  /** Tool arguments (excluding udid, which is injected automatically) */
773
773
  args: {
@@ -798,7 +798,7 @@ export interface ArgentToolArgs {
798
798
  rotation?: "Portrait" | "LandscapeLeft" | "LandscapeRight" | "PortraitUpsideDown";
799
799
  /** Scale factor (0.01-1.0). Defaults to ARGENT_SCREENSHOT_SCALE env var, or 0.25 if unset for iOS/Android. On Chromium the default is 1.0 (no downscale); pass <1 to opt in. Downscaling on Chromium requires the optional `sharp` dependency. */
800
800
  scale?: number;
801
- /** Default true. Set false only when capturing a full-resolution PNG (scale: 1.0) to save as a baseline/current for screenshot-diff — the file is still written, but the image bytes are not attached to the agent context. */
801
+ /** Default true. Set false only when capturing a full-resolution PNG (scale: 1.0) to save as a baseline/current for screenshot-diff. The file is still written, but the image bytes are not attached to the agent context. */
802
802
  includeImageInContext?: boolean;
803
803
  /** Downscaling algorithm when scale<1 on Chromium. Defaults to lanczos3 (highest quality). Mirrors sim-server's wire enum. Ignored on physical iPhones. */
804
804
  downscaler?: "lanczos3" | "box" | "bilinear" | "nearest";
@@ -816,7 +816,7 @@ export interface ArgentToolArgs {
816
816
  captureCurrent?: boolean;
817
817
  /** Orientation override for live baseline/current captures. Ignored on physical iPhones. */
818
818
  rotation?: "Portrait" | "LandscapeLeft" | "LandscapeRight" | "PortraitUpsideDown";
819
- /** Directory where diff artifacts should be written. Optional — defaults to a temp directory; the diff images are returned in the result either way. */
819
+ /** Directory where diff artifacts should be written. Optional: defaults to a temp directory; the diff images are returned in the result either way. */
820
820
  outputDir?: string;
821
821
  };
822
822
  "settings-permissions": {
@@ -826,7 +826,7 @@ export interface ArgentToolArgs {
826
826
  action: "grant" | "deny" | "reset";
827
827
  /** The permission to change. `notifications` is Android-only (iOS has no simctl service for it); `reminders` is iOS-only; `camera` works on Android and on iOS only when the target simulator's runtime models the service (varies by simruntime, not by the installed Xcode). */
828
828
  permission: "camera" | "microphone" | "photos" | "contacts" | "notifications" | "calendar" | "location" | "location-always" | "media-library" | "motion" | "reminders";
829
- /** App to change the permission for — required for every action. iOS: bundle id (e.g. com.example.app). Android: package name. `reset` is per-app too: simctl's device-wide reset (no bundleId) silently leaves existing per-app grants untouched on recent iOS, so the permission is always reset for this one app. */
829
+ /** App to change the permission for, required for every action. iOS: bundle id (e.g. com.example.app). Android: package name. `reset` is per-app too: simctl's device-wide reset (no bundleId) silently leaves existing per-app grants untouched on recent iOS, so the permission is always reset for this one app. */
830
830
  bundleId: string;
831
831
  };
832
832
  shake: {
@@ -836,7 +836,7 @@ export interface ArgentToolArgs {
836
836
  count?: number;
837
837
  };
838
838
  "stop-all-simulator-servers": {
839
- /** Device ids (iOS UDID / Android serial / Chromium id) to scope the teardown to — pass the devices THIS session actually used. Omit only for a deliberate machine-wide cleanup: one tool-server serves every agent using this argent install, so an unscoped stop also kills devices another agent is mid-session on. */
839
+ /** Device ids (iOS UDID / Android serial / Chromium id) to scope the teardown to. Pass the devices THIS session actually used. Omit only for a deliberate machine-wide cleanup: one tool-server serves every agent using this argent install, so an unscoped stop also kills devices another agent is mid-session on. */
840
840
  devices?: Array<string>;
841
841
  };
842
842
  "stop-metro": {
@@ -856,7 +856,7 @@ export interface ArgentToolArgs {
856
856
  "tv-remote": {
857
857
  /** Target TV device id from `list-devices` (Apple TV, Android TV, or Vega). */
858
858
  udid: string;
859
- /** A single TV-remote button, or a path of them run in one call. Buttons: up/down/left/right (D-pad), select (OK), back, home, menu, playPause, rewind, fastForward, next, previous, volumeUp, volumeDown, mute. The media-transport and volume keys work on Android TV and Vega; on the Apple TV simulator they are rejected (its HID stack ignores them) — the D-pad/select/back/menu/home/playPause core works on all three. For multi-step navigation pass an array, e.g. ["up","right","right","select"] — strongly prefer this over multiple `tv-remote` calls: the whole path runs in a single call. */
859
+ /** A single TV-remote button, or a path of them run in one call. Buttons: up/down/left/right (D-pad), select (OK), back, home, menu, playPause, rewind, fastForward, next, previous, volumeUp, volumeDown, mute. The media-transport and volume keys work on Android TV and Vega; on the Apple TV simulator they are rejected (its HID stack ignores them). The D-pad/select/back/menu/home/playPause core works on all three. For multi-step navigation pass an array, e.g. ["up","right","right","select"]; strongly prefer this over multiple `tv-remote` calls: the whole path runs in a single call. */
860
860
  button?: "up" | "down" | "left" | "right" | "select" | "back" | "home" | "menu" | "playPause" | "rewind" | "fastForward" | "next" | "previous" | "volumeUp" | "volumeDown" | "mute" | Array<"up" | "down" | "left" | "right" | "select" | "back" | "home" | "menu" | "playPause" | "rewind" | "fastForward" | "next" | "previous" | "volumeUp" | "volumeDown" | "mute">;
861
861
  /** Repeat the whole `button` value this many times (default 1). Compact for long same-button runs, e.g. { button: "down", repeat: 12 }. */
862
862
  repeat?: number;
@@ -866,21 +866,21 @@ export interface ArgentToolArgs {
866
866
  udid: string;
867
867
  };
868
868
  "update-argent": {
869
- /** Which install to update. 'auto' (default) updates the install serving this session — the global PATH install or this project's local devDependency, whichever this server runs from. Pass 'global' / 'local' to force one, or 'both' when the user has both and wants each updated. */
869
+ /** Which install to update. 'auto' (default) updates the install serving this session: the global PATH install or this project's local devDependency, whichever this server runs from. Pass 'global' / 'local' to force one, or 'both' when the user has both and wants each updated. */
870
870
  target?: "auto" | "global" | "local" | "both";
871
871
  };
872
872
  "view-network-logs": {
873
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
873
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
874
874
  port?: number;
875
- /** Device id from list-devices (iOS simulator UDID or Android serial) — the same id used with debugger-connect. */
875
+ /** Device id from list-devices (iOS simulator UDID or Android serial), the same id used with debugger-connect. */
876
876
  device_id: string;
877
877
  /** Page index (0-based) or "latest" for the most recent page. Each page contains up to 50 entries. */
878
878
  pageIndex?: number | "latest";
879
879
  };
880
880
  "view-network-request-details": {
881
- /** Metro server port. Optional — omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
881
+ /** Metro server port. Optional: omit it to use this device's port, 8081 by default. Ignored for Chromium, whose CDP port is encoded in device_id. */
882
882
  port?: number;
883
- /** Device id from list-devices (iOS simulator UDID or Android serial) — the same id used with debugger-connect. */
883
+ /** Device id from list-devices (iOS simulator UDID or Android serial), the same id used with debugger-connect. */
884
884
  device_id: string;
885
885
  /** The requestId from view-network-logs to get full details for */
886
886
  requestId: string;