tauri-agent-tools 0.9.2 → 0.9.3
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.
- package/.agents/skills/tauri-agent-tools/SKILL.md +25 -11
- package/.agents/skills/tauri-bridge-setup/SKILL.md +4 -3
- package/.agents/skills/tauri-debug-quickstart/SKILL.md +3 -1
- package/AGENTS.md +7 -3
- package/README.md +31 -12
- package/dist/bridge/client.d.ts +1 -0
- package/dist/bridge/client.js +2 -0
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/evaluate.d.ts +11 -0
- package/dist/bridge/evaluate.js +33 -0
- package/dist/bridge/evaluate.js.map +1 -0
- package/dist/bridge/logReader.d.ts +27 -0
- package/dist/bridge/logReader.js +26 -0
- package/dist/bridge/logReader.js.map +1 -0
- package/dist/bridge/observers.d.ts +11 -0
- package/dist/bridge/observers.js +195 -0
- package/dist/bridge/observers.js.map +1 -0
- package/dist/cli.js +28 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/bundle.js +122 -101
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/capture.d.ts +3 -3
- package/dist/commands/capture.js +167 -141
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/check.js +44 -59
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/consoleMonitor.js +18 -85
- package/dist/commands/consoleMonitor.js.map +1 -1
- package/dist/commands/diagnose.js +4 -32
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/diff.js +28 -38
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/dom.js +2 -2
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/eval.js +11 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/forensics.js +1 -7
- package/dist/commands/forensics.js.map +1 -1
- package/dist/commands/info.d.ts +2 -2
- package/dist/commands/info.js +3 -1
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/interact/click.js +14 -44
- package/dist/commands/interact/click.js.map +1 -1
- package/dist/commands/interact/scroll.js +6 -0
- package/dist/commands/interact/scroll.js.map +1 -1
- package/dist/commands/ipcMonitor.d.ts +3 -3
- package/dist/commands/ipcMonitor.js +26 -96
- package/dist/commands/ipcMonitor.js.map +1 -1
- package/dist/commands/listWindows.d.ts +2 -2
- package/dist/commands/listWindows.js.map +1 -1
- package/dist/commands/logs.d.ts +4 -27
- package/dist/commands/logs.js +12 -41
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mutations.js +20 -101
- package/dist/commands/mutations.js.map +1 -1
- package/dist/commands/osLogs.js +2 -5
- package/dist/commands/osLogs.js.map +1 -1
- package/dist/commands/probe.js +18 -16
- package/dist/commands/probe.js.map +1 -1
- package/dist/commands/rustLogs.js +23 -43
- package/dist/commands/rustLogs.js.map +1 -1
- package/dist/commands/screenshot.d.ts +2 -2
- package/dist/commands/screenshot.js +7 -4
- package/dist/commands/screenshot.js.map +1 -1
- package/dist/commands/shared.d.ts +4 -1
- package/dist/commands/shared.js +34 -4
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/sidecarReplay.js +4 -0
- package/dist/commands/sidecarReplay.js.map +1 -1
- package/dist/commands/snapshot.d.ts +2 -2
- package/dist/commands/snapshot.js +4 -4
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/storeInspect.js +2 -2
- package/dist/commands/storeInspect.js.map +1 -1
- package/dist/commands/wait.d.ts +2 -2
- package/dist/commands/wait.js +42 -57
- package/dist/commands/wait.js.map +1 -1
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/platform/detect.d.ts +2 -2
- package/dist/platform/detect.js +11 -2
- package/dist/platform/detect.js.map +1 -1
- package/dist/platform/x11.d.ts +1 -0
- package/dist/platform/x11.js +16 -5
- package/dist/platform/x11.js.map +1 -1
- package/dist/schemas/commands.d.ts +6 -0
- package/dist/schemas/commands.js +2 -0
- package/dist/schemas/commands.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/util/exec.d.ts +6 -0
- package/dist/util/exec.js +13 -1
- package/dist/util/exec.js.map +1 -1
- package/dist/util/incidentFiles.d.ts +5 -0
- package/dist/util/incidentFiles.js +61 -0
- package/dist/util/incidentFiles.js.map +1 -0
- package/dist/util/monitor.d.ts +11 -0
- package/dist/util/monitor.js +42 -0
- package/dist/util/monitor.js.map +1 -0
- package/dist/util/poll.d.ts +2 -0
- package/dist/util/poll.js +28 -0
- package/dist/util/poll.js.map +1 -0
- package/dist/util/redactText.d.ts +5 -2
- package/dist/util/redactText.js +44 -11
- package/dist/util/redactText.js.map +1 -1
- package/dist/util/tauriConfig.js +15 -18
- package/dist/util/tauriConfig.js.map +1 -1
- package/examples/tauri-bridge/Cargo.lock +4742 -0
- package/package.json +7 -3
- package/rust-bridge/README.md +7 -1
package/dist/commands/capture.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { writeFile, mkdir } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
-
import { addBridgeOptions, resolveBridge, resolveWindowId,
|
|
4
|
+
import { addBridgeOptions, resolveBridge, resolveWindowId, parseNonNegativeInt } from './shared.js';
|
|
5
5
|
import { buildSerializerScript } from './dom.js';
|
|
6
6
|
import { computeCropRect, cropImage } from '../util/image.js';
|
|
7
7
|
import { DomNodeSchema } from '../schemas/dom.js';
|
|
8
8
|
import { PageStateSchema, SnapshotStorageResultSchema } from '../schemas/commands.js';
|
|
9
|
+
import { consoleObserver, readObserver, closeObserver } from '../bridge/observers.js';
|
|
10
|
+
import { ConsoleEntrySchema } from '../schemas/commands.js';
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { monitorFor, createSignalScope } from '../util/monitor.js';
|
|
13
|
+
import { readRustLogs } from '../bridge/logReader.js';
|
|
14
|
+
import { evaluateExpression } from '../bridge/evaluate.js';
|
|
9
15
|
const PAGE_STATE_SCRIPT = `(() => {
|
|
10
16
|
return JSON.stringify({
|
|
11
17
|
url: window.location.href,
|
|
@@ -21,173 +27,193 @@ const STORAGE_SCRIPT = `(() => {
|
|
|
21
27
|
var session = Object.keys(sessionStorage).map(function(k) { return { key: k, value: sessionStorage.getItem(k) }; });
|
|
22
28
|
return JSON.stringify({ localStorage: local, sessionStorage: session });
|
|
23
29
|
})()`;
|
|
24
|
-
const INJECT_CONSOLE_ERROR_SCRIPT = `(() => {
|
|
25
|
-
if (!window.__captureErrors) {
|
|
26
|
-
window.__captureErrors = [];
|
|
27
|
-
const orig = console.error.bind(console);
|
|
28
|
-
console.error = function(...args) {
|
|
29
|
-
window.__captureErrors.push({ ts: Date.now(), msg: args.map(String).join(' ') });
|
|
30
|
-
orig(...args);
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return 'ok';
|
|
34
|
-
})()`;
|
|
35
|
-
const DRAIN_CONSOLE_ERRORS_SCRIPT = `(() => {
|
|
36
|
-
var errs = window.__captureErrors || [];
|
|
37
|
-
window.__captureErrors = [];
|
|
38
|
-
return JSON.stringify(errs);
|
|
39
|
-
})()`;
|
|
40
30
|
export async function captureToDir(bridge, adapter, opts) {
|
|
41
31
|
const outDir = opts.output;
|
|
42
32
|
const format = 'png';
|
|
43
33
|
const files = {};
|
|
44
34
|
// 1. Create output directory
|
|
45
35
|
await mkdir(outDir, { recursive: true });
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let capturedViewport;
|
|
57
|
-
try {
|
|
58
|
-
const raw = await bridge.eval(PAGE_STATE_SCRIPT);
|
|
59
|
-
const parsed = PageStateSchema.parse(JSON.parse(String(raw)));
|
|
60
|
-
capturedUrl = parsed.url;
|
|
61
|
-
capturedTitle = parsed.title;
|
|
62
|
-
capturedViewport = parsed.viewport;
|
|
63
|
-
const path = join(outDir, 'page-state.json');
|
|
64
|
-
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
65
|
-
files['page-state.json'] = path;
|
|
66
|
-
}
|
|
67
|
-
catch (err) {
|
|
68
|
-
files['page-state.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
69
|
-
}
|
|
70
|
-
// 4. Screenshot — save to screenshot.png
|
|
36
|
+
const scripts = consoleObserver();
|
|
37
|
+
const signals = createSignalScope();
|
|
38
|
+
const assertCollecting = () => {
|
|
39
|
+
if (signals.signal.aborted)
|
|
40
|
+
throw new Error(`Capture interrupted by ${String(signals.signal.reason)}`);
|
|
41
|
+
};
|
|
42
|
+
let observerError;
|
|
43
|
+
let closed = false;
|
|
44
|
+
const warnings = [];
|
|
45
|
+
const warn = (message) => { warnings.push(message); console.error(message); };
|
|
71
46
|
try {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
throw new Error(`Element not found: ${opts.selector}`);
|
|
78
|
-
const viewport = await bridge.getViewportSize();
|
|
79
|
-
const windowGeom = await adapter.getWindowGeometry(windowId);
|
|
80
|
-
buffer = await adapter.captureWindow(windowId, format);
|
|
81
|
-
const cropRect = computeCropRect(elementRect, viewport, {
|
|
82
|
-
width: windowGeom.width,
|
|
83
|
-
height: windowGeom.height,
|
|
84
|
-
});
|
|
85
|
-
buffer = await cropImage(buffer, cropRect, format);
|
|
47
|
+
// 2. Subscribe without affecting other console consumers.
|
|
48
|
+
try {
|
|
49
|
+
const status = await bridge.eval(scripts.patch);
|
|
50
|
+
if (status !== 'patched')
|
|
51
|
+
throw new Error(`Observer setup failed: ${String(status)}`);
|
|
86
52
|
}
|
|
87
|
-
|
|
88
|
-
|
|
53
|
+
catch (error) {
|
|
54
|
+
observerError = error;
|
|
89
55
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
catch (err) {
|
|
95
|
-
files['screenshot.png'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
96
|
-
}
|
|
97
|
-
// 5. DOM tree — save to dom.json
|
|
98
|
-
try {
|
|
99
|
-
const raw = await bridge.eval(buildSerializerScript('body', opts.domDepth, false));
|
|
100
|
-
const parsed = DomNodeSchema.parse(JSON.parse(String(raw)));
|
|
101
|
-
const path = join(outDir, 'dom.json');
|
|
102
|
-
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
103
|
-
files['dom.json'] = path;
|
|
104
|
-
}
|
|
105
|
-
catch (err) {
|
|
106
|
-
files['dom.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
107
|
-
}
|
|
108
|
-
// 6. Storage — save to storage.json
|
|
109
|
-
try {
|
|
110
|
-
const raw = await bridge.eval(STORAGE_SCRIPT);
|
|
111
|
-
const parsed = SnapshotStorageResultSchema.parse(JSON.parse(String(raw)));
|
|
112
|
-
const path = join(outDir, 'storage.json');
|
|
113
|
-
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
114
|
-
files['storage.json'] = path;
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
files['storage.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
118
|
-
}
|
|
119
|
-
// 7. Wait for logs-duration, drain console errors — save to console-errors.json
|
|
120
|
-
try {
|
|
121
|
-
await new Promise((resolve) => setTimeout(resolve, opts.logsDuration));
|
|
122
|
-
const raw = await bridge.eval(DRAIN_CONSOLE_ERRORS_SCRIPT);
|
|
123
|
-
const errors = JSON.parse(String(raw));
|
|
124
|
-
const path = join(outDir, 'console-errors.json');
|
|
125
|
-
await writeFile(path, JSON.stringify(errors, null, 2));
|
|
126
|
-
files['console-errors.json'] = path;
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
files['console-errors.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
130
|
-
}
|
|
131
|
-
// 8. Fetch rust logs — save to rust-logs.json
|
|
132
|
-
try {
|
|
133
|
-
const logs = await bridge.fetchLogs();
|
|
134
|
-
const path = join(outDir, 'rust-logs.json');
|
|
135
|
-
await writeFile(path, JSON.stringify(logs, null, 2));
|
|
136
|
-
files['rust-logs.json'] = path;
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
files['rust-logs.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
140
|
-
}
|
|
141
|
-
// 9. Optional custom eval — save to eval.json
|
|
142
|
-
if (opts.eval) {
|
|
56
|
+
// 3. Get page state — save to page-state.json
|
|
57
|
+
let capturedUrl;
|
|
58
|
+
let capturedTitle;
|
|
59
|
+
let capturedViewport;
|
|
143
60
|
try {
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
} })()
|
|
152
|
-
: raw;
|
|
153
|
-
const path = join(outDir, 'eval.json');
|
|
61
|
+
assertCollecting();
|
|
62
|
+
const raw = await bridge.eval(PAGE_STATE_SCRIPT);
|
|
63
|
+
const parsed = PageStateSchema.parse(JSON.parse(String(raw)));
|
|
64
|
+
capturedUrl = parsed.url;
|
|
65
|
+
capturedTitle = parsed.title;
|
|
66
|
+
capturedViewport = parsed.viewport;
|
|
67
|
+
const path = join(outDir, 'page-state.json');
|
|
154
68
|
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
155
|
-
files['
|
|
69
|
+
files['page-state.json'] = path;
|
|
156
70
|
}
|
|
157
71
|
catch (err) {
|
|
158
|
-
files['
|
|
72
|
+
files['page-state.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
159
73
|
}
|
|
74
|
+
// 4. Screenshot — missing platform tools must not prevent other artifacts.
|
|
75
|
+
try {
|
|
76
|
+
assertCollecting();
|
|
77
|
+
const screenshotAdapter = typeof adapter === 'function' ? await adapter(opts.selector ? 'image' : 'capture') : adapter;
|
|
78
|
+
const windowId = await resolveWindowId(screenshotAdapter, bridge, opts);
|
|
79
|
+
let buffer;
|
|
80
|
+
if (opts.selector) {
|
|
81
|
+
const elementRect = await bridge.getElementRect(opts.selector);
|
|
82
|
+
if (!elementRect)
|
|
83
|
+
throw new Error(`Element not found: ${opts.selector}`);
|
|
84
|
+
const viewport = await bridge.getViewportSize();
|
|
85
|
+
const windowGeom = await screenshotAdapter.getWindowGeometry(windowId);
|
|
86
|
+
buffer = await screenshotAdapter.captureWindow(windowId, format);
|
|
87
|
+
const cropRect = computeCropRect(elementRect, viewport, {
|
|
88
|
+
width: windowGeom.width,
|
|
89
|
+
height: windowGeom.height,
|
|
90
|
+
});
|
|
91
|
+
buffer = await cropImage(buffer, cropRect, format);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
buffer = await screenshotAdapter.captureWindow(windowId, format);
|
|
95
|
+
}
|
|
96
|
+
const path = join(outDir, 'screenshot.png');
|
|
97
|
+
await writeFile(path, buffer);
|
|
98
|
+
files['screenshot.png'] = path;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
files['screenshot.png'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
102
|
+
}
|
|
103
|
+
// 5. DOM tree — save to dom.json
|
|
104
|
+
try {
|
|
105
|
+
assertCollecting();
|
|
106
|
+
const raw = await bridge.eval(buildSerializerScript('body', opts.domDepth, false));
|
|
107
|
+
const parsed = DomNodeSchema.parse(JSON.parse(String(raw)));
|
|
108
|
+
const path = join(outDir, 'dom.json');
|
|
109
|
+
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
110
|
+
files['dom.json'] = path;
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
files['dom.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
114
|
+
}
|
|
115
|
+
// 6. Storage — save to storage.json
|
|
116
|
+
try {
|
|
117
|
+
assertCollecting();
|
|
118
|
+
const raw = await bridge.eval(STORAGE_SCRIPT);
|
|
119
|
+
const parsed = SnapshotStorageResultSchema.parse(JSON.parse(String(raw)));
|
|
120
|
+
const path = join(outDir, 'storage.json');
|
|
121
|
+
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
122
|
+
files['storage.json'] = path;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
files['storage.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
126
|
+
}
|
|
127
|
+
// 7. Wait for logs-duration, drain console errors — save to console-errors.json
|
|
128
|
+
try {
|
|
129
|
+
if (observerError)
|
|
130
|
+
throw observerError;
|
|
131
|
+
const errors = [];
|
|
132
|
+
await monitorFor({ interval: Math.min(500, opts.logsDuration), duration: opts.logsDuration, signal: signals.signal }, async () => {
|
|
133
|
+
const entries = z.array(ConsoleEntrySchema).parse(await readObserver(bridge, scripts, warn));
|
|
134
|
+
errors.push(...entries.filter(e => e.level === 'error').map(e => ({ ts: e.timestamp, msg: e.message })));
|
|
135
|
+
});
|
|
136
|
+
const path = join(outDir, 'console-errors.json');
|
|
137
|
+
await writeFile(path, JSON.stringify(errors, null, 2));
|
|
138
|
+
files['console-errors.json'] = path;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
files['console-errors.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
142
|
+
}
|
|
143
|
+
// 8. Fetch rust logs — save to rust-logs.json
|
|
144
|
+
try {
|
|
145
|
+
assertCollecting();
|
|
146
|
+
const logs = await readRustLogs(bridge, undefined, { warn });
|
|
147
|
+
const path = join(outDir, 'rust-logs.json');
|
|
148
|
+
await writeFile(path, JSON.stringify(logs, null, 2));
|
|
149
|
+
files['rust-logs.json'] = path;
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
files['rust-logs.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
153
|
+
}
|
|
154
|
+
// 9. Optional custom eval — save to eval.json
|
|
155
|
+
if (opts.eval) {
|
|
156
|
+
try {
|
|
157
|
+
assertCollecting();
|
|
158
|
+
const { value: raw } = await evaluateExpression(bridge, opts.eval);
|
|
159
|
+
const parsed = typeof raw === 'string'
|
|
160
|
+
? (() => { try {
|
|
161
|
+
return JSON.parse(raw);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return raw;
|
|
165
|
+
} })()
|
|
166
|
+
: raw;
|
|
167
|
+
const path = join(outDir, 'eval.json');
|
|
168
|
+
await writeFile(path, JSON.stringify(parsed, null, 2));
|
|
169
|
+
files['eval.json'] = path;
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
files['eval.json'] = `error: ${err instanceof Error ? err.message : String(err)}`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// 10. Write manifest.json
|
|
176
|
+
await closeObserver(bridge, scripts, warn);
|
|
177
|
+
closed = true;
|
|
178
|
+
signals.dispose();
|
|
179
|
+
if (signals.signal.aborted)
|
|
180
|
+
warn(`warning: capture interrupted by ${String(signals.signal.reason)}; collection is incomplete`);
|
|
181
|
+
const errorCount = Object.values(files).filter(v => v.startsWith('error: ')).length;
|
|
182
|
+
const manifest = {
|
|
183
|
+
timestamp: new Date().toISOString(),
|
|
184
|
+
url: capturedUrl,
|
|
185
|
+
title: capturedTitle,
|
|
186
|
+
viewport: capturedViewport,
|
|
187
|
+
errorCount,
|
|
188
|
+
partial: errorCount > 0 || warnings.length > 0,
|
|
189
|
+
warnings,
|
|
190
|
+
files,
|
|
191
|
+
};
|
|
192
|
+
const manifestPath = join(outDir, 'manifest.json');
|
|
193
|
+
await writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
194
|
+
return manifest;
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
if (!closed)
|
|
198
|
+
await closeObserver(bridge, scripts, warn);
|
|
199
|
+
signals.dispose();
|
|
160
200
|
}
|
|
161
|
-
// 10. Write manifest.json
|
|
162
|
-
const errorCount = Object.values(files).filter(v => v.startsWith('error: ')).length;
|
|
163
|
-
const manifest = {
|
|
164
|
-
timestamp: new Date().toISOString(),
|
|
165
|
-
url: capturedUrl,
|
|
166
|
-
title: capturedTitle,
|
|
167
|
-
viewport: capturedViewport,
|
|
168
|
-
errorCount,
|
|
169
|
-
files,
|
|
170
|
-
};
|
|
171
|
-
const manifestPath = join(outDir, 'manifest.json');
|
|
172
|
-
await writeFile(manifestPath, JSON.stringify(manifest, null, 2));
|
|
173
|
-
return manifest;
|
|
174
201
|
}
|
|
175
202
|
export function registerCapture(program, getAdapter) {
|
|
176
203
|
const cmd = new Command('capture')
|
|
177
204
|
.description('Capture enhanced snapshot with manifest directory (screenshot, DOM, state, logs, errors)')
|
|
178
205
|
.requiredOption('-o, --output <dir>', 'Output directory path')
|
|
179
206
|
.option('-s, --selector <css>', 'CSS selector to screenshot (full window if omitted)')
|
|
180
|
-
.option('-t, --title <
|
|
207
|
+
.option('-t, --title <pattern>', 'Window title (X11: regex; macOS/Wayland: substring); quote titles with spaces (default: auto-discover)')
|
|
181
208
|
.option('-w, --window-id <id>', 'Platform window id (from list-windows) — overrides --title')
|
|
182
|
-
.option('--dom-depth <number>', 'DOM tree depth',
|
|
209
|
+
.option('--dom-depth <number>', 'DOM tree depth', parseNonNegativeInt, 3)
|
|
183
210
|
.option('--eval <js>', 'Additional JS to eval and save')
|
|
184
|
-
.option('--logs-duration <ms>', 'Duration to wait for console errors (ms)',
|
|
211
|
+
.option('--logs-duration <ms>', 'Duration to wait for console errors (ms)', parseNonNegativeInt, 3000)
|
|
185
212
|
.option('--json', 'Output structured manifest');
|
|
186
213
|
addBridgeOptions(cmd);
|
|
187
214
|
cmd.action(async (opts) => {
|
|
188
215
|
const bridge = await resolveBridge(opts);
|
|
189
|
-
const
|
|
190
|
-
const manifest = await captureToDir(bridge, adapter, opts);
|
|
216
|
+
const manifest = await captureToDir(bridge, getAdapter, opts);
|
|
191
217
|
printCaptureManifest(opts.output, manifest, opts.json);
|
|
192
218
|
});
|
|
193
219
|
program.addCommand(cmd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/check.js
CHANGED
|
@@ -1,44 +1,19 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { addBridgeOptions, resolveBridge,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var message = args.map(function(a) {
|
|
10
|
-
return typeof a === 'object' ? JSON.stringify(a) : String(a);
|
|
11
|
-
}).join(' ');
|
|
12
|
-
window.__tauriDevToolsErrorBuffer.push(message);
|
|
13
|
-
window.__tauriDevToolsOriginalConsoleError.apply(console, arguments);
|
|
14
|
-
};
|
|
15
|
-
window.__tauriDevToolsErrorPatched = true;
|
|
16
|
-
return 'patched';
|
|
17
|
-
})()`;
|
|
18
|
-
const ERROR_DRAIN_SCRIPT = `(() => {
|
|
19
|
-
var buf = window.__tauriDevToolsErrorBuffer || [];
|
|
20
|
-
window.__tauriDevToolsErrorBuffer = [];
|
|
21
|
-
return JSON.stringify(buf);
|
|
22
|
-
})()`;
|
|
23
|
-
const ERROR_CLEANUP_SCRIPT = `(() => {
|
|
24
|
-
if (window.__tauriDevToolsOriginalConsoleError) {
|
|
25
|
-
console.error = window.__tauriDevToolsOriginalConsoleError;
|
|
26
|
-
delete window.__tauriDevToolsOriginalConsoleError;
|
|
27
|
-
delete window.__tauriDevToolsErrorBuffer;
|
|
28
|
-
delete window.__tauriDevToolsErrorPatched;
|
|
29
|
-
}
|
|
30
|
-
return 'cleaned';
|
|
31
|
-
})()`;
|
|
2
|
+
import { addBridgeOptions, resolveBridge, parsePositiveInt } from './shared.js';
|
|
3
|
+
import { evaluateExpression } from '../bridge/evaluate.js';
|
|
4
|
+
import { consoleObserver, readObserver, closeObserver } from '../bridge/observers.js';
|
|
5
|
+
import { monitorFor, createSignalScope } from '../util/monitor.js';
|
|
6
|
+
import { ConsoleEntrySchema } from '../schemas/commands.js';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { CliError } from '../errors.js';
|
|
32
9
|
export function buildSelectorCheck(selector) {
|
|
33
|
-
|
|
34
|
-
return `!!document.querySelector('${escaped}')`;
|
|
10
|
+
return `!!document.querySelector(${JSON.stringify(selector)})`;
|
|
35
11
|
}
|
|
36
12
|
export function buildEvalCheck(expression) {
|
|
37
|
-
return
|
|
13
|
+
return expression;
|
|
38
14
|
}
|
|
39
15
|
export function buildTextCheck(pattern) {
|
|
40
|
-
|
|
41
|
-
return `document.body.textContent.includes('${escaped}')`;
|
|
16
|
+
return `document.body.textContent.includes(${JSON.stringify(pattern)})`;
|
|
42
17
|
}
|
|
43
18
|
export function registerCheck(program) {
|
|
44
19
|
const cmd = new Command('check')
|
|
@@ -47,20 +22,23 @@ export function registerCheck(program) {
|
|
|
47
22
|
.option('--eval <js>', 'Assert that a JavaScript expression is truthy')
|
|
48
23
|
.option('--text <pattern>', 'Assert that body text contains the pattern')
|
|
49
24
|
.option('--no-errors', 'Assert that no console.error calls occurred during --duration')
|
|
50
|
-
.option('--duration <ms>', 'Duration to wait for --no-errors check (ms)',
|
|
25
|
+
.option('--duration <ms>', 'Duration to wait for --no-errors check (ms)', parsePositiveInt, 3000)
|
|
51
26
|
.option('--json', 'Output results as JSON');
|
|
52
27
|
addBridgeOptions(cmd);
|
|
53
28
|
cmd.action(async (opts) => {
|
|
29
|
+
if (opts.selector === undefined && opts.eval === undefined && opts.text === undefined && opts.errors !== false) {
|
|
30
|
+
throw new CliError('INVALID_ARGUMENT', 'At least one assertion is required', 'Use --selector, --eval, --text, or --no-errors.');
|
|
31
|
+
}
|
|
54
32
|
const bridge = await resolveBridge(opts);
|
|
55
33
|
const checks = [];
|
|
56
34
|
// Selector check
|
|
57
35
|
if (opts.selector !== undefined) {
|
|
58
36
|
try {
|
|
59
37
|
const js = buildSelectorCheck(opts.selector);
|
|
60
|
-
const result = await bridge
|
|
38
|
+
const result = await evaluateExpression(bridge, js);
|
|
61
39
|
checks.push({
|
|
62
40
|
type: 'selector',
|
|
63
|
-
passed: result
|
|
41
|
+
passed: result.truthy,
|
|
64
42
|
selector: opts.selector,
|
|
65
43
|
});
|
|
66
44
|
}
|
|
@@ -77,10 +55,10 @@ export function registerCheck(program) {
|
|
|
77
55
|
if (opts.eval !== undefined) {
|
|
78
56
|
try {
|
|
79
57
|
const js = buildEvalCheck(opts.eval);
|
|
80
|
-
const result = await bridge
|
|
58
|
+
const result = await evaluateExpression(bridge, js);
|
|
81
59
|
checks.push({
|
|
82
60
|
type: 'eval',
|
|
83
|
-
passed: result
|
|
61
|
+
passed: result.truthy,
|
|
84
62
|
expression: opts.eval,
|
|
85
63
|
});
|
|
86
64
|
}
|
|
@@ -97,10 +75,10 @@ export function registerCheck(program) {
|
|
|
97
75
|
if (opts.text !== undefined) {
|
|
98
76
|
try {
|
|
99
77
|
const js = buildTextCheck(opts.text);
|
|
100
|
-
const result = await bridge
|
|
78
|
+
const result = await evaluateExpression(bridge, js);
|
|
101
79
|
checks.push({
|
|
102
80
|
type: 'text',
|
|
103
|
-
passed: result
|
|
81
|
+
passed: result.truthy,
|
|
104
82
|
pattern: opts.text,
|
|
105
83
|
});
|
|
106
84
|
}
|
|
@@ -115,27 +93,34 @@ export function registerCheck(program) {
|
|
|
115
93
|
}
|
|
116
94
|
// No-errors check (opts.errors === false when --no-errors is passed)
|
|
117
95
|
if (opts.errors === false) {
|
|
96
|
+
const scripts = consoleObserver();
|
|
97
|
+
const signals = createSignalScope();
|
|
98
|
+
const errors = [];
|
|
99
|
+
const warnings = [];
|
|
100
|
+
const warn = (message) => { warnings.push(message); console.error(message); };
|
|
118
101
|
try {
|
|
119
|
-
await bridge.eval(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
await
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const errors = JSON.parse(String(raw));
|
|
126
|
-
checks.push({
|
|
127
|
-
type: 'no-errors',
|
|
128
|
-
passed: errors.length === 0,
|
|
129
|
-
errors,
|
|
102
|
+
const status = await bridge.eval(scripts.patch);
|
|
103
|
+
if (status !== 'patched')
|
|
104
|
+
throw new Error(`Observer setup failed: ${String(status)}`);
|
|
105
|
+
const outcome = await monitorFor({ interval: Math.min(500, opts.duration), duration: opts.duration, signal: signals.signal }, async () => {
|
|
106
|
+
const entries = z.array(ConsoleEntrySchema).parse(await readObserver(bridge, scripts, warn));
|
|
107
|
+
errors.push(...entries.filter(e => e.level === 'error').map(e => e.message));
|
|
130
108
|
});
|
|
109
|
+
checks.push({ type: 'no-errors', passed: errors.length === 0 && outcome === 'completed', errors });
|
|
131
110
|
}
|
|
132
111
|
catch (err) {
|
|
133
|
-
checks.push({
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
112
|
+
checks.push({ type: 'no-errors', passed: false, errors, error: err instanceof Error ? err.message : String(err) });
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
await closeObserver(bridge, scripts, warn);
|
|
116
|
+
signals.dispose();
|
|
117
|
+
if (signals.signal.aborted)
|
|
118
|
+
warn(`Observation interrupted by ${String(signals.signal.reason)}; --no-errors did not complete.`);
|
|
119
|
+
if (warnings.length) {
|
|
120
|
+
const check = checks[checks.length - 1];
|
|
121
|
+
check.passed = false;
|
|
122
|
+
check.error = [check.error, ...warnings].filter(Boolean).join('; ');
|
|
123
|
+
}
|
|
139
124
|
}
|
|
140
125
|
}
|
|
141
126
|
const passed = checks.every((c) => c.passed);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|