superskills 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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +363 -0
  3. package/bin/superskills +6 -0
  4. package/dist/catalog/index.d.ts +11 -0
  5. package/dist/catalog/index.d.ts.map +1 -0
  6. package/dist/catalog/index.js +203 -0
  7. package/dist/catalog/index.js.map +1 -0
  8. package/dist/catalog/tools-catalog.json +243 -0
  9. package/dist/catalog/types.d.ts +59 -0
  10. package/dist/catalog/types.d.ts.map +1 -0
  11. package/dist/catalog/types.js +2 -0
  12. package/dist/catalog/types.js.map +1 -0
  13. package/dist/catalog/ui.d.ts +4 -0
  14. package/dist/catalog/ui.d.ts.map +1 -0
  15. package/dist/catalog/ui.js +86 -0
  16. package/dist/catalog/ui.js.map +1 -0
  17. package/dist/cli/colors.d.ts +8 -0
  18. package/dist/cli/colors.d.ts.map +1 -0
  19. package/dist/cli/colors.js +11 -0
  20. package/dist/cli/colors.js.map +1 -0
  21. package/dist/discovery/analyze.d.ts +5 -0
  22. package/dist/discovery/analyze.d.ts.map +1 -0
  23. package/dist/discovery/analyze.js +190 -0
  24. package/dist/discovery/analyze.js.map +1 -0
  25. package/dist/discovery/core.d.ts +16 -0
  26. package/dist/discovery/core.d.ts.map +1 -0
  27. package/dist/discovery/core.js +51 -0
  28. package/dist/discovery/core.js.map +1 -0
  29. package/dist/discovery/index.d.ts +4 -0
  30. package/dist/discovery/index.d.ts.map +1 -0
  31. package/dist/discovery/index.js +233 -0
  32. package/dist/discovery/index.js.map +1 -0
  33. package/dist/discovery/schema.d.ts +111 -0
  34. package/dist/discovery/schema.d.ts.map +1 -0
  35. package/dist/discovery/schema.js +87 -0
  36. package/dist/discovery/schema.js.map +1 -0
  37. package/dist/discovery/types.d.ts +56 -0
  38. package/dist/discovery/types.d.ts.map +1 -0
  39. package/dist/discovery/types.js +2 -0
  40. package/dist/discovery/types.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +523 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/scaffold/index.d.ts +4 -0
  46. package/dist/scaffold/index.d.ts.map +1 -0
  47. package/dist/scaffold/index.js +262 -0
  48. package/dist/scaffold/index.js.map +1 -0
  49. package/dist/scaffold/templates/claude-md.d.ts +4 -0
  50. package/dist/scaffold/templates/claude-md.d.ts.map +1 -0
  51. package/dist/scaffold/templates/claude-md.js +229 -0
  52. package/dist/scaffold/templates/claude-md.js.map +1 -0
  53. package/dist/scaffold/templates/claude-settings.d.ts +3 -0
  54. package/dist/scaffold/templates/claude-settings.d.ts.map +1 -0
  55. package/dist/scaffold/templates/claude-settings.js +48 -0
  56. package/dist/scaffold/templates/claude-settings.js.map +1 -0
  57. package/dist/scaffold/templates/env-example.d.ts +3 -0
  58. package/dist/scaffold/templates/env-example.d.ts.map +1 -0
  59. package/dist/scaffold/templates/env-example.js +103 -0
  60. package/dist/scaffold/templates/env-example.js.map +1 -0
  61. package/dist/scaffold/templates/package-json.d.ts +2 -0
  62. package/dist/scaffold/templates/package-json.d.ts.map +1 -0
  63. package/dist/scaffold/templates/package-json.js +56 -0
  64. package/dist/scaffold/templates/package-json.js.map +1 -0
  65. package/dist/scaffold/templates/project-files.d.ts +4 -0
  66. package/dist/scaffold/templates/project-files.d.ts.map +1 -0
  67. package/dist/scaffold/templates/project-files.js +459 -0
  68. package/dist/scaffold/templates/project-files.js.map +1 -0
  69. package/dist/scaffold/templates/skill-agents.d.ts +4 -0
  70. package/dist/scaffold/templates/skill-agents.d.ts.map +1 -0
  71. package/dist/scaffold/templates/skill-agents.js +68 -0
  72. package/dist/scaffold/templates/skill-agents.js.map +1 -0
  73. package/dist/scaffold/templates/skill-commands.d.ts +3 -0
  74. package/dist/scaffold/templates/skill-commands.d.ts.map +1 -0
  75. package/dist/scaffold/templates/skill-commands.js +509 -0
  76. package/dist/scaffold/templates/skill-commands.js.map +1 -0
  77. package/dist/scaffold/templates/teammate-prompts.d.ts +8 -0
  78. package/dist/scaffold/templates/teammate-prompts.d.ts.map +1 -0
  79. package/dist/scaffold/templates/teammate-prompts.js +506 -0
  80. package/dist/scaffold/templates/teammate-prompts.js.map +1 -0
  81. package/dist/scaffold/types.d.ts +68 -0
  82. package/dist/scaffold/types.d.ts.map +1 -0
  83. package/dist/scaffold/types.js +2 -0
  84. package/dist/scaffold/types.js.map +1 -0
  85. package/dist/scaffold/ui.d.ts +5 -0
  86. package/dist/scaffold/ui.d.ts.map +1 -0
  87. package/dist/scaffold/ui.js +127 -0
  88. package/dist/scaffold/ui.js.map +1 -0
  89. package/dist/utils/logger.d.ts +3 -0
  90. package/dist/utils/logger.d.ts.map +1 -0
  91. package/dist/utils/logger.js +8 -0
  92. package/dist/utils/logger.js.map +1 -0
  93. package/package.json +69 -0
@@ -0,0 +1,103 @@
1
+ export function generateEnvExample(tools) {
2
+ const envVars = new Set();
3
+ for (const suggestion of tools.all) {
4
+ for (const envVar of suggestion.tool.envVars) {
5
+ envVars.add(envVar);
6
+ }
7
+ }
8
+ // Always include shadcnblocks (design system, not a tool)
9
+ envVars.add('SHADCNBLOCKS_API_KEY');
10
+ const lines = [
11
+ '# Environment Variables',
12
+ '# Copy this file to .env.local and fill in the values',
13
+ '',
14
+ '# ===================',
15
+ '# Core Services',
16
+ '# ===================',
17
+ ''
18
+ ];
19
+ // Group by service
20
+ const grouped = {
21
+ supabase: [],
22
+ vercel: [],
23
+ inngest: [],
24
+ anthropic: [],
25
+ openai: [],
26
+ shadcnblocks: [],
27
+ brevo: [],
28
+ telegram: [],
29
+ slack: [],
30
+ discord: [],
31
+ apify: [],
32
+ supermemory: [],
33
+ other: []
34
+ };
35
+ for (const envVar of envVars) {
36
+ const lower = envVar.toLowerCase();
37
+ if (lower.includes('supabase')) {
38
+ grouped.supabase.push(envVar);
39
+ }
40
+ else if (lower.includes('vercel')) {
41
+ grouped.vercel.push(envVar);
42
+ }
43
+ else if (lower.includes('inngest')) {
44
+ grouped.inngest.push(envVar);
45
+ }
46
+ else if (lower.includes('anthropic')) {
47
+ grouped.anthropic.push(envVar);
48
+ }
49
+ else if (lower.includes('openai')) {
50
+ grouped.openai.push(envVar);
51
+ }
52
+ else if (lower.includes('shadcnblocks')) {
53
+ grouped.shadcnblocks.push(envVar);
54
+ }
55
+ else if (lower.includes('brevo')) {
56
+ grouped.brevo.push(envVar);
57
+ }
58
+ else if (lower.includes('telegram')) {
59
+ grouped.telegram.push(envVar);
60
+ }
61
+ else if (lower.includes('slack')) {
62
+ grouped.slack.push(envVar);
63
+ }
64
+ else if (lower.includes('discord')) {
65
+ grouped.discord.push(envVar);
66
+ }
67
+ else if (lower.includes('apify')) {
68
+ grouped.apify.push(envVar);
69
+ }
70
+ else if (lower.includes('supermemory')) {
71
+ grouped.supermemory.push(envVar);
72
+ }
73
+ else {
74
+ grouped.other.push(envVar);
75
+ }
76
+ }
77
+ const sectionNames = {
78
+ supabase: 'Supabase',
79
+ vercel: 'Vercel',
80
+ inngest: 'Inngest',
81
+ anthropic: 'Claude (Anthropic)',
82
+ openai: 'OpenAI',
83
+ shadcnblocks: 'shadcnblocks (UI blocks, optional)',
84
+ brevo: 'Brevo (Email/SMS/WhatsApp)',
85
+ telegram: 'Telegram',
86
+ slack: 'Slack',
87
+ discord: 'Discord',
88
+ apify: 'Apify',
89
+ supermemory: 'Supermemory',
90
+ other: 'Other'
91
+ };
92
+ for (const [key, vars] of Object.entries(grouped)) {
93
+ if (vars.length > 0) {
94
+ lines.push(`# ${sectionNames[key]}`);
95
+ for (const v of vars.sort()) {
96
+ lines.push(`${v}=`);
97
+ }
98
+ lines.push('');
99
+ }
100
+ }
101
+ return lines.join('\n');
102
+ }
103
+ //# sourceMappingURL=env-example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-example.js","sourceRoot":"","sources":["../../../src/scaffold/templates/env-example.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function generatePackageJson(projectName: string, packages: string[]): object;
2
+ //# sourceMappingURL=package-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/package-json.ts"],"names":[],"mappings":"AAgBA,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CA2CnF"}
@@ -0,0 +1,56 @@
1
+ // Pinned versions for generated projects
2
+ const SDK_VERSIONS = {
3
+ '@supabase/supabase-js': '^2.49.0',
4
+ 'inngest': '^3.31.0',
5
+ '@anthropic-ai/sdk': '^0.76.0',
6
+ 'openai': '^4.85.0',
7
+ '@getbrevo/brevo': '^2.2.0',
8
+ 'grammy': '^1.35.0',
9
+ '@slack/bolt': '^4.3.0',
10
+ 'discord.js': '^14.17.0',
11
+ '@whiskeysockets/baileys': '^6.7.0',
12
+ 'apify-client': '^2.11.0',
13
+ '@supermemory/ai-sdk': '^0.1.0',
14
+ '@playwright/test': '^1.49.0'
15
+ };
16
+ export function generatePackageJson(projectName, packages) {
17
+ const dependencies = {
18
+ "next": "^15.3.0",
19
+ "react": "^19.1.0",
20
+ "react-dom": "^19.1.0",
21
+ "clsx": "^2.1.0",
22
+ "tailwind-merge": "^2.6.0"
23
+ };
24
+ // Add selected packages with pinned versions
25
+ for (const pkg of packages) {
26
+ dependencies[pkg] = SDK_VERSIONS[pkg] || '^0.1.0';
27
+ }
28
+ return {
29
+ "name": projectName,
30
+ "version": "0.1.0",
31
+ "private": true,
32
+ "scripts": {
33
+ "dev": "next dev",
34
+ "build": "next build",
35
+ "start": "next start",
36
+ "lint": "next lint",
37
+ "test": "vitest run",
38
+ "test:watch": "vitest",
39
+ "test:e2e": "npx playwright test",
40
+ "inngest:dev": "npx inngest-cli@latest dev"
41
+ },
42
+ "dependencies": Object.fromEntries(Object.entries(dependencies).sort(([a], [b]) => a.localeCompare(b))),
43
+ "devDependencies": {
44
+ "@playwright/test": "^1.49.0",
45
+ "@types/node": "^22.15.0",
46
+ "@types/react": "^19.1.0",
47
+ "@types/react-dom": "^19.1.0",
48
+ "autoprefixer": "^10.4.0",
49
+ "postcss": "^8.5.0",
50
+ "tailwindcss": "^3.4.0",
51
+ "typescript": "^5.8.0",
52
+ "vitest": "^4.0.0"
53
+ }
54
+ };
55
+ }
56
+ //# sourceMappingURL=package-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/scaffold/templates/package-json.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,YAAY,GAA2B;IAC3C,uBAAuB,EAAE,SAAS;IAClC,SAAS,EAAE,SAAS;IACpB,mBAAmB,EAAE,SAAS;IAC9B,QAAQ,EAAE,SAAS;IACnB,iBAAiB,EAAE,QAAQ;IAC3B,QAAQ,EAAE,SAAS;IACnB,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,UAAU;IACxB,yBAAyB,EAAE,QAAQ;IACnC,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,QAAQ;IAC/B,kBAAkB,EAAE,SAAS;CAC9B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAAkB;IACzE,MAAM,YAAY,GAA2B;QAC3C,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,QAAQ;QAChB,gBAAgB,EAAE,QAAQ;KAC3B,CAAC;IAEF,6CAA6C;IAC7C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;IACpD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE;YACT,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,QAAQ;YACtB,UAAU,EAAE,qBAAqB;YACjC,aAAa,EAAE,4BAA4B;SAC5C;QACD,cAAc,EAAE,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACpE;QACD,iBAAiB,EAAE;YACjB,kBAAkB,EAAE,SAAS;YAC7B,aAAa,EAAE,UAAU;YACzB,cAAc,EAAE,SAAS;YACzB,kBAAkB,EAAE,SAAS;YAC7B,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,QAAQ;YACvB,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,QAAQ;SACnB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DiscoveryResult } from '../../discovery/types.js';
2
+ import type { SelectionResult } from '../../catalog/types.js';
3
+ export declare function generateProjectFiles(discovery: DiscoveryResult, _tools: SelectionResult): Promise<Record<string, string>>;
4
+ //# sourceMappingURL=project-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/project-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAudjC"}
@@ -0,0 +1,459 @@
1
+ export async function generateProjectFiles(discovery, _tools) {
2
+ const files = {};
3
+ // TypeScript config
4
+ files['tsconfig.json'] = JSON.stringify({
5
+ "compilerOptions": {
6
+ "target": "ES2022",
7
+ "lib": ["dom", "dom.iterable", "ES2022"],
8
+ "allowJs": true,
9
+ "skipLibCheck": true,
10
+ "strict": true,
11
+ "noEmit": true,
12
+ "esModuleInterop": true,
13
+ "module": "esnext",
14
+ "moduleResolution": "bundler",
15
+ "resolveJsonModule": true,
16
+ "isolatedModules": true,
17
+ "jsx": "preserve",
18
+ "incremental": true,
19
+ "plugins": [{ "name": "next" }],
20
+ "paths": { "@/*": ["./src/*"] }
21
+ },
22
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
23
+ "exclude": ["node_modules"]
24
+ }, null, 2);
25
+ // Next.js config
26
+ files['next.config.ts'] = `import type { NextConfig } from 'next';
27
+
28
+ const nextConfig: NextConfig = {
29
+ // AI-native app config
30
+ };
31
+
32
+ export default nextConfig;
33
+ `;
34
+ // Tailwind config — extends from CSS variables in globals.css
35
+ files['tailwind.config.ts'] = `import type { Config } from 'tailwindcss';
36
+
37
+ const config: Config = {
38
+ content: [
39
+ './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
40
+ './src/components/**/*.{js,ts,jsx,tsx,mdx}',
41
+ './src/app/**/*.{js,ts,jsx,tsx,mdx}',
42
+ ],
43
+ theme: {
44
+ extend: {
45
+ colors: {
46
+ border: 'hsl(var(--border))',
47
+ input: 'hsl(var(--input))',
48
+ ring: 'hsl(var(--ring))',
49
+ background: 'hsl(var(--background))',
50
+ foreground: 'hsl(var(--foreground))',
51
+ primary: {
52
+ DEFAULT: 'hsl(var(--primary))',
53
+ foreground: 'hsl(var(--primary-foreground))',
54
+ },
55
+ secondary: {
56
+ DEFAULT: 'hsl(var(--secondary))',
57
+ foreground: 'hsl(var(--secondary-foreground))',
58
+ },
59
+ destructive: {
60
+ DEFAULT: 'hsl(var(--destructive))',
61
+ foreground: 'hsl(var(--destructive-foreground))',
62
+ },
63
+ muted: {
64
+ DEFAULT: 'hsl(var(--muted))',
65
+ foreground: 'hsl(var(--muted-foreground))',
66
+ },
67
+ accent: {
68
+ DEFAULT: 'hsl(var(--accent))',
69
+ foreground: 'hsl(var(--accent-foreground))',
70
+ },
71
+ popover: {
72
+ DEFAULT: 'hsl(var(--popover))',
73
+ foreground: 'hsl(var(--popover-foreground))',
74
+ },
75
+ card: {
76
+ DEFAULT: 'hsl(var(--card))',
77
+ foreground: 'hsl(var(--card-foreground))',
78
+ },
79
+ },
80
+ borderRadius: {
81
+ lg: 'var(--radius)',
82
+ md: 'calc(var(--radius) - 2px)',
83
+ sm: 'calc(var(--radius) - 4px)',
84
+ },
85
+ },
86
+ },
87
+ plugins: [],
88
+ };
89
+
90
+ export default config;
91
+ `;
92
+ // shadcn components.json with shadcnblocks registry
93
+ files['components.json'] = JSON.stringify({
94
+ "$schema": "https://ui.shadcn.com/schema.json",
95
+ "style": "default",
96
+ "rsc": true,
97
+ "tsx": true,
98
+ "tailwind": {
99
+ "config": "tailwind.config.ts",
100
+ "css": "src/app/globals.css",
101
+ "baseColor": "neutral",
102
+ "cssVariables": true
103
+ },
104
+ "aliases": {
105
+ "components": "@/components",
106
+ "utils": "@/lib/utils",
107
+ "ui": "@/components/ui",
108
+ "lib": "@/lib",
109
+ "hooks": "@/hooks"
110
+ },
111
+ "registries": {
112
+ "@shadcnblocks": {
113
+ "url": "https://shadcnblocks.com/r",
114
+ "headers": {
115
+ "Authorization": "Bearer ${SHADCNBLOCKS_API_KEY}"
116
+ }
117
+ }
118
+ }
119
+ }, null, 2);
120
+ // PostCSS config
121
+ files['postcss.config.mjs'] = `/** @type {import('postcss-load-config').Config} */
122
+ const config = {
123
+ plugins: {
124
+ tailwindcss: {},
125
+ autoprefixer: {},
126
+ },
127
+ };
128
+
129
+ export default config;
130
+ `;
131
+ // App layout
132
+ files['src/app/layout.tsx'] = `import type { Metadata } from 'next';
133
+ import './globals.css';
134
+
135
+ export const metadata: Metadata = {
136
+ title: '${discovery.projectName}',
137
+ description: '${discovery.desiredOutcome}',
138
+ };
139
+
140
+ export default function RootLayout({
141
+ children,
142
+ }: {
143
+ children: React.ReactNode;
144
+ }) {
145
+ return (
146
+ <html lang="en">
147
+ <body className="min-h-screen bg-background font-sans antialiased">{children}</body>
148
+ </html>
149
+ );
150
+ }
151
+ `;
152
+ // Global styles — design tokens as CSS custom properties
153
+ // The /design-init skill customizes these values for the project's brand
154
+ files['src/app/globals.css'] = `@tailwind base;
155
+ @tailwind components;
156
+ @tailwind utilities;
157
+
158
+ @layer base {
159
+ :root {
160
+ --background: 0 0% 100%;
161
+ --foreground: 240 10% 3.9%;
162
+ --card: 0 0% 100%;
163
+ --card-foreground: 240 10% 3.9%;
164
+ --popover: 0 0% 100%;
165
+ --popover-foreground: 240 10% 3.9%;
166
+ --primary: 240 5.9% 10%;
167
+ --primary-foreground: 0 0% 98%;
168
+ --secondary: 240 4.8% 95.9%;
169
+ --secondary-foreground: 240 5.9% 10%;
170
+ --muted: 240 4.8% 95.9%;
171
+ --muted-foreground: 240 3.8% 46.1%;
172
+ --accent: 240 4.8% 95.9%;
173
+ --accent-foreground: 240 5.9% 10%;
174
+ --destructive: 0 84.2% 60.2%;
175
+ --destructive-foreground: 0 0% 98%;
176
+ --border: 240 5.9% 90%;
177
+ --input: 240 5.9% 90%;
178
+ --ring: 240 5.9% 10%;
179
+ --radius: 0.5rem;
180
+ }
181
+
182
+ .dark {
183
+ --background: 240 10% 3.9%;
184
+ --foreground: 0 0% 98%;
185
+ --card: 240 10% 3.9%;
186
+ --card-foreground: 0 0% 98%;
187
+ --popover: 240 10% 3.9%;
188
+ --popover-foreground: 0 0% 98%;
189
+ --primary: 0 0% 98%;
190
+ --primary-foreground: 240 5.9% 10%;
191
+ --secondary: 240 3.7% 15.9%;
192
+ --secondary-foreground: 0 0% 98%;
193
+ --muted: 240 3.7% 15.9%;
194
+ --muted-foreground: 240 5% 64.9%;
195
+ --accent: 240 3.7% 15.9%;
196
+ --accent-foreground: 0 0% 98%;
197
+ --destructive: 0 62.8% 30.6%;
198
+ --destructive-foreground: 0 0% 98%;
199
+ --border: 240 3.7% 15.9%;
200
+ --input: 240 3.7% 15.9%;
201
+ --ring: 240 4.9% 83.9%;
202
+ }
203
+ }
204
+
205
+ @layer base {
206
+ * {
207
+ @apply border-border;
208
+ }
209
+ body {
210
+ @apply bg-background text-foreground;
211
+ }
212
+ }
213
+ `;
214
+ // Home page — uses semantic Tailwind classes from design tokens
215
+ files['src/app/page.tsx'] = `export default function Home() {
216
+ return (
217
+ <main className="min-h-screen p-8">
218
+ <h1 className="text-3xl font-bold mb-4">${discovery.projectName}</h1>
219
+ <p className="text-muted-foreground mb-8">${discovery.desiredOutcome}</p>
220
+
221
+ <div className="grid gap-4 md:grid-cols-4">
222
+ <div className="rounded-lg border bg-card p-4 text-card-foreground">
223
+ <h2 className="font-semibold mb-2">Enrichment</h2>
224
+ <p className="text-sm text-muted-foreground">
225
+ ${discovery.eiidMapping.enrichment.existingData.slice(0, 2).join(', ')}
226
+ </p>
227
+ </div>
228
+ <div className="rounded-lg border bg-card p-4 text-card-foreground">
229
+ <h2 className="font-semibold mb-2">Inference</h2>
230
+ <p className="text-sm text-muted-foreground">
231
+ ${discovery.eiidMapping.inference.patterns.slice(0, 2).join(', ')}
232
+ </p>
233
+ </div>
234
+ <div className="rounded-lg border bg-card p-4 text-card-foreground">
235
+ <h2 className="font-semibold mb-2">Interpretation</h2>
236
+ <p className="text-sm text-muted-foreground">
237
+ ${discovery.eiidMapping.interpretation.insights.slice(0, 2).join(', ')}
238
+ </p>
239
+ </div>
240
+ <div className="rounded-lg border bg-card p-4 text-card-foreground">
241
+ <h2 className="font-semibold mb-2">Delivery</h2>
242
+ <p className="text-sm text-muted-foreground">
243
+ ${discovery.eiidMapping.delivery.channels.join(', ')}
244
+ </p>
245
+ </div>
246
+ </div>
247
+ </main>
248
+ );
249
+ }
250
+ `;
251
+ // shadcn utility — cn() for className merging
252
+ files['src/lib/utils.ts'] = `import { type ClassValue, clsx } from 'clsx';
253
+ import { twMerge } from 'tailwind-merge';
254
+
255
+ export function cn(...inputs: ClassValue[]) {
256
+ return twMerge(clsx(inputs));
257
+ }
258
+ `;
259
+ // Supabase client
260
+ files['src/lib/supabase.ts'] = `import { createClient } from '@supabase/supabase-js';
261
+
262
+ const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
263
+ const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!;
264
+
265
+ export const supabase = createClient(supabaseUrl, supabaseAnonKey);
266
+
267
+ // Server-side client with service role
268
+ export function createServerClient() {
269
+ return createClient(
270
+ process.env.SUPABASE_URL!,
271
+ process.env.SUPABASE_SERVICE_ROLE_KEY!
272
+ );
273
+ }
274
+ `;
275
+ // AI client
276
+ files['src/lib/ai.ts'] = `import Anthropic from '@anthropic-ai/sdk';
277
+
278
+ const anthropic = new Anthropic({
279
+ apiKey: process.env.ANTHROPIC_API_KEY!,
280
+ });
281
+
282
+ const MODEL = process.env.SUPERSKILLS_MODEL || 'claude-opus-4-6';
283
+
284
+ export async function generateInsight(prompt: string): Promise<string> {
285
+ const response = await anthropic.messages.create({
286
+ model: MODEL,
287
+ max_tokens: 1024,
288
+ messages: [{ role: 'user', content: prompt }],
289
+ });
290
+
291
+ const textContent = response.content.find(c => c.type === 'text');
292
+ return textContent?.type === 'text' ? textContent.text : '';
293
+ }
294
+ `;
295
+ // Inngest client
296
+ files['src/inngest/client.ts'] = `import { Inngest } from 'inngest';
297
+
298
+ export const inngest = new Inngest({
299
+ id: '${slugify(discovery.projectName)}',
300
+ });
301
+ `;
302
+ // Sample Inngest function
303
+ const triggers = discovery.eiidMapping.delivery.triggers;
304
+ files['src/inngest/functions/analyze.ts'] = `import { inngest } from '../client';
305
+ import { generateInsight } from '@/lib/ai';
306
+
307
+ // Triggered by: ${triggers.join(', ') || 'events'}
308
+ export const analyzeAndDeliver = inngest.createFunction(
309
+ { id: 'analyze-and-deliver' },
310
+ { event: 'app/data.received' },
311
+ async ({ event, step }) => {
312
+ // Step 1: Analyze data
313
+ const insight = await step.run('generate-insight', async () => {
314
+ return generateInsight(\`
315
+ Analyze this data and provide actionable insights:
316
+ \${JSON.stringify(event.data)}
317
+ \`);
318
+ });
319
+
320
+ // Step 2: Decide if notification needed
321
+ const shouldNotify = await step.run('decide-notification', async () => {
322
+ // Add your decision logic here
323
+ return insight.length > 0;
324
+ });
325
+
326
+ // Step 3: Deliver to user
327
+ if (shouldNotify) {
328
+ await step.run('deliver-notification', async () => {
329
+ // Delivery channels: ${discovery.eiidMapping.delivery.channels.join(', ')}
330
+ console.log('Delivering insight:', insight);
331
+ // TODO: Implement delivery via Brevo/Telegram/Slack
332
+ });
333
+ }
334
+
335
+ return { success: true, insight };
336
+ }
337
+ );
338
+ `;
339
+ // Inngest route
340
+ files['src/app/api/inngest/route.ts'] = `import { serve } from 'inngest/next';
341
+ import { inngest } from '@/inngest/client';
342
+ import { analyzeAndDeliver } from '@/inngest/functions/analyze';
343
+
344
+ export const { GET, POST, PUT } = serve({
345
+ client: inngest,
346
+ functions: [analyzeAndDeliver],
347
+ });
348
+ `;
349
+ // Delivery stub
350
+ const channels = discovery.eiidMapping.delivery.channels;
351
+ files['src/lib/delivery/index.ts'] = `// Delivery channels: ${channels.join(', ')}
352
+
353
+ export interface DeliveryMessage {
354
+ channel: 'email' | 'sms' | 'whatsapp' | 'telegram' | 'slack' | 'discord';
355
+ recipient: string;
356
+ subject?: string;
357
+ body: string;
358
+ }
359
+
360
+ export async function deliver(message: DeliveryMessage): Promise<boolean> {
361
+ switch (message.channel) {
362
+ case 'email':
363
+ case 'sms':
364
+ case 'whatsapp':
365
+ return deliverViaBrevo(message);
366
+ case 'telegram':
367
+ return deliverViaTelegram(message);
368
+ case 'slack':
369
+ return deliverViaSlack(message);
370
+ case 'discord':
371
+ return deliverViaDiscord(message);
372
+ default:
373
+ throw new Error(\`Unknown channel: \${message.channel}\`);
374
+ }
375
+ }
376
+
377
+ async function deliverViaBrevo(message: DeliveryMessage): Promise<boolean> {
378
+ // TODO: Implement Brevo delivery
379
+ console.log('Brevo delivery:', message);
380
+ return true;
381
+ }
382
+
383
+ async function deliverViaTelegram(message: DeliveryMessage): Promise<boolean> {
384
+ // TODO: Implement Telegram delivery
385
+ console.log('Telegram delivery:', message);
386
+ return true;
387
+ }
388
+
389
+ async function deliverViaSlack(message: DeliveryMessage): Promise<boolean> {
390
+ // TODO: Implement Slack delivery
391
+ console.log('Slack delivery:', message);
392
+ return true;
393
+ }
394
+
395
+ async function deliverViaDiscord(message: DeliveryMessage): Promise<boolean> {
396
+ // TODO: Implement Discord delivery
397
+ console.log('Discord delivery:', message);
398
+ return true;
399
+ }
400
+ `;
401
+ // Supabase migrations folder
402
+ files['supabase/migrations/.gitkeep'] = '';
403
+ // Supabase config
404
+ files['supabase/config.toml'] = `[project]
405
+ id = "${slugify(discovery.projectName)}"
406
+ name = "${discovery.projectName}"
407
+ `;
408
+ // Playwright config
409
+ files['playwright.config.ts'] = `import { defineConfig, devices } from '@playwright/test';
410
+
411
+ export default defineConfig({
412
+ testDir: './tests/e2e',
413
+ fullyParallel: true,
414
+ forbidOnly: !!process.env.CI,
415
+ retries: process.env.CI ? 2 : 0,
416
+ workers: process.env.CI ? 1 : undefined,
417
+ reporter: 'html',
418
+ use: {
419
+ baseURL: 'http://localhost:3000',
420
+ trace: 'on-first-retry',
421
+ },
422
+ projects: [
423
+ {
424
+ name: 'chromium',
425
+ use: { ...devices['Desktop Chrome'] },
426
+ },
427
+ ],
428
+ webServer: {
429
+ command: 'npm run dev',
430
+ url: 'http://localhost:3000',
431
+ reuseExistingServer: !process.env.CI,
432
+ },
433
+ });
434
+ `;
435
+ // Sample E2E smoke test
436
+ files['tests/e2e/smoke.spec.ts'] = `import { test, expect } from '@playwright/test';
437
+
438
+ test('home page loads and displays project name', async ({ page }) => {
439
+ await page.goto('/');
440
+ await expect(page.locator('h1')).toContainText('${discovery.projectName}');
441
+ });
442
+
443
+ test('home page shows EIID sections', async ({ page }) => {
444
+ await page.goto('/');
445
+ await expect(page.locator('text=Enrichment')).toBeVisible();
446
+ await expect(page.locator('text=Inference')).toBeVisible();
447
+ await expect(page.locator('text=Interpretation')).toBeVisible();
448
+ await expect(page.locator('text=Delivery')).toBeVisible();
449
+ });
450
+ `;
451
+ return files;
452
+ }
453
+ function slugify(text) {
454
+ return text
455
+ .toLowerCase()
456
+ .replace(/[^a-z0-9]+/g, '-')
457
+ .replace(/^-|-$/g, '');
458
+ }
459
+ //# sourceMappingURL=project-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../../src/scaffold/templates/project-files.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAA0B,EAC1B,MAAuB;IAEvB,MAAM,KAAK,GAA2B,EAAE,CAAC;IAEzC,oBAAoB;IACpB,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,iBAAiB,EAAE;YACjB,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC;YACxC,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,iBAAiB,EAAE,IAAI;YACvB,QAAQ,EAAE,QAAQ;YAClB,kBAAkB,EAAE,SAAS;YAC7B,mBAAmB,EAAE,IAAI;YACzB,iBAAiB,EAAE,IAAI;YACvB,KAAK,EAAE,UAAU;YACjB,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC/B,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;SAChC;QACD,SAAS,EAAE,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC;QAC1E,SAAS,EAAE,CAAC,cAAc,CAAC;KAC5B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEZ,iBAAiB;IACjB,KAAK,CAAC,gBAAgB,CAAC,GAAG;;;;;;;CAO3B,CAAC;IAEA,8DAA8D;IAC9D,KAAK,CAAC,oBAAoB,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD/B,CAAC;IAEA,oDAAoD;IACpD,KAAK,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,SAAS,EAAE,mCAAmC;QAC9C,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,UAAU,EAAE;YACV,QAAQ,EAAE,oBAAoB;YAC9B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,SAAS;YACtB,cAAc,EAAE,IAAI;SACrB;QACD,SAAS,EAAE;YACT,YAAY,EAAE,cAAc;YAC5B,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,SAAS;SACnB;QACD,YAAY,EAAE;YACZ,eAAe,EAAE;gBACf,KAAK,EAAE,4BAA4B;gBACnC,SAAS,EAAE;oBACT,eAAe,EAAE,gCAAgC;iBAClD;aACF;SACF;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEZ,iBAAiB;IACjB,KAAK,CAAC,oBAAoB,CAAC,GAAG;;;;;;;;;CAS/B,CAAC;IAEA,aAAa;IACb,KAAK,CAAC,oBAAoB,CAAC,GAAG;;;;YAIpB,SAAS,CAAC,WAAW;kBACf,SAAS,CAAC,cAAc;;;;;;;;;;;;;;CAczC,CAAC;IAEA,yDAAyD;IACzD,yEAAyE;IACzE,KAAK,CAAC,qBAAqB,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DhC,CAAC;IAEA,gEAAgE;IAChE,KAAK,CAAC,kBAAkB,CAAC,GAAG;;;gDAGkB,SAAS,CAAC,WAAW;kDACnB,SAAS,CAAC,cAAc;;;;;;cAM5D,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;cAMpE,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;cAM/D,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;cAMpE,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;CAO/D,CAAC;IAEA,8CAA8C;IAC9C,KAAK,CAAC,kBAAkB,CAAC,GAAG;;;;;;CAM7B,CAAC;IAEA,kBAAkB;IAClB,KAAK,CAAC,qBAAqB,CAAC,GAAG;;;;;;;;;;;;;;CAchC,CAAC;IAEA,YAAY;IACZ,KAAK,CAAC,eAAe,CAAC,GAAG;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;IAEA,iBAAiB;IACjB,KAAK,CAAC,uBAAuB,CAAC,GAAG;;;SAG1B,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;;CAEtC,CAAC;IAEA,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,KAAK,CAAC,kCAAkC,CAAC,GAAG;;;mBAG3B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;gCAsBlB,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;CASjF,CAAC;IAEA,gBAAgB;IAChB,KAAK,CAAC,8BAA8B,CAAC,GAAG;;;;;;;;CAQzC,CAAC;IAEA,gBAAgB;IAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzD,KAAK,CAAC,2BAA2B,CAAC,GAAG,yBAAyB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDlF,CAAC;IAEA,6BAA6B;IAC7B,KAAK,CAAC,8BAA8B,CAAC,GAAG,EAAE,CAAC;IAE3C,kBAAkB;IAClB,KAAK,CAAC,sBAAsB,CAAC,GAAG;QAC1B,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;UAC5B,SAAS,CAAC,WAAW;CAC9B,CAAC;IAEA,oBAAoB;IACpB,KAAK,CAAC,sBAAsB,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjC,CAAC;IAEA,wBAAwB;IACxB,KAAK,CAAC,yBAAyB,CAAC,GAAG;;;;oDAIe,SAAS,CAAC,WAAW;;;;;;;;;;CAUxE,CAAC;IAEA,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DiscoveryResult } from '../../discovery/types.js';
2
+ import type { SelectionResult } from '../../catalog/types.js';
3
+ export declare function generateSkillAgents(discovery: DiscoveryResult, tools?: SelectionResult): Record<string, string>;
4
+ //# sourceMappingURL=skill-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-agents.d.ts","sourceRoot":"","sources":["../../../src/scaffold/templates/skill-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAmE9D,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,eAAe,EAC1B,KAAK,CAAC,EAAE,eAAe,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxB"}