tauri-agent-tools 0.5.1 → 0.7.0

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 (128) hide show
  1. package/.agents/skills/tauri-agent-tools/SKILL.md +195 -13
  2. package/.agents/skills/tauri-bridge-setup/SKILL.md +82 -14
  3. package/.agents/skills/tauri-debug-quickstart/SKILL.md +80 -0
  4. package/AGENTS.md +9 -7
  5. package/README.md +119 -11
  6. package/dist/bridge/client.d.ts +21 -2
  7. package/dist/bridge/client.js +119 -3
  8. package/dist/bridge/client.js.map +1 -1
  9. package/dist/cli.js +47 -0
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/appPaths.d.ts +2 -0
  12. package/dist/commands/appPaths.js +97 -0
  13. package/dist/commands/appPaths.js.map +1 -0
  14. package/dist/commands/capabilitiesAudit.d.ts +2 -0
  15. package/dist/commands/capabilitiesAudit.js +105 -0
  16. package/dist/commands/capabilitiesAudit.js.map +1 -0
  17. package/dist/commands/capture.d.ts +3 -0
  18. package/dist/commands/capture.js +218 -0
  19. package/dist/commands/capture.js.map +1 -0
  20. package/dist/commands/check.d.ts +5 -0
  21. package/dist/commands/check.js +174 -0
  22. package/dist/commands/check.js.map +1 -0
  23. package/dist/commands/configInspect.d.ts +2 -0
  24. package/dist/commands/configInspect.js +223 -0
  25. package/dist/commands/configInspect.js.map +1 -0
  26. package/dist/commands/diagnose.d.ts +2 -0
  27. package/dist/commands/diagnose.js +311 -0
  28. package/dist/commands/diagnose.js.map +1 -0
  29. package/dist/commands/eval.js +16 -3
  30. package/dist/commands/eval.js.map +1 -1
  31. package/dist/commands/forensics.d.ts +2 -0
  32. package/dist/commands/forensics.js +331 -0
  33. package/dist/commands/forensics.js.map +1 -0
  34. package/dist/commands/health.d.ts +2 -0
  35. package/dist/commands/health.js +39 -0
  36. package/dist/commands/health.js.map +1 -0
  37. package/dist/commands/interact/click.d.ts +6 -0
  38. package/dist/commands/interact/click.js +102 -0
  39. package/dist/commands/interact/click.js.map +1 -0
  40. package/dist/commands/interact/focus.d.ts +3 -0
  41. package/dist/commands/interact/focus.js +40 -0
  42. package/dist/commands/interact/focus.js.map +1 -0
  43. package/dist/commands/interact/navigate.d.ts +3 -0
  44. package/dist/commands/interact/navigate.js +49 -0
  45. package/dist/commands/interact/navigate.js.map +1 -0
  46. package/dist/commands/interact/scroll.d.ts +11 -0
  47. package/dist/commands/interact/scroll.js +110 -0
  48. package/dist/commands/interact/scroll.js.map +1 -0
  49. package/dist/commands/interact/select.d.ts +3 -0
  50. package/dist/commands/interact/select.js +59 -0
  51. package/dist/commands/interact/select.js.map +1 -0
  52. package/dist/commands/interact/shared.d.ts +23 -0
  53. package/dist/commands/interact/shared.js +62 -0
  54. package/dist/commands/interact/shared.js.map +1 -0
  55. package/dist/commands/interact/type.d.ts +6 -0
  56. package/dist/commands/interact/type.js +59 -0
  57. package/dist/commands/interact/type.js.map +1 -0
  58. package/dist/commands/invoke.d.ts +3 -0
  59. package/dist/commands/invoke.js +53 -0
  60. package/dist/commands/invoke.js.map +1 -0
  61. package/dist/commands/osLogs.d.ts +2 -0
  62. package/dist/commands/osLogs.js +130 -0
  63. package/dist/commands/osLogs.js.map +1 -0
  64. package/dist/commands/probe.d.ts +2 -0
  65. package/dist/commands/probe.js +117 -0
  66. package/dist/commands/probe.js.map +1 -0
  67. package/dist/commands/processTree.d.ts +2 -0
  68. package/dist/commands/processTree.js +45 -0
  69. package/dist/commands/processTree.js.map +1 -0
  70. package/dist/commands/shared.d.ts +10 -4
  71. package/dist/commands/shared.js +23 -3
  72. package/dist/commands/shared.js.map +1 -1
  73. package/dist/commands/sidecarReplay.d.ts +7 -0
  74. package/dist/commands/sidecarReplay.js +93 -0
  75. package/dist/commands/sidecarReplay.js.map +1 -0
  76. package/dist/commands/sidecarTap.d.ts +2 -0
  77. package/dist/commands/sidecarTap.js +118 -0
  78. package/dist/commands/sidecarTap.js.map +1 -0
  79. package/dist/commands/storeInspect.d.ts +13 -0
  80. package/dist/commands/storeInspect.js +156 -0
  81. package/dist/commands/storeInspect.js.map +1 -0
  82. package/dist/commands/webviewAttach.d.ts +2 -0
  83. package/dist/commands/webviewAttach.js +64 -0
  84. package/dist/commands/webviewAttach.js.map +1 -0
  85. package/dist/platform/oslog/darwin.d.ts +21 -0
  86. package/dist/platform/oslog/darwin.js +72 -0
  87. package/dist/platform/oslog/darwin.js.map +1 -0
  88. package/dist/platform/oslog/linux.d.ts +16 -0
  89. package/dist/platform/oslog/linux.js +47 -0
  90. package/dist/platform/oslog/linux.js.map +1 -0
  91. package/dist/platform/oslog/windows.d.ts +15 -0
  92. package/dist/platform/oslog/windows.js +16 -0
  93. package/dist/platform/oslog/windows.js.map +1 -0
  94. package/dist/schemas/bridge.d.ts +256 -0
  95. package/dist/schemas/bridge.js +57 -0
  96. package/dist/schemas/bridge.js.map +1 -1
  97. package/dist/schemas/commands.d.ts +126 -0
  98. package/dist/schemas/commands.js +28 -0
  99. package/dist/schemas/commands.js.map +1 -1
  100. package/dist/schemas/index.d.ts +3 -2
  101. package/dist/schemas/index.js +3 -2
  102. package/dist/schemas/index.js.map +1 -1
  103. package/dist/schemas/interact.d.ts +118 -0
  104. package/dist/schemas/interact.js +31 -0
  105. package/dist/schemas/interact.js.map +1 -0
  106. package/dist/schemas/osLog.d.ts +34 -0
  107. package/dist/schemas/osLog.js +18 -0
  108. package/dist/schemas/osLog.js.map +1 -0
  109. package/dist/schemas/sidecar.d.ts +33 -0
  110. package/dist/schemas/sidecar.js +17 -0
  111. package/dist/schemas/sidecar.js.map +1 -0
  112. package/dist/schemas/tauriConfig.d.ts +825 -0
  113. package/dist/schemas/tauriConfig.js +102 -0
  114. package/dist/schemas/tauriConfig.js.map +1 -0
  115. package/dist/util/ndjson.d.ts +37 -0
  116. package/dist/util/ndjson.js +82 -0
  117. package/dist/util/ndjson.js.map +1 -0
  118. package/dist/util/tauriConfig.d.ts +63 -0
  119. package/dist/util/tauriConfig.js +235 -0
  120. package/dist/util/tauriConfig.js.map +1 -0
  121. package/examples/frontend-stub/index.html +1 -0
  122. package/examples/tauri-bridge/Cargo.toml +6 -0
  123. package/examples/tauri-bridge/build.rs +3 -0
  124. package/examples/tauri-bridge/icons/icon.png +0 -0
  125. package/examples/tauri-bridge/src/dev_bridge.rs +509 -10
  126. package/examples/tauri-bridge/tauri.conf.json +25 -0
  127. package/package.json +3 -1
  128. package/rust-bridge/README.md +7 -5
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Agent-driven inspection toolkit for Tauri desktop apps**
6
6
 
7
- 14 read-only commands to screenshot, inspect, and monitor Tauri apps from the CLI.
7
+ 36 commands to screenshot, inspect, interact with, monitor, post-mortem, audit, and diagnose Tauri apps from the CLI.
8
8
 
9
9
  [![CI](https://github.com/cesarandreslopez/tauri-agent-tools/actions/workflows/ci.yml/badge.svg)](https://github.com/cesarandreslopez/tauri-agent-tools/actions/workflows/ci.yml)
10
10
  [![npm version](https://img.shields.io/npm/v/tauri-agent-tools.svg)](https://www.npmjs.com/package/tauri-agent-tools)
@@ -121,8 +121,15 @@ Evaluate a JavaScript expression in the Tauri app.
121
121
 
122
122
  ```bash
123
123
  tauri-agent-tools eval "document.title"
124
+ tauri-agent-tools eval --file script.js
124
125
  ```
125
126
 
127
+ | Option | Description |
128
+ |--------|-------------|
129
+ | `<js-expression>` | Inline JavaScript to evaluate |
130
+ | `--file <path>` | Load JavaScript from a file instead |
131
+ | `--window-label <label>` | Target a specific webview window (default: main) |
132
+
126
133
  ### `wait`
127
134
 
128
135
  Wait for a condition to be met.
@@ -244,6 +251,107 @@ Monitor Rust backend logs and sidecar output in real-time. Unlike `console-monit
244
251
  | `--duration <ms>` | Auto-stop after N milliseconds |
245
252
  | `--json` | Output one JSON object per line |
246
253
 
254
+ ### Interaction Commands
255
+
256
+ Interaction commands dispatch DOM events inside the webview. They require the dev bridge (debug builds only).
257
+
258
+ | Command | Description |
259
+ |---------|-------------|
260
+ | `click <selector>` | Click a DOM element (`--double`, `--right`, `--wait <ms>`) |
261
+ | `type <selector> <text>` | Type text into an input (`--clear` to empty first) |
262
+ | `scroll` | Scroll window or element (`--by <px>`, `--to-top`, `--to-bottom`, `--into-view`) |
263
+ | `focus <selector>` | Focus a DOM element |
264
+ | `navigate <target>` | Navigate within the app (route path or URL) |
265
+ | `select <selector> [value]` | Select dropdown value or toggle checkbox (`--toggle`) |
266
+ | `invoke <command> [args-json]` | Invoke a Tauri IPC command |
267
+
268
+ ### Workflow Commands
269
+
270
+ | Command | Description |
271
+ |---------|-------------|
272
+ | `probe` | Discover running bridges, check health, list windows |
273
+ | `capture -o <dir>` | Full debug evidence bundle (screenshot, DOM, page state, storage, console errors, Rust logs) |
274
+ | `check` | Structured assertions (`--selector`, `--text`, `--eval`, `--no-errors`) — exits 0/1 |
275
+ | `store-inspect` | Inspect reactive store state (Pinia, Vue devtools, custom hooks) |
276
+
277
+ ### Targeting Flags
278
+
279
+ All bridge-dependent commands support:
280
+
281
+ | Flag | Description |
282
+ |------|-------------|
283
+ | `--port <n>` / `--token <s>` | Explicit bridge config (skips auto-discovery) |
284
+ | `--pid <n>` | Target a specific app by PID |
285
+ | `--window-label <label>` | Target a specific webview window (default: main) |
286
+
287
+ ## Don't know where to start? `diagnose`
288
+
289
+ When something's wrong and you're not sure why, run this first:
290
+
291
+ ```bash
292
+ tauri-agent-tools diagnose --config ./src-tauri -o ./diagnose-out
293
+ # → ./diagnose-out/summary.md (master report with "Next steps")
294
+ # → ./diagnose-out/forensics/ (Tier 1 bundle: log tail, panics, paths)
295
+ # → ./diagnose-out/bridge.json (Tier 2 bridge data when reachable)
296
+ ```
297
+
298
+ `diagnose` is a best-effort super-command. It works on dead apps. It layers bridge data on top when a dev bridge is reachable, degrades cleanly when not, and the master `summary.md` includes a "Next steps" section pointing at the right deeper command. Pass `--no-bridge` to skip the bridge phase entirely.
299
+
300
+ See [`docs/troubleshooting/decision-tree.md`](docs/troubleshooting/decision-tree.md) for the full symptom → command flowchart.
301
+
302
+ ## Bridge-extending diagnostics (new in 0.7, requires bridge v0.7.0+)
303
+
304
+ Four commands that talk to new dev-bridge endpoints. Each feature-detects via `GET /version` and surfaces an actionable upgrade error when the bridge is older than v0.7.0.
305
+
306
+ ```bash
307
+ # Tauri PID + registered sidecars
308
+ tauri-agent-tools process-tree --json
309
+
310
+ # Live capability audit (vs. config inspect which reads JSON files)
311
+ tauri-agent-tools capabilities audit --json
312
+
313
+ # Webview inspector URL or platform hint
314
+ tauri-agent-tools webview attach --print-url
315
+ tauri-agent-tools webview attach --open
316
+
317
+ # Quick "is this app sick" check — exits non-zero when unhealthy (CI-friendly)
318
+ tauri-agent-tools health --json
319
+ ```
320
+
321
+ > **Integrators upgrading from v0.6:** Re-copy `examples/tauri-bridge/src/dev_bridge.rs` into your app. `start_bridge` now returns a third tuple element (`SidecarRegistry`); pass it to `spawn_sidecar_monitored` so sidecars show up in `process-tree`/`health`. See `.agents/skills/tauri-bridge-setup/SKILL.md` for the full upgrade walkthrough.
322
+
323
+ ## Bridge-free diagnostics (new in 0.7)
324
+
325
+ Six commands that work **without** the dev bridge — for release builds, dead apps, and sidecar processes that the bridge can't reach.
326
+
327
+ ```bash
328
+ # Resolve Tauri 2's OS data/log/cache/config dirs from tauri.conf.json
329
+ tauri-agent-tools app-paths --config ./src-tauri --json
330
+ tauri-agent-tools app-paths --identifier com.example.app --platform all --exists
331
+
332
+ # Structured "tauri info --json" + capability/permission audit
333
+ tauri-agent-tools config inspect --config ./src-tauri --json
334
+ # Warnings: wildcard permissions, fs:allow-all, capability/Cargo.toml plugin mismatches
335
+
336
+ # Tail OS logs filtered to a Tauri bundle id (NDJSON envelopes)
337
+ tauri-agent-tools os-logs --identifier com.example.app --duration 5000
338
+ tauri-agent-tools os-logs --level error --source main --duration 30000
339
+
340
+ # Wrap a sidecar, frame its stdout as NDJSON, validate against a JSON Schema
341
+ tauri-agent-tools sidecar tap --schema ./schema.json --record /tmp/run.ndjson -- node my-sidecar.js
342
+ # Replay the recording deterministically — to stdout or into a fresh sidecar's stdin
343
+ tauri-agent-tools sidecar replay /tmp/run.ndjson --to-exec node my-sidecar.js --rate 100
344
+
345
+ # Forensic bundle for post-crash analysis (composes the above; works on dead apps)
346
+ tauri-agent-tools forensics --config ./src-tauri -o ./forensics-out
347
+ # → ./forensics-out/{summary.md,summary.json,project.json,app-log-tail.txt,live-os-log.ndjson}
348
+ ```
349
+
350
+ When to reach for them:
351
+ - **The bridge isn't responding** → start with `forensics`.
352
+ - **A sidecar is the suspect** → run it under `sidecar tap` instead of under Tauri.
353
+ - **You don't have source on hand, just a bundle id** → `app-paths --identifier com.example.app`.
354
+
247
355
  ## How It Works
248
356
 
249
357
  ```
@@ -274,14 +382,13 @@ The crop accounts for window decoration (title bar, borders) by comparing `windo
274
382
 
275
383
  ## Design Decisions
276
384
 
277
- ### Why no write operations
385
+ ### Inspection is read-only, interaction is debug-only
278
386
 
279
- All commands are read-only. We don't inject clicks, keystrokes, scroll events, or any input into the Tauri webview. Reasons:
387
+ Inspection commands (screenshot, dom, eval, storage, etc.) are strictly read-only — they never modify app state. Interaction commands (click, type, scroll, focus, navigate, select, invoke) use eval-based DOM event dispatch and **only work with the dev bridge** (debug builds). Native input injection (xdotool, Accessibility API) is deliberately avoided:
280
388
 
281
- - **Native input injection is risky.** X11 input injection (e.g. via `xdotool`) operates system-wide, not per-window — it can grab the mouse cursor and require a hard reboot to recover.
282
- - **Simulated events don't work.** `dispatchEvent()` creates events with `isTrusted: false`. Frameworks (React, Vue, Angular) and browsers reject untrusted events for security-sensitive operations.
283
- - **Input injection is fragile across platforms.** X11 (`xdotool`), Wayland (no global input protocol by design), and macOS (requires Accessibility permission + sandbox restrictions) each have different security models. A cross-platform injection layer would be unreliable.
284
- - **Read-only is a safer contract for dev tool automation.** Tools that can only observe cannot corrupt application state, trigger unintended side effects, or create security vulnerabilities in CI pipelines.
389
+ - **Native input is system-wide and risky.** X11 injection operates globally, not per-window — it can grab the cursor and require a hard reboot.
390
+ - **Eval-based dispatch is per-window and sandboxed.** Interaction commands dispatch DOM events inside the webview via the bridge. They can't affect other apps or the OS.
391
+ - **Debug-only by design.** The bridge is compiled out of release builds (`cfg!(debug_assertions)`), so interaction commands cannot run against production apps.
285
392
 
286
393
  ### Why no MCP server mode
287
394
 
@@ -294,11 +401,12 @@ This tool is a CLI that runs commands and exits — not a persistent MCP server.
294
401
 
295
402
  ## Safety Guarantees
296
403
 
297
- - **No input injection** — no mouse moves, clicks, keystrokes, or cursor changes
404
+ - **No native input injection** — no xdotool type/mousemove, no Accessibility API sends. Interaction commands use eval-based DOM dispatch inside the webview only.
298
405
  - **No xcap crate** — uses `xdotool` + ImageMagick (read-only X11 operations)
299
406
  - **No daemon** — CLI runs and exits, no background processes
300
407
  - **No `.mcp.json`** — never auto-starts
301
- - **All OS interactions read-only** — `xdotool search`, `getwindowgeometry`, `import -window`
408
+ - **Inspection commands are read-only** — `xdotool search`, `getwindowgeometry`, `import -window`
409
+ - **Interaction commands are debug-only** — require the dev bridge, compiled out of release builds
302
410
  - **Token authenticated bridge** — random 32-char token, localhost-only
303
411
  - **`execFile` (array args)** — never `exec` (shell string), prevents command injection
304
412
  - **Window ID validated** — must match `/^\d+$/`
@@ -309,7 +417,7 @@ This package ships [Agent Skills](https://agentskills.io) so AI coding agents ca
309
417
 
310
418
  | Skill | Description |
311
419
  |-------|-------------|
312
- | `tauri-agent-tools` | Using all 14 CLI commands to inspect Tauri apps |
420
+ | `tauri-agent-tools` | Using all 36 CLI commands to inspect and interact with Tauri apps |
313
421
  | `tauri-bridge-setup` | Adding the Rust dev bridge to a Tauri project |
314
422
 
315
423
  <details>
@@ -363,7 +471,7 @@ Full documentation is available at the [docs site](https://cesarandreslopez.gith
363
471
  - [Installation](https://cesarandreslopez.github.io/tauri-agent-tools/getting-started/installation/) — system requirements and setup
364
472
  - [Quick Start](https://cesarandreslopez.github.io/tauri-agent-tools/getting-started/quick-start/) — get running in 5 minutes
365
473
  - [Bridge Setup](https://cesarandreslopez.github.io/tauri-agent-tools/getting-started/bridge-setup/) — integrate the Rust bridge into your Tauri app
366
- - [Command Reference](https://cesarandreslopez.github.io/tauri-agent-tools/commands/) — all 14 commands with examples
474
+ - [Command Reference](https://cesarandreslopez.github.io/tauri-agent-tools/commands/) — all 36 commands with examples
367
475
  - [Platform Support](https://cesarandreslopez.github.io/tauri-agent-tools/platform-support/) — X11, Wayland, macOS details
368
476
  - [Architecture](https://cesarandreslopez.github.io/tauri-agent-tools/architecture/overview/) — how it works under the hood
369
477
 
@@ -1,10 +1,15 @@
1
1
  import type { BridgeConfig } from '../schemas/bridge.js';
2
- import type { ElementRect, RustLogEntry } from '../schemas/bridge.js';
2
+ import type { ElementRect, RustLogEntry, DescribeResponse, VersionResponse, ProcessResponse, CapabilitiesResponse, DevtoolsResponse, HealthResponse } from '../schemas/bridge.js';
3
3
  import type { A11yNode } from '../schemas/dom.js';
4
4
  export declare class BridgeClient {
5
5
  private baseUrl;
6
6
  private token;
7
- constructor(config: BridgeConfig);
7
+ private windowLabel;
8
+ /** Cached `/version` response. Populated by `requireEndpoint` on first call. */
9
+ private versionCache;
10
+ /** Set when `/version` is unreachable so we don't retry it for every call. */
11
+ private versionUnreachable;
12
+ constructor(config: BridgeConfig, windowLabel?: string);
8
13
  eval(js: string, timeout?: number): Promise<unknown>;
9
14
  getElementRect(selector: string): Promise<ElementRect | null>;
10
15
  getViewportSize(): Promise<{
@@ -15,4 +20,18 @@ export declare class BridgeClient {
15
20
  getAccessibilityTree(selector?: string, depth?: number): Promise<A11yNode | null>;
16
21
  fetchLogs(timeout?: number): Promise<RustLogEntry[]>;
17
22
  ping(): Promise<boolean>;
23
+ describe(): Promise<DescribeResponse | null>;
24
+ version(): Promise<VersionResponse | null>;
25
+ /**
26
+ * Verify the bridge exposes the requested endpoint. Caches the `/version`
27
+ * response so a CLI command that hits the bridge multiple times only pays
28
+ * one roundtrip for feature detection. Throws an actionable error when the
29
+ * bridge is too old, with a hint pointing integrators at the example.
30
+ */
31
+ requireEndpoint(path: string): Promise<void>;
32
+ process(): Promise<ProcessResponse>;
33
+ capabilities(): Promise<CapabilitiesResponse>;
34
+ devtools(): Promise<DevtoolsResponse>;
35
+ health(): Promise<HealthResponse>;
36
+ private postAuthed;
18
37
  }
@@ -1,17 +1,38 @@
1
- import { ElementRectSchema, ViewportSizeSchema, BridgeEvalResponseSchema, BridgeLogsResponseSchema, } from '../schemas/bridge.js';
1
+ import { ElementRectSchema, ViewportSizeSchema, BridgeEvalResponseSchema, BridgeLogsResponseSchema, DescribeResponseSchema, VersionResponseSchema, ProcessResponseSchema, CapabilitiesResponseSchema, DevtoolsResponseSchema, HealthResponseSchema, } from '../schemas/bridge.js';
2
2
  import { A11yNodeSchema } from '../schemas/dom.js';
3
+ /**
4
+ * Minimum bridge version supplying a given endpoint. Used by `requireEndpoint`
5
+ * to translate a missing-endpoint condition into an actionable error instead
6
+ * of an opaque 404.
7
+ */
8
+ const ENDPOINT_MIN_VERSION = {
9
+ '/process': '0.7.0',
10
+ '/capabilities': '0.7.0',
11
+ '/devtools': '0.7.0',
12
+ '/health': '0.7.0',
13
+ };
3
14
  export class BridgeClient {
4
15
  baseUrl;
5
16
  token;
6
- constructor(config) {
17
+ windowLabel;
18
+ /** Cached `/version` response. Populated by `requireEndpoint` on first call. */
19
+ versionCache = null;
20
+ /** Set when `/version` is unreachable so we don't retry it for every call. */
21
+ versionUnreachable = false;
22
+ constructor(config, windowLabel) {
7
23
  this.baseUrl = `http://127.0.0.1:${config.port}`;
8
24
  this.token = config.token;
25
+ this.windowLabel = windowLabel;
9
26
  }
10
27
  async eval(js, timeout = 5000) {
28
+ const body = { js, token: this.token };
29
+ if (this.windowLabel !== undefined) {
30
+ body.window = this.windowLabel;
31
+ }
11
32
  const res = await fetch(`${this.baseUrl}/eval`, {
12
33
  method: 'POST',
13
34
  headers: { 'Content-Type': 'application/json' },
14
- body: JSON.stringify({ js, token: this.token }),
35
+ body: JSON.stringify(body),
15
36
  signal: AbortSignal.timeout(timeout),
16
37
  });
17
38
  if (!res.ok) {
@@ -137,5 +158,100 @@ export class BridgeClient {
137
158
  return false;
138
159
  }
139
160
  }
161
+ async describe() {
162
+ try {
163
+ const res = await fetch(`${this.baseUrl}/describe`, {
164
+ method: 'POST',
165
+ headers: { 'Content-Type': 'application/json' },
166
+ body: JSON.stringify({ token: this.token }),
167
+ signal: AbortSignal.timeout(5000),
168
+ });
169
+ if (!res.ok)
170
+ return null;
171
+ return DescribeResponseSchema.parse(await res.json());
172
+ }
173
+ catch {
174
+ return null;
175
+ }
176
+ }
177
+ async version() {
178
+ try {
179
+ const res = await fetch(`${this.baseUrl}/version`, {
180
+ signal: AbortSignal.timeout(5000),
181
+ });
182
+ if (!res.ok)
183
+ return null;
184
+ return VersionResponseSchema.parse(await res.json());
185
+ }
186
+ catch {
187
+ return null;
188
+ }
189
+ }
190
+ /**
191
+ * Verify the bridge exposes the requested endpoint. Caches the `/version`
192
+ * response so a CLI command that hits the bridge multiple times only pays
193
+ * one roundtrip for feature detection. Throws an actionable error when the
194
+ * bridge is too old, with a hint pointing integrators at the example.
195
+ */
196
+ async requireEndpoint(path) {
197
+ if (this.versionUnreachable) {
198
+ throw new Error(`Bridge at ${this.baseUrl} did not respond to /version. The bridge may be ` +
199
+ `too old (pre-0.6.0) or not running. Confirm the dev server is up and try again.`);
200
+ }
201
+ if (this.versionCache === null) {
202
+ const v = await this.version();
203
+ if (v === null) {
204
+ this.versionUnreachable = true;
205
+ throw new Error(`Bridge at ${this.baseUrl} did not respond to /version. The bridge may be ` +
206
+ `too old (pre-0.6.0) or not running. Confirm the dev server is up and try again.`);
207
+ }
208
+ this.versionCache = v;
209
+ }
210
+ if (this.versionCache.endpoints.includes(path))
211
+ return;
212
+ const minVersion = ENDPOINT_MIN_VERSION[path];
213
+ const versionHint = minVersion
214
+ ? `requires bridge v${minVersion}+ (this app reports v${this.versionCache.version})`
215
+ : `is not supported by the running bridge (v${this.versionCache.version})`;
216
+ throw new Error(`${path} ${versionHint}. ` +
217
+ `Re-copy examples/tauri-bridge/src/dev_bridge.rs into your app and rebuild — ` +
218
+ `see rust-bridge/README.md.`);
219
+ }
220
+ async process() {
221
+ await this.requireEndpoint('/process');
222
+ const res = await this.postAuthed('/process');
223
+ return ProcessResponseSchema.parse(await res.json());
224
+ }
225
+ async capabilities() {
226
+ await this.requireEndpoint('/capabilities');
227
+ const res = await this.postAuthed('/capabilities');
228
+ return CapabilitiesResponseSchema.parse(await res.json());
229
+ }
230
+ async devtools() {
231
+ await this.requireEndpoint('/devtools');
232
+ const res = await this.postAuthed('/devtools');
233
+ return DevtoolsResponseSchema.parse(await res.json());
234
+ }
235
+ async health() {
236
+ await this.requireEndpoint('/health');
237
+ const res = await this.postAuthed('/health');
238
+ return HealthResponseSchema.parse(await res.json());
239
+ }
240
+ async postAuthed(path, timeout = 5000) {
241
+ const res = await fetch(`${this.baseUrl}${path}`, {
242
+ method: 'POST',
243
+ headers: { 'Content-Type': 'application/json' },
244
+ body: JSON.stringify({ token: this.token }),
245
+ signal: AbortSignal.timeout(timeout),
246
+ });
247
+ if (!res.ok) {
248
+ if (res.status === 401 || res.status === 403) {
249
+ throw new Error('Bridge authentication failed — check your token');
250
+ }
251
+ const text = await res.text().catch(() => '');
252
+ throw new Error(`Bridge error (${res.status}) on ${path}: ${text}`);
253
+ }
254
+ return res;
255
+ }
140
256
  }
141
257
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -23,6 +23,28 @@ import { registerMutations } from './commands/mutations.js';
23
23
  import { registerSnapshot } from './commands/snapshot.js';
24
24
  import { registerDiff } from './commands/diff.js';
25
25
  import { registerRustLogs } from './commands/rustLogs.js';
26
+ import { registerClick } from './commands/interact/click.js';
27
+ import { registerType } from './commands/interact/type.js';
28
+ import { registerScroll } from './commands/interact/scroll.js';
29
+ import { registerFocus } from './commands/interact/focus.js';
30
+ import { registerNavigate } from './commands/interact/navigate.js';
31
+ import { registerSelect } from './commands/interact/select.js';
32
+ import { registerInvoke } from './commands/invoke.js';
33
+ import { registerStoreInspect } from './commands/storeInspect.js';
34
+ import { registerCheck } from './commands/check.js';
35
+ import { registerProbe } from './commands/probe.js';
36
+ import { registerCapture } from './commands/capture.js';
37
+ import { registerAppPaths } from './commands/appPaths.js';
38
+ import { registerConfigInspect } from './commands/configInspect.js';
39
+ import { registerOsLogs } from './commands/osLogs.js';
40
+ import { registerSidecarTap } from './commands/sidecarTap.js';
41
+ import { registerSidecarReplay } from './commands/sidecarReplay.js';
42
+ import { registerForensics } from './commands/forensics.js';
43
+ import { registerProcessTree } from './commands/processTree.js';
44
+ import { registerCapabilitiesAudit } from './commands/capabilitiesAudit.js';
45
+ import { registerWebviewAttach } from './commands/webviewAttach.js';
46
+ import { registerHealth } from './commands/health.js';
47
+ import { registerDiagnose } from './commands/diagnose.js';
26
48
  const __dirname = dirname(fileURLToPath(import.meta.url));
27
49
  const pkg = PackageJsonSchema.parse(JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf-8')));
28
50
  const program = new Command()
@@ -61,6 +83,31 @@ registerMutations(program);
61
83
  registerSnapshot(program, getAdapter);
62
84
  registerDiff(program);
63
85
  registerRustLogs(program);
86
+ registerClick(program);
87
+ registerType(program);
88
+ registerScroll(program);
89
+ registerFocus(program);
90
+ registerNavigate(program);
91
+ registerSelect(program);
92
+ registerInvoke(program);
93
+ registerStoreInspect(program);
94
+ registerCheck(program);
95
+ registerProbe(program);
96
+ registerCapture(program, getAdapter);
97
+ // ── Bridge-free diagnostics (Tier 1) ─────────────────────────────────────────
98
+ registerAppPaths(program);
99
+ registerConfigInspect(program);
100
+ registerOsLogs(program);
101
+ registerSidecarTap(program);
102
+ registerSidecarReplay(program);
103
+ registerForensics(program);
104
+ // ── Bridge-extending diagnostics (Tier 2 — requires bridge v0.7.0+) ──────────
105
+ registerProcessTree(program);
106
+ registerCapabilitiesAudit(program);
107
+ registerWebviewAttach(program);
108
+ registerHealth(program);
109
+ // ── Tier 3: super-command (composes Tier 1 + Tier 2) ─────────────────────────
110
+ registerDiagnose(program);
64
111
  program.parseAsync().catch((err) => {
65
112
  console.error(err instanceof Error ? err.message : String(err));
66
113
  process.exitCode = 1;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAppPaths(program: Command): void;
@@ -0,0 +1,97 @@
1
+ import { Command } from 'commander';
2
+ import { existsSync, statSync } from 'node:fs';
3
+ import { currentPlatform, resolveTauriPaths, resolveTauriProject } from '../util/tauriConfig.js';
4
+ export function registerAppPaths(program) {
5
+ const cmd = new Command('app-paths')
6
+ .description('Resolve a Tauri 2 app\'s OS data/log/cache/config directories')
7
+ .option('--config <path>', 'Path to tauri.conf.json (or its directory). Auto-detected if omitted.')
8
+ .option('--identifier <id>', 'Bundle identifier override (skips tauri.conf.json identifier lookup)')
9
+ .option('--platform <name>', 'Platform to resolve for: darwin | linux | win32 | all (default: current host)')
10
+ .option('--exists', 'Annotate each path with whether it currently exists on disk')
11
+ .option('--json', 'Output as JSON')
12
+ .action(async (opts) => {
13
+ const platform = (opts.platform ?? currentPlatform()).toLowerCase();
14
+ if (!['darwin', 'linux', 'win32', 'all'].includes(platform)) {
15
+ throw new Error(`Invalid --platform: ${opts.platform}. Expected one of: darwin, linux, win32, all.`);
16
+ }
17
+ // Identifier-only mode: skip tauri.conf.json discovery entirely. Useful when
18
+ // the user only wants to compute paths from a known bundle id (e.g., a release
19
+ // build with no source tree on disk).
20
+ if (opts.identifier && !opts.config) {
21
+ const allPaths = resolveTauriPaths(opts.identifier);
22
+ emit({
23
+ identifier: opts.identifier,
24
+ productName: null,
25
+ configPath: null,
26
+ platform: platform === 'all' ? null : platform,
27
+ paths: platform === 'all'
28
+ ? allPaths
29
+ : { [platform]: allPaths[platform] },
30
+ }, opts);
31
+ return;
32
+ }
33
+ const resolved = await resolveTauriProject({
34
+ configPath: opts.config,
35
+ identifierOverride: opts.identifier,
36
+ });
37
+ const paths = platform === 'all'
38
+ ? resolved.paths
39
+ : { [platform]: resolved.paths[platform] };
40
+ emit({
41
+ identifier: resolved.identifier,
42
+ productName: resolved.productName,
43
+ configPath: resolved.configPath,
44
+ platform: platform === 'all' ? null : platform,
45
+ paths,
46
+ }, opts);
47
+ });
48
+ program.addCommand(cmd);
49
+ }
50
+ function emit(out, opts) {
51
+ if (opts.exists) {
52
+ out = annotateExistence(out);
53
+ }
54
+ if (opts.json) {
55
+ console.log(JSON.stringify(out, null, 2));
56
+ return;
57
+ }
58
+ console.log(`Identifier: ${out.identifier}`);
59
+ if (out.productName)
60
+ console.log(`Product name: ${out.productName}`);
61
+ if (out.configPath)
62
+ console.log(`Config: ${out.configPath}`);
63
+ for (const [plat, pathSet] of Object.entries(out.paths)) {
64
+ console.log(`\n[${plat}]`);
65
+ for (const [key, value] of Object.entries(pathSet)) {
66
+ console.log(` ${key.padEnd(16)} ${value}`);
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * Add `__exists` annotations alongside each path string. Only checks paths that
72
+ * point at the *current* platform (it makes no sense to test if a Windows path
73
+ * exists from inside macOS).
74
+ */
75
+ function annotateExistence(out) {
76
+ const current = currentPlatform();
77
+ const annotated = {};
78
+ for (const [plat, pathSet] of Object.entries(out.paths)) {
79
+ if (plat !== current) {
80
+ annotated[plat] = pathSet;
81
+ continue;
82
+ }
83
+ const inflated = {};
84
+ for (const [key, value] of Object.entries(pathSet)) {
85
+ const exists = existsSync(value);
86
+ const detail = exists
87
+ ? statSync(value).isDirectory()
88
+ ? ' (dir exists)'
89
+ : ' (file exists)'
90
+ : ' (missing)';
91
+ inflated[key] = `${value}${detail}`;
92
+ }
93
+ annotated[plat] = inflated;
94
+ }
95
+ return { ...out, paths: annotated };
96
+ }
97
+ //# sourceMappingURL=appPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPaths.js","sourceRoot":"","sources":["../../src/commands/appPaths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCapabilitiesAudit(program: Command): void;