uisnap 0.2.0 ā 0.2.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.
- package/.claude/settings.local.json +9 -1
- package/README.md +6 -0
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +52 -4
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/pw.js +89 -9
- package/dist/pw.js.map +1 -1
- package/package.json +4 -3
|
@@ -20,7 +20,15 @@
|
|
|
20
20
|
"Bash(git add:*)",
|
|
21
21
|
"Bash(git rm:*)",
|
|
22
22
|
"Bash(git commit:*)",
|
|
23
|
-
"Bash(find:*)"
|
|
23
|
+
"Bash(find:*)",
|
|
24
|
+
"mcp__cloudflare__search_cloudflare_documentation",
|
|
25
|
+
"Bash(npm ls:*)",
|
|
26
|
+
"Bash(npm view:*)",
|
|
27
|
+
"WebFetch(domain:github.com)",
|
|
28
|
+
"Bash(gh issue view:*)",
|
|
29
|
+
"Bash(gh issue close:*)",
|
|
30
|
+
"Bash(git push)",
|
|
31
|
+
"Bash(gh issue create --repo tonyhschu/uisnap --title \"Inline script support for exec command\" --body \"$\\(cat <<''EOF''\nFrom #2 feedback.\n\n**Request:** Run simple one-liners without needing a script file.\n\n```bash\n# Wishlist:\nuisnap exec -e ''await page.click\\(\"canvas\"\\)''\nuisnap exec -e ''await page.goto\\(\"http://localhost:5173\"\\); await page.click\\(\"button\"\\)''\n```\n\n**Use case:** Quick one-off debugging without creating a file.\n\n**Priority:** Medium\nEOF\n\\)\")"
|
|
24
32
|
]
|
|
25
33
|
}
|
|
26
34
|
}
|
package/README.md
CHANGED
|
@@ -25,6 +25,12 @@ When AI agents debug frontend issues, they typically:
|
|
|
25
25
|
|
|
26
26
|
## Installation
|
|
27
27
|
|
|
28
|
+
### Requirements
|
|
29
|
+
|
|
30
|
+
- **Node.js 18, 20, or 22 LTS** (recommended)
|
|
31
|
+
- Node.js 24 may work but is untested
|
|
32
|
+
- Node.js 25+ is **not supported** (duckdb lacks pre-built binaries)
|
|
33
|
+
|
|
28
34
|
### 1. Install the CLI tool
|
|
29
35
|
|
|
30
36
|
```bash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAkD,MAAM,UAAU,CAAC;AAgB1F,QAAA,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAkD,MAAM,UAAU,CAAC;AAgB1F,QAAA,MAAM,QAAQ,EAAE,cAiOf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -39,9 +39,53 @@ const webVitals_1 = require("../utils/webVitals");
|
|
|
39
39
|
const chromeTraceHelpers_1 = require("../utils/chromeTraceHelpers");
|
|
40
40
|
const projectRoot_1 = require("../utils/projectRoot");
|
|
41
41
|
const snapshot = async (page, context, _browser, args) => {
|
|
42
|
-
|
|
42
|
+
let url;
|
|
43
|
+
let userOutputDir;
|
|
44
|
+
let consoleFilter;
|
|
45
|
+
for (let i = 0; i < args.length; i++) {
|
|
46
|
+
const arg = args[i];
|
|
47
|
+
if (arg === '--console-filter' || arg === '-cf') {
|
|
48
|
+
consoleFilter = args[++i];
|
|
49
|
+
}
|
|
50
|
+
else if (arg === '--help' || arg === '-h') {
|
|
51
|
+
console.log(`uisnap snapshot - Capture complete page state
|
|
52
|
+
|
|
53
|
+
Usage:
|
|
54
|
+
uisnap snapshot <url> [output-dir] [options]
|
|
55
|
+
|
|
56
|
+
Options:
|
|
57
|
+
--console-filter, -cf <pattern> Filter console logs by text (regex supported)
|
|
58
|
+
|
|
59
|
+
If output-dir is not specified, auto-generates:
|
|
60
|
+
snapshots/{hostname}/{timestamp}/
|
|
61
|
+
|
|
62
|
+
Examples:
|
|
63
|
+
uisnap snapshot https://example.com
|
|
64
|
+
uisnap snapshot https://myapp.com --console-filter "\\[Debug\\]"
|
|
65
|
+
uisnap snapshot https://myapp.com -cf "Error|Warning"
|
|
66
|
+
uisnap snapshot https://myapp.com ./my-snapshot --console-filter "MyApp"
|
|
67
|
+
`);
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
else if (!url) {
|
|
71
|
+
url = arg;
|
|
72
|
+
}
|
|
73
|
+
else if (!userOutputDir) {
|
|
74
|
+
userOutputDir = arg;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
43
77
|
if (!url) {
|
|
44
|
-
throw new Error('Usage: snapshot <url> [output-dir]\n\nIf output-dir is not specified, auto-generates: snapshots/{hostname}/{timestamp}/');
|
|
78
|
+
throw new Error('Usage: snapshot <url> [output-dir] [--console-filter <pattern>]\n\nIf output-dir is not specified, auto-generates: snapshots/{hostname}/{timestamp}/');
|
|
79
|
+
}
|
|
80
|
+
let consoleFilterRegex;
|
|
81
|
+
if (consoleFilter) {
|
|
82
|
+
try {
|
|
83
|
+
consoleFilterRegex = new RegExp(consoleFilter, 'i');
|
|
84
|
+
console.log(`š Console filter: ${consoleFilter}`);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
throw new Error(`Invalid console filter regex: ${consoleFilter}`);
|
|
88
|
+
}
|
|
45
89
|
}
|
|
46
90
|
const projectRoot = (0, projectRoot_1.getUserProjectDir)();
|
|
47
91
|
let outputDir;
|
|
@@ -74,11 +118,15 @@ const snapshot = async (page, context, _browser, args) => {
|
|
|
74
118
|
const consoleLogs = [];
|
|
75
119
|
const networkLogs = [];
|
|
76
120
|
page.on('console', msg => {
|
|
121
|
+
const text = msg.text();
|
|
122
|
+
if (consoleFilterRegex && !consoleFilterRegex.test(text)) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
77
125
|
const location = msg.location();
|
|
78
126
|
consoleLogs.push({
|
|
79
127
|
timestamp: new Date().toISOString(),
|
|
80
128
|
type: msg.type(),
|
|
81
|
-
text:
|
|
129
|
+
text: text,
|
|
82
130
|
location: location.url ? {
|
|
83
131
|
url: location.url,
|
|
84
132
|
lineNumber: location.lineNumber,
|
|
@@ -144,7 +192,7 @@ const snapshot = async (page, context, _browser, args) => {
|
|
|
144
192
|
}
|
|
145
193
|
console.log(`ā Snapshot saved to ${outputDir}/`);
|
|
146
194
|
console.log(` - Accessibility tree: ${a11ySnapshot.length} bytes (YAML)`);
|
|
147
|
-
console.log(` - Console messages: ${consoleLogs.length}`);
|
|
195
|
+
console.log(` - Console messages: ${consoleLogs.length}${consoleFilter ? ` (filtered: "${consoleFilter}")` : ''}`);
|
|
148
196
|
console.log(` - Network requests: ${networkLogs.length}`);
|
|
149
197
|
console.log(` - Page title: "${metadata.title}"`);
|
|
150
198
|
console.log(` - Web vitals: FCP=${webVitals.fcp}ms, LCP=${webVitals.lcp}ms, TTI=${webVitals.tti}ms, CLS=${webVitals.cls}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,kDAAsD;AACtD,oEAAyF;AACzF,sDAAyD;AAazD,MAAM,QAAQ,GAAmB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/pw.js
CHANGED
|
@@ -62,18 +62,90 @@ const analysisCommands = {
|
|
|
62
62
|
'trace-import': chrome_trace_import_1.traceImport,
|
|
63
63
|
'setup-skill': setup_skill_1.setupSkill,
|
|
64
64
|
};
|
|
65
|
+
function showExecHelp() {
|
|
66
|
+
console.log(`uisnap exec - Run custom Playwright scripts
|
|
67
|
+
|
|
68
|
+
Usage:
|
|
69
|
+
uisnap exec <script.js> <url> [output-dir]
|
|
70
|
+
uisnap exec --template [filename] Generate a starter script
|
|
71
|
+
|
|
72
|
+
If output-dir is not specified, auto-generates:
|
|
73
|
+
snapshots/{hostname}/{script-name}-{timestamp}/
|
|
74
|
+
|
|
75
|
+
Script Format:
|
|
76
|
+
Your script runs inside an async function with access to:
|
|
77
|
+
- page, context, browser (Playwright instances)
|
|
78
|
+
- utils.captureStep() (capture state at each step)
|
|
79
|
+
- utils.writeJson() (write JSON files)
|
|
80
|
+
- fs, path (Node.js modules)
|
|
81
|
+
- args (remaining CLI arguments)
|
|
82
|
+
|
|
83
|
+
Example Script:
|
|
84
|
+
// my-script.js
|
|
85
|
+
await page.goto('https://example.com');
|
|
86
|
+
|
|
87
|
+
await utils.captureStep(page, 'initial', async () => {
|
|
88
|
+
// State captured after this action
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
await utils.captureStep(page, 'after-click', async () => {
|
|
92
|
+
await page.click('button');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
Examples:
|
|
96
|
+
uisnap exec my-script.js https://example.com
|
|
97
|
+
uisnap exec --template my-script.js
|
|
98
|
+
uisnap exec examples/scroll-perf-trace.js https://myapp.com
|
|
99
|
+
`);
|
|
100
|
+
}
|
|
101
|
+
function generateTemplate(filename) {
|
|
102
|
+
const template = `// uisnap exec script template
|
|
103
|
+
// Usage: uisnap exec ${filename || 'this-script.js'} <url>
|
|
104
|
+
|
|
105
|
+
// Navigate to the URL (passed as first arg after script)
|
|
106
|
+
const url = args[0] || 'https://example.com';
|
|
107
|
+
await page.goto(url);
|
|
108
|
+
|
|
109
|
+
// Capture initial state
|
|
110
|
+
await utils.captureStep(page, 'initial', async () => {
|
|
111
|
+
// Page state is captured after this block executes
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Example: Click a button and capture the result
|
|
115
|
+
await utils.captureStep(page, 'after-click', async () => {
|
|
116
|
+
// Uncomment and modify:
|
|
117
|
+
// await page.click('button');
|
|
118
|
+
// await page.waitForTimeout(1000);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
// Example: Fill a form
|
|
122
|
+
// await utils.captureStep(page, 'form-filled', async () => {
|
|
123
|
+
// await page.fill('input[name="email"]', 'test@example.com');
|
|
124
|
+
// await page.click('button[type="submit"]');
|
|
125
|
+
// });
|
|
126
|
+
|
|
127
|
+
// Example: Write custom data
|
|
128
|
+
// const data = await page.evaluate(() => document.title);
|
|
129
|
+
// utils.writeJson('custom-data.json', { title: data });
|
|
130
|
+
|
|
131
|
+
console.log('Script completed!');
|
|
132
|
+
`;
|
|
133
|
+
if (filename) {
|
|
134
|
+
fs.writeFileSync(filename, template);
|
|
135
|
+
console.log(`ā Created template: ${filename}`);
|
|
136
|
+
console.log(`\nRun it with:`);
|
|
137
|
+
console.log(` uisnap exec ${filename} https://example.com`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.log(template);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
65
143
|
async function executeUserScript(page, context, browser, args) {
|
|
66
144
|
const scriptPath = args[0];
|
|
67
145
|
const scriptArgs = args.slice(1);
|
|
68
|
-
if (!scriptPath) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
console.error('If output-dir is not specified, auto-generates:');
|
|
72
|
-
console.error(' snapshots/{hostname}/{script-name}-{timestamp}/');
|
|
73
|
-
console.error('');
|
|
74
|
-
console.error('Example:');
|
|
75
|
-
console.error(' uisnap exec examples/scroll-perf-trace.js https://example.com');
|
|
76
|
-
process.exit(1);
|
|
146
|
+
if (!scriptPath || scriptPath === '--help' || scriptPath === '-h') {
|
|
147
|
+
showExecHelp();
|
|
148
|
+
process.exit(0);
|
|
77
149
|
}
|
|
78
150
|
if (!fs.existsSync(scriptPath)) {
|
|
79
151
|
console.error(`Error: Script not found: ${scriptPath}`);
|
|
@@ -238,6 +310,14 @@ async function main() {
|
|
|
238
310
|
await analysisCommands[command](args);
|
|
239
311
|
return;
|
|
240
312
|
}
|
|
313
|
+
if (command === 'exec' && (args[0] === '--template' || args[0] === '-t')) {
|
|
314
|
+
generateTemplate(args[1]);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (command === 'exec' && (args[0] === '--help' || args[0] === '-h' || !args[0])) {
|
|
318
|
+
showExecHelp();
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
241
321
|
const needsBrowser = browserCommands[command] || command === 'exec';
|
|
242
322
|
if (!needsBrowser) {
|
|
243
323
|
console.error(`Unknown command: ${command}`);
|
package/dist/pw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pw.js","sourceRoot":"","sources":["../src/pw.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,2CAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAE7B,6CAA8C;AAC9C,qDAAwD;AAGxD,mEAAkD;AAGlD,uDAAmD;AACnD,uDAAmD;AACnD,6CAAyC;AACzC,yCAAsC;AACtC,iEAAsD;AACtD,+DAAoD;AACpD,+CAA2C;AAG3C,MAAM,eAAe,GAAoB;IACvC,QAAQ,EAAE,kBAAe;CAC1B,CAAC;AAGF,MAAM,gBAAgB,GAA6D;IACjF,iBAAiB,EAAE,gCAAc;IACjC,iBAAiB,EAAE,gCAAc;IACjC,YAAY,EAAE,sBAAS;IACvB,UAAU,EAAE,mBAAQ;IACpB,eAAe,EAAE,mCAAY;IAC7B,cAAc,EAAE,iCAAW;IAC3B,aAAa,EAAE,wBAAU;CAC1B,CAAC;AAKF,
|
|
1
|
+
{"version":3,"file":"pw.js","sourceRoot":"","sources":["../src/pw.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uisnap",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "CLI debugging tool designed for AI coding agents. Captures browser state to disk for token-efficient analysis. Works with Claude Code, Cursor, and other AI assistants.",
|
|
5
5
|
"author": "Tony Chu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"SKILL-INSTALLATION.md"
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
|
-
"
|
|
41
|
+
"preinstall": "node -e \"const v = process.versions.node.split('.')[0]; if (v >= 25) { console.error('\\nā ļø Warning: Node.js ' + process.version + ' detected.\\n uisnap uses duckdb which may not have pre-built binaries for Node 25+.\\n If install fails, use Node 18, 20, or 22 LTS.\\n'); }\"",
|
|
42
|
+
"build": "tsc && chmod +x dist/pw.js",
|
|
42
43
|
"watch": "tsc --watch",
|
|
43
44
|
"clean": "rm -rf dist",
|
|
44
45
|
"test": "vitest run",
|
|
@@ -63,6 +64,6 @@
|
|
|
63
64
|
"vitest": "^4.0.16"
|
|
64
65
|
},
|
|
65
66
|
"engines": {
|
|
66
|
-
"node": ">=18.0.0"
|
|
67
|
+
"node": ">=18.0.0 <25.0.0"
|
|
67
68
|
}
|
|
68
69
|
}
|