whisker-ux 0.1.0 → 0.2.0
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/README.md +103 -56
- package/dist/agent.js +106 -11
- package/dist/agent.js.map +1 -1
- package/dist/auth.d.ts +10 -0
- package/dist/auth.js +53 -0
- package/dist/auth.js.map +1 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +37 -1
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +154 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +12 -0
- package/dist/config.js +145 -5
- package/dist/config.js.map +1 -1
- package/dist/report.d.ts +1 -1
- package/dist/report.js +5 -7
- package/dist/report.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/ui.d.ts +5 -3
- package/dist/ui.js +28 -8
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,48 +16,70 @@ AI-powered usability testing CLI. Whisker uses Claude's computer use capability
|
|
|
16
16
|
╰────────────────────────────────────────────────────────────────────╯
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
1. **Launch**: Opens a visible Chromium browser at your URL
|
|
22
|
+
2. **Navigate**: Claude sees the screen and decides what actions to take (click, type, scroll)
|
|
23
|
+
3. **Think Aloud**: Claude narrates its thought process, noting confusion or issues
|
|
24
|
+
4. **Capture**: Screenshots are taken after each action
|
|
25
|
+
5. **Analyze**: Claude reviews the session to identify UX issues, bugs, and accessibility problems
|
|
26
|
+
6. **Report**: Generates detailed findings with severity levels, reproduction steps, and suggested fixes
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
- **Think-Aloud Testing**: Get insights into user confusion and friction points
|
|
23
|
-
- **Comprehensive Reports**: Detailed findings with severity levels, reproduction steps, and suggested fixes
|
|
24
|
-
- **Screenshot Documentation**: Every step is captured for easy reference
|
|
25
|
-
- **Bug Detection**: Catches console errors, network failures, and visual issues
|
|
26
|
-
- **Developer-Friendly Output**: Includes grep patterns to find relevant code
|
|
28
|
+
## Quick Start
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
### 1. Install Whisker
|
|
29
31
|
|
|
30
32
|
```bash
|
|
31
33
|
npm install -g whisker-ux
|
|
32
34
|
```
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
### 2. Get Your API Key
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
npx whisker-ux "Sign up for an account" --url https://your-site.com
|
|
38
|
-
```
|
|
38
|
+
Get an Anthropic API key from: <https://console.anthropic.com/settings/keys>
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
### 3. Set Up Your Key
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
#### Option A: Interactive setup (recommended)
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
45
|
whisker setup
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
#### Option B: Create a .env file
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
echo "ANTHROPIC_API_KEY=sk-ant-your-key-here" > .env
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### Option C: Environment variable
|
|
49
55
|
|
|
50
56
|
```bash
|
|
51
|
-
export ANTHROPIC_API_KEY=sk-ant
|
|
57
|
+
export ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
52
58
|
```
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
### 4. Run a Test
|
|
55
61
|
|
|
56
62
|
```bash
|
|
57
|
-
whisker "
|
|
63
|
+
whisker "Find the pricing page" --url https://your-site.com
|
|
58
64
|
```
|
|
59
65
|
|
|
60
|
-
|
|
66
|
+
### 5. View Results
|
|
67
|
+
|
|
68
|
+
Open `.whisker/report.md` to see the findings.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Run Without Installing (npx)
|
|
73
|
+
|
|
74
|
+
If you prefer not to install globally:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Set your API key first (choose one method from Step 3 above)
|
|
78
|
+
export ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
79
|
+
|
|
80
|
+
# Run with npx
|
|
81
|
+
npx whisker-ux "Find the pricing page" --url https://your-site.com
|
|
82
|
+
```
|
|
61
83
|
|
|
62
84
|
## Usage
|
|
63
85
|
|
|
@@ -78,6 +100,9 @@ whisker <task> --url <url> [options]
|
|
|
78
100
|
| `-m, --max-steps <number>` | Maximum navigation steps | 50 |
|
|
79
101
|
| `-v, --viewport <WxH>` | Viewport size | 1280x800 |
|
|
80
102
|
| `-o, --output <dir>` | Output directory | .whisker |
|
|
103
|
+
| `-l, --login` | Pause for manual login before AI takes over | - |
|
|
104
|
+
| `-a, --auth <name>` | Use saved authentication state | - |
|
|
105
|
+
| `-w, --screenshot-window <n>` | Screenshots to keep in context (reduces tokens) | 5 |
|
|
81
106
|
|
|
82
107
|
### Examples
|
|
83
108
|
|
|
@@ -107,9 +132,47 @@ whisker "Find pricing information" \
|
|
|
107
132
|
--max-steps 10
|
|
108
133
|
```
|
|
109
134
|
|
|
135
|
+
## Authentication
|
|
136
|
+
|
|
137
|
+
For testing sites that require login, Whisker offers two approaches:
|
|
138
|
+
|
|
139
|
+
### Option 1: Interactive Login (`--login`)
|
|
140
|
+
|
|
141
|
+
Best for: Quick manual testing, 2FA, OAuth, SSO
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
whisker "View order history" --url https://mystore.com/account --login
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The browser opens, you log in manually, then press Enter to let Claude take over.
|
|
148
|
+
|
|
149
|
+
### Option 2: Saved Auth State (`--auth`)
|
|
150
|
+
|
|
151
|
+
Best for: Repeatable tests, CI/CD pipelines
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# One-time: save your login session
|
|
155
|
+
whisker auth save mysite --url https://mysite.com/login
|
|
156
|
+
# Log in manually in the browser, then press Enter
|
|
157
|
+
|
|
158
|
+
# Future runs: reuse saved auth
|
|
159
|
+
whisker "View dashboard" --url https://mysite.com/dashboard --auth mysite
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Managing Auth States
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
whisker auth list # List saved auth states
|
|
166
|
+
whisker auth delete mysite # Delete a saved auth state
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Auth states are stored in `~/.config/whisker/auth/` with restricted permissions.
|
|
170
|
+
|
|
171
|
+
> **Note:** Auth states contain session cookies which may expire. Re-save if you get logged out.
|
|
172
|
+
|
|
110
173
|
## Output
|
|
111
174
|
|
|
112
|
-
Whisker generates
|
|
175
|
+
Whisker generates a report with task completion status, a summary, and detailed findings organized by severity (P0-P3). Each finding includes reproduction steps, screenshot references, and suggested fixes.
|
|
113
176
|
|
|
114
177
|
```
|
|
115
178
|
.whisker/
|
|
@@ -121,31 +184,6 @@ Whisker generates three outputs in the `.whisker` directory:
|
|
|
121
184
|
└── ...
|
|
122
185
|
```
|
|
123
186
|
|
|
124
|
-
### Report Structure
|
|
125
|
-
|
|
126
|
-
The report includes:
|
|
127
|
-
|
|
128
|
-
- **Task completion status** - Whether the AI successfully completed the task
|
|
129
|
-
- **Summary** - Overview of the testing session
|
|
130
|
-
- **Findings** - Detailed issues organized by priority:
|
|
131
|
-
- 🔴 P0 - Critical, blocking issues
|
|
132
|
-
- 🟠 P1 - Major problems
|
|
133
|
-
- 🟡 P2 - Minor issues
|
|
134
|
-
- 💡 P3 - Suggestions
|
|
135
|
-
- **Console errors** - JavaScript errors detected
|
|
136
|
-
- **Network failures** - Failed API calls and requests
|
|
137
|
-
|
|
138
|
-
### Finding Details
|
|
139
|
-
|
|
140
|
-
Each finding includes:
|
|
141
|
-
|
|
142
|
-
- Severity and category (bug, ux-friction, accessibility, performance, visual, copy)
|
|
143
|
-
- Description with expected vs actual behavior
|
|
144
|
-
- Steps to reproduce
|
|
145
|
-
- Screenshot reference
|
|
146
|
-
- Suggested fix
|
|
147
|
-
- Grep patterns to find relevant code
|
|
148
|
-
|
|
149
187
|
## Commands
|
|
150
188
|
|
|
151
189
|
### `whisker setup`
|
|
@@ -160,6 +198,18 @@ Remove your stored API key.
|
|
|
160
198
|
|
|
161
199
|
Run a usability test. This is the default command.
|
|
162
200
|
|
|
201
|
+
### `whisker auth save <name>`
|
|
202
|
+
|
|
203
|
+
Save browser authentication state for reuse. Opens a browser for manual login.
|
|
204
|
+
|
|
205
|
+
### `whisker auth list`
|
|
206
|
+
|
|
207
|
+
List all saved authentication states.
|
|
208
|
+
|
|
209
|
+
### `whisker auth delete <name>`
|
|
210
|
+
|
|
211
|
+
Delete a saved authentication state.
|
|
212
|
+
|
|
163
213
|
## Configuration
|
|
164
214
|
|
|
165
215
|
### API Key
|
|
@@ -167,7 +217,9 @@ Run a usability test. This is the default command.
|
|
|
167
217
|
Whisker looks for your Anthropic API key in this order:
|
|
168
218
|
|
|
169
219
|
1. `ANTHROPIC_API_KEY` environment variable
|
|
170
|
-
2.
|
|
220
|
+
2. `.env.local` file in current directory (for local overrides)
|
|
221
|
+
3. `.env` file in current directory
|
|
222
|
+
4. `~/.config/whisker/config.json` (set via `whisker setup`)
|
|
171
223
|
|
|
172
224
|
### Requirements
|
|
173
225
|
|
|
@@ -184,7 +236,11 @@ const config: WhiskerConfig = {
|
|
|
184
236
|
url: "https://example.com",
|
|
185
237
|
maxSteps: 50,
|
|
186
238
|
viewport: { width: 1280, height: 800 },
|
|
187
|
-
outputDir: ".whisker"
|
|
239
|
+
outputDir: ".whisker",
|
|
240
|
+
// Optional auth options:
|
|
241
|
+
// interactiveLogin: true, // Pause for manual login
|
|
242
|
+
// authStateName: "mysite", // Use saved auth state
|
|
243
|
+
// screenshotWindow: 5, // Screenshots to keep in context
|
|
188
244
|
};
|
|
189
245
|
|
|
190
246
|
const { report, sessionLog } = await runSession(config);
|
|
@@ -216,15 +272,6 @@ If you hit API rate limits, reduce `--max-steps` or wait before retrying.
|
|
|
216
272
|
|
|
217
273
|
The browser window should appear during testing. If it doesn't, ensure you're not running in a headless environment.
|
|
218
274
|
|
|
219
|
-
## How It Works
|
|
220
|
-
|
|
221
|
-
1. **Launch**: Opens a visible Chromium browser at your URL
|
|
222
|
-
2. **Navigate**: Claude sees the screen and decides what actions to take (click, type, scroll)
|
|
223
|
-
3. **Think Aloud**: Claude narrates its thought process, noting confusion or issues
|
|
224
|
-
4. **Capture**: Screenshots are taken after each action
|
|
225
|
-
5. **Analyze**: Claude reviews the session observations and screenshots to identify issues that may not be obvious during navigation
|
|
226
|
-
6. **Report**: Results are saved as markdown and JSON
|
|
227
|
-
|
|
228
275
|
## License
|
|
229
276
|
|
|
230
277
|
MIT
|
package/dist/agent.js
CHANGED
|
@@ -1,10 +1,76 @@
|
|
|
1
1
|
import Anthropic from "@anthropic-ai/sdk";
|
|
2
2
|
import { BrowserManager } from "./browser.js";
|
|
3
3
|
import { getNavigationSystemPrompt, getReportSystemPrompt, } from "./prompts.js";
|
|
4
|
-
import { printTestStart, startSpinner, stopSpinner, startWaitingSpinner, clearSpinner, printStepComplete } from "./ui.js";
|
|
4
|
+
import { printTestStart, startSpinner, stopSpinner, startWaitingSpinner, clearSpinner, printStepComplete, printLoginPrompt, printLoginComplete, waitForEnterKey } from "./ui.js";
|
|
5
5
|
const MODEL = "claude-sonnet-4-5-20250929";
|
|
6
6
|
const MAX_SCREENSHOTS_FOR_ANALYSIS = 10; // Limit screenshots sent to analysis phase
|
|
7
|
+
const DEFAULT_SCREENSHOT_WINDOW = 5; // Keep last N screenshots in navigation context
|
|
7
8
|
const BETA_FLAG = "computer-use-2025-01-24";
|
|
9
|
+
/**
|
|
10
|
+
* Prunes old screenshots from messages to reduce token usage.
|
|
11
|
+
* Keeps only the last `maxScreenshots` screenshots, replacing older ones with text placeholders.
|
|
12
|
+
* This dramatically reduces context size for long sessions while preserving recent visual context.
|
|
13
|
+
*
|
|
14
|
+
* Tracks individual (messageIndex, blockIndex) pairs to handle messages with multiple screenshots correctly.
|
|
15
|
+
*/
|
|
16
|
+
function pruneOldScreenshots(messages, maxScreenshots) {
|
|
17
|
+
// Find all screenshot locations as (messageIndex, blockIndex) pairs, newest first
|
|
18
|
+
const screenshotLocations = [];
|
|
19
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
20
|
+
const msg = messages[i];
|
|
21
|
+
if (msg.role === "user" && Array.isArray(msg.content)) {
|
|
22
|
+
// Iterate blocks in reverse to maintain newest-first order within each message
|
|
23
|
+
for (let j = msg.content.length - 1; j >= 0; j--) {
|
|
24
|
+
const block = msg.content[j];
|
|
25
|
+
if (typeof block === "object" &&
|
|
26
|
+
block !== null &&
|
|
27
|
+
"type" in block &&
|
|
28
|
+
block.type === "tool_result" &&
|
|
29
|
+
"content" in block &&
|
|
30
|
+
Array.isArray(block.content)) {
|
|
31
|
+
const hasImage = block.content.some((c) => typeof c === "object" && c !== null && "type" in c && c.type === "image");
|
|
32
|
+
if (hasImage) {
|
|
33
|
+
screenshotLocations.push({ msgIdx: i, blockIdx: j });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// If within limit, return as-is
|
|
40
|
+
if (screenshotLocations.length <= maxScreenshots) {
|
|
41
|
+
return messages;
|
|
42
|
+
}
|
|
43
|
+
// Build set of block locations to prune (older screenshots beyond the window)
|
|
44
|
+
const locationsToPrune = new Set(screenshotLocations.slice(maxScreenshots).map(loc => `${loc.msgIdx}:${loc.blockIdx}`));
|
|
45
|
+
// Create pruned copy, only replacing specific blocks
|
|
46
|
+
return messages.map((msg, msgIdx) => {
|
|
47
|
+
if (msg.role === "user" && Array.isArray(msg.content)) {
|
|
48
|
+
// Check if any blocks in this message need pruning
|
|
49
|
+
const hasBlocksToPrune = msg.content.some((_, blockIdx) => locationsToPrune.has(`${msgIdx}:${blockIdx}`));
|
|
50
|
+
if (!hasBlocksToPrune)
|
|
51
|
+
return msg;
|
|
52
|
+
const newContent = msg.content.map((block, blockIdx) => {
|
|
53
|
+
if (!locationsToPrune.has(`${msgIdx}:${blockIdx}`))
|
|
54
|
+
return block;
|
|
55
|
+
if (typeof block === "object" &&
|
|
56
|
+
block !== null &&
|
|
57
|
+
"type" in block &&
|
|
58
|
+
block.type === "tool_result" &&
|
|
59
|
+
"content" in block &&
|
|
60
|
+
Array.isArray(block.content)) {
|
|
61
|
+
// Replace image content with text placeholder
|
|
62
|
+
return {
|
|
63
|
+
...block,
|
|
64
|
+
content: "[Screenshot removed from context to save tokens]",
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return block;
|
|
68
|
+
});
|
|
69
|
+
return { ...msg, content: newContent };
|
|
70
|
+
}
|
|
71
|
+
return msg;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
8
74
|
export async function runSession(config) {
|
|
9
75
|
const client = new Anthropic();
|
|
10
76
|
const browser = new BrowserManager(config);
|
|
@@ -12,7 +78,16 @@ export async function runSession(config) {
|
|
|
12
78
|
try {
|
|
13
79
|
startSpinner("Launching browser...");
|
|
14
80
|
await browser.launch();
|
|
81
|
+
stopSpinner("Browser launched");
|
|
82
|
+
startSpinner("Navigating to URL...");
|
|
83
|
+
await browser.navigateToUrl();
|
|
15
84
|
stopSpinner(`Browser ready at ${config.url}`);
|
|
85
|
+
// Interactive login: pause for user to log in manually
|
|
86
|
+
if (config.interactiveLogin) {
|
|
87
|
+
printLoginPrompt();
|
|
88
|
+
await waitForEnterKey();
|
|
89
|
+
printLoginComplete();
|
|
90
|
+
}
|
|
16
91
|
const sessionLog = await navigationPhase(client, browser, config);
|
|
17
92
|
printStepComplete(`Navigation complete (${sessionLog.steps.length} steps)`);
|
|
18
93
|
startSpinner("Generating report...");
|
|
@@ -34,8 +109,16 @@ async function navigationPhase(client, browser, config) {
|
|
|
34
109
|
display_width_px: config.viewport.width,
|
|
35
110
|
display_height_px: config.viewport.height,
|
|
36
111
|
display_number: 1,
|
|
112
|
+
cache_control: { type: "ephemeral" },
|
|
37
113
|
};
|
|
38
|
-
|
|
114
|
+
// Use array format with cache_control for prompt caching
|
|
115
|
+
const systemPrompt = [
|
|
116
|
+
{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: getNavigationSystemPrompt(config),
|
|
119
|
+
cache_control: { type: "ephemeral" },
|
|
120
|
+
},
|
|
121
|
+
];
|
|
39
122
|
const messages = [
|
|
40
123
|
{
|
|
41
124
|
role: "user",
|
|
@@ -43,9 +126,12 @@ async function navigationPhase(client, browser, config) {
|
|
|
43
126
|
},
|
|
44
127
|
];
|
|
45
128
|
let stepCount = 0;
|
|
129
|
+
const screenshotWindow = config.screenshotWindow ?? DEFAULT_SCREENSHOT_WINDOW;
|
|
46
130
|
while (stepCount < config.maxSteps) {
|
|
47
131
|
// Show waiting spinner while waiting for API response
|
|
48
132
|
startWaitingSpinner();
|
|
133
|
+
// Prune old screenshots to reduce token usage
|
|
134
|
+
const prunedMessages = pruneOldScreenshots(messages, screenshotWindow);
|
|
49
135
|
let response;
|
|
50
136
|
try {
|
|
51
137
|
response = await client.beta.messages.create({
|
|
@@ -53,7 +139,7 @@ async function navigationPhase(client, browser, config) {
|
|
|
53
139
|
max_tokens: 4096,
|
|
54
140
|
system: systemPrompt,
|
|
55
141
|
tools: [computerTool],
|
|
56
|
-
messages,
|
|
142
|
+
messages: prunedMessages,
|
|
57
143
|
betas: [BETA_FLAG],
|
|
58
144
|
});
|
|
59
145
|
}
|
|
@@ -72,15 +158,15 @@ async function navigationPhase(client, browser, config) {
|
|
|
72
158
|
// Process content blocks
|
|
73
159
|
const toolResults = [];
|
|
74
160
|
let hasToolUse = false;
|
|
75
|
-
|
|
76
|
-
// First pass: collect thinking text
|
|
161
|
+
// First pass: collect thinking text as observations
|
|
77
162
|
for (const block of response.content) {
|
|
78
163
|
if (block.type === "text") {
|
|
79
164
|
observations.push(block.text);
|
|
80
|
-
currentThinking += block.text + " ";
|
|
81
165
|
}
|
|
82
166
|
}
|
|
83
|
-
//
|
|
167
|
+
// Actions that don't change visual state - skip screenshot to save tokens
|
|
168
|
+
const SKIP_SCREENSHOT_ACTIONS = new Set(["mouse_move"]);
|
|
169
|
+
// Second pass: process tool uses
|
|
84
170
|
for (const block of response.content) {
|
|
85
171
|
if (block.type === "tool_use") {
|
|
86
172
|
hasToolUse = true;
|
|
@@ -106,10 +192,19 @@ async function navigationPhase(client, browser, config) {
|
|
|
106
192
|
continue;
|
|
107
193
|
}
|
|
108
194
|
}
|
|
109
|
-
// Take screenshot after action
|
|
110
|
-
const screenshotBase64 = await browser.takeScreenshot();
|
|
111
195
|
// Print completed step
|
|
112
196
|
stopSpinner(`Step ${stepCount}: ${actionDesc}`);
|
|
197
|
+
// Skip screenshot for non-visual actions to save tokens
|
|
198
|
+
if (SKIP_SCREENSHOT_ACTIONS.has(action.action)) {
|
|
199
|
+
toolResults.push({
|
|
200
|
+
type: "tool_result",
|
|
201
|
+
tool_use_id: block.id,
|
|
202
|
+
content: "Action completed. The page looks the same as before.",
|
|
203
|
+
});
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
// Take screenshot after action
|
|
207
|
+
const screenshotBase64 = await browser.takeScreenshot();
|
|
113
208
|
steps.push({
|
|
114
209
|
stepNumber: stepCount,
|
|
115
210
|
action,
|
|
@@ -124,7 +219,7 @@ async function navigationPhase(client, browser, config) {
|
|
|
124
219
|
type: "image",
|
|
125
220
|
source: {
|
|
126
221
|
type: "base64",
|
|
127
|
-
media_type: "image/
|
|
222
|
+
media_type: "image/jpeg",
|
|
128
223
|
data: screenshotBase64,
|
|
129
224
|
},
|
|
130
225
|
},
|
|
@@ -216,7 +311,7 @@ async function reportPhase(client, sessionLog) {
|
|
|
216
311
|
type: "image",
|
|
217
312
|
source: {
|
|
218
313
|
type: "base64",
|
|
219
|
-
media_type: "image/
|
|
314
|
+
media_type: "image/jpeg",
|
|
220
315
|
data: step.screenshotBase64,
|
|
221
316
|
},
|
|
222
317
|
});
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
ADDED
package/dist/auth.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { chromium } from "playwright";
|
|
2
|
+
import { getAuthStatePath, ensureAuthDir, authStateExists } from "./config.js";
|
|
3
|
+
import { printLoginPrompt, printLoginComplete, waitForEnterKey } from "./ui.js";
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
export async function runAuthCapture(options) {
|
|
6
|
+
const { url, name, viewport = { width: 1280, height: 800 } } = options;
|
|
7
|
+
// Check if auth state already exists
|
|
8
|
+
if (authStateExists(name)) {
|
|
9
|
+
throw new Error(`Auth state "${name}" already exists. Use "whisker auth delete ${name}" to remove it first.`);
|
|
10
|
+
}
|
|
11
|
+
// Ensure auth directory exists early (fail fast if permissions issue)
|
|
12
|
+
ensureAuthDir();
|
|
13
|
+
console.log("");
|
|
14
|
+
console.log(`Saving auth state as: ${name}`);
|
|
15
|
+
console.log(`Opening: ${url}`);
|
|
16
|
+
console.log("");
|
|
17
|
+
const browser = await chromium.launch({
|
|
18
|
+
headless: false,
|
|
19
|
+
args: [`--window-size=${viewport.width},${viewport.height + 100}`],
|
|
20
|
+
});
|
|
21
|
+
let context = null;
|
|
22
|
+
try {
|
|
23
|
+
context = await browser.newContext({
|
|
24
|
+
viewport: { width: viewport.width, height: viewport.height },
|
|
25
|
+
});
|
|
26
|
+
const page = await context.newPage();
|
|
27
|
+
await page.goto(url, { waitUntil: "domcontentloaded" });
|
|
28
|
+
// Wait for user to log in
|
|
29
|
+
printLoginPrompt();
|
|
30
|
+
await waitForEnterKey();
|
|
31
|
+
printLoginComplete();
|
|
32
|
+
// Save storage state
|
|
33
|
+
const authPath = getAuthStatePath(name);
|
|
34
|
+
await context.storageState({ path: authPath });
|
|
35
|
+
// Set file permissions (read/write only for owner)
|
|
36
|
+
try {
|
|
37
|
+
fs.chmodSync(authPath, 0o600);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Ignore on platforms that don't support POSIX permissions
|
|
41
|
+
}
|
|
42
|
+
console.log(`Auth state saved to: ${authPath}`);
|
|
43
|
+
console.log("");
|
|
44
|
+
console.log(`Use it with: whisker run "task" --url <url> --auth ${name}`);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
if (context) {
|
|
48
|
+
await context.close();
|
|
49
|
+
}
|
|
50
|
+
await browser.close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAQ9B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAEvE,qCAAqC;IACrC,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,8CAA8C,IAAI,uBAAuB,CAC7F,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,aAAa,EAAE,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,CAAC,iBAAiB,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,IAAI,OAAO,GAA0B,IAAI,CAAC;IAE1C,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;SAC7D,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAExD,0BAA0B;QAC1B,gBAAgB,EAAE,CAAC;QACnB,MAAM,eAAe,EAAE,CAAC;QACxB,kBAAkB,EAAE,CAAC;QAErB,qBAAqB;QACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/C,mDAAmD;QACnD,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
package/dist/browser.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare class BrowserManager {
|
|
|
8
8
|
private networkFailures;
|
|
9
9
|
constructor(config: WhiskerConfig);
|
|
10
10
|
launch(): Promise<void>;
|
|
11
|
+
navigateToUrl(): Promise<void>;
|
|
12
|
+
saveStorageState(path: string): Promise<void>;
|
|
11
13
|
takeScreenshot(): Promise<string>;
|
|
12
14
|
executeAction(action: ComputerAction): Promise<void>;
|
|
13
15
|
close(): Promise<void>;
|
package/dist/browser.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { chromium } from "playwright";
|
|
2
|
+
import { getAuthStatePath } from "./config.js";
|
|
2
3
|
function mapKeyNames(key) {
|
|
3
4
|
const keyMap = {
|
|
4
5
|
return: "Enter",
|
|
@@ -56,11 +57,16 @@ export class BrowserManager {
|
|
|
56
57
|
`--window-size=${this.config.viewport.width},${this.config.viewport.height + 100}`,
|
|
57
58
|
],
|
|
58
59
|
});
|
|
60
|
+
// Load saved auth state if specified
|
|
61
|
+
const storageState = this.config.authStateName
|
|
62
|
+
? getAuthStatePath(this.config.authStateName)
|
|
63
|
+
: undefined;
|
|
59
64
|
this.context = await this.browser.newContext({
|
|
60
65
|
viewport: {
|
|
61
66
|
width: this.config.viewport.width,
|
|
62
67
|
height: this.config.viewport.height,
|
|
63
68
|
},
|
|
69
|
+
storageState,
|
|
64
70
|
});
|
|
65
71
|
this.page = await this.context.newPage();
|
|
66
72
|
// Capture console errors
|
|
@@ -106,14 +112,44 @@ export class BrowserManager {
|
|
|
106
112
|
newPage.on("pageerror", (err) => {
|
|
107
113
|
this.consoleErrors.push(`[${new Date().toISOString()}] Uncaught: ${err.message}`);
|
|
108
114
|
});
|
|
115
|
+
newPage.on("response", (response) => {
|
|
116
|
+
if (response.status() >= 400) {
|
|
117
|
+
this.networkFailures.push({
|
|
118
|
+
url: response.url(),
|
|
119
|
+
method: response.request().method(),
|
|
120
|
+
status: response.status(),
|
|
121
|
+
statusText: response.statusText(),
|
|
122
|
+
timestamp: Date.now(),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
newPage.on("requestfailed", (request) => {
|
|
127
|
+
this.networkFailures.push({
|
|
128
|
+
url: request.url(),
|
|
129
|
+
method: request.method(),
|
|
130
|
+
status: 0,
|
|
131
|
+
statusText: request.failure()?.errorText ?? "Request failed",
|
|
132
|
+
timestamp: Date.now(),
|
|
133
|
+
});
|
|
134
|
+
});
|
|
109
135
|
});
|
|
136
|
+
}
|
|
137
|
+
async navigateToUrl() {
|
|
138
|
+
if (!this.page)
|
|
139
|
+
throw new Error("Browser not launched");
|
|
110
140
|
await this.page.goto(this.config.url, { waitUntil: "domcontentloaded" });
|
|
111
141
|
}
|
|
142
|
+
async saveStorageState(path) {
|
|
143
|
+
if (!this.context)
|
|
144
|
+
throw new Error("Browser not launched");
|
|
145
|
+
await this.context.storageState({ path });
|
|
146
|
+
}
|
|
112
147
|
async takeScreenshot() {
|
|
113
148
|
if (!this.page)
|
|
114
149
|
throw new Error("Browser not launched");
|
|
115
150
|
const buffer = await this.page.screenshot({
|
|
116
|
-
type: "
|
|
151
|
+
type: "jpeg",
|
|
152
|
+
quality: 85,
|
|
117
153
|
fullPage: false,
|
|
118
154
|
});
|
|
119
155
|
return buffer.toString("base64");
|