ux-toolkit 0.1.0 → 0.4.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 +113 -7
- package/agents/card-reviewer.md +173 -0
- package/agents/comparison-reviewer.md +143 -0
- package/agents/density-reviewer.md +207 -0
- package/agents/detail-page-reviewer.md +143 -0
- package/agents/editor-reviewer.md +165 -0
- package/agents/form-reviewer.md +156 -0
- package/agents/game-ui-reviewer.md +181 -0
- package/agents/list-page-reviewer.md +132 -0
- package/agents/navigation-reviewer.md +145 -0
- package/agents/panel-reviewer.md +182 -0
- package/agents/replay-reviewer.md +174 -0
- package/agents/settings-reviewer.md +166 -0
- package/agents/ux-auditor.md +145 -45
- package/agents/ux-engineer.md +211 -38
- package/dist/cli.js +172 -5
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +172 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +128 -4
- package/dist/index.d.ts +128 -4
- package/dist/index.js +172 -5
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
- package/skills/canvas-grid-patterns/SKILL.md +367 -0
- package/skills/comparison-patterns/SKILL.md +354 -0
- package/skills/data-density-patterns/SKILL.md +493 -0
- package/skills/detail-page-patterns/SKILL.md +522 -0
- package/skills/drag-drop-patterns/SKILL.md +406 -0
- package/skills/editor-workspace-patterns/SKILL.md +552 -0
- package/skills/event-timeline-patterns/SKILL.md +542 -0
- package/skills/form-patterns/SKILL.md +608 -0
- package/skills/info-card-patterns/SKILL.md +531 -0
- package/skills/keyboard-shortcuts-patterns/SKILL.md +365 -0
- package/skills/list-page-patterns/SKILL.md +351 -0
- package/skills/modal-patterns/SKILL.md +750 -0
- package/skills/navigation-patterns/SKILL.md +476 -0
- package/skills/page-structure-patterns/SKILL.md +271 -0
- package/skills/playback-replay-patterns/SKILL.md +695 -0
- package/skills/react-ux-patterns/SKILL.md +434 -0
- package/skills/split-panel-patterns/SKILL.md +609 -0
- package/skills/status-visualization-patterns/SKILL.md +635 -0
- package/skills/toast-notification-patterns/SKILL.md +207 -0
- package/skills/turn-based-ui-patterns/SKILL.md +506 -0
package/dist/index.d.cts
CHANGED
|
@@ -37,14 +37,90 @@ declare const SKILLS: readonly [{
|
|
|
37
37
|
readonly name: "interaction-patterns";
|
|
38
38
|
readonly description: "Micro-interactions, loading states, feedback mechanisms";
|
|
39
39
|
readonly category: "core";
|
|
40
|
-
}, {
|
|
41
|
-
readonly name: "react-ux-patterns";
|
|
42
|
-
readonly description: "React/Next.js specific UX patterns";
|
|
43
|
-
readonly category: "framework";
|
|
44
40
|
}, {
|
|
45
41
|
readonly name: "mobile-responsive-ux";
|
|
46
42
|
readonly description: "Touch targets, gestures, responsive patterns";
|
|
47
43
|
readonly category: "core";
|
|
44
|
+
}, {
|
|
45
|
+
readonly name: "page-structure-patterns";
|
|
46
|
+
readonly description: "Base requirements for page states, layout, and structure";
|
|
47
|
+
readonly category: "structure";
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "list-page-patterns";
|
|
50
|
+
readonly description: "Filters, sorting, pagination, and grid/table displays";
|
|
51
|
+
readonly category: "structure";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "detail-page-patterns";
|
|
54
|
+
readonly description: "Headers, tabs, multi-column layouts, related data";
|
|
55
|
+
readonly category: "structure";
|
|
56
|
+
}, {
|
|
57
|
+
readonly name: "navigation-patterns";
|
|
58
|
+
readonly description: "Sidebar, mobile drawer, breadcrumbs, app shell";
|
|
59
|
+
readonly category: "structure";
|
|
60
|
+
}, {
|
|
61
|
+
readonly name: "modal-patterns";
|
|
62
|
+
readonly description: "Confirmation, edit, selector, and wizard modals";
|
|
63
|
+
readonly category: "component";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "form-patterns";
|
|
66
|
+
readonly description: "Validation, field layouts, multi-step wizards";
|
|
67
|
+
readonly category: "component";
|
|
68
|
+
}, {
|
|
69
|
+
readonly name: "data-density-patterns";
|
|
70
|
+
readonly description: "Dense layouts, z-index, overflow, readability";
|
|
71
|
+
readonly category: "component";
|
|
72
|
+
}, {
|
|
73
|
+
readonly name: "toast-notification-patterns";
|
|
74
|
+
readonly description: "Toast notifications, alerts, and system feedback";
|
|
75
|
+
readonly category: "component";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "keyboard-shortcuts-patterns";
|
|
78
|
+
readonly description: "Keyboard shortcuts, command palette (Cmd+K), power user navigation";
|
|
79
|
+
readonly category: "interaction";
|
|
80
|
+
}, {
|
|
81
|
+
readonly name: "drag-drop-patterns";
|
|
82
|
+
readonly description: "Drag and drop interactions, visual feedback, drop zones";
|
|
83
|
+
readonly category: "interaction";
|
|
84
|
+
}, {
|
|
85
|
+
readonly name: "editor-workspace-patterns";
|
|
86
|
+
readonly description: "Multi-tab editors, dirty state, real-time validation, workspaces";
|
|
87
|
+
readonly category: "editor";
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "comparison-patterns";
|
|
90
|
+
readonly description: "Side-by-side comparison, diff highlighting, multi-item comparison";
|
|
91
|
+
readonly category: "editor";
|
|
92
|
+
}, {
|
|
93
|
+
readonly name: "split-panel-patterns";
|
|
94
|
+
readonly description: "Resizable panels, dividers, collapsible sidebars, synchronized views";
|
|
95
|
+
readonly category: "editor";
|
|
96
|
+
}, {
|
|
97
|
+
readonly name: "canvas-grid-patterns";
|
|
98
|
+
readonly description: "Hex grids, tactical maps, pan/zoom, tokens, coordinate systems";
|
|
99
|
+
readonly category: "game";
|
|
100
|
+
}, {
|
|
101
|
+
readonly name: "turn-based-ui-patterns";
|
|
102
|
+
readonly description: "Phase banners, turn indicators, action bars, game state feedback";
|
|
103
|
+
readonly category: "game";
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "playback-replay-patterns";
|
|
106
|
+
readonly description: "VCR controls, timeline scrubbing, speed selection, replay viewers";
|
|
107
|
+
readonly category: "game";
|
|
108
|
+
}, {
|
|
109
|
+
readonly name: "status-visualization-patterns";
|
|
110
|
+
readonly description: "Health bars, progress meters, heat gauges, pip displays, stat blocks";
|
|
111
|
+
readonly category: "game";
|
|
112
|
+
}, {
|
|
113
|
+
readonly name: "info-card-patterns";
|
|
114
|
+
readonly description: "Compact/standard/expanded cards, stat blocks, badges, entity displays";
|
|
115
|
+
readonly category: "data";
|
|
116
|
+
}, {
|
|
117
|
+
readonly name: "event-timeline-patterns";
|
|
118
|
+
readonly description: "Activity feeds, audit logs, chronological events, filtering, infinite scroll";
|
|
119
|
+
readonly category: "data";
|
|
120
|
+
}, {
|
|
121
|
+
readonly name: "react-ux-patterns";
|
|
122
|
+
readonly description: "React/Next.js specific UX patterns";
|
|
123
|
+
readonly category: "framework";
|
|
48
124
|
}];
|
|
49
125
|
declare const AGENTS: readonly [{
|
|
50
126
|
readonly name: "ux-auditor";
|
|
@@ -70,6 +146,54 @@ declare const AGENTS: readonly [{
|
|
|
70
146
|
readonly name: "interaction-reviewer";
|
|
71
147
|
readonly description: "Micro-interactions and feedback review";
|
|
72
148
|
readonly mode: "analysis";
|
|
149
|
+
}, {
|
|
150
|
+
readonly name: "list-page-reviewer";
|
|
151
|
+
readonly description: "List/browse page UX review";
|
|
152
|
+
readonly mode: "analysis";
|
|
153
|
+
}, {
|
|
154
|
+
readonly name: "detail-page-reviewer";
|
|
155
|
+
readonly description: "Detail/entity page UX review";
|
|
156
|
+
readonly mode: "analysis";
|
|
157
|
+
}, {
|
|
158
|
+
readonly name: "navigation-reviewer";
|
|
159
|
+
readonly description: "Navigation and routing review";
|
|
160
|
+
readonly mode: "analysis";
|
|
161
|
+
}, {
|
|
162
|
+
readonly name: "form-reviewer";
|
|
163
|
+
readonly description: "Form and input UX review";
|
|
164
|
+
readonly mode: "analysis";
|
|
165
|
+
}, {
|
|
166
|
+
readonly name: "density-reviewer";
|
|
167
|
+
readonly description: "Data density and layout review";
|
|
168
|
+
readonly mode: "analysis";
|
|
169
|
+
}, {
|
|
170
|
+
readonly name: "editor-reviewer";
|
|
171
|
+
readonly description: "Editor/workspace UI with multi-tab, drag-drop, validation";
|
|
172
|
+
readonly mode: "analysis";
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "comparison-reviewer";
|
|
175
|
+
readonly description: "Side-by-side comparison and diff UIs";
|
|
176
|
+
readonly mode: "analysis";
|
|
177
|
+
}, {
|
|
178
|
+
readonly name: "settings-reviewer";
|
|
179
|
+
readonly description: "Settings, preferences, and configuration pages";
|
|
180
|
+
readonly mode: "analysis";
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "game-ui-reviewer";
|
|
183
|
+
readonly description: "Tactical maps, turn-based combat, status displays, hex grids";
|
|
184
|
+
readonly mode: "analysis";
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "replay-reviewer";
|
|
187
|
+
readonly description: "Playback controls, timeline scrubbing, event feeds";
|
|
188
|
+
readonly mode: "analysis";
|
|
189
|
+
}, {
|
|
190
|
+
readonly name: "card-reviewer";
|
|
191
|
+
readonly description: "Info cards, stat blocks, entity displays with density levels";
|
|
192
|
+
readonly mode: "analysis";
|
|
193
|
+
}, {
|
|
194
|
+
readonly name: "panel-reviewer";
|
|
195
|
+
readonly description: "Resizable panels, collapsible sidebars, split views";
|
|
196
|
+
readonly mode: "analysis";
|
|
73
197
|
}];
|
|
74
198
|
declare const COMMANDS: readonly [{
|
|
75
199
|
readonly name: "ux-audit";
|
package/dist/index.d.ts
CHANGED
|
@@ -37,14 +37,90 @@ declare const SKILLS: readonly [{
|
|
|
37
37
|
readonly name: "interaction-patterns";
|
|
38
38
|
readonly description: "Micro-interactions, loading states, feedback mechanisms";
|
|
39
39
|
readonly category: "core";
|
|
40
|
-
}, {
|
|
41
|
-
readonly name: "react-ux-patterns";
|
|
42
|
-
readonly description: "React/Next.js specific UX patterns";
|
|
43
|
-
readonly category: "framework";
|
|
44
40
|
}, {
|
|
45
41
|
readonly name: "mobile-responsive-ux";
|
|
46
42
|
readonly description: "Touch targets, gestures, responsive patterns";
|
|
47
43
|
readonly category: "core";
|
|
44
|
+
}, {
|
|
45
|
+
readonly name: "page-structure-patterns";
|
|
46
|
+
readonly description: "Base requirements for page states, layout, and structure";
|
|
47
|
+
readonly category: "structure";
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "list-page-patterns";
|
|
50
|
+
readonly description: "Filters, sorting, pagination, and grid/table displays";
|
|
51
|
+
readonly category: "structure";
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "detail-page-patterns";
|
|
54
|
+
readonly description: "Headers, tabs, multi-column layouts, related data";
|
|
55
|
+
readonly category: "structure";
|
|
56
|
+
}, {
|
|
57
|
+
readonly name: "navigation-patterns";
|
|
58
|
+
readonly description: "Sidebar, mobile drawer, breadcrumbs, app shell";
|
|
59
|
+
readonly category: "structure";
|
|
60
|
+
}, {
|
|
61
|
+
readonly name: "modal-patterns";
|
|
62
|
+
readonly description: "Confirmation, edit, selector, and wizard modals";
|
|
63
|
+
readonly category: "component";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "form-patterns";
|
|
66
|
+
readonly description: "Validation, field layouts, multi-step wizards";
|
|
67
|
+
readonly category: "component";
|
|
68
|
+
}, {
|
|
69
|
+
readonly name: "data-density-patterns";
|
|
70
|
+
readonly description: "Dense layouts, z-index, overflow, readability";
|
|
71
|
+
readonly category: "component";
|
|
72
|
+
}, {
|
|
73
|
+
readonly name: "toast-notification-patterns";
|
|
74
|
+
readonly description: "Toast notifications, alerts, and system feedback";
|
|
75
|
+
readonly category: "component";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "keyboard-shortcuts-patterns";
|
|
78
|
+
readonly description: "Keyboard shortcuts, command palette (Cmd+K), power user navigation";
|
|
79
|
+
readonly category: "interaction";
|
|
80
|
+
}, {
|
|
81
|
+
readonly name: "drag-drop-patterns";
|
|
82
|
+
readonly description: "Drag and drop interactions, visual feedback, drop zones";
|
|
83
|
+
readonly category: "interaction";
|
|
84
|
+
}, {
|
|
85
|
+
readonly name: "editor-workspace-patterns";
|
|
86
|
+
readonly description: "Multi-tab editors, dirty state, real-time validation, workspaces";
|
|
87
|
+
readonly category: "editor";
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "comparison-patterns";
|
|
90
|
+
readonly description: "Side-by-side comparison, diff highlighting, multi-item comparison";
|
|
91
|
+
readonly category: "editor";
|
|
92
|
+
}, {
|
|
93
|
+
readonly name: "split-panel-patterns";
|
|
94
|
+
readonly description: "Resizable panels, dividers, collapsible sidebars, synchronized views";
|
|
95
|
+
readonly category: "editor";
|
|
96
|
+
}, {
|
|
97
|
+
readonly name: "canvas-grid-patterns";
|
|
98
|
+
readonly description: "Hex grids, tactical maps, pan/zoom, tokens, coordinate systems";
|
|
99
|
+
readonly category: "game";
|
|
100
|
+
}, {
|
|
101
|
+
readonly name: "turn-based-ui-patterns";
|
|
102
|
+
readonly description: "Phase banners, turn indicators, action bars, game state feedback";
|
|
103
|
+
readonly category: "game";
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "playback-replay-patterns";
|
|
106
|
+
readonly description: "VCR controls, timeline scrubbing, speed selection, replay viewers";
|
|
107
|
+
readonly category: "game";
|
|
108
|
+
}, {
|
|
109
|
+
readonly name: "status-visualization-patterns";
|
|
110
|
+
readonly description: "Health bars, progress meters, heat gauges, pip displays, stat blocks";
|
|
111
|
+
readonly category: "game";
|
|
112
|
+
}, {
|
|
113
|
+
readonly name: "info-card-patterns";
|
|
114
|
+
readonly description: "Compact/standard/expanded cards, stat blocks, badges, entity displays";
|
|
115
|
+
readonly category: "data";
|
|
116
|
+
}, {
|
|
117
|
+
readonly name: "event-timeline-patterns";
|
|
118
|
+
readonly description: "Activity feeds, audit logs, chronological events, filtering, infinite scroll";
|
|
119
|
+
readonly category: "data";
|
|
120
|
+
}, {
|
|
121
|
+
readonly name: "react-ux-patterns";
|
|
122
|
+
readonly description: "React/Next.js specific UX patterns";
|
|
123
|
+
readonly category: "framework";
|
|
48
124
|
}];
|
|
49
125
|
declare const AGENTS: readonly [{
|
|
50
126
|
readonly name: "ux-auditor";
|
|
@@ -70,6 +146,54 @@ declare const AGENTS: readonly [{
|
|
|
70
146
|
readonly name: "interaction-reviewer";
|
|
71
147
|
readonly description: "Micro-interactions and feedback review";
|
|
72
148
|
readonly mode: "analysis";
|
|
149
|
+
}, {
|
|
150
|
+
readonly name: "list-page-reviewer";
|
|
151
|
+
readonly description: "List/browse page UX review";
|
|
152
|
+
readonly mode: "analysis";
|
|
153
|
+
}, {
|
|
154
|
+
readonly name: "detail-page-reviewer";
|
|
155
|
+
readonly description: "Detail/entity page UX review";
|
|
156
|
+
readonly mode: "analysis";
|
|
157
|
+
}, {
|
|
158
|
+
readonly name: "navigation-reviewer";
|
|
159
|
+
readonly description: "Navigation and routing review";
|
|
160
|
+
readonly mode: "analysis";
|
|
161
|
+
}, {
|
|
162
|
+
readonly name: "form-reviewer";
|
|
163
|
+
readonly description: "Form and input UX review";
|
|
164
|
+
readonly mode: "analysis";
|
|
165
|
+
}, {
|
|
166
|
+
readonly name: "density-reviewer";
|
|
167
|
+
readonly description: "Data density and layout review";
|
|
168
|
+
readonly mode: "analysis";
|
|
169
|
+
}, {
|
|
170
|
+
readonly name: "editor-reviewer";
|
|
171
|
+
readonly description: "Editor/workspace UI with multi-tab, drag-drop, validation";
|
|
172
|
+
readonly mode: "analysis";
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "comparison-reviewer";
|
|
175
|
+
readonly description: "Side-by-side comparison and diff UIs";
|
|
176
|
+
readonly mode: "analysis";
|
|
177
|
+
}, {
|
|
178
|
+
readonly name: "settings-reviewer";
|
|
179
|
+
readonly description: "Settings, preferences, and configuration pages";
|
|
180
|
+
readonly mode: "analysis";
|
|
181
|
+
}, {
|
|
182
|
+
readonly name: "game-ui-reviewer";
|
|
183
|
+
readonly description: "Tactical maps, turn-based combat, status displays, hex grids";
|
|
184
|
+
readonly mode: "analysis";
|
|
185
|
+
}, {
|
|
186
|
+
readonly name: "replay-reviewer";
|
|
187
|
+
readonly description: "Playback controls, timeline scrubbing, event feeds";
|
|
188
|
+
readonly mode: "analysis";
|
|
189
|
+
}, {
|
|
190
|
+
readonly name: "card-reviewer";
|
|
191
|
+
readonly description: "Info cards, stat blocks, entity displays with density levels";
|
|
192
|
+
readonly mode: "analysis";
|
|
193
|
+
}, {
|
|
194
|
+
readonly name: "panel-reviewer";
|
|
195
|
+
readonly description: "Resizable panels, collapsible sidebars, split views";
|
|
196
|
+
readonly mode: "analysis";
|
|
73
197
|
}];
|
|
74
198
|
declare const COMMANDS: readonly [{
|
|
75
199
|
readonly name: "ux-audit";
|
package/dist/index.js
CHANGED
|
@@ -127,6 +127,7 @@ async function install(options = {}) {
|
|
|
127
127
|
|
|
128
128
|
// src/manifest.ts
|
|
129
129
|
var SKILLS = [
|
|
130
|
+
// Core UX Skills
|
|
130
131
|
{
|
|
131
132
|
name: "ux-heuristics",
|
|
132
133
|
description: "Nielsen's 10 usability heuristics with evaluation methodology",
|
|
@@ -147,18 +148,121 @@ var SKILLS = [
|
|
|
147
148
|
description: "Micro-interactions, loading states, feedback mechanisms",
|
|
148
149
|
category: "core"
|
|
149
150
|
},
|
|
150
|
-
{
|
|
151
|
-
name: "react-ux-patterns",
|
|
152
|
-
description: "React/Next.js specific UX patterns",
|
|
153
|
-
category: "framework"
|
|
154
|
-
},
|
|
155
151
|
{
|
|
156
152
|
name: "mobile-responsive-ux",
|
|
157
153
|
description: "Touch targets, gestures, responsive patterns",
|
|
158
154
|
category: "core"
|
|
155
|
+
},
|
|
156
|
+
// Page Structure Skills
|
|
157
|
+
{
|
|
158
|
+
name: "page-structure-patterns",
|
|
159
|
+
description: "Base requirements for page states, layout, and structure",
|
|
160
|
+
category: "structure"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: "list-page-patterns",
|
|
164
|
+
description: "Filters, sorting, pagination, and grid/table displays",
|
|
165
|
+
category: "structure"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "detail-page-patterns",
|
|
169
|
+
description: "Headers, tabs, multi-column layouts, related data",
|
|
170
|
+
category: "structure"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
name: "navigation-patterns",
|
|
174
|
+
description: "Sidebar, mobile drawer, breadcrumbs, app shell",
|
|
175
|
+
category: "structure"
|
|
176
|
+
},
|
|
177
|
+
// Component Skills
|
|
178
|
+
{
|
|
179
|
+
name: "modal-patterns",
|
|
180
|
+
description: "Confirmation, edit, selector, and wizard modals",
|
|
181
|
+
category: "component"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: "form-patterns",
|
|
185
|
+
description: "Validation, field layouts, multi-step wizards",
|
|
186
|
+
category: "component"
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: "data-density-patterns",
|
|
190
|
+
description: "Dense layouts, z-index, overflow, readability",
|
|
191
|
+
category: "component"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: "toast-notification-patterns",
|
|
195
|
+
description: "Toast notifications, alerts, and system feedback",
|
|
196
|
+
category: "component"
|
|
197
|
+
},
|
|
198
|
+
// Interaction Skills
|
|
199
|
+
{
|
|
200
|
+
name: "keyboard-shortcuts-patterns",
|
|
201
|
+
description: "Keyboard shortcuts, command palette (Cmd+K), power user navigation",
|
|
202
|
+
category: "interaction"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
name: "drag-drop-patterns",
|
|
206
|
+
description: "Drag and drop interactions, visual feedback, drop zones",
|
|
207
|
+
category: "interaction"
|
|
208
|
+
},
|
|
209
|
+
// Editor/Workspace Skills
|
|
210
|
+
{
|
|
211
|
+
name: "editor-workspace-patterns",
|
|
212
|
+
description: "Multi-tab editors, dirty state, real-time validation, workspaces",
|
|
213
|
+
category: "editor"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "comparison-patterns",
|
|
217
|
+
description: "Side-by-side comparison, diff highlighting, multi-item comparison",
|
|
218
|
+
category: "editor"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
name: "split-panel-patterns",
|
|
222
|
+
description: "Resizable panels, dividers, collapsible sidebars, synchronized views",
|
|
223
|
+
category: "editor"
|
|
224
|
+
},
|
|
225
|
+
// Game/Interactive Skills
|
|
226
|
+
{
|
|
227
|
+
name: "canvas-grid-patterns",
|
|
228
|
+
description: "Hex grids, tactical maps, pan/zoom, tokens, coordinate systems",
|
|
229
|
+
category: "game"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: "turn-based-ui-patterns",
|
|
233
|
+
description: "Phase banners, turn indicators, action bars, game state feedback",
|
|
234
|
+
category: "game"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
name: "playback-replay-patterns",
|
|
238
|
+
description: "VCR controls, timeline scrubbing, speed selection, replay viewers",
|
|
239
|
+
category: "game"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: "status-visualization-patterns",
|
|
243
|
+
description: "Health bars, progress meters, heat gauges, pip displays, stat blocks",
|
|
244
|
+
category: "game"
|
|
245
|
+
},
|
|
246
|
+
// Data Display Skills
|
|
247
|
+
{
|
|
248
|
+
name: "info-card-patterns",
|
|
249
|
+
description: "Compact/standard/expanded cards, stat blocks, badges, entity displays",
|
|
250
|
+
category: "data"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
name: "event-timeline-patterns",
|
|
254
|
+
description: "Activity feeds, audit logs, chronological events, filtering, infinite scroll",
|
|
255
|
+
category: "data"
|
|
256
|
+
},
|
|
257
|
+
// Framework Skills
|
|
258
|
+
{
|
|
259
|
+
name: "react-ux-patterns",
|
|
260
|
+
description: "React/Next.js specific UX patterns",
|
|
261
|
+
category: "framework"
|
|
159
262
|
}
|
|
160
263
|
];
|
|
161
264
|
var AGENTS = [
|
|
265
|
+
// General Purpose Agents
|
|
162
266
|
{
|
|
163
267
|
name: "ux-auditor",
|
|
164
268
|
description: "Full UX audit against heuristics (read-only)",
|
|
@@ -188,6 +292,69 @@ var AGENTS = [
|
|
|
188
292
|
name: "interaction-reviewer",
|
|
189
293
|
description: "Micro-interactions and feedback review",
|
|
190
294
|
mode: "analysis"
|
|
295
|
+
},
|
|
296
|
+
// Specialized Page Reviewers
|
|
297
|
+
{
|
|
298
|
+
name: "list-page-reviewer",
|
|
299
|
+
description: "List/browse page UX review",
|
|
300
|
+
mode: "analysis"
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: "detail-page-reviewer",
|
|
304
|
+
description: "Detail/entity page UX review",
|
|
305
|
+
mode: "analysis"
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: "navigation-reviewer",
|
|
309
|
+
description: "Navigation and routing review",
|
|
310
|
+
mode: "analysis"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: "form-reviewer",
|
|
314
|
+
description: "Form and input UX review",
|
|
315
|
+
mode: "analysis"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
name: "density-reviewer",
|
|
319
|
+
description: "Data density and layout review",
|
|
320
|
+
mode: "analysis"
|
|
321
|
+
},
|
|
322
|
+
// Advanced Specialized Reviewers
|
|
323
|
+
{
|
|
324
|
+
name: "editor-reviewer",
|
|
325
|
+
description: "Editor/workspace UI with multi-tab, drag-drop, validation",
|
|
326
|
+
mode: "analysis"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: "comparison-reviewer",
|
|
330
|
+
description: "Side-by-side comparison and diff UIs",
|
|
331
|
+
mode: "analysis"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
name: "settings-reviewer",
|
|
335
|
+
description: "Settings, preferences, and configuration pages",
|
|
336
|
+
mode: "analysis"
|
|
337
|
+
},
|
|
338
|
+
// Game & Interactive Reviewers
|
|
339
|
+
{
|
|
340
|
+
name: "game-ui-reviewer",
|
|
341
|
+
description: "Tactical maps, turn-based combat, status displays, hex grids",
|
|
342
|
+
mode: "analysis"
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: "replay-reviewer",
|
|
346
|
+
description: "Playback controls, timeline scrubbing, event feeds",
|
|
347
|
+
mode: "analysis"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
name: "card-reviewer",
|
|
351
|
+
description: "Info cards, stat blocks, entity displays with density levels",
|
|
352
|
+
mode: "analysis"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
name: "panel-reviewer",
|
|
356
|
+
description: "Resizable panels, collapsible sidebars, split views",
|
|
357
|
+
mode: "analysis"
|
|
191
358
|
}
|
|
192
359
|
];
|
|
193
360
|
var COMMANDS = [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/installer.ts","../src/paths.ts","../src/manifest.ts"],"sourcesContent":["import { existsSync, mkdirSync, cpSync, readdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { getPackageRoot, getDestinationPaths } from './paths.js';\n\nexport interface InstallOptions {\n /** Install globally to ~/.config/opencode */\n global?: boolean;\n /** Project root for local installation */\n projectRoot?: string;\n /** Only install specific categories */\n categories?: ('skills' | 'agents' | 'commands')[];\n /** Overwrite existing files */\n force?: boolean;\n /** Verbose output */\n verbose?: boolean;\n}\n\nexport interface InstallResult {\n installed: string[];\n skipped: string[];\n errors: string[];\n}\n\nexport async function install(options: InstallOptions = {}): Promise<InstallResult> {\n const {\n global: isGlobal = false,\n projectRoot = process.cwd(),\n categories = ['skills', 'agents', 'commands'],\n force = false,\n verbose = false,\n } = options;\n\n const result: InstallResult = {\n installed: [],\n skipped: [],\n errors: [],\n };\n\n const packageRoot = getPackageRoot();\n const destinations = getDestinationPaths(isGlobal, projectRoot);\n\n const log = (msg: string) => {\n if (verbose) console.log(msg);\n };\n\n if (categories.includes('skills')) {\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n const skills = readdirSync(skillsDir, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n\n for (const skill of skills) {\n const src = join(skillsDir, skill);\n const dest = join(destinations.skills, skill);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`skill:${skill}`);\n log(`Skipped skill/${skill} (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest, { recursive: true });\n result.installed.push(`skill:${skill}`);\n log(`Installed skill/${skill}`);\n } catch (err) {\n result.errors.push(`skill:${skill}: ${err}`);\n }\n }\n }\n }\n\n if (categories.includes('agents')) {\n const agentsDir = join(packageRoot, 'agents');\n if (existsSync(agentsDir)) {\n const agents = readdirSync(agentsDir)\n .filter((f) => f.endsWith('.md'))\n .map((f) => f.replace('.md', ''));\n\n for (const agent of agents) {\n const src = join(agentsDir, `${agent}.md`);\n const dest = join(destinations.agents, `${agent}.md`);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`agent:${agent}`);\n log(`Skipped agents/${agent}.md (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest);\n result.installed.push(`agent:${agent}`);\n log(`Installed agents/${agent}.md`);\n } catch (err) {\n result.errors.push(`agent:${agent}: ${err}`);\n }\n }\n }\n }\n\n if (categories.includes('commands')) {\n const commandsDir = join(packageRoot, 'commands');\n if (existsSync(commandsDir)) {\n const commands = readdirSync(commandsDir)\n .filter((f) => f.endsWith('.md'))\n .map((f) => f.replace('.md', ''));\n\n for (const command of commands) {\n const src = join(commandsDir, `${command}.md`);\n const dest = join(destinations.commands, `${command}.md`);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`command:${command}`);\n log(`Skipped commands/${command}.md (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest);\n result.installed.push(`command:${command}`);\n log(`Installed commands/${command}.md`);\n } catch (err) {\n result.errors.push(`command:${command}: ${err}`);\n }\n }\n }\n }\n\n return result;\n}\n","import { homedir } from 'node:os';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function getPackageRoot(): string {\n return join(__dirname, '..');\n}\n\nexport function getSkillPath(skillName: string): string {\n return join(getPackageRoot(), 'skills', skillName, 'SKILL.md');\n}\n\nexport function getAgentPath(agentName: string): string {\n return join(getPackageRoot(), 'agents', `${agentName}.md`);\n}\n\nexport function getCommandPath(commandName: string): string {\n return join(getPackageRoot(), 'commands', `${commandName}.md`);\n}\n\nexport function getGlobalConfigDir(): string {\n return join(homedir(), '.config', 'opencode');\n}\n\nexport function getProjectConfigDir(projectRoot: string = process.cwd()): string {\n return join(projectRoot, '.opencode');\n}\n\nexport function getDestinationPaths(global: boolean, projectRoot?: string) {\n const baseDir = global ? getGlobalConfigDir() : getProjectConfigDir(projectRoot);\n\n return {\n skills: join(baseDir, 'skills'),\n agents: join(baseDir, 'agents'),\n commands: join(baseDir, 'commands'),\n };\n}\n","export const SKILLS = [\n {\n name: 'ux-heuristics',\n description: \"Nielsen's 10 usability heuristics with evaluation methodology\",\n category: 'core',\n },\n {\n name: 'wcag-accessibility',\n description: 'WCAG 2.2 compliance checklist and ARIA patterns',\n category: 'core',\n },\n {\n name: 'visual-design-system',\n description: 'Layout, typography, color theory, spacing systems',\n category: 'core',\n },\n {\n name: 'interaction-patterns',\n description: 'Micro-interactions, loading states, feedback mechanisms',\n category: 'core',\n },\n {\n name: 'react-ux-patterns',\n description: 'React/Next.js specific UX patterns',\n category: 'framework',\n },\n {\n name: 'mobile-responsive-ux',\n description: 'Touch targets, gestures, responsive patterns',\n category: 'core',\n },\n] as const;\n\nexport const AGENTS = [\n {\n name: 'ux-auditor',\n description: 'Full UX audit against heuristics (read-only)',\n mode: 'analysis',\n },\n {\n name: 'ux-engineer',\n description: 'UX analysis + implements fixes',\n mode: 'fix',\n },\n {\n name: 'accessibility-auditor',\n description: 'WCAG 2.2 compliance review (read-only)',\n mode: 'analysis',\n },\n {\n name: 'accessibility-engineer',\n description: 'Accessibility fixes',\n mode: 'fix',\n },\n {\n name: 'visual-reviewer',\n description: 'Design system consistency check',\n mode: 'analysis',\n },\n {\n name: 'interaction-reviewer',\n description: 'Micro-interactions and feedback review',\n mode: 'analysis',\n },\n] as const;\n\nexport const COMMANDS = [\n {\n name: 'ux-audit',\n description: 'Comprehensive UX audit',\n },\n {\n name: 'a11y-check',\n description: 'Quick accessibility scan',\n },\n {\n name: 'design-review',\n description: 'Visual consistency check',\n },\n {\n name: 'screenshot-review',\n description: 'Visual review from screenshot',\n },\n] as const;\n\nexport type SkillName = (typeof SKILLS)[number]['name'];\nexport type AgentName = (typeof AGENTS)[number]['name'];\nexport type CommandName = (typeof COMMANDS)[number]['name'];\n"],"mappings":"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","names":["join","dirname","join","dirname"]}
|
|
1
|
+
{"version":3,"sources":["../src/installer.ts","../src/paths.ts","../src/manifest.ts"],"sourcesContent":["import { existsSync, mkdirSync, cpSync, readdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { getPackageRoot, getDestinationPaths } from './paths.js';\n\nexport interface InstallOptions {\n /** Install globally to ~/.config/opencode */\n global?: boolean;\n /** Project root for local installation */\n projectRoot?: string;\n /** Only install specific categories */\n categories?: ('skills' | 'agents' | 'commands')[];\n /** Overwrite existing files */\n force?: boolean;\n /** Verbose output */\n verbose?: boolean;\n}\n\nexport interface InstallResult {\n installed: string[];\n skipped: string[];\n errors: string[];\n}\n\nexport async function install(options: InstallOptions = {}): Promise<InstallResult> {\n const {\n global: isGlobal = false,\n projectRoot = process.cwd(),\n categories = ['skills', 'agents', 'commands'],\n force = false,\n verbose = false,\n } = options;\n\n const result: InstallResult = {\n installed: [],\n skipped: [],\n errors: [],\n };\n\n const packageRoot = getPackageRoot();\n const destinations = getDestinationPaths(isGlobal, projectRoot);\n\n const log = (msg: string) => {\n if (verbose) console.log(msg);\n };\n\n if (categories.includes('skills')) {\n const skillsDir = join(packageRoot, 'skills');\n if (existsSync(skillsDir)) {\n const skills = readdirSync(skillsDir, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n\n for (const skill of skills) {\n const src = join(skillsDir, skill);\n const dest = join(destinations.skills, skill);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`skill:${skill}`);\n log(`Skipped skill/${skill} (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest, { recursive: true });\n result.installed.push(`skill:${skill}`);\n log(`Installed skill/${skill}`);\n } catch (err) {\n result.errors.push(`skill:${skill}: ${err}`);\n }\n }\n }\n }\n\n if (categories.includes('agents')) {\n const agentsDir = join(packageRoot, 'agents');\n if (existsSync(agentsDir)) {\n const agents = readdirSync(agentsDir)\n .filter((f) => f.endsWith('.md'))\n .map((f) => f.replace('.md', ''));\n\n for (const agent of agents) {\n const src = join(agentsDir, `${agent}.md`);\n const dest = join(destinations.agents, `${agent}.md`);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`agent:${agent}`);\n log(`Skipped agents/${agent}.md (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest);\n result.installed.push(`agent:${agent}`);\n log(`Installed agents/${agent}.md`);\n } catch (err) {\n result.errors.push(`agent:${agent}: ${err}`);\n }\n }\n }\n }\n\n if (categories.includes('commands')) {\n const commandsDir = join(packageRoot, 'commands');\n if (existsSync(commandsDir)) {\n const commands = readdirSync(commandsDir)\n .filter((f) => f.endsWith('.md'))\n .map((f) => f.replace('.md', ''));\n\n for (const command of commands) {\n const src = join(commandsDir, `${command}.md`);\n const dest = join(destinations.commands, `${command}.md`);\n\n try {\n if (existsSync(dest) && !force) {\n result.skipped.push(`command:${command}`);\n log(`Skipped commands/${command}.md (already exists)`);\n continue;\n }\n\n mkdirSync(dirname(dest), { recursive: true });\n cpSync(src, dest);\n result.installed.push(`command:${command}`);\n log(`Installed commands/${command}.md`);\n } catch (err) {\n result.errors.push(`command:${command}: ${err}`);\n }\n }\n }\n }\n\n return result;\n}\n","import { homedir } from 'node:os';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport function getPackageRoot(): string {\n return join(__dirname, '..');\n}\n\nexport function getSkillPath(skillName: string): string {\n return join(getPackageRoot(), 'skills', skillName, 'SKILL.md');\n}\n\nexport function getAgentPath(agentName: string): string {\n return join(getPackageRoot(), 'agents', `${agentName}.md`);\n}\n\nexport function getCommandPath(commandName: string): string {\n return join(getPackageRoot(), 'commands', `${commandName}.md`);\n}\n\nexport function getGlobalConfigDir(): string {\n return join(homedir(), '.config', 'opencode');\n}\n\nexport function getProjectConfigDir(projectRoot: string = process.cwd()): string {\n return join(projectRoot, '.opencode');\n}\n\nexport function getDestinationPaths(global: boolean, projectRoot?: string) {\n const baseDir = global ? getGlobalConfigDir() : getProjectConfigDir(projectRoot);\n\n return {\n skills: join(baseDir, 'skills'),\n agents: join(baseDir, 'agents'),\n commands: join(baseDir, 'commands'),\n };\n}\n","export const SKILLS = [\n // Core UX Skills\n {\n name: 'ux-heuristics',\n description: \"Nielsen's 10 usability heuristics with evaluation methodology\",\n category: 'core',\n },\n {\n name: 'wcag-accessibility',\n description: 'WCAG 2.2 compliance checklist and ARIA patterns',\n category: 'core',\n },\n {\n name: 'visual-design-system',\n description: 'Layout, typography, color theory, spacing systems',\n category: 'core',\n },\n {\n name: 'interaction-patterns',\n description: 'Micro-interactions, loading states, feedback mechanisms',\n category: 'core',\n },\n {\n name: 'mobile-responsive-ux',\n description: 'Touch targets, gestures, responsive patterns',\n category: 'core',\n },\n\n // Page Structure Skills\n {\n name: 'page-structure-patterns',\n description: 'Base requirements for page states, layout, and structure',\n category: 'structure',\n },\n {\n name: 'list-page-patterns',\n description: 'Filters, sorting, pagination, and grid/table displays',\n category: 'structure',\n },\n {\n name: 'detail-page-patterns',\n description: 'Headers, tabs, multi-column layouts, related data',\n category: 'structure',\n },\n {\n name: 'navigation-patterns',\n description: 'Sidebar, mobile drawer, breadcrumbs, app shell',\n category: 'structure',\n },\n\n // Component Skills\n {\n name: 'modal-patterns',\n description: 'Confirmation, edit, selector, and wizard modals',\n category: 'component',\n },\n {\n name: 'form-patterns',\n description: 'Validation, field layouts, multi-step wizards',\n category: 'component',\n },\n {\n name: 'data-density-patterns',\n description: 'Dense layouts, z-index, overflow, readability',\n category: 'component',\n },\n {\n name: 'toast-notification-patterns',\n description: 'Toast notifications, alerts, and system feedback',\n category: 'component',\n },\n\n // Interaction Skills\n {\n name: 'keyboard-shortcuts-patterns',\n description: 'Keyboard shortcuts, command palette (Cmd+K), power user navigation',\n category: 'interaction',\n },\n {\n name: 'drag-drop-patterns',\n description: 'Drag and drop interactions, visual feedback, drop zones',\n category: 'interaction',\n },\n\n // Editor/Workspace Skills\n {\n name: 'editor-workspace-patterns',\n description: 'Multi-tab editors, dirty state, real-time validation, workspaces',\n category: 'editor',\n },\n {\n name: 'comparison-patterns',\n description: 'Side-by-side comparison, diff highlighting, multi-item comparison',\n category: 'editor',\n },\n {\n name: 'split-panel-patterns',\n description: 'Resizable panels, dividers, collapsible sidebars, synchronized views',\n category: 'editor',\n },\n\n // Game/Interactive Skills\n {\n name: 'canvas-grid-patterns',\n description: 'Hex grids, tactical maps, pan/zoom, tokens, coordinate systems',\n category: 'game',\n },\n {\n name: 'turn-based-ui-patterns',\n description: 'Phase banners, turn indicators, action bars, game state feedback',\n category: 'game',\n },\n {\n name: 'playback-replay-patterns',\n description: 'VCR controls, timeline scrubbing, speed selection, replay viewers',\n category: 'game',\n },\n {\n name: 'status-visualization-patterns',\n description: 'Health bars, progress meters, heat gauges, pip displays, stat blocks',\n category: 'game',\n },\n\n // Data Display Skills\n {\n name: 'info-card-patterns',\n description: 'Compact/standard/expanded cards, stat blocks, badges, entity displays',\n category: 'data',\n },\n {\n name: 'event-timeline-patterns',\n description: 'Activity feeds, audit logs, chronological events, filtering, infinite scroll',\n category: 'data',\n },\n\n // Framework Skills\n {\n name: 'react-ux-patterns',\n description: 'React/Next.js specific UX patterns',\n category: 'framework',\n },\n] as const;\n\nexport const AGENTS = [\n // General Purpose Agents\n {\n name: 'ux-auditor',\n description: 'Full UX audit against heuristics (read-only)',\n mode: 'analysis',\n },\n {\n name: 'ux-engineer',\n description: 'UX analysis + implements fixes',\n mode: 'fix',\n },\n {\n name: 'accessibility-auditor',\n description: 'WCAG 2.2 compliance review (read-only)',\n mode: 'analysis',\n },\n {\n name: 'accessibility-engineer',\n description: 'Accessibility fixes',\n mode: 'fix',\n },\n {\n name: 'visual-reviewer',\n description: 'Design system consistency check',\n mode: 'analysis',\n },\n {\n name: 'interaction-reviewer',\n description: 'Micro-interactions and feedback review',\n mode: 'analysis',\n },\n\n // Specialized Page Reviewers\n {\n name: 'list-page-reviewer',\n description: 'List/browse page UX review',\n mode: 'analysis',\n },\n {\n name: 'detail-page-reviewer',\n description: 'Detail/entity page UX review',\n mode: 'analysis',\n },\n {\n name: 'navigation-reviewer',\n description: 'Navigation and routing review',\n mode: 'analysis',\n },\n {\n name: 'form-reviewer',\n description: 'Form and input UX review',\n mode: 'analysis',\n },\n {\n name: 'density-reviewer',\n description: 'Data density and layout review',\n mode: 'analysis',\n },\n\n // Advanced Specialized Reviewers\n {\n name: 'editor-reviewer',\n description: 'Editor/workspace UI with multi-tab, drag-drop, validation',\n mode: 'analysis',\n },\n {\n name: 'comparison-reviewer',\n description: 'Side-by-side comparison and diff UIs',\n mode: 'analysis',\n },\n {\n name: 'settings-reviewer',\n description: 'Settings, preferences, and configuration pages',\n mode: 'analysis',\n },\n\n // Game & Interactive Reviewers\n {\n name: 'game-ui-reviewer',\n description: 'Tactical maps, turn-based combat, status displays, hex grids',\n mode: 'analysis',\n },\n {\n name: 'replay-reviewer',\n description: 'Playback controls, timeline scrubbing, event feeds',\n mode: 'analysis',\n },\n {\n name: 'card-reviewer',\n description: 'Info cards, stat blocks, entity displays with density levels',\n mode: 'analysis',\n },\n {\n name: 'panel-reviewer',\n description: 'Resizable panels, collapsible sidebars, split views',\n mode: 'analysis',\n },\n] as const;\n\nexport const COMMANDS = [\n {\n name: 'ux-audit',\n description: 'Comprehensive UX audit',\n },\n {\n name: 'a11y-check',\n description: 'Quick accessibility scan',\n },\n {\n name: 'design-review',\n description: 'Visual consistency check',\n },\n {\n name: 'screenshot-review',\n description: 'Visual review from screenshot',\n },\n] as const;\n\nexport type SkillName = (typeof SKILLS)[number]['name'];\nexport type AgentName = (typeof AGENTS)[number]['name'];\nexport type CommandName = (typeof COMMANDS)[number]['name'];\n"],"mappings":";AAAA,SAAS,YAAY,WAAW,QAAQ,mBAAmB;AAC3D,SAAS,QAAAA,OAAM,WAAAC,gBAAe;;;ACD9B,SAAS,eAAe;AACxB,SAAS,MAAM,eAAe;AAC9B,SAAS,qBAAqB;AAE9B,IAAM,YAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AAEjD,SAAS,iBAAyB;AACvC,SAAO,KAAK,WAAW,IAAI;AAC7B;AAEO,SAAS,aAAa,WAA2B;AACtD,SAAO,KAAK,eAAe,GAAG,UAAU,WAAW,UAAU;AAC/D;AAEO,SAAS,aAAa,WAA2B;AACtD,SAAO,KAAK,eAAe,GAAG,UAAU,GAAG,SAAS,KAAK;AAC3D;AAEO,SAAS,eAAe,aAA6B;AAC1D,SAAO,KAAK,eAAe,GAAG,YAAY,GAAG,WAAW,KAAK;AAC/D;AAEO,SAAS,qBAA6B;AAC3C,SAAO,KAAK,QAAQ,GAAG,WAAW,UAAU;AAC9C;AAEO,SAAS,oBAAoB,cAAsB,QAAQ,IAAI,GAAW;AAC/E,SAAO,KAAK,aAAa,WAAW;AACtC;AAEO,SAAS,oBAAoB,QAAiB,aAAsB;AACzE,QAAM,UAAU,SAAS,mBAAmB,IAAI,oBAAoB,WAAW;AAE/E,SAAO;AAAA,IACL,QAAQ,KAAK,SAAS,QAAQ;AAAA,IAC9B,QAAQ,KAAK,SAAS,QAAQ;AAAA,IAC9B,UAAU,KAAK,SAAS,UAAU;AAAA,EACpC;AACF;;;ADfA,eAAsB,QAAQ,UAA0B,CAAC,GAA2B;AAClF,QAAM;AAAA,IACJ,QAAQ,WAAW;AAAA,IACnB,cAAc,QAAQ,IAAI;AAAA,IAC1B,aAAa,CAAC,UAAU,UAAU,UAAU;AAAA,IAC5C,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,IAAI;AAEJ,QAAM,SAAwB;AAAA,IAC5B,WAAW,CAAC;AAAA,IACZ,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,EACX;AAEA,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,oBAAoB,UAAU,WAAW;AAE9D,QAAM,MAAM,CAAC,QAAgB;AAC3B,QAAI,QAAS,SAAQ,IAAI,GAAG;AAAA,EAC9B;AAEA,MAAI,WAAW,SAAS,QAAQ,GAAG;AACjC,UAAM,YAAYC,MAAK,aAAa,QAAQ;AAC5C,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,SAAS,YAAY,WAAW,EAAE,eAAe,KAAK,CAAC,EAC1D,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,EAC7B,IAAI,CAAC,MAAM,EAAE,IAAI;AAEpB,iBAAW,SAAS,QAAQ;AAC1B,cAAM,MAAMA,MAAK,WAAW,KAAK;AACjC,cAAM,OAAOA,MAAK,aAAa,QAAQ,KAAK;AAE5C,YAAI;AACF,cAAI,WAAW,IAAI,KAAK,CAAC,OAAO;AAC9B,mBAAO,QAAQ,KAAK,SAAS,KAAK,EAAE;AACpC,gBAAI,iBAAiB,KAAK,mBAAmB;AAC7C;AAAA,UACF;AAEA,oBAAUC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5C,iBAAO,KAAK,MAAM,EAAE,WAAW,KAAK,CAAC;AACrC,iBAAO,UAAU,KAAK,SAAS,KAAK,EAAE;AACtC,cAAI,mBAAmB,KAAK,EAAE;AAAA,QAChC,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,SAAS,KAAK,KAAK,GAAG,EAAE;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,SAAS,QAAQ,GAAG;AACjC,UAAM,YAAYD,MAAK,aAAa,QAAQ;AAC5C,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,SAAS,YAAY,SAAS,EACjC,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAC/B,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC;AAElC,iBAAW,SAAS,QAAQ;AAC1B,cAAM,MAAMA,MAAK,WAAW,GAAG,KAAK,KAAK;AACzC,cAAM,OAAOA,MAAK,aAAa,QAAQ,GAAG,KAAK,KAAK;AAEpD,YAAI;AACF,cAAI,WAAW,IAAI,KAAK,CAAC,OAAO;AAC9B,mBAAO,QAAQ,KAAK,SAAS,KAAK,EAAE;AACpC,gBAAI,kBAAkB,KAAK,sBAAsB;AACjD;AAAA,UACF;AAEA,oBAAUC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5C,iBAAO,KAAK,IAAI;AAChB,iBAAO,UAAU,KAAK,SAAS,KAAK,EAAE;AACtC,cAAI,oBAAoB,KAAK,KAAK;AAAA,QACpC,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,SAAS,KAAK,KAAK,GAAG,EAAE;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,SAAS,UAAU,GAAG;AACnC,UAAM,cAAcD,MAAK,aAAa,UAAU;AAChD,QAAI,WAAW,WAAW,GAAG;AAC3B,YAAM,WAAW,YAAY,WAAW,EACrC,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAC/B,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC;AAElC,iBAAW,WAAW,UAAU;AAC9B,cAAM,MAAMA,MAAK,aAAa,GAAG,OAAO,KAAK;AAC7C,cAAM,OAAOA,MAAK,aAAa,UAAU,GAAG,OAAO,KAAK;AAExD,YAAI;AACF,cAAI,WAAW,IAAI,KAAK,CAAC,OAAO;AAC9B,mBAAO,QAAQ,KAAK,WAAW,OAAO,EAAE;AACxC,gBAAI,oBAAoB,OAAO,sBAAsB;AACrD;AAAA,UACF;AAEA,oBAAUC,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5C,iBAAO,KAAK,IAAI;AAChB,iBAAO,UAAU,KAAK,WAAW,OAAO,EAAE;AAC1C,cAAI,sBAAsB,OAAO,KAAK;AAAA,QACxC,SAAS,KAAK;AACZ,iBAAO,OAAO,KAAK,WAAW,OAAO,KAAK,GAAG,EAAE;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AErIO,IAAM,SAAS;AAAA;AAAA,EAEpB;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,SAAS;AAAA;AAAA,EAEpB;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAEO,IAAM,WAAW;AAAA,EACtB;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AACF;","names":["join","dirname","join","dirname"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ux-toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "AI-powered UI/UX review toolkit with skills, agents, and commands for OpenCode and other AI coding assistants",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ux",
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
"ai-agents",
|
|
15
15
|
"mcp"
|
|
16
16
|
],
|
|
17
|
-
"homepage": "https://github.com/
|
|
17
|
+
"homepage": "https://github.com/SwiggitySwerve/ux-toolkit#readme",
|
|
18
18
|
"bugs": {
|
|
19
|
-
"url": "https://github.com/
|
|
19
|
+
"url": "https://github.com/SwiggitySwerve/ux-toolkit/issues"
|
|
20
20
|
},
|
|
21
21
|
"repository": {
|
|
22
22
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/
|
|
23
|
+
"url": "git+https://github.com/SwiggitySwerve/ux-toolkit.git"
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"author": "swiggityswerve",
|
|
@@ -56,10 +56,12 @@
|
|
|
56
56
|
"typecheck": "tsc --noEmit"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
+
"@eslint/js": "^9.39.2",
|
|
59
60
|
"@types/node": "^22.0.0",
|
|
60
61
|
"eslint": "^9.0.0",
|
|
61
62
|
"tsup": "^8.0.0",
|
|
62
63
|
"typescript": "^5.7.0",
|
|
64
|
+
"typescript-eslint": "^8.53.1",
|
|
63
65
|
"vitest": "^3.0.0"
|
|
64
66
|
},
|
|
65
67
|
"engines": {
|