@ytspar/sweetlink 1.15.0 → 1.16.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.
@@ -0,0 +1,441 @@
1
+ # Responsive Screenshots - Examples
2
+
3
+ Common usage patterns for testing responsive design across breakpoints.
4
+
5
+ ## Example 1: Complete Responsive Test
6
+
7
+ **User Request:**
8
+ > "Test the new landing page across all breakpoints"
9
+
10
+ **Skill Action:**
11
+
12
+ ```bash
13
+ # Capture all breakpoints
14
+ pnpm sweetlink screenshot --viewport mobile --output /tmp/screenshots/landing-mobile.png
15
+ pnpm sweetlink screenshot --viewport tablet --output /tmp/screenshots/landing-tablet.png
16
+ pnpm sweetlink screenshot --viewport desktop --output /tmp/screenshots/landing-desktop.png
17
+ ```
18
+
19
+ **Output:**
20
+
21
+ ```text
22
+ ✅ Responsive Test: Landing Page
23
+
24
+ 📱 Mobile (375px)
25
+ Screenshot: /tmp/screenshots/landing-mobile.png
26
+ ✅ Single column layout
27
+ ✅ Touch-friendly navigation
28
+ ✅ Images scale correctly
29
+ ✅ Text readable at 16px
30
+
31
+ 💻 Tablet (768px)
32
+ Screenshot: /tmp/screenshots/landing-tablet.png
33
+ ✅ Two-column grid
34
+ ✅ Navigation bar expanded
35
+ ✅ Hero image displays properly
36
+ ✅ Call-to-action buttons visible
37
+
38
+ 🖥️ Desktop (1440px)
39
+ Screenshot: /tmp/screenshots/landing-desktop.png
40
+ ✅ Three-column grid
41
+ ✅ Full navigation with all items
42
+ ✅ Hero section uses full width
43
+ ✅ Professional whitespace
44
+
45
+ Overall: ✅ PASSED - All breakpoints look great!
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Example 2: Component-Specific Testing
51
+
52
+ **User Request:**
53
+ > "Check how the navigation menu looks on mobile vs desktop"
54
+
55
+ **Skill Action:**
56
+
57
+ ```bash
58
+ pnpm sweetlink screenshot --viewport mobile --selector "nav" --output /tmp/screenshots/nav-mobile.png
59
+ pnpm sweetlink screenshot --viewport desktop --selector "nav" --output /tmp/screenshots/nav-desktop.png
60
+ ```
61
+
62
+ **Output:**
63
+
64
+ ```text
65
+ 🔍 Navigation Component Analysis
66
+
67
+ 📱 Mobile (375px)
68
+ Screenshot: /tmp/screenshots/nav-mobile.png
69
+ Status: ⚠️ NEEDS WORK
70
+
71
+ Issues:
72
+ - Menu items are cramped (only 8px padding)
73
+ - Logo is too large for mobile screen
74
+ - Menu overlaps content slightly
75
+
76
+ Recommendations:
77
+ - Increase padding to 16px
78
+ - Reduce logo size by 30%
79
+ - Add z-index to ensure menu is above content
80
+
81
+ 🖥️ Desktop (1440px)
82
+ Screenshot: /tmp/screenshots/nav-desktop.png
83
+ Status: ✅ PERFECT
84
+
85
+ - Horizontal layout works well
86
+ - All menu items visible
87
+ - Logo is appropriately sized
88
+ - Spacing is professional
89
+ ```
90
+
91
+ ---
92
+
93
+ ## Example 3: Before/After Comparison
94
+
95
+ **User Request:**
96
+ > "I updated the responsive styles, show me the difference"
97
+
98
+ **Skill Action:**
99
+
100
+ ```bash
101
+ # Before (git stash to revert)
102
+ git stash
103
+ pnpm sweetlink screenshot --viewport mobile --output /tmp/screenshots/before-mobile.png
104
+ git stash pop
105
+
106
+ # After (with changes)
107
+ pnpm sweetlink screenshot --viewport mobile --output /tmp/screenshots/after-mobile.png
108
+ ```
109
+
110
+ **Output:**
111
+
112
+ ```markdown
113
+ 📊 Before/After Comparison (Mobile)
114
+
115
+ ### Before:
116
+ Screenshot: /tmp/screenshots/before-mobile.png
117
+ Issues:
118
+ - Text overflows container
119
+ - Images don't scale
120
+ - Buttons are too small
121
+
122
+ ### After:
123
+ Screenshot: /tmp/screenshots/after-mobile.png
124
+ Improvements:
125
+ ✅ Text wraps properly with word-break
126
+ ✅ Images use w-full class
127
+ ✅ Buttons increased to min-h-12
128
+
129
+ Result: Significant improvement in mobile usability!
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Example 4: Grid Layout Verification
135
+
136
+ **User Request:**
137
+ > "Verify the card grid works at all breakpoints"
138
+
139
+ **Skill Action:**
140
+
141
+ ```bash
142
+ pnpm sweetlink screenshot --viewport mobile --selector ".card-grid" --output /tmp/screenshots/grid-mobile.png
143
+ pnpm sweetlink screenshot --viewport tablet --selector ".card-grid" --output /tmp/screenshots/grid-tablet.png
144
+ pnpm sweetlink screenshot --viewport desktop --selector ".card-grid" --output /tmp/screenshots/grid-desktop.png
145
+ ```
146
+
147
+ **Output:**
148
+
149
+ ```text
150
+ 🎯 Card Grid Responsive Analysis
151
+
152
+ 📱 Mobile (375px)
153
+ Screenshot: /tmp/screenshots/grid-mobile.png
154
+ Layout: 1 column
155
+ Cards: 3 visible (stack vertically)
156
+ ✅ Works perfectly - easy to scroll through
157
+
158
+ 💻 Tablet (768px)
159
+ Screenshot: /tmp/screenshots/grid-tablet.png
160
+ Layout: 2 columns
161
+ Cards: 6 visible (3 rows × 2 columns)
162
+ ✅ Good use of space
163
+
164
+ 🖥️ Desktop (1440px)
165
+ Screenshot: /tmp/screenshots/grid-desktop.png
166
+ Layout: 3 columns
167
+ Cards: 9 visible (3 rows × 3 columns)
168
+ ✅ Excellent grid layout
169
+
170
+ Responsive Grid: ✅ APPROVED
171
+ Grid scales perfectly from 1 → 2 → 3 columns
172
+ ```
173
+
174
+ ---
175
+
176
+ ## Example 5: Detecting Layout Issues
177
+
178
+ **User Request:**
179
+ > "The page looks weird on tablet, debug it"
180
+
181
+ **Skill Action:**
182
+
183
+ ```bash
184
+ pnpm sweetlink screenshot --viewport tablet --output /tmp/screenshots/tablet-debug.png
185
+ pnpm sweetlink logs --filter error
186
+ ```
187
+
188
+ **Output:**
189
+
190
+ ```yaml
191
+ 🐛 Tablet Layout Debug
192
+
193
+ Screenshot: /tmp/screenshots/tablet-debug.png
194
+
195
+ Issues Detected:
196
+ 1. ⚠️ Awkward 2-column layout
197
+ - Sidebar too narrow (only 200px)
198
+ - Main content area cramped
199
+
200
+ 2. ⚠️ Navigation partially hidden
201
+ - Menu items cut off at 768px
202
+ - Dropdown doesn't fit viewport
203
+
204
+ 3. ⚠️ Images not scaling
205
+ - Fixed width images (500px) overflow
206
+ - Should use max-w-full
207
+
208
+ Console Errors:
209
+ [ERROR] Element width exceeds viewport
210
+
211
+ Root Cause:
212
+ Missing md: breakpoint styles. Layout jumps from mobile
213
+ to desktop without tablet-specific styling.
214
+
215
+ Fix:
216
+ Add explicit md: classes:
217
+ - md:grid-cols-2
218
+ - md:gap-4
219
+ - md:max-w-full
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Example 6: Accessibility Testing
225
+
226
+ **User Request:**
227
+ > "Check if touch targets are large enough on mobile"
228
+
229
+ **Skill Action:**
230
+
231
+ ```bash
232
+ pnpm sweetlink screenshot --viewport mobile --output /tmp/screenshots/mobile-touch.png
233
+ ```
234
+
235
+ **Output:**
236
+
237
+ ```text
238
+ 📱 Mobile Touch Target Analysis
239
+
240
+ Screenshot: /tmp/screenshots/mobile-touch.png
241
+
242
+ Touch Target Audit:
243
+ ✅ Primary CTA button: 56px height (good)
244
+ ✅ Navigation menu items: 48px height (minimum)
245
+ ⚠️ Close icon: 32px (too small)
246
+ ⚠️ Dropdown arrows: 24px (too small)
247
+ ❌ Footer links: 20px (far too small)
248
+
249
+ Recommendations:
250
+ 1. Increase close icon to 48px minimum
251
+ 2. Increase dropdown touch area to 44px
252
+ 3. Add padding to footer links (min 48px total)
253
+
254
+ Touch targets below 44px are hard to tap on mobile devices.
255
+ ```
256
+
257
+ ---
258
+
259
+ ## Example 7: Typography Scaling
260
+
261
+ **User Request:**
262
+ > "Check if the heading sizes look good across devices"
263
+
264
+ **Skill Action:**
265
+
266
+ ```bash
267
+ pnpm sweetlink screenshot --viewport mobile --selector "h1" --output /tmp/screenshots/h1-mobile.png
268
+ pnpm sweetlink screenshot --viewport desktop --selector "h1" --output /tmp/screenshots/h1-desktop.png
269
+ ```
270
+
271
+ **Output:**
272
+
273
+ ```text
274
+ 📝 Typography Analysis
275
+
276
+ 📱 Mobile H1:
277
+ Screenshot: /tmp/screenshots/h1-mobile.png
278
+ Font size: 28px (via computed style)
279
+ Line height: 1.2
280
+ ⚠️ Slightly small - recommend 32px minimum
281
+
282
+ 🖥️ Desktop H1:
283
+ Screenshot: /tmp/screenshots/h1-desktop.png
284
+ Font size: 48px (via computed style)
285
+ Line height: 1.2
286
+ ✅ Perfect size for desktop
287
+
288
+ Recommendation:
289
+ Update Tailwind classes:
290
+ - Mobile: text-3xl (30px) or text-4xl (36px)
291
+ - Desktop: text-5xl (48px) - current ✓
292
+ ```
293
+
294
+ ---
295
+
296
+ ## Example 8: Full Page Responsive Audit
297
+
298
+ **User Request:**
299
+ > "Do a complete responsive audit of the dashboard"
300
+
301
+ **Skill Action:**
302
+
303
+ ```bash
304
+ # Capture all viewports
305
+ for viewport in mobile tablet desktop; do
306
+ pnpm sweetlink screenshot --viewport $viewport --output /tmp/screenshots/dashboard-$viewport.png
307
+ pnpm sweetlink logs --filter error
308
+ done
309
+ ```
310
+
311
+ **Output:**
312
+
313
+ ```text
314
+ 📋 Complete Responsive Audit: Dashboard
315
+
316
+ ### Mobile (375px)
317
+ Screenshot: /tmp/screenshots/dashboard-mobile.png
318
+ ✅ Layout: Single column works
319
+ ✅ Cards: Stack vertically
320
+ ✅ Navigation: Hamburger menu
321
+ ⚠️ Issue: Charts are too small to read
322
+ Fix: Consider horizontal scrolling for charts
323
+
324
+ ### Tablet (768px)
325
+ Screenshot: /tmp/screenshots/dashboard-tablet.png
326
+ ✅ Layout: 2-column works well
327
+ ✅ Navigation: Expanded header
328
+ ✅ Charts: Adequate size
329
+ ✅ Sidebar: Collapsible design works
330
+
331
+ ### Desktop (1440px)
332
+ Screenshot: /tmp/screenshots/dashboard-desktop.png
333
+ ✅ Layout: 3-column grid optimal
334
+ ✅ Navigation: All items visible
335
+ ✅ Charts: Full size, very readable
336
+ ✅ Sidebar: Persistent and useful
337
+
338
+ Console Errors: 0 across all viewports ✓
339
+
340
+ Overall Grade: B+ (Mobile charts need improvement)
341
+
342
+ Next Steps:
343
+ 1. Make charts horizontally scrollable on mobile
344
+ 2. Add touch gestures for chart interaction
345
+ 3. Consider hiding less critical data on mobile
346
+ ```
347
+
348
+ ---
349
+
350
+ ## Example 9: Navigation State Testing
351
+
352
+ **User Request:**
353
+ > "Test the navigation menu at different breakpoints"
354
+
355
+ **Skill Action:**
356
+
357
+ ```bash
358
+ pnpm sweetlink screenshot --viewport mobile --selector ".nav-menu" --output /tmp/screenshots/nav-mobile.png
359
+ pnpm sweetlink screenshot --viewport tablet --selector ".nav-menu" --output /tmp/screenshots/nav-tablet.png
360
+ pnpm sweetlink screenshot --viewport desktop --selector ".nav-menu" --output /tmp/screenshots/nav-desktop.png
361
+ ```
362
+
363
+ **Output:**
364
+
365
+ ```text
366
+ 🧭 Navigation Responsive States
367
+
368
+ 📱 Mobile (375px): Hamburger Menu
369
+ Screenshot: /tmp/screenshots/nav-mobile.png
370
+ State: Collapsed by default
371
+ ✅ Hamburger icon visible (32px)
372
+ ✅ Menu slides from left
373
+ ✅ Full screen overlay works
374
+
375
+ 💻 Tablet (768px): Hybrid Layout
376
+ Screenshot: /tmp/screenshots/nav-tablet.png
377
+ State: Partial expansion
378
+ ✅ Logo + key items visible
379
+ ✅ Overflow items in dropdown
380
+ ✅ Balanced use of space
381
+
382
+ 🖥️ Desktop (1440px): Full Navigation
383
+ Screenshot: /tmp/screenshots/nav-desktop.png
384
+ State: Fully expanded
385
+ ✅ All menu items visible
386
+ ✅ Dropdown menus on hover
387
+ ✅ Professional spacing
388
+
389
+ Navigation Pattern: ✅ EXCELLENT
390
+ Progressive disclosure works perfectly across devices
391
+ ```
392
+
393
+ ---
394
+
395
+ ## Example 10: Image Scaling Test
396
+
397
+ **User Request:**
398
+ > "Verify the hero image scales properly"
399
+
400
+ **Skill Action:**
401
+
402
+ ```bash
403
+ pnpm sweetlink screenshot --viewport mobile --selector ".hero" --output /tmp/screenshots/hero-mobile.png
404
+ pnpm sweetlink screenshot --viewport desktop --selector ".hero" --output /tmp/screenshots/hero-desktop.png
405
+ ```
406
+
407
+ **Output:**
408
+
409
+ ```text
410
+ 🖼️ Hero Image Scaling Analysis
411
+
412
+ 📱 Mobile (375px)
413
+ Screenshot: /tmp/screenshots/hero-mobile.png
414
+ Image: 375×250px (aspect ratio 3:2)
415
+ ✅ Scales to full width
416
+ ✅ No overflow or distortion
417
+ ✅ Loading: lazy ✓
418
+
419
+ 🖥️ Desktop (1440px)
420
+ Screenshot: /tmp/screenshots/hero-desktop.png
421
+ Image: 1440×600px (aspect ratio 2.4:1)
422
+ ✅ Uses full container width
423
+ ✅ High resolution (retina ready)
424
+ ✅ Object-fit: cover maintains aspect
425
+
426
+ Image Handling: ✅ PERFECT
427
+ Responsive images working correctly with proper aspect ratios
428
+ ```
429
+
430
+ ---
431
+
432
+ ## Best Practices Demonstrated
433
+
434
+ 1. **Test all three breakpoints** - Mobile, tablet, desktop coverage
435
+ 2. **Component-specific tests** - Focus on specific areas
436
+ 3. **Before/after comparisons** - Verify improvements
437
+ 4. **Touch target validation** - Ensure mobile usability
438
+ 5. **Typography scaling** - Check readability across sizes
439
+ 6. **Layout verification** - Confirm grid behavior
440
+ 7. **Console monitoring** - Check for layout errors
441
+ 8. **Complete audits** - Systematic full-page reviews
@@ -0,0 +1,35 @@
1
+ {
2
+ "skill_name": "screenshot",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Take a screenshot of the app",
7
+ "expected_output": "The skill uses Sweetlink to capture a screenshot of the running application",
8
+ "expectations": [
9
+ "Uses Sweetlink screenshot command to capture the current page",
10
+ "Returns or saves the screenshot image",
11
+ "Does not use Playwright or other browser automation"
12
+ ]
13
+ },
14
+ {
15
+ "id": 2,
16
+ "prompt": "Screenshot the homepage",
17
+ "expected_output": "The skill captures a screenshot of the specified page (homepage)",
18
+ "expectations": [
19
+ "Navigates to or targets the homepage URL/path",
20
+ "Uses Sweetlink screenshot command",
21
+ "Returns the captured screenshot for review"
22
+ ]
23
+ },
24
+ {
25
+ "id": 3,
26
+ "prompt": "Take screenshots at mobile, tablet, and desktop breakpoints",
27
+ "expected_output": "This should NOT trigger the single screenshot skill. Multi-viewport screenshots are handled by responsive-screenshots.",
28
+ "expectations": [
29
+ "Does NOT trigger screenshot skill for multi-viewport capture",
30
+ "Routes to responsive-screenshots instead",
31
+ "Single screenshot skill handles only one viewport at a time"
32
+ ]
33
+ }
34
+ ]
35
+ }
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ytspar/sweetlink",
3
- "version": "1.15.0",
3
+ "version": "1.16.1",
4
4
  "description": "Autonomous development toolkit for AI agents - screenshots, DOM queries, console logs, and JavaScript execution via WebSocket and Chrome DevTools Protocol",
5
5
  "keywords": [
6
6
  "autonomous-development",
@@ -23,75 +23,93 @@
23
23
  "exports": {
24
24
  ".": {
25
25
  "types": "./dist/index.d.ts",
26
- "import": "./dist/index.js"
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
27
28
  },
28
29
  "./types": {
29
30
  "types": "./dist/types.d.ts",
30
- "import": "./dist/types.js"
31
+ "import": "./dist/types.js",
32
+ "default": "./dist/types.js"
31
33
  },
32
34
  "./server": {
33
35
  "types": "./dist/server.d.ts",
34
- "import": "./dist/server.js"
36
+ "import": "./dist/server.js",
37
+ "default": "./dist/server.js"
35
38
  },
36
39
  "./browser": {
37
40
  "types": "./dist/browser.d.ts",
38
- "import": "./dist/browser.js"
41
+ "import": "./dist/browser.js",
42
+ "default": "./dist/browser.js"
39
43
  },
40
44
  "./browser/commands/schema": {
41
45
  "types": "./dist/browser/commands/schema.d.ts",
42
- "import": "./dist/browser/commands/schema.js"
46
+ "import": "./dist/browser/commands/schema.js",
47
+ "default": "./dist/browser/commands/schema.js"
43
48
  },
44
49
  "./browser/commands/outline": {
45
50
  "types": "./dist/browser/commands/outline.d.ts",
46
- "import": "./dist/browser/commands/outline.js"
51
+ "import": "./dist/browser/commands/outline.js",
52
+ "default": "./dist/browser/commands/outline.js"
47
53
  },
48
54
  "./browser/consoleCapture": {
49
55
  "types": "./dist/browser/consoleCapture.d.ts",
50
- "import": "./dist/browser/consoleCapture.js"
56
+ "import": "./dist/browser/consoleCapture.js",
57
+ "default": "./dist/browser/consoleCapture.js"
51
58
  },
52
59
  "./browser/earlyConsoleCapture": {
53
60
  "types": "./dist/browser/earlyConsoleCapture.d.ts",
54
- "import": "./dist/browser/earlyConsoleCapture.js"
61
+ "import": "./dist/browser/earlyConsoleCapture.js",
62
+ "default": "./dist/browser/earlyConsoleCapture.js"
55
63
  },
56
64
  "./browser/screenshotUtils": {
57
65
  "types": "./dist/browser/screenshotUtils.d.ts",
58
- "import": "./dist/browser/screenshotUtils.js"
66
+ "import": "./dist/browser/screenshotUtils.js",
67
+ "default": "./dist/browser/screenshotUtils.js"
59
68
  },
60
69
  "./urlUtils": {
61
70
  "types": "./dist/urlUtils.d.ts",
62
- "import": "./dist/urlUtils.js"
71
+ "import": "./dist/urlUtils.js",
72
+ "default": "./dist/urlUtils.js"
63
73
  },
64
74
  "./ruler": {
65
75
  "types": "./dist/ruler.d.ts",
66
- "import": "./dist/ruler.js"
76
+ "import": "./dist/ruler.js",
77
+ "default": "./dist/ruler.js"
67
78
  },
68
79
  "./playwright": {
69
80
  "types": "./dist/playwright.d.ts",
70
- "import": "./dist/playwright.js"
81
+ "import": "./dist/playwright.js",
82
+ "default": "./dist/playwright.js"
71
83
  },
72
84
  "./cdp": {
73
85
  "types": "./dist/cdp.d.ts",
74
- "import": "./dist/cdp.js"
86
+ "import": "./dist/cdp.js",
87
+ "default": "./dist/cdp.js"
75
88
  },
76
89
  "./vite": {
77
90
  "types": "./dist/vite.d.ts",
78
- "import": "./dist/vite.js"
91
+ "import": "./dist/vite.js",
92
+ "default": "./dist/vite.js"
79
93
  },
80
94
  "./auto": {
81
95
  "types": "./dist/auto.d.ts",
82
- "import": "./dist/auto.js"
96
+ "import": "./dist/auto.js",
97
+ "default": "./dist/auto.js"
83
98
  },
84
99
  "./next": {
85
100
  "types": "./dist/next.d.ts",
86
- "import": "./dist/next.js"
101
+ "import": "./dist/next.js",
102
+ "default": "./dist/next.js"
87
103
  },
88
104
  "./daemon": {
89
105
  "types": "./dist/daemon/types.d.ts",
90
- "import": "./dist/daemon/types.js"
106
+ "import": "./dist/daemon/types.js",
107
+ "default": "./dist/daemon/types.js"
91
108
  },
92
109
  "./daemon/client": {
93
110
  "types": "./dist/daemon/client.d.ts",
94
- "import": "./dist/daemon/client.js"
111
+ "import": "./dist/daemon/client.js",
112
+ "default": "./dist/daemon/client.js"
95
113
  }
96
114
  },
97
115
  "bin": {
@@ -103,6 +121,8 @@
103
121
  "dist",
104
122
  "scripts",
105
123
  "claude-skills",
124
+ "claude-agents",
125
+ "claude-context",
106
126
  "README.md",
107
127
  "LICENSE"
108
128
  ],
@@ -113,6 +133,14 @@
113
133
  "node": ">=20.0.0"
114
134
  },
115
135
  "private": false,
136
+ "scripts": {
137
+ "prepublishOnly": "node ../../scripts/check-release-notes.mjs && rm -rf dist && tsc",
138
+ "build": "rm -rf dist && tsc",
139
+ "test": "vitest run",
140
+ "dev": "node dist/cli/sweetlink-dev.js",
141
+ "typecheck": "tsc --noEmit",
142
+ "clean": "rm -rf dist claude-context"
143
+ },
116
144
  "peerDependencies": {
117
145
  "axe-core": "^4.0.0",
118
146
  "html2canvas-pro": "^2.0.0",
@@ -159,12 +187,5 @@
159
187
  "bugs": {
160
188
  "url": "https://github.com/ytspar/devbar/issues"
161
189
  },
162
- "homepage": "https://github.com/ytspar/devbar/tree/main/packages/sweetlink#readme",
163
- "scripts": {
164
- "build": "rm -rf dist && tsc",
165
- "test": "vitest run",
166
- "dev": "node dist/cli/sweetlink-dev.js",
167
- "typecheck": "tsc --noEmit",
168
- "clean": "rm -rf dist claude-context"
169
- }
170
- }
190
+ "homepage": "https://github.com/ytspar/devbar/tree/main/packages/sweetlink#readme"
191
+ }