cssprobe-cli 0.2.7 → 0.2.9
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.md +8 -1
- package/README.md +17 -1
- package/dist/cli/commands.js +22 -2
- package/dist/cli/program.js +34 -1
- package/dist/daemon/daemon.d.ts +5 -0
- package/dist/daemon/daemon.js +27 -0
- package/dist/daemon/daemonEntry.js +1 -0
- package/dist/daemon/session.js +2 -0
- package/dist/daemonEntry.js +31 -3
- package/dist/help.json +29 -11
- package/dist/installer/skill-template.js +4 -1
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -55,6 +55,8 @@ src/
|
|
|
55
55
|
|
|
56
56
|
### Session Management
|
|
57
57
|
- `open [url]` — Open browser in session mode (non-blocking)
|
|
58
|
+
- `--viewport <WxH>` — Set viewport size (e.g. `--viewport 1280x720`)
|
|
59
|
+
- `--state <file>` — Load saved state (cookies + localStorage)
|
|
58
60
|
- `close` — Close the browser session
|
|
59
61
|
- `status` — Show current session status
|
|
60
62
|
|
|
@@ -68,11 +70,16 @@ src/
|
|
|
68
70
|
- `inject-css <css>` — Inject CSS into the current page
|
|
69
71
|
|
|
70
72
|
### Browser
|
|
73
|
+
- `resize <width> <height>` — Resize browser viewport
|
|
74
|
+
- `eval <expression>` — Evaluate JavaScript (browser context)
|
|
75
|
+
- `playwright <call>` — Execute Playwright API call (Node.js context)
|
|
71
76
|
- `screenshot` — Take a screenshot
|
|
72
|
-
- `eval <expression>` — Evaluate JavaScript
|
|
73
77
|
|
|
74
78
|
### State
|
|
75
79
|
- `state-import [file]` — Import cookies from Netscape format
|
|
80
|
+
- `--out <file>` — Output state file path (default: `~/.cssprobe-cli/states/imported.json`)
|
|
81
|
+
- `--name <name>` — Custom name for the state file (e.g. `mysite` or `mysite.json`)
|
|
82
|
+
- `--merge <file>` — Existing state file to merge into
|
|
76
83
|
|
|
77
84
|
### Config
|
|
78
85
|
- `config-show` / `config-set` / `config-list` / `config-use` / `config-new` / `config-path`
|
package/README.md
CHANGED
|
@@ -26,6 +26,9 @@ cssprobe-cli skill-install
|
|
|
26
26
|
# Open browser (non-blocking, starts daemon session)
|
|
27
27
|
cssprobe-cli open https://getbootstrap.com/docs/5.3/examples/checkout
|
|
28
28
|
|
|
29
|
+
# Open with custom viewport
|
|
30
|
+
cssprobe-cli open https://example.com --viewport 1280x720
|
|
31
|
+
|
|
29
32
|
# Inspect with CSS selector
|
|
30
33
|
cssprobe-cli inspect .container
|
|
31
34
|
|
|
@@ -68,6 +71,12 @@ cssprobe-cli close
|
|
|
68
71
|
```bash
|
|
69
72
|
# Import cookies from browser export (Netscape format)
|
|
70
73
|
cssprobe-cli state-import cookies.txt --out ~/.cssprobe-cli/states/mysite.json
|
|
74
|
+
|
|
75
|
+
# Or use --name for simpler syntax
|
|
76
|
+
cssprobe-cli state-import cookies.txt --name mysite
|
|
77
|
+
|
|
78
|
+
# Open browser with saved state
|
|
79
|
+
cssprobe-cli open https://mysite.com --state ~/.cssprobe-cli/states/mysite.json
|
|
71
80
|
```
|
|
72
81
|
|
|
73
82
|
### 4. JSON Output
|
|
@@ -113,6 +122,8 @@ cssprobe-cli close
|
|
|
113
122
|
|
|
114
123
|
```bash
|
|
115
124
|
cssprobe-cli open [url] # Open browser in session mode (non-blocking)
|
|
125
|
+
cssprobe-cli open [url] --viewport 1280x720 # Open with custom viewport
|
|
126
|
+
cssprobe-cli open [url] --state ~/.cssprobe-cli/states/mysite.json # Open with saved state
|
|
116
127
|
cssprobe-cli close # Close browser session
|
|
117
128
|
cssprobe-cli status # Show session status
|
|
118
129
|
```
|
|
@@ -135,8 +146,10 @@ cssprobe-cli inject-css <css> # Inject CSS into current page
|
|
|
135
146
|
### Browser
|
|
136
147
|
|
|
137
148
|
```bash
|
|
149
|
+
cssprobe-cli resize <width> <height> # Resize browser viewport
|
|
150
|
+
cssprobe-cli eval <expression> # Evaluate JavaScript (browser context)
|
|
151
|
+
cssprobe-cli playwright <call> # Execute Playwright API (Node.js context)
|
|
138
152
|
cssprobe-cli screenshot # Take screenshot
|
|
139
|
-
cssprobe-cli eval <expression> # Evaluate JavaScript
|
|
140
153
|
```
|
|
141
154
|
|
|
142
155
|
### State
|
|
@@ -208,6 +221,9 @@ Import cookies from Netscape format (browser export standard) into a Playwright
|
|
|
208
221
|
# From file
|
|
209
222
|
cssprobe-cli state-import cookies.txt --out mystate.json
|
|
210
223
|
|
|
224
|
+
# From file with custom name (saves to ~/.cssprobe-cli/states/<name>.json)
|
|
225
|
+
cssprobe-cli state-import cookies.txt --name mysite
|
|
226
|
+
|
|
211
227
|
# From stdin
|
|
212
228
|
cat cookies.txt | cssprobe-cli state-import --out mystate.json
|
|
213
229
|
|
package/dist/cli/commands.js
CHANGED
|
@@ -55,6 +55,8 @@ const open = (0, command_1.declareCommand)({
|
|
|
55
55
|
options: z.object({
|
|
56
56
|
browser: z.enum(['chromium', 'firefox', 'webkit']).optional().describe('browser engine (default chromium)'),
|
|
57
57
|
headed: z.boolean().optional().describe('show the browser window'),
|
|
58
|
+
viewport: z.string().optional().describe('viewport size as WxH (e.g. 1280x720)'),
|
|
59
|
+
state: z.string().optional().describe('path to saved state file (cookies + localStorage)'),
|
|
58
60
|
}),
|
|
59
61
|
});
|
|
60
62
|
const close = (0, command_1.declareCommand)({
|
|
@@ -126,14 +128,31 @@ const screenshot = (0, command_1.declareCommand)({
|
|
|
126
128
|
'full-page': z.boolean().optional().describe('take screenshot of the full scrollable page'),
|
|
127
129
|
}),
|
|
128
130
|
});
|
|
131
|
+
const resize = (0, command_1.declareCommand)({
|
|
132
|
+
name: 'resize',
|
|
133
|
+
category: 'core',
|
|
134
|
+
description: 'Resize the browser viewport',
|
|
135
|
+
args: z.object({
|
|
136
|
+
width: numberArg.describe('viewport width'),
|
|
137
|
+
height: numberArg.describe('viewport height'),
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
129
140
|
const evalCmd = (0, command_1.declareCommand)({
|
|
130
141
|
name: 'eval',
|
|
131
142
|
category: 'core',
|
|
132
|
-
description: 'Evaluate JavaScript expression on the page',
|
|
143
|
+
description: 'Evaluate JavaScript expression on the page (browser context)',
|
|
133
144
|
args: z.object({
|
|
134
145
|
expression: z.string().describe('JavaScript expression to evaluate'),
|
|
135
146
|
}),
|
|
136
147
|
});
|
|
148
|
+
const playwrightCmd = (0, command_1.declareCommand)({
|
|
149
|
+
name: 'playwright',
|
|
150
|
+
category: 'core',
|
|
151
|
+
description: 'Execute Playwright API call (Node.js context)',
|
|
152
|
+
args: z.object({
|
|
153
|
+
call: z.string().describe('Playwright API call, e.g. "page.setViewportSize({width: 1280, height: 720})"'),
|
|
154
|
+
}),
|
|
155
|
+
});
|
|
137
156
|
// ── state management ──
|
|
138
157
|
const stateImport = (0, command_1.declareCommand)({
|
|
139
158
|
name: 'state-import',
|
|
@@ -144,6 +163,7 @@ const stateImport = (0, command_1.declareCommand)({
|
|
|
144
163
|
}),
|
|
145
164
|
options: z.object({
|
|
146
165
|
out: z.string().optional().describe('output state file path (default: ~/.cssprobe-cli/states/imported.json)'),
|
|
166
|
+
name: z.string().optional().describe('custom name for the state file (e.g. mysite or mysite.json)'),
|
|
147
167
|
merge: z.string().optional().describe('existing state file to merge into'),
|
|
148
168
|
}),
|
|
149
169
|
});
|
|
@@ -222,7 +242,7 @@ const commandsArray = [
|
|
|
222
242
|
// cssprobe
|
|
223
243
|
inspect, tree, layout, findings, injectCss,
|
|
224
244
|
// browser
|
|
225
|
-
|
|
245
|
+
resize, evalCmd, playwrightCmd, screenshot,
|
|
226
246
|
// state
|
|
227
247
|
stateImport,
|
|
228
248
|
// config
|
package/dist/cli/program.js
CHANGED
|
@@ -58,6 +58,8 @@ async function program() {
|
|
|
58
58
|
case 'inject-css':
|
|
59
59
|
case 'screenshot':
|
|
60
60
|
case 'eval':
|
|
61
|
+
case 'resize':
|
|
62
|
+
case 'playwright':
|
|
61
63
|
await handleSessionCommand(commandName, command, rawArgs, output);
|
|
62
64
|
return;
|
|
63
65
|
}
|
|
@@ -109,10 +111,30 @@ async function handleOpen(command, args, output) {
|
|
|
109
111
|
const url = parsed.url || 'about:blank';
|
|
110
112
|
const browser = parsed.browser || 'chromium';
|
|
111
113
|
const headed = !!parsed.headed;
|
|
114
|
+
const viewportStr = parsed.viewport;
|
|
115
|
+
const state = parsed.state;
|
|
116
|
+
// Parse viewport
|
|
117
|
+
let viewport;
|
|
118
|
+
if (viewportStr) {
|
|
119
|
+
const parts = viewportStr.split('x');
|
|
120
|
+
if (parts.length !== 2) {
|
|
121
|
+
output.error('Invalid viewport format. Use WxH (e.g. 1280x720)');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const width = parseInt(parts[0], 10);
|
|
125
|
+
const height = parseInt(parts[1], 10);
|
|
126
|
+
if (isNaN(width) || isNaN(height)) {
|
|
127
|
+
output.error('Invalid viewport dimensions. Must be numbers.');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
viewport = { width, height };
|
|
131
|
+
}
|
|
112
132
|
// Start daemon
|
|
113
133
|
const { pid } = await session_1.Session.startDaemon({
|
|
114
134
|
browser,
|
|
115
135
|
headed,
|
|
136
|
+
viewport,
|
|
137
|
+
state,
|
|
116
138
|
_: ['open', url],
|
|
117
139
|
}, 'open');
|
|
118
140
|
// Wait a bit for daemon to start
|
|
@@ -126,6 +148,7 @@ async function handleOpen(command, args, output) {
|
|
|
126
148
|
sessionId: 'default',
|
|
127
149
|
pid,
|
|
128
150
|
url,
|
|
151
|
+
viewport: viewport || { width: 1280, height: 720 },
|
|
129
152
|
};
|
|
130
153
|
if (output.json) {
|
|
131
154
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -134,6 +157,7 @@ async function handleOpen(command, args, output) {
|
|
|
134
157
|
console.log(`Browser opened at ${url}`);
|
|
135
158
|
console.log(`Session ID: default`);
|
|
136
159
|
console.log(`PID: ${pid}`);
|
|
160
|
+
console.log(`Viewport: ${viewport?.width || 1280}x${viewport?.height || 720}`);
|
|
137
161
|
}
|
|
138
162
|
}
|
|
139
163
|
catch (e) {
|
|
@@ -372,7 +396,16 @@ async function handleStateImport(command, args, output) {
|
|
|
372
396
|
const cmdArgs = splitArgs(args);
|
|
373
397
|
const parsed = (0, command_1.parseCommand)(command, cmdArgs);
|
|
374
398
|
const filePath = parsed.file;
|
|
375
|
-
const
|
|
399
|
+
const name = parsed.name;
|
|
400
|
+
let outPath = parsed.out;
|
|
401
|
+
if (!outPath && name) {
|
|
402
|
+
// Use custom name in default states directory
|
|
403
|
+
const fileName = name.endsWith('.json') ? name : `${name}.json`;
|
|
404
|
+
outPath = path_1.default.join(os_1.default.homedir(), '.cssprobe-cli', 'states', fileName);
|
|
405
|
+
}
|
|
406
|
+
else if (!outPath) {
|
|
407
|
+
outPath = path_1.default.join(os_1.default.homedir(), '.cssprobe-cli', 'states', 'imported.json');
|
|
408
|
+
}
|
|
376
409
|
const mergePath = parsed.merge;
|
|
377
410
|
let content;
|
|
378
411
|
if (filePath) {
|
package/dist/daemon/daemon.d.ts
CHANGED
|
@@ -7,5 +7,10 @@ import type { ClientInfo } from './session';
|
|
|
7
7
|
export interface DaemonOptions {
|
|
8
8
|
headed?: boolean;
|
|
9
9
|
browser?: string;
|
|
10
|
+
viewport?: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
state?: string;
|
|
10
15
|
}
|
|
11
16
|
export declare function startDaemon(sessionName: string, clientInfo: ClientInfo, options: DaemonOptions): Promise<string>;
|
package/dist/daemon/daemon.js
CHANGED
|
@@ -16,6 +16,7 @@ const socketConnection_1 = require("../utils/socketConnection");
|
|
|
16
16
|
const launcher_1 = require("../browser/launcher");
|
|
17
17
|
const analyzer_1 = require("../engine/analyzer");
|
|
18
18
|
const renderer_1 = require("../engine/renderer");
|
|
19
|
+
const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
|
|
19
20
|
async function startDaemon(sessionName, clientInfo, options) {
|
|
20
21
|
const sessionConfig = createSessionConfig(clientInfo, sessionName, options);
|
|
21
22
|
const { socketPath } = sessionConfig;
|
|
@@ -32,6 +33,8 @@ async function startDaemon(sessionName, clientInfo, options) {
|
|
|
32
33
|
const launcher = new launcher_1.BrowserLauncher({
|
|
33
34
|
browser: options.browser || 'chromium',
|
|
34
35
|
headed: options.headed !== false,
|
|
36
|
+
viewport: options.viewport,
|
|
37
|
+
state: options.state,
|
|
35
38
|
});
|
|
36
39
|
const server = net_1.default.createServer(socket => {
|
|
37
40
|
const connection = new socketConnection_1.SocketConnection(socket);
|
|
@@ -173,6 +176,30 @@ async function executeCommand(launcher, args) {
|
|
|
173
176
|
const result = await page.evaluate(expression);
|
|
174
177
|
return { text: JSON.stringify(result, null, 2) };
|
|
175
178
|
}
|
|
179
|
+
case 'resize': {
|
|
180
|
+
const width = parseInt(params[0], 10);
|
|
181
|
+
const height = parseInt(params[1], 10);
|
|
182
|
+
if (isNaN(width) || isNaN(height))
|
|
183
|
+
throw new Error('Usage: cssprobe-cli resize <width> <height>');
|
|
184
|
+
const page = launcher.getPage();
|
|
185
|
+
if (!page)
|
|
186
|
+
throw new Error('Browser is not open. Run: cssprobe-cli open <url>');
|
|
187
|
+
await page.setViewportSize({ width, height });
|
|
188
|
+
return { text: JSON.stringify({ width, height }) };
|
|
189
|
+
}
|
|
190
|
+
case 'playwright': {
|
|
191
|
+
const call = params[0];
|
|
192
|
+
if (!call)
|
|
193
|
+
throw new Error('Playwright API call is required');
|
|
194
|
+
const page = launcher.getPage();
|
|
195
|
+
if (!page)
|
|
196
|
+
throw new Error('Browser is not open. Run: cssprobe-cli open <url>');
|
|
197
|
+
// Create a safe eval context with page and browser objects
|
|
198
|
+
const asyncFunction = new AsyncFunction('page', 'browser', `return ${call}`);
|
|
199
|
+
const browser = page.context().browser();
|
|
200
|
+
const result = await asyncFunction(page, browser);
|
|
201
|
+
return { text: JSON.stringify(result, null, 2) };
|
|
202
|
+
}
|
|
176
203
|
default:
|
|
177
204
|
throw new Error(`Unknown command: ${command}`);
|
|
178
205
|
}
|
|
@@ -12,6 +12,7 @@ const sessionName = args[0] || 'default';
|
|
|
12
12
|
const options = {
|
|
13
13
|
headed: args.includes('--headed'),
|
|
14
14
|
browser: args.find(a => a.startsWith('--browser='))?.split('=')[1],
|
|
15
|
+
state: args.find(a => a.startsWith('--state='))?.split('=')[1],
|
|
15
16
|
};
|
|
16
17
|
async function main() {
|
|
17
18
|
try {
|
package/dist/daemon/session.js
CHANGED
|
@@ -84,6 +84,8 @@ class Session {
|
|
|
84
84
|
daemonArgs.push('--headed');
|
|
85
85
|
if (args.browser)
|
|
86
86
|
daemonArgs.push(`--browser=${args.browser}`);
|
|
87
|
+
if (args.state)
|
|
88
|
+
daemonArgs.push(`--state=${args.state}`);
|
|
87
89
|
const child = require('child_process').spawn(process.execPath, daemonArgs, {
|
|
88
90
|
detached: true,
|
|
89
91
|
stdio: ['ignore', 'pipe', err],
|
package/dist/daemonEntry.js
CHANGED
|
@@ -31,7 +31,7 @@ var require_package = __commonJS({
|
|
|
31
31
|
"package.json"(exports2, module2) {
|
|
32
32
|
module2.exports = {
|
|
33
33
|
name: "cssprobe-cli",
|
|
34
|
-
version: "0.2.
|
|
34
|
+
version: "0.2.9",
|
|
35
35
|
description: "Runtime CSS probe \u2014 inspect layout, colors, backgrounds, fonts and more in a live browser. AI agents and shell automation.",
|
|
36
36
|
keywords: [
|
|
37
37
|
"css",
|
|
@@ -1169,6 +1169,8 @@ function renderJSON(snapshot, findings, brief = false) {
|
|
|
1169
1169
|
}
|
|
1170
1170
|
|
|
1171
1171
|
// src/daemon/daemon.ts
|
|
1172
|
+
var AsyncFunction = Object.getPrototypeOf(async function() {
|
|
1173
|
+
}).constructor;
|
|
1172
1174
|
async function startDaemon(sessionName2, clientInfo, options2) {
|
|
1173
1175
|
const sessionConfig = createSessionConfig(clientInfo, sessionName2, options2);
|
|
1174
1176
|
const { socketPath } = sessionConfig;
|
|
@@ -1181,7 +1183,9 @@ async function startDaemon(sessionName2, clientInfo, options2) {
|
|
|
1181
1183
|
}
|
|
1182
1184
|
const launcher = new BrowserLauncher({
|
|
1183
1185
|
browser: options2.browser || "chromium",
|
|
1184
|
-
headed: options2.headed !== false
|
|
1186
|
+
headed: options2.headed !== false,
|
|
1187
|
+
viewport: options2.viewport,
|
|
1188
|
+
state: options2.state
|
|
1185
1189
|
});
|
|
1186
1190
|
const server = import_net.default.createServer((socket) => {
|
|
1187
1191
|
const connection = new SocketConnection(socket);
|
|
@@ -1320,6 +1324,29 @@ async function executeCommand(launcher, args2) {
|
|
|
1320
1324
|
const result = await page.evaluate(expression);
|
|
1321
1325
|
return { text: JSON.stringify(result, null, 2) };
|
|
1322
1326
|
}
|
|
1327
|
+
case "resize": {
|
|
1328
|
+
const width = parseInt(params[0], 10);
|
|
1329
|
+
const height = parseInt(params[1], 10);
|
|
1330
|
+
if (isNaN(width) || isNaN(height))
|
|
1331
|
+
throw new Error("Usage: cssprobe-cli resize <width> <height>");
|
|
1332
|
+
const page = launcher.getPage();
|
|
1333
|
+
if (!page)
|
|
1334
|
+
throw new Error("Browser is not open. Run: cssprobe-cli open <url>");
|
|
1335
|
+
await page.setViewportSize({ width, height });
|
|
1336
|
+
return { text: JSON.stringify({ width, height }) };
|
|
1337
|
+
}
|
|
1338
|
+
case "playwright": {
|
|
1339
|
+
const call = params[0];
|
|
1340
|
+
if (!call)
|
|
1341
|
+
throw new Error("Playwright API call is required");
|
|
1342
|
+
const page = launcher.getPage();
|
|
1343
|
+
if (!page)
|
|
1344
|
+
throw new Error("Browser is not open. Run: cssprobe-cli open <url>");
|
|
1345
|
+
const asyncFunction = new AsyncFunction("page", "browser", `return ${call}`);
|
|
1346
|
+
const browser = page.context().browser();
|
|
1347
|
+
const result = await asyncFunction(page, browser);
|
|
1348
|
+
return { text: JSON.stringify(result, null, 2) };
|
|
1349
|
+
}
|
|
1323
1350
|
default:
|
|
1324
1351
|
throw new Error(`Unknown command: ${command}`);
|
|
1325
1352
|
}
|
|
@@ -1426,7 +1453,8 @@ var args = process.argv.slice(2);
|
|
|
1426
1453
|
var sessionName = args[0] || "default";
|
|
1427
1454
|
var options = {
|
|
1428
1455
|
headed: args.includes("--headed"),
|
|
1429
|
-
browser: args.find((a) => a.startsWith("--browser="))?.split("=")[1]
|
|
1456
|
+
browser: args.find((a) => a.startsWith("--browser="))?.split("=")[1],
|
|
1457
|
+
state: args.find((a) => a.startsWith("--state="))?.split("=")[1]
|
|
1430
1458
|
};
|
|
1431
1459
|
async function main() {
|
|
1432
1460
|
try {
|
package/dist/help.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"global": "Usage: cssprobe-cli <command> [args] [options]\n\n\nSession Management:\n open [url] open browser in session mode (non-blocking)\n close close the browser session\n status show current session status\n eval <expression> evaluate javascript expression on the page\n state-import [file] import cookies from netscape format file\n\nCSS Inspection:\n inspect <selector> inspect the runtime css of a page element\n tree <selector> show dom tree structure\n layout <selector> show ascii layout diagram\n findings <selector> show only issues/warnings/errors\n inject-css <css> inject css into the current page\n\nExport:\n screenshot take a screenshot of the current page\n\nConfiguration:\n config-show show current configuration\n config-set <key> <value> set a configuration value\n config-list list all profiles\n config-use <name> switch active profile\n config-new <name> create a new profile\n config-path show configuration file path\n\nAgent Skills:\n skill-install install agent skill for cssprobe-cli\n skill-uninstall remove agent skill for cssprobe-cli\n\nGlobal options:\n --help [command] print help\n --json output response as JSON\n --raw output only the result value\n --version print version\n -p, --profile <name> use named profile (or CSSPROBE_PROFILE env)",
|
|
2
|
+
"global": "Usage: cssprobe-cli <command> [args] [options]\n\n\nSession Management:\n open [url] open browser in session mode (non-blocking)\n close close the browser session\n status show current session status\n resize <width> <height> resize the browser viewport\n eval <expression> evaluate javascript expression on the page (browser context)\n playwright <call> execute playwright api call (node.js context)\n state-import [file] import cookies from netscape format file\n\nCSS Inspection:\n inspect <selector> inspect the runtime css of a page element\n tree <selector> show dom tree structure\n layout <selector> show ascii layout diagram\n findings <selector> show only issues/warnings/errors\n inject-css <css> inject css into the current page\n\nExport:\n screenshot take a screenshot of the current page\n\nConfiguration:\n config-show show current configuration\n config-set <key> <value> set a configuration value\n config-list list all profiles\n config-use <name> switch active profile\n config-new <name> create a new profile\n config-path show configuration file path\n\nAgent Skills:\n skill-install install agent skill for cssprobe-cli\n skill-uninstall remove agent skill for cssprobe-cli\n\nGlobal options:\n --help [command] print help\n --json output response as JSON\n --raw output only the result value\n --version print version\n -p, --profile <name> use named profile (or CSSPROBE_PROFILE env)",
|
|
3
3
|
"commands": {
|
|
4
4
|
"open": {
|
|
5
|
-
"help": "cssprobe-cli open [url]\n\nOpen browser in session mode (non-blocking)\n\nArguments:\n [url] url, file:// path, or local html file path\nOptions:\n --browser browser engine (default chromium)\n --headed show the browser window\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
5
|
+
"help": "cssprobe-cli open [url]\n\nOpen browser in session mode (non-blocking)\n\nArguments:\n [url] url, file:// path, or local html file path\nOptions:\n --browser browser engine (default chromium)\n --headed show the browser window\n --viewport viewport size as wxh (e.g. 1280x720)\n --state path to saved state file (cookies + localstorage)\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
6
6
|
"flags": {
|
|
7
7
|
"browser": "string",
|
|
8
|
-
"headed": "boolean"
|
|
8
|
+
"headed": "boolean",
|
|
9
|
+
"viewport": "string",
|
|
10
|
+
"state": "string"
|
|
9
11
|
},
|
|
10
12
|
"args": [
|
|
11
13
|
"url"
|
|
@@ -63,24 +65,40 @@
|
|
|
63
65
|
"css"
|
|
64
66
|
]
|
|
65
67
|
},
|
|
66
|
-
"
|
|
67
|
-
"help": "cssprobe-cli
|
|
68
|
-
"flags": {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
"resize": {
|
|
69
|
+
"help": "cssprobe-cli resize <width> <height>\n\nResize the browser viewport\n\nArguments:\n <width> viewport width\n <height> viewport height\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
70
|
+
"flags": {},
|
|
71
|
+
"args": [
|
|
72
|
+
"width",
|
|
73
|
+
"height"
|
|
74
|
+
]
|
|
72
75
|
},
|
|
73
76
|
"eval": {
|
|
74
|
-
"help": "cssprobe-cli eval <expression>\n\nEvaluate JavaScript expression on the page\n\nArguments:\n <expression> javascript expression to evaluate\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
77
|
+
"help": "cssprobe-cli eval <expression>\n\nEvaluate JavaScript expression on the page (browser context)\n\nArguments:\n <expression> javascript expression to evaluate\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
75
78
|
"flags": {},
|
|
76
79
|
"args": [
|
|
77
80
|
"expression"
|
|
78
81
|
]
|
|
79
82
|
},
|
|
83
|
+
"playwright": {
|
|
84
|
+
"help": "cssprobe-cli playwright <call>\n\nExecute Playwright API call (Node.js context)\n\nArguments:\n <call> playwright api call, e.g. \"page.setviewportsize({width: 1280, height: 720})\"\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
85
|
+
"flags": {},
|
|
86
|
+
"args": [
|
|
87
|
+
"call"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"screenshot": {
|
|
91
|
+
"help": "cssprobe-cli screenshot \n\nTake a screenshot of the current page\n\nOptions:\n --full-page take screenshot of the full scrollable page\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
92
|
+
"flags": {
|
|
93
|
+
"full-page": "boolean"
|
|
94
|
+
},
|
|
95
|
+
"args": []
|
|
96
|
+
},
|
|
80
97
|
"state-import": {
|
|
81
|
-
"help": "cssprobe-cli state-import [file]\n\nImport cookies from Netscape format file\n\nArguments:\n [file] netscape cookie file path (reads from stdin if omitted)\nOptions:\n --out output state file path (default: ~/.cssprobe-cli/states/imported.json)\n --merge existing state file to merge into\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
98
|
+
"help": "cssprobe-cli state-import [file]\n\nImport cookies from Netscape format file\n\nArguments:\n [file] netscape cookie file path (reads from stdin if omitted)\nOptions:\n --out output state file path (default: ~/.cssprobe-cli/states/imported.json)\n --name custom name for the state file (e.g. mysite or mysite.json)\n --merge existing state file to merge into\n\nGlobal options:\n --json output as JSON\n --profile, -p <name> use named profile",
|
|
82
99
|
"flags": {
|
|
83
100
|
"out": "string",
|
|
101
|
+
"name": "string",
|
|
84
102
|
"merge": "string"
|
|
85
103
|
},
|
|
86
104
|
"args": [
|
|
@@ -182,6 +182,9 @@ function buildSkillMd() {
|
|
|
182
182
|
'# From file',
|
|
183
183
|
'cssprobe-cli state-import cookies.txt --out mystate.json',
|
|
184
184
|
'',
|
|
185
|
+
'# From file with custom name (saves to ~/.cssprobe-cli/states/<name>.json)',
|
|
186
|
+
'cssprobe-cli state-import cookies.txt --name mysite',
|
|
187
|
+
'',
|
|
185
188
|
'# From stdin',
|
|
186
189
|
'cat cookies.txt | cssprobe-cli state-import --out mystate.json',
|
|
187
190
|
'',
|
|
@@ -222,7 +225,7 @@ function buildSkillMd() {
|
|
|
222
225
|
'',
|
|
223
226
|
BT3 + 'bash',
|
|
224
227
|
'# Import cookies first',
|
|
225
|
-
'cssprobe-cli state-import exported-cookies.txt --
|
|
228
|
+
'cssprobe-cli state-import exported-cookies.txt --name app',
|
|
226
229
|
'',
|
|
227
230
|
'# Then inspect with state',
|
|
228
231
|
'cssprobe-cli inspect https://app.example.com/dashboard ".main-panel" --state ~/.cssprobe-cli/states/app.json',
|
package/package.json
CHANGED