ux-toolkit 0.1.0 → 0.4.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.
Files changed (44) hide show
  1. package/README.md +113 -7
  2. package/agents/card-reviewer.md +173 -0
  3. package/agents/comparison-reviewer.md +143 -0
  4. package/agents/density-reviewer.md +207 -0
  5. package/agents/detail-page-reviewer.md +143 -0
  6. package/agents/editor-reviewer.md +165 -0
  7. package/agents/form-reviewer.md +156 -0
  8. package/agents/game-ui-reviewer.md +181 -0
  9. package/agents/list-page-reviewer.md +132 -0
  10. package/agents/navigation-reviewer.md +145 -0
  11. package/agents/panel-reviewer.md +182 -0
  12. package/agents/replay-reviewer.md +174 -0
  13. package/agents/settings-reviewer.md +166 -0
  14. package/agents/ux-auditor.md +145 -45
  15. package/agents/ux-engineer.md +211 -38
  16. package/dist/cli.js +172 -5
  17. package/dist/cli.js.map +1 -1
  18. package/dist/index.cjs +172 -5
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +128 -4
  21. package/dist/index.d.ts +128 -4
  22. package/dist/index.js +172 -5
  23. package/dist/index.js.map +1 -1
  24. package/package.json +6 -4
  25. package/skills/canvas-grid-patterns/SKILL.md +367 -0
  26. package/skills/comparison-patterns/SKILL.md +354 -0
  27. package/skills/data-density-patterns/SKILL.md +493 -0
  28. package/skills/detail-page-patterns/SKILL.md +522 -0
  29. package/skills/drag-drop-patterns/SKILL.md +406 -0
  30. package/skills/editor-workspace-patterns/SKILL.md +552 -0
  31. package/skills/event-timeline-patterns/SKILL.md +542 -0
  32. package/skills/form-patterns/SKILL.md +608 -0
  33. package/skills/info-card-patterns/SKILL.md +531 -0
  34. package/skills/keyboard-shortcuts-patterns/SKILL.md +365 -0
  35. package/skills/list-page-patterns/SKILL.md +351 -0
  36. package/skills/modal-patterns/SKILL.md +750 -0
  37. package/skills/navigation-patterns/SKILL.md +476 -0
  38. package/skills/page-structure-patterns/SKILL.md +271 -0
  39. package/skills/playback-replay-patterns/SKILL.md +695 -0
  40. package/skills/react-ux-patterns/SKILL.md +434 -0
  41. package/skills/split-panel-patterns/SKILL.md +609 -0
  42. package/skills/status-visualization-patterns/SKILL.md +635 -0
  43. package/skills/toast-notification-patterns/SKILL.md +207 -0
  44. 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.1.0",
3
+ "version": "0.4.1",
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/swiggityswerve/ux-toolkit#readme",
17
+ "homepage": "https://github.com/SwiggitySwerve/ux-toolkit#readme",
18
18
  "bugs": {
19
- "url": "https://github.com/swiggityswerve/ux-toolkit/issues"
19
+ "url": "https://github.com/SwiggitySwerve/ux-toolkit/issues"
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "git+https://github.com/swiggityswerve/ux-toolkit.git"
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": {