tauri-agent-tools 0.5.0 → 0.5.1

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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: tauri-agent-tools
3
3
  description: CLI for inspecting Tauri desktop apps — DOM queries, screenshots, IPC/console monitoring, storage, and page state
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  tags: [tauri, desktop, debugging, screenshot, dom, inspection, diff, mutations, snapshot]
6
6
  ---
7
7
 
package/README.md CHANGED
@@ -257,7 +257,7 @@ screenshot --selector ".toolbar" --title "My App"
257
257
  ├─► Compute crop region:
258
258
  │ element rect from bridge + viewport offset (outerHeight - innerHeight)
259
259
 
260
- └─► convert png:- -crop WxH+X+Y +repage png:- (crop to element)
260
+ └─► ImageMagick crop: png:- -crop WxH+X+Y +repage png:-
261
261
  ```
262
262
 
263
263
  The crop accounts for window decoration (title bar, borders) by comparing `window.innerHeight` from the bridge with the actual window height from `xdotool`.
@@ -295,7 +295,7 @@ This tool is a CLI that runs commands and exits — not a persistent MCP server.
295
295
  ## Safety Guarantees
296
296
 
297
297
  - **No input injection** — no mouse moves, clicks, keystrokes, or cursor changes
298
- - **No xcap crate** — uses `xdotool` + ImageMagick `import` (read-only X11 operations)
298
+ - **No xcap crate** — uses `xdotool` + ImageMagick (read-only X11 operations)
299
299
  - **No daemon** — CLI runs and exits, no background processes
300
300
  - **No `.mcp.json`** — never auto-starts
301
301
  - **All OS interactions read-only** — `xdotool search`, `getwindowgeometry`, `import -window`
@@ -2,6 +2,7 @@ import { stat } from 'node:fs/promises';
2
2
  import { Command } from 'commander';
3
3
  import { z } from 'zod';
4
4
  import { exec } from '../util/exec.js';
5
+ import { magickCommand } from '../util/magick.js';
5
6
  function formatResult(result) {
6
7
  const lines = [
7
8
  `Pixels different: ${result.pixelsDifferent}`,
@@ -34,7 +35,8 @@ export function registerDiff(program) {
34
35
  // Get image dimensions for total pixel count
35
36
  let totalPixels = 0;
36
37
  try {
37
- const { stdout } = await exec('identify', ['-format', '%w %h', image1]);
38
+ const identifyCmd = await magickCommand('identify');
39
+ const { stdout } = await exec(identifyCmd.bin, [...identifyCmd.args, '-format', '%w %h', image1]);
38
40
  const [w, h] = z.tuple([z.number().int().positive(), z.number().int().positive()]).parse(stdout.toString().trim().split(' ').map(Number));
39
41
  totalPixels = w * h;
40
42
  }
@@ -48,7 +50,9 @@ export function registerDiff(program) {
48
50
  let pixelsDifferent = 0;
49
51
  try {
50
52
  // compare exits with code 1 when images differ (not an error)
51
- const { stderr } = await exec('compare', [
53
+ const compareCmd = await magickCommand('compare');
54
+ const { stderr } = await exec(compareCmd.bin, [
55
+ ...compareCmd.args,
52
56
  '-metric', 'AE',
53
57
  image1,
54
58
  image2,
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -22,50 +22,78 @@ function commandExists(cmd) {
22
22
  execFile(which, [cmd], (error) => resolve(!error));
23
23
  });
24
24
  }
25
+ async function checkImageMagick(installHint) {
26
+ // ImageMagick v7 uses a unified `magick` binary; v6 has standalone commands
27
+ const hasMagick = await commandExists('magick');
28
+ if (hasMagick) {
29
+ return { name: 'magick (ImageMagick)', available: true, installHint };
30
+ }
31
+ const hasConvert = await commandExists('convert');
32
+ return { name: 'magick (ImageMagick)', available: hasConvert, installHint };
33
+ }
25
34
  export async function checkX11Tools() {
26
- const tools = [
27
- { name: 'xdotool', installHint: 'sudo apt install xdotool' },
28
- { name: 'import', installHint: 'sudo apt install imagemagick' },
29
- { name: 'convert', installHint: 'sudo apt install imagemagick' },
30
- ];
31
- return Promise.all(tools.map(async (t) => ({
32
- ...t,
33
- available: await commandExists(t.name),
34
- })));
35
+ const [xdotool, magick] = await Promise.all([
36
+ commandExists('xdotool').then((available) => ({
37
+ name: 'xdotool',
38
+ available,
39
+ installHint: 'sudo apt install xdotool',
40
+ })),
41
+ checkImageMagick('sudo apt install imagemagick'),
42
+ ]);
43
+ return [xdotool, magick];
35
44
  }
36
45
  export async function checkSwayTools() {
37
- const tools = [
38
- { name: 'swaymsg', installHint: 'sudo apt install sway' },
39
- { name: 'grim', installHint: 'sudo apt install grim' },
40
- { name: 'convert', installHint: 'sudo apt install imagemagick' },
41
- ];
42
- return Promise.all(tools.map(async (t) => ({
43
- ...t,
44
- available: await commandExists(t.name),
45
- })));
46
+ const [swaymsg, grim, magick] = await Promise.all([
47
+ commandExists('swaymsg').then((available) => ({
48
+ name: 'swaymsg',
49
+ available,
50
+ installHint: 'sudo apt install sway',
51
+ })),
52
+ commandExists('grim').then((available) => ({
53
+ name: 'grim',
54
+ available,
55
+ installHint: 'sudo apt install grim',
56
+ })),
57
+ checkImageMagick('sudo apt install imagemagick'),
58
+ ]);
59
+ return [swaymsg, grim, magick];
46
60
  }
47
61
  export async function checkHyprlandTools() {
48
- const tools = [
49
- { name: 'hyprctl', installHint: 'Included with Hyprland' },
50
- { name: 'grim', installHint: 'sudo apt install grim' },
51
- { name: 'convert', installHint: 'sudo apt install imagemagick' },
52
- ];
53
- return Promise.all(tools.map(async (t) => ({
54
- ...t,
55
- available: await commandExists(t.name),
56
- })));
62
+ const [hyprctl, grim, magick] = await Promise.all([
63
+ commandExists('hyprctl').then((available) => ({
64
+ name: 'hyprctl',
65
+ available,
66
+ installHint: 'Included with Hyprland',
67
+ })),
68
+ commandExists('grim').then((available) => ({
69
+ name: 'grim',
70
+ available,
71
+ installHint: 'sudo apt install grim',
72
+ })),
73
+ checkImageMagick('sudo apt install imagemagick'),
74
+ ]);
75
+ return [hyprctl, grim, magick];
57
76
  }
58
77
  export async function checkMacOSTools() {
59
- const tools = [
60
- { name: 'screencapture', installHint: 'Built-in on macOS' },
61
- { name: 'osascript', installHint: 'Built-in on macOS' },
62
- { name: 'sips', installHint: 'Built-in on macOS' },
63
- { name: 'convert', installHint: 'brew install imagemagick' },
64
- ];
65
- return Promise.all(tools.map(async (t) => ({
66
- ...t,
67
- available: await commandExists(t.name),
68
- })));
78
+ const [screencapture, osascript, sips, magick] = await Promise.all([
79
+ commandExists('screencapture').then((available) => ({
80
+ name: 'screencapture',
81
+ available,
82
+ installHint: 'Built-in on macOS',
83
+ })),
84
+ commandExists('osascript').then((available) => ({
85
+ name: 'osascript',
86
+ available,
87
+ installHint: 'Built-in on macOS',
88
+ })),
89
+ commandExists('sips').then((available) => ({
90
+ name: 'sips',
91
+ available,
92
+ installHint: 'Built-in on macOS',
93
+ })),
94
+ checkImageMagick('brew install imagemagick'),
95
+ ]);
96
+ return [screencapture, osascript, sips, magick];
69
97
  }
70
98
  export async function ensureTools(displayServer) {
71
99
  let checks;
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/platform/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAEnD,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC;IAC9F,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YAAE,OAAO,cAAc,CAAC;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;YAAE,OAAO,kBAAkB,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,KAAK,GAAiD;QAC1D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE;QAC5D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC/D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE;KACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,SAAS,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAiD;QAC1D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACzD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACtD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE;KACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,SAAS,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,KAAK,GAAiD;QAC1D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wBAAwB,EAAE;QAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACtD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE;KACjE,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,SAAS,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,GAAiD;QAC1D,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE;QACvD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE;QAClD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,0BAA0B,EAAE;KAC7D,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC;QACJ,SAAS,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;KACvC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,aAA4B;IAC5D,IAAI,MAAmB,CAAC;IACxB,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACnC,CAAC;SAAM,IAAI,aAAa,KAAK,cAAc,EAAE,CAAC;QAC5C,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,IAAI,aAAa,KAAK,kBAAkB,EAAE,CAAC;QAChD,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACtC,CAAC;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,+CAA+C;QAC/C,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/platform/detect.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { exec, validateWindowId } from '../util/exec.js';
2
+ import { magickCommand } from '../util/magick.js';
2
3
  function parseShellVar(output, key, fallback) {
3
4
  const match = output.match(new RegExp(`${key}=(\\d+)`));
4
5
  if (!match) {
@@ -20,7 +21,8 @@ export class X11Adapter {
20
21
  async captureWindow(windowId, format) {
21
22
  validateWindowId(windowId);
22
23
  const fmt = format === 'jpg' ? 'jpg' : 'png';
23
- const { stdout } = await exec('import', ['-window', windowId, `${fmt}:-`]);
24
+ const cmd = await magickCommand('import');
25
+ const { stdout } = await exec(cmd.bin, [...cmd.args, '-window', windowId, `${fmt}:-`]);
24
26
  return stdout;
25
27
  }
26
28
  async getWindowGeometry(windowId) {
@@ -1 +1 @@
1
- {"version":3,"file":"x11.js","sourceRoot":"","sources":["../../src/platform/x11.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x11.js","sourceRoot":"","sources":["../../src/platform/x11.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,16 @@
1
1
  import { exec } from './exec.js';
2
+ import { magickCommand } from './magick.js';
2
3
  export async function cropImage(buffer, rect, format) {
3
4
  const fmt = format === 'jpg' ? 'jpg' : 'png';
4
5
  const crop = `${Math.round(rect.width)}x${Math.round(rect.height)}+${Math.round(rect.x)}+${Math.round(rect.y)}`;
5
- const { stdout } = await exec('convert', [`${fmt}:-`, '-crop', crop, '+repage', `${fmt}:-`], { stdin: buffer });
6
+ const cmd = await magickCommand('convert');
7
+ const { stdout } = await exec(cmd.bin, [...cmd.args, `${fmt}:-`, '-crop', crop, '+repage', `${fmt}:-`], { stdin: buffer });
6
8
  return stdout;
7
9
  }
8
10
  export async function resizeImage(buffer, maxWidth, format) {
9
11
  const fmt = format === 'jpg' ? 'jpg' : 'png';
10
- const { stdout } = await exec('convert', [`${fmt}:-`, '-resize', `${maxWidth}x\\>`, `${fmt}:-`], { stdin: buffer });
12
+ const cmd = await magickCommand('convert');
13
+ const { stdout } = await exec(cmd.bin, [...cmd.args, `${fmt}:-`, '-resize', `${maxWidth}x>`, `${fmt}:-`], { stdin: buffer });
11
14
  return stdout;
12
15
  }
13
16
  export function computeCropRect(elementRect, viewport, windowGeometry) {
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/util/image.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,IAAiB,EACjB,MAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,SAAS,EACT,CAAC,GAAG,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,EAClD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,QAAgB,EAChB,MAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,SAAS,EACT,CAAC,GAAG,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,EACtD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAAwB,EACxB,QAA2C,EAC3C,cAAiD;IAEjD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACvD,OAAO;QACL,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QACzB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QACzB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/util/image.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,IAAiB,EACjB,MAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,GAAG,CAAC,GAAG,EACP,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,EAC/D,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,QAAgB,EAChB,MAAmB;IAEnB,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,GAAG,CAAC,GAAG,EACP,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,EACjE,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAAwB,EACxB,QAA2C,EAC3C,cAAiD;IAEjD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACvD,OAAO;QACL,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QACzB,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QACzB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ImageMagick command resolver.
3
+ *
4
+ * v6: standalone commands — `convert`, `import`, `identify`, `compare`
5
+ * v7: unified binary — `magick convert`, `magick import`, etc.
6
+ * (`magick` alone acts as `convert`)
7
+ */
8
+ export interface MagickCommand {
9
+ bin: string;
10
+ args: string[];
11
+ }
12
+ export declare function detectMagickVersion(): Promise<6 | 7>;
13
+ /**
14
+ * Resolve an ImageMagick subcommand to the correct bin + args prefix.
15
+ *
16
+ * v7: `magick` alone replaces `convert`; other subcommands use `magick <sub>`
17
+ * v6: standalone commands — `convert`, `import`, `identify`, `compare`
18
+ */
19
+ export declare function magickCommand(subcommand: 'convert' | 'import' | 'identify' | 'compare'): Promise<MagickCommand>;
20
+ /** Reset cached version (for testing). */
21
+ export declare function _resetMagickCache(): void;
@@ -0,0 +1,46 @@
1
+ import { execFile } from 'node:child_process';
2
+ let cachedVersion = null;
3
+ function commandExists(cmd) {
4
+ const which = process.platform === 'win32' ? 'where' : 'which';
5
+ return new Promise((resolve) => {
6
+ execFile(which, [cmd], (error) => resolve(!error));
7
+ });
8
+ }
9
+ export async function detectMagickVersion() {
10
+ if (cachedVersion !== null)
11
+ return cachedVersion;
12
+ if (await commandExists('magick')) {
13
+ cachedVersion = 7;
14
+ }
15
+ else if (await commandExists('convert')) {
16
+ cachedVersion = 6;
17
+ }
18
+ else {
19
+ throw new Error('ImageMagick not found. Install it:\n' +
20
+ ' Linux: sudo apt install imagemagick (or your distro equivalent)\n' +
21
+ ' macOS: brew install imagemagick');
22
+ }
23
+ return cachedVersion;
24
+ }
25
+ /**
26
+ * Resolve an ImageMagick subcommand to the correct bin + args prefix.
27
+ *
28
+ * v7: `magick` alone replaces `convert`; other subcommands use `magick <sub>`
29
+ * v6: standalone commands — `convert`, `import`, `identify`, `compare`
30
+ */
31
+ export async function magickCommand(subcommand) {
32
+ const version = await detectMagickVersion();
33
+ if (version === 7) {
34
+ // In v7, `magick` alone IS convert; other tools need the subcommand
35
+ if (subcommand === 'convert') {
36
+ return { bin: 'magick', args: [] };
37
+ }
38
+ return { bin: 'magick', args: [subcommand] };
39
+ }
40
+ return { bin: subcommand, args: [] };
41
+ }
42
+ /** Reset cached version (for testing). */
43
+ export function _resetMagickCache() {
44
+ cachedVersion = null;
45
+ }
46
+ //# sourceMappingURL=magick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magick.js","sourceRoot":"","sources":["../../src/util/magick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAe9C,IAAI,aAAa,GAAiB,IAAI,CAAC;AAEvC,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,aAAa,CAAC;IAEjD,IAAI,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,aAAa,GAAG,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,sCAAsC;YACpC,uEAAuE;YACvE,oCAAoC,CACvC,CAAC;IACJ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAyD;IAEzD,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAE5C,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,oEAAoE;QACpE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,iBAAiB;IAC/B,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tauri-agent-tools",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Agent-driven inspection toolkit for Tauri desktop apps",
5
5
  "type": "module",
6
6
  "bin": {