@ytspar/sweetlink 1.19.0 → 1.20.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 +40 -0
- package/dist/cli/outputSchemas.d.ts +57 -1
- package/dist/cli/outputSchemas.d.ts.map +1 -1
- package/dist/cli/outputSchemas.js +36 -1
- package/dist/cli/outputSchemas.js.map +1 -1
- package/dist/cli/sweetlink.js +385 -47
- package/dist/cli/sweetlink.js.map +1 -1
- package/dist/daemon/browser.d.ts.map +1 -1
- package/dist/daemon/browser.js.map +1 -1
- package/dist/daemon/client.d.ts +7 -0
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +16 -2
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/demo.d.ts.map +1 -1
- package/dist/daemon/demo.js +6 -2
- package/dist/daemon/demo.js.map +1 -1
- package/dist/daemon/diff.d.ts.map +1 -1
- package/dist/daemon/diff.js +5 -3
- package/dist/daemon/diff.js.map +1 -1
- package/dist/daemon/evidence.d.ts.map +1 -1
- package/dist/daemon/evidence.js +5 -5
- package/dist/daemon/evidence.js.map +1 -1
- package/dist/daemon/index.js +1 -1
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/listeners.d.ts.map +1 -1
- package/dist/daemon/listeners.js +7 -5
- package/dist/daemon/listeners.js.map +1 -1
- package/dist/daemon/recording.d.ts +5 -0
- package/dist/daemon/recording.d.ts.map +1 -1
- package/dist/daemon/recording.js +34 -11
- package/dist/daemon/recording.js.map +1 -1
- package/dist/daemon/refs.d.ts.map +1 -1
- package/dist/daemon/refs.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +419 -80
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/summary.d.ts +1 -1
- package/dist/daemon/summary.d.ts.map +1 -1
- package/dist/daemon/types.d.ts +1 -1
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/types.js.map +1 -1
- package/dist/daemon/viewer.d.ts +1 -1
- package/dist/daemon/viewer.d.ts.map +1 -1
- package/dist/daemon/viewer.js +18 -10
- package/dist/daemon/viewer.js.map +1 -1
- package/dist/ruler.js +3 -1
- package/dist/ruler.js.map +1 -1
- package/dist/runs.d.ts +34 -0
- package/dist/runs.d.ts.map +1 -0
- package/dist/runs.js +61 -0
- package/dist/runs.js.map +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +20 -10
- package/dist/server/index.js.map +1 -1
- package/dist/simulator/android.d.ts.map +1 -1
- package/dist/simulator/android.js +13 -5
- package/dist/simulator/android.js.map +1 -1
- package/dist/simulator/ios.d.ts.map +1 -1
- package/dist/simulator/ios.js +13 -5
- package/dist/simulator/ios.js.map +1 -1
- package/dist/term/ansi.d.ts.map +1 -1
- package/dist/term/ansi.js +49 -14
- package/dist/term/ansi.js.map +1 -1
- package/dist/term/player.d.ts.map +1 -1
- package/dist/term/player.js +5 -5
- package/dist/term/player.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +8 -4
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ Sweetlink enables Claude AI agents to autonomously debug, test, and iterate on w
|
|
|
13
13
|
## Features
|
|
14
14
|
|
|
15
15
|
- **📸 Screenshots** - Capture full page or element-specific screenshots (html2canvas + CDP)
|
|
16
|
+
- **🧭 Inspect Context** - One command for screenshot paths, refs, console/network deltas, a11y, vitals, and next actions
|
|
16
17
|
- **🖱️ Screenshot Button** - One-click screenshot capture with console logs from browser UI
|
|
17
18
|
- **🔍 DOM Queries** - Query and inspect DOM elements with CSS selectors
|
|
18
19
|
- **📊 Console Logs** - Capture and filter browser console output with JSON/summary formats
|
|
@@ -171,13 +172,52 @@ Add to your package.json for CLI access:
|
|
|
171
172
|
Then use:
|
|
172
173
|
|
|
173
174
|
```bash
|
|
175
|
+
pnpm sweetlink inspect --url http://localhost:3000
|
|
174
176
|
pnpm sweetlink screenshot
|
|
175
177
|
pnpm sweetlink logs
|
|
176
178
|
pnpm sweetlink query --selector "h1"
|
|
177
179
|
```
|
|
178
180
|
|
|
181
|
+
## Agent Protocol
|
|
182
|
+
|
|
183
|
+
For LLM-driven frontend work, prefer a repeatable evidence loop:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Inspect: generate the state bundle an agent should reason from
|
|
187
|
+
pnpm sweetlink inspect --url http://localhost:3000 --label "initial state" --json
|
|
188
|
+
|
|
189
|
+
# Act: use @e refs from snapshot.md/context.json, not brittle CSS selectors
|
|
190
|
+
pnpm sweetlink click @e2 --url http://localhost:3000 --json
|
|
191
|
+
|
|
192
|
+
# Verify: rerun inspect after the DOM or visual state changes
|
|
193
|
+
pnpm sweetlink inspect --url http://localhost:3000 --label "after action" --expected "Menu opens" --json
|
|
194
|
+
|
|
195
|
+
# Record: when evidence needs to travel with a PR
|
|
196
|
+
pnpm sweetlink record start --url http://localhost:3000
|
|
197
|
+
pnpm sweetlink record stop
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
`inspect` creates `.sweetlink/inspect/<timestamp-label>/SUMMARY.md`, `context.json`, `screenshot.png`, `snapshot.md`, `console.txt`, `network.txt`, and `a11y.json`. Agents should read `SUMMARY.md` first, use `@e` refs for `click`, `fill`, and `press`, retry stale refs by rerunning `inspect`, and attach the summary plus screenshot or recording artifacts to handoffs and PRs.
|
|
201
|
+
|
|
179
202
|
## CLI Usage
|
|
180
203
|
|
|
204
|
+
### Inspect Context
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Human-readable summary with artifact paths
|
|
208
|
+
pnpm sweetlink inspect --url http://localhost:3000 --label "checkout review"
|
|
209
|
+
|
|
210
|
+
# Stable JSON schema for agents
|
|
211
|
+
pnpm sweetlink inspect --url http://localhost:3000 --json
|
|
212
|
+
|
|
213
|
+
# Add expected outcome and action transcript to the evidence bundle
|
|
214
|
+
pnpm sweetlink inspect --url http://localhost:3000 \
|
|
215
|
+
--expected "Save button remains enabled" \
|
|
216
|
+
--action "clicked promo warning"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
The `context` alias is equivalent to `inspect`.
|
|
220
|
+
|
|
181
221
|
### Screenshots
|
|
182
222
|
|
|
183
223
|
```bash
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export interface JsonEnvelope<T = unknown> {
|
|
8
8
|
ok: boolean;
|
|
9
9
|
command: string;
|
|
10
|
-
data: T;
|
|
10
|
+
data: T | null;
|
|
11
11
|
error?: string;
|
|
12
12
|
duration: number;
|
|
13
13
|
}
|
|
@@ -105,6 +105,62 @@ export interface SnapshotData {
|
|
|
105
105
|
}>;
|
|
106
106
|
diff?: string;
|
|
107
107
|
}
|
|
108
|
+
export interface InspectData {
|
|
109
|
+
url: string;
|
|
110
|
+
title: string;
|
|
111
|
+
generatedAt: string;
|
|
112
|
+
viewport: {
|
|
113
|
+
width: number;
|
|
114
|
+
height: number;
|
|
115
|
+
deviceScaleFactor?: number;
|
|
116
|
+
};
|
|
117
|
+
vitals: {
|
|
118
|
+
fcp: number | null;
|
|
119
|
+
pageSize: number | null;
|
|
120
|
+
};
|
|
121
|
+
artifacts: {
|
|
122
|
+
dir: string;
|
|
123
|
+
summaryMarkdown: string;
|
|
124
|
+
contextJson: string;
|
|
125
|
+
screenshotPng: string;
|
|
126
|
+
snapshotMarkdown: string;
|
|
127
|
+
consoleText: string;
|
|
128
|
+
networkText: string;
|
|
129
|
+
a11yJson?: string;
|
|
130
|
+
};
|
|
131
|
+
counts: {
|
|
132
|
+
refs: number;
|
|
133
|
+
consoleEntries: number;
|
|
134
|
+
consoleErrors: number;
|
|
135
|
+
consoleWarnings: number;
|
|
136
|
+
networkEntries: number;
|
|
137
|
+
networkFailures: number;
|
|
138
|
+
a11yViolations?: number;
|
|
139
|
+
a11yIncomplete?: number;
|
|
140
|
+
};
|
|
141
|
+
refs: Array<{
|
|
142
|
+
ref: string;
|
|
143
|
+
role: string;
|
|
144
|
+
name: string;
|
|
145
|
+
}>;
|
|
146
|
+
console: {
|
|
147
|
+
entries: unknown[];
|
|
148
|
+
formatted: string;
|
|
149
|
+
};
|
|
150
|
+
network: {
|
|
151
|
+
entries: unknown[];
|
|
152
|
+
formatted: string;
|
|
153
|
+
};
|
|
154
|
+
a11y?: unknown;
|
|
155
|
+
failureArtifacts: string[];
|
|
156
|
+
nextActions: string[];
|
|
157
|
+
expectedOutcome?: string;
|
|
158
|
+
actionTranscript?: Array<{
|
|
159
|
+
action: string;
|
|
160
|
+
target?: string;
|
|
161
|
+
result?: string;
|
|
162
|
+
}>;
|
|
163
|
+
}
|
|
108
164
|
export declare const SCHEMAS: Record<string, string>;
|
|
109
165
|
/**
|
|
110
166
|
* Write a JSON envelope to stdout. Used in --json mode.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outputSchemas.d.ts","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"outputSchemas.d.ts","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
const ENVELOPE_SCHEMA = `interface JsonEnvelope<T> {
|
|
11
11
|
ok: boolean;
|
|
12
12
|
command: string;
|
|
13
|
-
data: T;
|
|
13
|
+
data: T | null;
|
|
14
14
|
error?: string;
|
|
15
15
|
duration: number;
|
|
16
16
|
}`;
|
|
@@ -100,6 +100,41 @@ export const SCHEMAS = {
|
|
|
100
100
|
tree: string;
|
|
101
101
|
refs?: Array<{ ref: string; role: string; name: string }>;
|
|
102
102
|
diff?: string;
|
|
103
|
+
}`,
|
|
104
|
+
inspect: `interface InspectData {
|
|
105
|
+
url: string;
|
|
106
|
+
title: string;
|
|
107
|
+
generatedAt: string;
|
|
108
|
+
viewport: { width: number; height: number; deviceScaleFactor?: number };
|
|
109
|
+
vitals: { fcp: number | null; pageSize: number | null };
|
|
110
|
+
artifacts: {
|
|
111
|
+
dir: string;
|
|
112
|
+
summaryMarkdown: string;
|
|
113
|
+
contextJson: string;
|
|
114
|
+
screenshotPng: string;
|
|
115
|
+
snapshotMarkdown: string;
|
|
116
|
+
consoleText: string;
|
|
117
|
+
networkText: string;
|
|
118
|
+
a11yJson?: string;
|
|
119
|
+
};
|
|
120
|
+
counts: {
|
|
121
|
+
refs: number;
|
|
122
|
+
consoleEntries: number;
|
|
123
|
+
consoleErrors: number;
|
|
124
|
+
consoleWarnings: number;
|
|
125
|
+
networkEntries: number;
|
|
126
|
+
networkFailures: number;
|
|
127
|
+
a11yViolations?: number;
|
|
128
|
+
a11yIncomplete?: number;
|
|
129
|
+
};
|
|
130
|
+
refs: Array<{ ref: string; role: string; name: string }>;
|
|
131
|
+
console: { entries: unknown[]; formatted: string };
|
|
132
|
+
network: { entries: unknown[]; formatted: string };
|
|
133
|
+
a11y?: unknown;
|
|
134
|
+
failureArtifacts: string[];
|
|
135
|
+
nextActions: string[];
|
|
136
|
+
expectedOutcome?: string;
|
|
137
|
+
actionTranscript?: Array<{ action: string; target?: string; result?: string }>;
|
|
103
138
|
}`,
|
|
104
139
|
console: `interface ConsoleData {
|
|
105
140
|
formatted: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outputSchemas.js","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"outputSchemas.js","sourceRoot":"","sources":["../../src/cli/outputSchemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6JH,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,MAAM,eAAe,GAAG;;;;;;EAMtB,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAA2B;IAC7C,UAAU,EAAE;;;;;;EAMZ;IAEA,KAAK,EAAE;;;;EAIP;IAEA,IAAI,EAAE;;;;;;EAMN;IAEA,IAAI,EAAE;;EAEN;IAEA,KAAK,EAAE;;;;EAIP;IAEA,OAAO,EAAE;;EAET;IAEA,KAAK,EAAE;;;;;EAKP;IAEA,OAAO,EAAE;;;EAGT;IAEA,MAAM,EAAE;;;;EAIR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;EAGR;IAEA,OAAO,EAAE;;;;EAIT;IAEA,IAAI,EAAE;;;;EAIN;IAEA,MAAM,EAAE;;;;EAIR;IAEA,MAAM,EAAE;;;;;;EAMR;IAEA,QAAQ,EAAE;;;;EAIV;IAEA,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCT;IAEA,OAAO,EAAE;;;;;;EAMT;IAEA,IAAI,EAAE;;;EAGN;IAEA,KAAK,EAAE;;EAEP;IAEA,MAAM,EAAE;;;;;;EAMR;CACD,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAsB;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|