ux-toolkit 0.1.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.
@@ -0,0 +1,88 @@
1
+ interface InstallOptions {
2
+ /** Install globally to ~/.config/opencode */
3
+ global?: boolean;
4
+ /** Project root for local installation */
5
+ projectRoot?: string;
6
+ /** Only install specific categories */
7
+ categories?: ('skills' | 'agents' | 'commands')[];
8
+ /** Overwrite existing files */
9
+ force?: boolean;
10
+ /** Verbose output */
11
+ verbose?: boolean;
12
+ }
13
+ interface InstallResult {
14
+ installed: string[];
15
+ skipped: string[];
16
+ errors: string[];
17
+ }
18
+ declare function install(options?: InstallOptions): Promise<InstallResult>;
19
+
20
+ declare function getSkillPath(skillName: string): string;
21
+ declare function getAgentPath(agentName: string): string;
22
+ declare function getCommandPath(commandName: string): string;
23
+
24
+ declare const SKILLS: readonly [{
25
+ readonly name: "ux-heuristics";
26
+ readonly description: "Nielsen's 10 usability heuristics with evaluation methodology";
27
+ readonly category: "core";
28
+ }, {
29
+ readonly name: "wcag-accessibility";
30
+ readonly description: "WCAG 2.2 compliance checklist and ARIA patterns";
31
+ readonly category: "core";
32
+ }, {
33
+ readonly name: "visual-design-system";
34
+ readonly description: "Layout, typography, color theory, spacing systems";
35
+ readonly category: "core";
36
+ }, {
37
+ readonly name: "interaction-patterns";
38
+ readonly description: "Micro-interactions, loading states, feedback mechanisms";
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
+ }, {
45
+ readonly name: "mobile-responsive-ux";
46
+ readonly description: "Touch targets, gestures, responsive patterns";
47
+ readonly category: "core";
48
+ }];
49
+ declare const AGENTS: readonly [{
50
+ readonly name: "ux-auditor";
51
+ readonly description: "Full UX audit against heuristics (read-only)";
52
+ readonly mode: "analysis";
53
+ }, {
54
+ readonly name: "ux-engineer";
55
+ readonly description: "UX analysis + implements fixes";
56
+ readonly mode: "fix";
57
+ }, {
58
+ readonly name: "accessibility-auditor";
59
+ readonly description: "WCAG 2.2 compliance review (read-only)";
60
+ readonly mode: "analysis";
61
+ }, {
62
+ readonly name: "accessibility-engineer";
63
+ readonly description: "Accessibility fixes";
64
+ readonly mode: "fix";
65
+ }, {
66
+ readonly name: "visual-reviewer";
67
+ readonly description: "Design system consistency check";
68
+ readonly mode: "analysis";
69
+ }, {
70
+ readonly name: "interaction-reviewer";
71
+ readonly description: "Micro-interactions and feedback review";
72
+ readonly mode: "analysis";
73
+ }];
74
+ declare const COMMANDS: readonly [{
75
+ readonly name: "ux-audit";
76
+ readonly description: "Comprehensive UX audit";
77
+ }, {
78
+ readonly name: "a11y-check";
79
+ readonly description: "Quick accessibility scan";
80
+ }, {
81
+ readonly name: "design-review";
82
+ readonly description: "Visual consistency check";
83
+ }, {
84
+ readonly name: "screenshot-review";
85
+ readonly description: "Visual review from screenshot";
86
+ }];
87
+
88
+ export { AGENTS, COMMANDS, type InstallOptions, SKILLS, getAgentPath, getCommandPath, getSkillPath, install };
@@ -0,0 +1,88 @@
1
+ interface InstallOptions {
2
+ /** Install globally to ~/.config/opencode */
3
+ global?: boolean;
4
+ /** Project root for local installation */
5
+ projectRoot?: string;
6
+ /** Only install specific categories */
7
+ categories?: ('skills' | 'agents' | 'commands')[];
8
+ /** Overwrite existing files */
9
+ force?: boolean;
10
+ /** Verbose output */
11
+ verbose?: boolean;
12
+ }
13
+ interface InstallResult {
14
+ installed: string[];
15
+ skipped: string[];
16
+ errors: string[];
17
+ }
18
+ declare function install(options?: InstallOptions): Promise<InstallResult>;
19
+
20
+ declare function getSkillPath(skillName: string): string;
21
+ declare function getAgentPath(agentName: string): string;
22
+ declare function getCommandPath(commandName: string): string;
23
+
24
+ declare const SKILLS: readonly [{
25
+ readonly name: "ux-heuristics";
26
+ readonly description: "Nielsen's 10 usability heuristics with evaluation methodology";
27
+ readonly category: "core";
28
+ }, {
29
+ readonly name: "wcag-accessibility";
30
+ readonly description: "WCAG 2.2 compliance checklist and ARIA patterns";
31
+ readonly category: "core";
32
+ }, {
33
+ readonly name: "visual-design-system";
34
+ readonly description: "Layout, typography, color theory, spacing systems";
35
+ readonly category: "core";
36
+ }, {
37
+ readonly name: "interaction-patterns";
38
+ readonly description: "Micro-interactions, loading states, feedback mechanisms";
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
+ }, {
45
+ readonly name: "mobile-responsive-ux";
46
+ readonly description: "Touch targets, gestures, responsive patterns";
47
+ readonly category: "core";
48
+ }];
49
+ declare const AGENTS: readonly [{
50
+ readonly name: "ux-auditor";
51
+ readonly description: "Full UX audit against heuristics (read-only)";
52
+ readonly mode: "analysis";
53
+ }, {
54
+ readonly name: "ux-engineer";
55
+ readonly description: "UX analysis + implements fixes";
56
+ readonly mode: "fix";
57
+ }, {
58
+ readonly name: "accessibility-auditor";
59
+ readonly description: "WCAG 2.2 compliance review (read-only)";
60
+ readonly mode: "analysis";
61
+ }, {
62
+ readonly name: "accessibility-engineer";
63
+ readonly description: "Accessibility fixes";
64
+ readonly mode: "fix";
65
+ }, {
66
+ readonly name: "visual-reviewer";
67
+ readonly description: "Design system consistency check";
68
+ readonly mode: "analysis";
69
+ }, {
70
+ readonly name: "interaction-reviewer";
71
+ readonly description: "Micro-interactions and feedback review";
72
+ readonly mode: "analysis";
73
+ }];
74
+ declare const COMMANDS: readonly [{
75
+ readonly name: "ux-audit";
76
+ readonly description: "Comprehensive UX audit";
77
+ }, {
78
+ readonly name: "a11y-check";
79
+ readonly description: "Quick accessibility scan";
80
+ }, {
81
+ readonly name: "design-review";
82
+ readonly description: "Visual consistency check";
83
+ }, {
84
+ readonly name: "screenshot-review";
85
+ readonly description: "Visual review from screenshot";
86
+ }];
87
+
88
+ export { AGENTS, COMMANDS, type InstallOptions, SKILLS, getAgentPath, getCommandPath, getSkillPath, install };
package/dist/index.js ADDED
@@ -0,0 +1,220 @@
1
+ // src/installer.ts
2
+ import { existsSync, mkdirSync, cpSync, readdirSync } from "fs";
3
+ import { join as join2, dirname as dirname2 } from "path";
4
+
5
+ // src/paths.ts
6
+ import { homedir } from "os";
7
+ import { join, dirname } from "path";
8
+ import { fileURLToPath } from "url";
9
+ var __dirname = dirname(fileURLToPath(import.meta.url));
10
+ function getPackageRoot() {
11
+ return join(__dirname, "..");
12
+ }
13
+ function getSkillPath(skillName) {
14
+ return join(getPackageRoot(), "skills", skillName, "SKILL.md");
15
+ }
16
+ function getAgentPath(agentName) {
17
+ return join(getPackageRoot(), "agents", `${agentName}.md`);
18
+ }
19
+ function getCommandPath(commandName) {
20
+ return join(getPackageRoot(), "commands", `${commandName}.md`);
21
+ }
22
+ function getGlobalConfigDir() {
23
+ return join(homedir(), ".config", "opencode");
24
+ }
25
+ function getProjectConfigDir(projectRoot = process.cwd()) {
26
+ return join(projectRoot, ".opencode");
27
+ }
28
+ function getDestinationPaths(global, projectRoot) {
29
+ const baseDir = global ? getGlobalConfigDir() : getProjectConfigDir(projectRoot);
30
+ return {
31
+ skills: join(baseDir, "skills"),
32
+ agents: join(baseDir, "agents"),
33
+ commands: join(baseDir, "commands")
34
+ };
35
+ }
36
+
37
+ // src/installer.ts
38
+ async function install(options = {}) {
39
+ const {
40
+ global: isGlobal = false,
41
+ projectRoot = process.cwd(),
42
+ categories = ["skills", "agents", "commands"],
43
+ force = false,
44
+ verbose = false
45
+ } = options;
46
+ const result = {
47
+ installed: [],
48
+ skipped: [],
49
+ errors: []
50
+ };
51
+ const packageRoot = getPackageRoot();
52
+ const destinations = getDestinationPaths(isGlobal, projectRoot);
53
+ const log = (msg) => {
54
+ if (verbose) console.log(msg);
55
+ };
56
+ if (categories.includes("skills")) {
57
+ const skillsDir = join2(packageRoot, "skills");
58
+ if (existsSync(skillsDir)) {
59
+ const skills = readdirSync(skillsDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
60
+ for (const skill of skills) {
61
+ const src = join2(skillsDir, skill);
62
+ const dest = join2(destinations.skills, skill);
63
+ try {
64
+ if (existsSync(dest) && !force) {
65
+ result.skipped.push(`skill:${skill}`);
66
+ log(`Skipped skill/${skill} (already exists)`);
67
+ continue;
68
+ }
69
+ mkdirSync(dirname2(dest), { recursive: true });
70
+ cpSync(src, dest, { recursive: true });
71
+ result.installed.push(`skill:${skill}`);
72
+ log(`Installed skill/${skill}`);
73
+ } catch (err) {
74
+ result.errors.push(`skill:${skill}: ${err}`);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ if (categories.includes("agents")) {
80
+ const agentsDir = join2(packageRoot, "agents");
81
+ if (existsSync(agentsDir)) {
82
+ const agents = readdirSync(agentsDir).filter((f) => f.endsWith(".md")).map((f) => f.replace(".md", ""));
83
+ for (const agent of agents) {
84
+ const src = join2(agentsDir, `${agent}.md`);
85
+ const dest = join2(destinations.agents, `${agent}.md`);
86
+ try {
87
+ if (existsSync(dest) && !force) {
88
+ result.skipped.push(`agent:${agent}`);
89
+ log(`Skipped agents/${agent}.md (already exists)`);
90
+ continue;
91
+ }
92
+ mkdirSync(dirname2(dest), { recursive: true });
93
+ cpSync(src, dest);
94
+ result.installed.push(`agent:${agent}`);
95
+ log(`Installed agents/${agent}.md`);
96
+ } catch (err) {
97
+ result.errors.push(`agent:${agent}: ${err}`);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ if (categories.includes("commands")) {
103
+ const commandsDir = join2(packageRoot, "commands");
104
+ if (existsSync(commandsDir)) {
105
+ const commands = readdirSync(commandsDir).filter((f) => f.endsWith(".md")).map((f) => f.replace(".md", ""));
106
+ for (const command of commands) {
107
+ const src = join2(commandsDir, `${command}.md`);
108
+ const dest = join2(destinations.commands, `${command}.md`);
109
+ try {
110
+ if (existsSync(dest) && !force) {
111
+ result.skipped.push(`command:${command}`);
112
+ log(`Skipped commands/${command}.md (already exists)`);
113
+ continue;
114
+ }
115
+ mkdirSync(dirname2(dest), { recursive: true });
116
+ cpSync(src, dest);
117
+ result.installed.push(`command:${command}`);
118
+ log(`Installed commands/${command}.md`);
119
+ } catch (err) {
120
+ result.errors.push(`command:${command}: ${err}`);
121
+ }
122
+ }
123
+ }
124
+ }
125
+ return result;
126
+ }
127
+
128
+ // src/manifest.ts
129
+ var SKILLS = [
130
+ {
131
+ name: "ux-heuristics",
132
+ description: "Nielsen's 10 usability heuristics with evaluation methodology",
133
+ category: "core"
134
+ },
135
+ {
136
+ name: "wcag-accessibility",
137
+ description: "WCAG 2.2 compliance checklist and ARIA patterns",
138
+ category: "core"
139
+ },
140
+ {
141
+ name: "visual-design-system",
142
+ description: "Layout, typography, color theory, spacing systems",
143
+ category: "core"
144
+ },
145
+ {
146
+ name: "interaction-patterns",
147
+ description: "Micro-interactions, loading states, feedback mechanisms",
148
+ category: "core"
149
+ },
150
+ {
151
+ name: "react-ux-patterns",
152
+ description: "React/Next.js specific UX patterns",
153
+ category: "framework"
154
+ },
155
+ {
156
+ name: "mobile-responsive-ux",
157
+ description: "Touch targets, gestures, responsive patterns",
158
+ category: "core"
159
+ }
160
+ ];
161
+ var AGENTS = [
162
+ {
163
+ name: "ux-auditor",
164
+ description: "Full UX audit against heuristics (read-only)",
165
+ mode: "analysis"
166
+ },
167
+ {
168
+ name: "ux-engineer",
169
+ description: "UX analysis + implements fixes",
170
+ mode: "fix"
171
+ },
172
+ {
173
+ name: "accessibility-auditor",
174
+ description: "WCAG 2.2 compliance review (read-only)",
175
+ mode: "analysis"
176
+ },
177
+ {
178
+ name: "accessibility-engineer",
179
+ description: "Accessibility fixes",
180
+ mode: "fix"
181
+ },
182
+ {
183
+ name: "visual-reviewer",
184
+ description: "Design system consistency check",
185
+ mode: "analysis"
186
+ },
187
+ {
188
+ name: "interaction-reviewer",
189
+ description: "Micro-interactions and feedback review",
190
+ mode: "analysis"
191
+ }
192
+ ];
193
+ var COMMANDS = [
194
+ {
195
+ name: "ux-audit",
196
+ description: "Comprehensive UX audit"
197
+ },
198
+ {
199
+ name: "a11y-check",
200
+ description: "Quick accessibility scan"
201
+ },
202
+ {
203
+ name: "design-review",
204
+ description: "Visual consistency check"
205
+ },
206
+ {
207
+ name: "screenshot-review",
208
+ description: "Visual review from screenshot"
209
+ }
210
+ ];
211
+ export {
212
+ AGENTS,
213
+ COMMANDS,
214
+ SKILLS,
215
+ getAgentPath,
216
+ getCommandPath,
217
+ getSkillPath,
218
+ install
219
+ };
220
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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":";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,EACpB;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,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,SAAS;AAAA,EACpB;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;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 ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "ux-toolkit",
3
+ "version": "0.1.0",
4
+ "description": "AI-powered UI/UX review toolkit with skills, agents, and commands for OpenCode and other AI coding assistants",
5
+ "keywords": [
6
+ "ux",
7
+ "ui",
8
+ "accessibility",
9
+ "wcag",
10
+ "usability",
11
+ "heuristics",
12
+ "design-system",
13
+ "opencode",
14
+ "ai-agents",
15
+ "mcp"
16
+ ],
17
+ "homepage": "https://github.com/swiggityswerve/ux-toolkit#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/swiggityswerve/ux-toolkit/issues"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/swiggityswerve/ux-toolkit.git"
24
+ },
25
+ "license": "MIT",
26
+ "author": "swiggityswerve",
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "import": "./dist/index.js",
31
+ "require": "./dist/index.cjs"
32
+ },
33
+ "./skills/*": "./skills/*",
34
+ "./agents/*": "./agents/*",
35
+ "./commands/*": "./commands/*"
36
+ },
37
+ "bin": {
38
+ "ux-toolkit": "./dist/cli.js"
39
+ },
40
+ "main": "./dist/index.cjs",
41
+ "module": "./dist/index.js",
42
+ "types": "./dist/index.d.ts",
43
+ "files": [
44
+ "dist",
45
+ "skills",
46
+ "agents",
47
+ "commands",
48
+ "README.md"
49
+ ],
50
+ "scripts": {
51
+ "build": "tsup",
52
+ "dev": "tsup --watch",
53
+ "lint": "eslint .",
54
+ "prepublishOnly": "npm run build",
55
+ "test": "vitest",
56
+ "typecheck": "tsc --noEmit"
57
+ },
58
+ "devDependencies": {
59
+ "@types/node": "^22.0.0",
60
+ "eslint": "^9.0.0",
61
+ "tsup": "^8.0.0",
62
+ "typescript": "^5.7.0",
63
+ "vitest": "^3.0.0"
64
+ },
65
+ "engines": {
66
+ "node": ">=18"
67
+ },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ }
71
+ }