tauri-agent-tools 0.9.1 → 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 +32 -13
- 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 +35 -14
- 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/interact/select.d.ts +6 -1
- package/dist/commands/interact/select.js +87 -29
- package/dist/commands/interact/select.js.map +1 -1
- package/dist/commands/interact/shared.d.ts +96 -0
- package/dist/commands/interact/shared.js +266 -1
- package/dist/commands/interact/shared.js.map +1 -1
- package/dist/commands/interact/type.d.ts +10 -2
- package/dist/commands/interact/type.js +44 -29
- package/dist/commands/interact/type.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/schemas/interact.d.ts +58 -0
- package/dist/schemas/interact.js +25 -0
- package/dist/schemas/interact.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 +10 -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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"}
|