codemeld 2.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.
- package/README.md +514 -0
- package/bin/cli.js +2 -0
- package/dist/ai/agent.d.ts +124 -0
- package/dist/ai/agent.d.ts.map +1 -0
- package/dist/ai/agent.js +289 -0
- package/dist/ai/agent.js.map +1 -0
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +10 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompts.d.ts +35 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +166 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/refinement-loop.d.ts +29 -0
- package/dist/ai/refinement-loop.d.ts.map +1 -0
- package/dist/ai/refinement-loop.js +180 -0
- package/dist/ai/refinement-loop.js.map +1 -0
- package/dist/ai/tools.d.ts +17 -0
- package/dist/ai/tools.d.ts.map +1 -0
- package/dist/ai/tools.js +353 -0
- package/dist/ai/tools.js.map +1 -0
- package/dist/ai/visual-compare.d.ts +43 -0
- package/dist/ai/visual-compare.d.ts.map +1 -0
- package/dist/ai/visual-compare.js +176 -0
- package/dist/ai/visual-compare.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +179 -0
- package/dist/cli.js.map +1 -0
- package/dist/converter.d.ts +10 -0
- package/dist/converter.d.ts.map +1 -0
- package/dist/converter.js +836 -0
- package/dist/converter.js.map +1 -0
- package/dist/deconverter.d.ts +19 -0
- package/dist/deconverter.d.ts.map +1 -0
- package/dist/deconverter.js +188 -0
- package/dist/deconverter.js.map +1 -0
- package/dist/frameworks/angular-adapter.d.ts +27 -0
- package/dist/frameworks/angular-adapter.d.ts.map +1 -0
- package/dist/frameworks/angular-adapter.js +617 -0
- package/dist/frameworks/angular-adapter.js.map +1 -0
- package/dist/frameworks/index.d.ts +10 -0
- package/dist/frameworks/index.d.ts.map +1 -0
- package/dist/frameworks/index.js +21 -0
- package/dist/frameworks/index.js.map +1 -0
- package/dist/frameworks/nextjs-adapter.d.ts +22 -0
- package/dist/frameworks/nextjs-adapter.d.ts.map +1 -0
- package/dist/frameworks/nextjs-adapter.js +392 -0
- package/dist/frameworks/nextjs-adapter.js.map +1 -0
- package/dist/frameworks/react-adapter.d.ts +21 -0
- package/dist/frameworks/react-adapter.d.ts.map +1 -0
- package/dist/frameworks/react-adapter.js +71 -0
- package/dist/frameworks/react-adapter.js.map +1 -0
- package/dist/frameworks/svelte-adapter.d.ts +27 -0
- package/dist/frameworks/svelte-adapter.d.ts.map +1 -0
- package/dist/frameworks/svelte-adapter.js +519 -0
- package/dist/frameworks/svelte-adapter.js.map +1 -0
- package/dist/frameworks/types.d.ts +78 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +2 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/frameworks/vue-adapter.d.ts +34 -0
- package/dist/frameworks/vue-adapter.d.ts.map +1 -0
- package/dist/frameworks/vue-adapter.js +632 -0
- package/dist/frameworks/vue-adapter.js.map +1 -0
- package/dist/generators/accessibility-generator.d.ts +43 -0
- package/dist/generators/accessibility-generator.d.ts.map +1 -0
- package/dist/generators/accessibility-generator.js +507 -0
- package/dist/generators/accessibility-generator.js.map +1 -0
- package/dist/generators/asset-handler.d.ts +14 -0
- package/dist/generators/asset-handler.d.ts.map +1 -0
- package/dist/generators/asset-handler.js +79 -0
- package/dist/generators/asset-handler.js.map +1 -0
- package/dist/generators/build-verifier.d.ts +8 -0
- package/dist/generators/build-verifier.d.ts.map +1 -0
- package/dist/generators/build-verifier.js +64 -0
- package/dist/generators/build-verifier.js.map +1 -0
- package/dist/generators/component-extractor.d.ts +25 -0
- package/dist/generators/component-extractor.d.ts.map +1 -0
- package/dist/generators/component-extractor.js +146 -0
- package/dist/generators/component-extractor.js.map +1 -0
- package/dist/generators/component-generator.d.ts +12 -0
- package/dist/generators/component-generator.d.ts.map +1 -0
- package/dist/generators/component-generator.js +724 -0
- package/dist/generators/component-generator.js.map +1 -0
- package/dist/generators/deploy-generator.d.ts +9 -0
- package/dist/generators/deploy-generator.d.ts.map +1 -0
- package/dist/generators/deploy-generator.js +409 -0
- package/dist/generators/deploy-generator.js.map +1 -0
- package/dist/generators/error-boundary.d.ts +5 -0
- package/dist/generators/error-boundary.d.ts.map +1 -0
- package/dist/generators/error-boundary.js +59 -0
- package/dist/generators/error-boundary.js.map +1 -0
- package/dist/generators/form-generator.d.ts +42 -0
- package/dist/generators/form-generator.d.ts.map +1 -0
- package/dist/generators/form-generator.js +662 -0
- package/dist/generators/form-generator.js.map +1 -0
- package/dist/generators/hooks-generator.d.ts +40 -0
- package/dist/generators/hooks-generator.d.ts.map +1 -0
- package/dist/generators/hooks-generator.js +297 -0
- package/dist/generators/hooks-generator.js.map +1 -0
- package/dist/generators/html-generator.d.ts +27 -0
- package/dist/generators/html-generator.d.ts.map +1 -0
- package/dist/generators/html-generator.js +772 -0
- package/dist/generators/html-generator.js.map +1 -0
- package/dist/generators/jquery-converter.d.ts +41 -0
- package/dist/generators/jquery-converter.d.ts.map +1 -0
- package/dist/generators/jquery-converter.js +594 -0
- package/dist/generators/jquery-converter.js.map +1 -0
- package/dist/generators/pattern-implementer.d.ts +26 -0
- package/dist/generators/pattern-implementer.d.ts.map +1 -0
- package/dist/generators/pattern-implementer.js +336 -0
- package/dist/generators/pattern-implementer.js.map +1 -0
- package/dist/generators/performance-generator.d.ts +51 -0
- package/dist/generators/performance-generator.d.ts.map +1 -0
- package/dist/generators/performance-generator.js +428 -0
- package/dist/generators/performance-generator.js.map +1 -0
- package/dist/generators/router-generator.d.ts +21 -0
- package/dist/generators/router-generator.d.ts.map +1 -0
- package/dist/generators/router-generator.js +178 -0
- package/dist/generators/router-generator.js.map +1 -0
- package/dist/generators/scaffolder.d.ts +28 -0
- package/dist/generators/scaffolder.d.ts.map +1 -0
- package/dist/generators/scaffolder.js +266 -0
- package/dist/generators/scaffolder.js.map +1 -0
- package/dist/generators/seo-generator.d.ts +29 -0
- package/dist/generators/seo-generator.d.ts.map +1 -0
- package/dist/generators/seo-generator.js +223 -0
- package/dist/generators/seo-generator.js.map +1 -0
- package/dist/generators/test-generator.d.ts +19 -0
- package/dist/generators/test-generator.d.ts.map +1 -0
- package/dist/generators/test-generator.js +398 -0
- package/dist/generators/test-generator.js.map +1 -0
- package/dist/generators/type-generator.d.ts +33 -0
- package/dist/generators/type-generator.d.ts.map +1 -0
- package/dist/generators/type-generator.js +663 -0
- package/dist/generators/type-generator.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/css-processor.d.ts +23 -0
- package/dist/parsers/css-processor.d.ts.map +1 -0
- package/dist/parsers/css-processor.js +129 -0
- package/dist/parsers/css-processor.js.map +1 -0
- package/dist/parsers/framework-parser.d.ts +48 -0
- package/dist/parsers/framework-parser.d.ts.map +1 -0
- package/dist/parsers/framework-parser.js +770 -0
- package/dist/parsers/framework-parser.js.map +1 -0
- package/dist/parsers/html-parser.d.ts +12 -0
- package/dist/parsers/html-parser.d.ts.map +1 -0
- package/dist/parsers/html-parser.js +444 -0
- package/dist/parsers/html-parser.js.map +1 -0
- package/dist/parsers/js-analyzer.d.ts +199 -0
- package/dist/parsers/js-analyzer.d.ts.map +1 -0
- package/dist/parsers/js-analyzer.js +680 -0
- package/dist/parsers/js-analyzer.js.map +1 -0
- package/dist/parsers/js-resolver.d.ts +8 -0
- package/dist/parsers/js-resolver.d.ts.map +1 -0
- package/dist/parsers/js-resolver.js +45 -0
- package/dist/parsers/js-resolver.js.map +1 -0
- package/dist/parsers/tailwind-detector.d.ts +23 -0
- package/dist/parsers/tailwind-detector.d.ts.map +1 -0
- package/dist/parsers/tailwind-detector.js +104 -0
- package/dist/parsers/tailwind-detector.js.map +1 -0
- package/dist/tests/advanced-features.test.d.ts +2 -0
- package/dist/tests/advanced-features.test.d.ts.map +1 -0
- package/dist/tests/advanced-features.test.js +235 -0
- package/dist/tests/advanced-features.test.js.map +1 -0
- package/dist/tests/css-modules.test.d.ts +2 -0
- package/dist/tests/css-modules.test.d.ts.map +1 -0
- package/dist/tests/css-modules.test.js +61 -0
- package/dist/tests/css-modules.test.js.map +1 -0
- package/dist/tests/css-processor.test.d.ts +2 -0
- package/dist/tests/css-processor.test.d.ts.map +1 -0
- package/dist/tests/css-processor.test.js +48 -0
- package/dist/tests/css-processor.test.js.map +1 -0
- package/dist/tests/html-parser.test.d.ts +2 -0
- package/dist/tests/html-parser.test.d.ts.map +1 -0
- package/dist/tests/html-parser.test.js +78 -0
- package/dist/tests/html-parser.test.js.map +1 -0
- package/dist/tests/integration.test.d.ts +2 -0
- package/dist/tests/integration.test.d.ts.map +1 -0
- package/dist/tests/integration.test.js +65 -0
- package/dist/tests/integration.test.js.map +1 -0
- package/dist/tests/js-analyzer.test.d.ts +2 -0
- package/dist/tests/js-analyzer.test.d.ts.map +1 -0
- package/dist/tests/js-analyzer.test.js +58 -0
- package/dist/tests/js-analyzer.test.js.map +1 -0
- package/dist/tests/naming.test.d.ts +2 -0
- package/dist/tests/naming.test.d.ts.map +1 -0
- package/dist/tests/naming.test.js +43 -0
- package/dist/tests/naming.test.js.map +1 -0
- package/dist/tests/router-generator.test.d.ts +2 -0
- package/dist/tests/router-generator.test.d.ts.map +1 -0
- package/dist/tests/router-generator.test.js +60 -0
- package/dist/tests/router-generator.test.js.map +1 -0
- package/dist/tui/chat.d.ts +13 -0
- package/dist/tui/chat.d.ts.map +1 -0
- package/dist/tui/chat.js +499 -0
- package/dist/tui/chat.js.map +1 -0
- package/dist/tui/design-guide.d.ts +41 -0
- package/dist/tui/design-guide.d.ts.map +1 -0
- package/dist/tui/design-guide.js +184 -0
- package/dist/tui/design-guide.js.map +1 -0
- package/dist/tui/input.d.ts +30 -0
- package/dist/tui/input.d.ts.map +1 -0
- package/dist/tui/input.js +239 -0
- package/dist/tui/input.js.map +1 -0
- package/dist/tui/renderer.d.ts +48 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +212 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/tui/tools.d.ts +14 -0
- package/dist/tui/tools.d.ts.map +1 -0
- package/dist/tui/tools.js +1370 -0
- package/dist/tui/tools.js.map +1 -0
- package/dist/types.d.ts +93 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +20 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +33 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/formatter.d.ts +5 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +68 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/naming.d.ts +17 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +48 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/report.d.ts +56 -0
- package/dist/utils/report.d.ts.map +1 -0
- package/dist/utils/report.js +339 -0
- package/dist/utils/report.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design Guide Generator — calls the a0 LLM API to create
|
|
3
|
+
* project-specific design systems with unique typography, colors, and layouts.
|
|
4
|
+
* Uses native Node.js fetch — no curl dependency.
|
|
5
|
+
*/
|
|
6
|
+
const A0_LLM_URL = 'https://api.a0.dev/ai/llm';
|
|
7
|
+
const TIMEOUT_MS = 45_000; // 45 seconds
|
|
8
|
+
/**
|
|
9
|
+
* Generate a design guide for a project type using the a0 LLM API.
|
|
10
|
+
*/
|
|
11
|
+
export async function generateDesignGuide(projectType, userMessage) {
|
|
12
|
+
const payload = JSON.stringify({
|
|
13
|
+
messages: [
|
|
14
|
+
{
|
|
15
|
+
role: 'system',
|
|
16
|
+
content: `You are a UI design director. Return a compact JSON design system. BANNED: Inter, Roboto, Arial, Poppins fonts. BANNED: purple gradients, floating blobs, emojis as icons. Every project gets unique fonts, colors, aesthetic. Vary light/dark themes. Return ONLY valid JSON, no markdown.`,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
role: 'user',
|
|
20
|
+
content: `Design system for "${projectType}".${userMessage ? `\nUser's request: "${userMessage}"` : ''}\nReturn JSON:
|
|
21
|
+
{"a":"aesthetic direction","df":"Google Font for headings","bf":"Google Font for body","p":"#primary","pl":"#primaryLight","ac":"#accent","s":"#surface","sa":"#surfaceAlt","t":"#text","tm":"#textMuted","bd":"#border","ds":"#darkSurface","dt":"#darkText","hero":"hero section style","layouts":"3 layout patterns comma-separated","motion":"2 animation choices comma-separated","texture":"background texture approach","unique":"one memorable design element","heading":"hero heading text","sub":"hero subtext","cta":"CTA button text","sections":"3 section headings comma-separated"}`,
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
temperature: 0.9,
|
|
25
|
+
max_tokens: 500,
|
|
26
|
+
direct_kilo: true,
|
|
27
|
+
});
|
|
28
|
+
const controller = new AbortController();
|
|
29
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
30
|
+
let text;
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(A0_LLM_URL, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: { 'Content-Type': 'application/json' },
|
|
35
|
+
body: payload,
|
|
36
|
+
signal: controller.signal,
|
|
37
|
+
});
|
|
38
|
+
text = await response.text();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
42
|
+
if (msg.includes('abort') || msg.includes('timeout')) {
|
|
43
|
+
throw new Error('Design guide request timed out. Please try again.');
|
|
44
|
+
}
|
|
45
|
+
if (msg.includes('ECONNREFUSED') || msg.includes('ENOTFOUND') || msg.includes('fetch failed')) {
|
|
46
|
+
throw new Error('Could not connect to design service. Check your network connection.');
|
|
47
|
+
}
|
|
48
|
+
throw new Error('Design guide request failed. Please try again.');
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
}
|
|
53
|
+
let data;
|
|
54
|
+
try {
|
|
55
|
+
data = JSON.parse(text);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new Error('Design service returned an invalid response. Using fallback design.');
|
|
59
|
+
}
|
|
60
|
+
const completion = data.completion || '';
|
|
61
|
+
const jsonMatch = completion.match(/\{[\s\S]*\}/);
|
|
62
|
+
if (!jsonMatch)
|
|
63
|
+
throw new Error('Design service returned unexpected format. Using fallback design.');
|
|
64
|
+
const d = JSON.parse(jsonMatch[0]);
|
|
65
|
+
const guide = buildGuideFromData(projectType, d);
|
|
66
|
+
return { guide, design: d };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Build the full design guide document from compact LLM data.
|
|
70
|
+
*/
|
|
71
|
+
function buildGuideFromData(projectType, d) {
|
|
72
|
+
const layouts = (d.layouts || '').split(',').map(l => l.trim()).filter(Boolean);
|
|
73
|
+
const motions = (d.motion || '').split(',').map(m => m.trim()).filter(Boolean);
|
|
74
|
+
const sections = (d.sections || '').split(',').map(s => s.trim()).filter(Boolean);
|
|
75
|
+
return `# Design System for "${projectType}"
|
|
76
|
+
|
|
77
|
+
## Aesthetic Direction
|
|
78
|
+
${d.a}
|
|
79
|
+
|
|
80
|
+
## Typography
|
|
81
|
+
- **Display font**: ${d.df} (headings, hero text)
|
|
82
|
+
- **Body font**: ${d.bf} (paragraphs, UI text)
|
|
83
|
+
- Import via Google Fonts \`<link>\` tag in index.html
|
|
84
|
+
- CSS variables: \`--font-display: '${d.df}', serif;\` and \`--font-body: '${d.bf}', sans-serif;\`
|
|
85
|
+
|
|
86
|
+
## Color Palette
|
|
87
|
+
- Primary: ${d.p} | Primary Light: ${d.pl} | Accent: ${d.ac}
|
|
88
|
+
- Surface: ${d.s} | Surface Alt: ${d.sa}
|
|
89
|
+
- Text: ${d.t} | Text Muted: ${d.tm} | Border: ${d.bd}
|
|
90
|
+
- Dark mode surface: ${d.ds || '#111'} | Dark mode text: ${d.dt || '#f5f5f5'}
|
|
91
|
+
|
|
92
|
+
## CSS Variables (paste into index.css)
|
|
93
|
+
\`\`\`css
|
|
94
|
+
:root {
|
|
95
|
+
--font-display: '${d.df}', serif;
|
|
96
|
+
--font-body: '${d.bf}', sans-serif;
|
|
97
|
+
--color-primary: ${d.p};
|
|
98
|
+
--color-primary-light: ${d.pl};
|
|
99
|
+
--color-accent: ${d.ac};
|
|
100
|
+
--color-surface: ${d.s};
|
|
101
|
+
--color-surface-alt: ${d.sa};
|
|
102
|
+
--color-text: ${d.t};
|
|
103
|
+
--color-text-muted: ${d.tm};
|
|
104
|
+
--color-border: ${d.bd};
|
|
105
|
+
}
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
## Layout Strategy
|
|
109
|
+
${layouts.map((l, i) => `${i + 1}. ${l}`).join('\n')}
|
|
110
|
+
|
|
111
|
+
## Hero Section
|
|
112
|
+
${d.hero}
|
|
113
|
+
|
|
114
|
+
## Motion & Animations
|
|
115
|
+
${motions.map(m => `- ${m}`).join('\n')}
|
|
116
|
+
- Page load: staggered fadeInUp with animation-delay per element
|
|
117
|
+
- Cards: hover:shadow-xl hover:-translate-y-2 transition-all duration-300
|
|
118
|
+
- Buttons: active:scale-95 transition-transform
|
|
119
|
+
|
|
120
|
+
## Background & Texture
|
|
121
|
+
${d.texture || 'Subtle gradient or grain overlay for depth — never flat solid colors alone.'}
|
|
122
|
+
|
|
123
|
+
## Unique Memorable Element
|
|
124
|
+
${d.unique}
|
|
125
|
+
|
|
126
|
+
## Icons
|
|
127
|
+
Use Lucide React icons consistently (20px, stroke-width 1.5). NEVER use emojis as icons.
|
|
128
|
+
|
|
129
|
+
## Mobile-First Responsive (mandatory)
|
|
130
|
+
- Nav: hamburger menu on mobile → horizontal nav on desktop
|
|
131
|
+
- Grids: grid-cols-1 → md:grid-cols-2 → lg:grid-cols-3
|
|
132
|
+
- Hero text: text-3xl → md:text-5xl lg:text-6xl
|
|
133
|
+
- Spacing: px-4 py-12 mobile → px-8 py-24 desktop
|
|
134
|
+
- Touch targets: min 44x44px. No horizontal overflow.
|
|
135
|
+
- Footer: stack vertically on mobile, grid on desktop
|
|
136
|
+
|
|
137
|
+
## Sample Copy
|
|
138
|
+
- **Hero heading**: "${d.heading}"
|
|
139
|
+
- **Hero subtext**: "${d.sub}"
|
|
140
|
+
- **CTA button**: "${d.cta}"
|
|
141
|
+
- **Section headings**: ${sections.map(s => `"${s}"`).join(', ')}
|
|
142
|
+
|
|
143
|
+
## Image URLs
|
|
144
|
+
Use: https://api.a0.dev/assets/image?text={description}&aspect=16:9
|
|
145
|
+
|
|
146
|
+
## Reminders
|
|
147
|
+
- Real content: specific names, prices, dates — never lorem ipsum
|
|
148
|
+
- Every dark:bg-* needs matching dark:text-* on all children
|
|
149
|
+
- Build ALL pages fully — never "coming soon" placeholders
|
|
150
|
+
|
|
151
|
+
Apply this design system to every file you create or modify.`;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Fallback design guide when API call fails.
|
|
155
|
+
*/
|
|
156
|
+
export function getFallbackGuide(projectType) {
|
|
157
|
+
return `# Design Guide (fallback for "${projectType}")
|
|
158
|
+
|
|
159
|
+
## Typography
|
|
160
|
+
Pick a distinctive Google Font pairing (NOT Inter/Roboto/Arial/Poppins). Example: Playfair Display + Source Sans 3.
|
|
161
|
+
|
|
162
|
+
## Colors
|
|
163
|
+
Choose a dominant color with sharp accent. Define as CSS variables.
|
|
164
|
+
|
|
165
|
+
## Layout
|
|
166
|
+
Mix layout patterns: bento grid, split hero 60/40, asymmetric columns.
|
|
167
|
+
|
|
168
|
+
## Mobile-First Responsive (mandatory)
|
|
169
|
+
- Hamburger menu on mobile, horizontal nav on desktop
|
|
170
|
+
- grid-cols-1 → md:grid-cols-2 → lg:grid-cols-3
|
|
171
|
+
- Touch targets: min 44x44px. No horizontal overflow.
|
|
172
|
+
|
|
173
|
+
## Icons
|
|
174
|
+
Use Lucide React icons (20px, stroke-width 1.5). NEVER use emojis as icons.
|
|
175
|
+
|
|
176
|
+
## Images
|
|
177
|
+
Use https://api.a0.dev/assets/image?text={description}&aspect=16:9 for all images.
|
|
178
|
+
|
|
179
|
+
## Reminders
|
|
180
|
+
- Real content only — never lorem ipsum
|
|
181
|
+
- Every dark:bg-* needs matching dark:text-*
|
|
182
|
+
- Build ALL pages fully — no placeholders`;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=design-guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-guide.js","sourceRoot":"","sources":["../../src/tui/design-guide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced input handler — Windows-compatible.
|
|
3
|
+
* Uses readline for proper terminal handling on all platforms.
|
|
4
|
+
* Features: Tab completion for /commands and @files, file attachments,
|
|
5
|
+
* multi-line paste support via bracket paste mode.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Read text from the system clipboard.
|
|
9
|
+
* Works on Windows (clip/powershell), macOS (pbpaste), Linux (xclip/xsel).
|
|
10
|
+
*/
|
|
11
|
+
export declare function clipboardRead(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Write text to the system clipboard.
|
|
14
|
+
*/
|
|
15
|
+
export declare function clipboardWrite(text: string): boolean;
|
|
16
|
+
export interface ParsedInput {
|
|
17
|
+
message: string;
|
|
18
|
+
attachedFiles: Array<{
|
|
19
|
+
path: string;
|
|
20
|
+
content: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseFileAttachments(input: string, projectDir: string): Promise<ParsedInput>;
|
|
24
|
+
export declare function buildMessageWithAttachments(parsed: ParsedInput): string;
|
|
25
|
+
export interface InputResult {
|
|
26
|
+
text: string;
|
|
27
|
+
attachedFiles: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare function createEnhancedInput(projectDir: string, tokenInfo?: string): Promise<InputResult>;
|
|
30
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAiBtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBpD;AA+BD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAuBlG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAUvE;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CA+FtB"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced input handler — Windows-compatible.
|
|
3
|
+
* Uses readline for proper terminal handling on all platforms.
|
|
4
|
+
* Features: Tab completion for /commands and @files, file attachments,
|
|
5
|
+
* multi-line paste support via bracket paste mode.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { existsSync, readdirSync, statSync } from 'fs';
|
|
10
|
+
import { execSync } from 'child_process';
|
|
11
|
+
import * as readline from 'readline';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
// ─── Constants ───────────────────────────────────────────────────────
|
|
14
|
+
const IS_WIN = process.platform === 'win32';
|
|
15
|
+
const SLASH_COMMANDS = [
|
|
16
|
+
{ cmd: '/help', desc: 'Show help' },
|
|
17
|
+
{ cmd: '/clear', desc: 'Clear chat history' },
|
|
18
|
+
{ cmd: '/build', desc: 'Run vite build' },
|
|
19
|
+
{ cmd: '/typecheck', desc: 'Run tsc --noEmit' },
|
|
20
|
+
{ cmd: '/tsc', desc: 'Run tsc --noEmit' },
|
|
21
|
+
{ cmd: '/fix', desc: 'Auto-fix build errors' },
|
|
22
|
+
{ cmd: '/files', desc: 'Show project tree' },
|
|
23
|
+
{ cmd: '/tree', desc: 'Show project tree' },
|
|
24
|
+
{ cmd: '/overview', desc: 'Project overview' },
|
|
25
|
+
{ cmd: '/git', desc: 'Run git command' },
|
|
26
|
+
{ cmd: '/install', desc: 'npm install packages' },
|
|
27
|
+
{ cmd: '/design', desc: 'Generate design system' },
|
|
28
|
+
{ cmd: '/todos', desc: 'View/manage todo list' },
|
|
29
|
+
{ cmd: '/todo', desc: 'View/manage todo list' },
|
|
30
|
+
{ cmd: '/compact', desc: 'Compress chat history' },
|
|
31
|
+
{ cmd: '/copy', desc: 'Copy last response to clipboard' },
|
|
32
|
+
{ cmd: '/paste', desc: 'Paste clipboard as message' },
|
|
33
|
+
{ cmd: '/quit', desc: 'Exit chat' },
|
|
34
|
+
{ cmd: '/q', desc: 'Exit chat' },
|
|
35
|
+
];
|
|
36
|
+
const C = {
|
|
37
|
+
border: chalk.hex('#6B8AFF'),
|
|
38
|
+
prompt: chalk.bold.hex('#6B8AFF'),
|
|
39
|
+
fileAttach: chalk.hex('#8BC34A'),
|
|
40
|
+
hint: chalk.dim,
|
|
41
|
+
tokenInfo: chalk.dim.hex('#888888'),
|
|
42
|
+
};
|
|
43
|
+
// ─── Clipboard Helpers ──────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Read text from the system clipboard.
|
|
46
|
+
* Works on Windows (clip/powershell), macOS (pbpaste), Linux (xclip/xsel).
|
|
47
|
+
*/
|
|
48
|
+
export function clipboardRead() {
|
|
49
|
+
try {
|
|
50
|
+
if (IS_WIN) {
|
|
51
|
+
return execSync('powershell -command "Get-Clipboard"', { encoding: 'utf-8', timeout: 3000 }).trim();
|
|
52
|
+
}
|
|
53
|
+
else if (process.platform === 'darwin') {
|
|
54
|
+
return execSync('pbpaste', { encoding: 'utf-8', timeout: 3000 }).trim();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Linux — try xclip first, then xsel
|
|
58
|
+
try {
|
|
59
|
+
return execSync('xclip -selection clipboard -o', { encoding: 'utf-8', timeout: 3000 }).trim();
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return execSync('xsel --clipboard --output', { encoding: 'utf-8', timeout: 3000 }).trim();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Write text to the system clipboard.
|
|
72
|
+
*/
|
|
73
|
+
export function clipboardWrite(text) {
|
|
74
|
+
try {
|
|
75
|
+
if (IS_WIN) {
|
|
76
|
+
execSync('clip', { input: text, timeout: 3000 });
|
|
77
|
+
}
|
|
78
|
+
else if (process.platform === 'darwin') {
|
|
79
|
+
execSync('pbcopy', { input: text, timeout: 3000 });
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
try {
|
|
83
|
+
execSync('xclip -selection clipboard', { input: text, timeout: 3000 });
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
execSync('xsel --clipboard --input', { input: text, timeout: 3000 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// ─── File completion helper ─────────────────────────────────────────
|
|
96
|
+
function getFileCompletions(partial, projectDir) {
|
|
97
|
+
const parts = partial.split('/');
|
|
98
|
+
const dirPart = parts.length > 1 ? parts.slice(0, -1).join('/') : '.';
|
|
99
|
+
const filePart = parts[parts.length - 1].toLowerCase();
|
|
100
|
+
const searchDir = join(projectDir, dirPart);
|
|
101
|
+
if (!existsSync(searchDir))
|
|
102
|
+
return [];
|
|
103
|
+
try {
|
|
104
|
+
const entries = readdirSync(searchDir, { withFileTypes: true });
|
|
105
|
+
const results = [];
|
|
106
|
+
for (const entry of entries) {
|
|
107
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
108
|
+
continue;
|
|
109
|
+
if (!entry.name.toLowerCase().startsWith(filePart))
|
|
110
|
+
continue;
|
|
111
|
+
const fullRelPath = dirPart === '.' ? entry.name : `${dirPart}/${entry.name}`;
|
|
112
|
+
results.push(entry.isDirectory() ? `@${fullRelPath}/` : `@${fullRelPath}`);
|
|
113
|
+
}
|
|
114
|
+
return results.slice(0, 10);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function parseFileAttachments(input, projectDir) {
|
|
121
|
+
const filePattern = /@([\w.\/\\-]+)/g;
|
|
122
|
+
const attachedFiles = [];
|
|
123
|
+
let message = input;
|
|
124
|
+
let match;
|
|
125
|
+
while ((match = filePattern.exec(input)) !== null) {
|
|
126
|
+
const filePath = match[1];
|
|
127
|
+
const fullPath = join(projectDir, filePath);
|
|
128
|
+
if (existsSync(fullPath)) {
|
|
129
|
+
try {
|
|
130
|
+
const s = statSync(fullPath);
|
|
131
|
+
if (s.isFile()) {
|
|
132
|
+
const content = await readFile(fullPath, 'utf-8');
|
|
133
|
+
attachedFiles.push({ path: filePath, content });
|
|
134
|
+
message = message.replace(match[0], '').trim();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch { /* skip */ }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return { message, attachedFiles };
|
|
141
|
+
}
|
|
142
|
+
export function buildMessageWithAttachments(parsed) {
|
|
143
|
+
if (parsed.attachedFiles.length === 0)
|
|
144
|
+
return parsed.message;
|
|
145
|
+
const fileContexts = parsed.attachedFiles.map(f => {
|
|
146
|
+
const lines = f.content.split('\n');
|
|
147
|
+
const numbered = lines.map((l, i) => `${String(i + 1).padStart(4)} ${l}`).join('\n');
|
|
148
|
+
return `--- File: ${f.path} ---\n${numbered}\n--- End: ${f.path} ---`;
|
|
149
|
+
});
|
|
150
|
+
return `${parsed.message}\n\nAttached file contents:\n${fileContexts.join('\n\n')}`;
|
|
151
|
+
}
|
|
152
|
+
export function createEnhancedInput(projectDir, tokenInfo) {
|
|
153
|
+
return new Promise((resolveInput) => {
|
|
154
|
+
// Draw separator line with token info
|
|
155
|
+
const width = Math.min(process.stdout.columns || 80, 96);
|
|
156
|
+
const line = '─'.repeat(width - 4);
|
|
157
|
+
if (tokenInfo) {
|
|
158
|
+
const infoStr = ` ${tokenInfo} `;
|
|
159
|
+
const infoLen = infoStr.length;
|
|
160
|
+
const left = Math.floor((width - 4 - infoLen) / 2);
|
|
161
|
+
const right = width - 4 - infoLen - left;
|
|
162
|
+
console.log(` ${C.border('─'.repeat(left))}${C.tokenInfo(infoStr)}${C.border('─'.repeat(right))}`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(` ${C.border(line)}`);
|
|
166
|
+
}
|
|
167
|
+
// Create readline with tab completer
|
|
168
|
+
const rl = readline.createInterface({
|
|
169
|
+
input: process.stdin,
|
|
170
|
+
output: process.stdout,
|
|
171
|
+
terminal: true,
|
|
172
|
+
completer: (line) => {
|
|
173
|
+
// Slash command completion
|
|
174
|
+
if (line.startsWith('/')) {
|
|
175
|
+
const cmd = line.split(' ')[0];
|
|
176
|
+
const matches = SLASH_COMMANDS
|
|
177
|
+
.map(c => c.cmd)
|
|
178
|
+
.filter(c => c.startsWith(cmd));
|
|
179
|
+
if (matches.length > 0) {
|
|
180
|
+
if (matches.length > 1) {
|
|
181
|
+
console.log('');
|
|
182
|
+
for (const m of matches) {
|
|
183
|
+
const desc = SLASH_COMMANDS.find(c => c.cmd === m)?.desc || '';
|
|
184
|
+
console.log(` ${chalk.cyan(m.padEnd(18))} ${C.hint(desc)}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return [matches, cmd];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// @file completion
|
|
191
|
+
const atMatch = line.match(/@([\w.\/\\-]*)$/);
|
|
192
|
+
if (atMatch) {
|
|
193
|
+
const partial = atMatch[1];
|
|
194
|
+
const prefix = line.slice(0, line.length - atMatch[0].length);
|
|
195
|
+
const fileMatches = getFileCompletions(partial, projectDir);
|
|
196
|
+
if (fileMatches.length > 0) {
|
|
197
|
+
const fullMatches = fileMatches.map(f => prefix + f);
|
|
198
|
+
if (fileMatches.length > 1) {
|
|
199
|
+
console.log('');
|
|
200
|
+
for (const f of fileMatches) {
|
|
201
|
+
console.log(` ${C.fileAttach(f)}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return [fullMatches, line];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return [[], line];
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
// Prompt with icon
|
|
211
|
+
const promptStr = ` ${C.prompt('❯')} `;
|
|
212
|
+
rl.question(promptStr, (answer) => {
|
|
213
|
+
rl.close();
|
|
214
|
+
// Collect @file references from the answer
|
|
215
|
+
const attachedFiles = [];
|
|
216
|
+
const atPattern = /@([\w.\/\\-]+)/g;
|
|
217
|
+
let m;
|
|
218
|
+
while ((m = atPattern.exec(answer)) !== null) {
|
|
219
|
+
const fp = m[1];
|
|
220
|
+
const fullPath = join(projectDir, fp);
|
|
221
|
+
if (existsSync(fullPath)) {
|
|
222
|
+
try {
|
|
223
|
+
if (statSync(fullPath).isFile() && !attachedFiles.includes(fp)) {
|
|
224
|
+
attachedFiles.push(fp);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch { /* skip */ }
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
resolveInput({ text: answer.trim(), attachedFiles });
|
|
231
|
+
});
|
|
232
|
+
// Handle Ctrl+C
|
|
233
|
+
rl.on('SIGINT', () => {
|
|
234
|
+
rl.close();
|
|
235
|
+
resolveInput({ text: '/quit', attachedFiles: [] });
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/tui/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal rendering utilities for the TUI chat.
|
|
3
|
+
* Handles colors, formatting, spinners, and layout.
|
|
4
|
+
*/
|
|
5
|
+
export declare const COLORS: {
|
|
6
|
+
userLabel: import("chalk").ChalkInstance;
|
|
7
|
+
assistantLabel: import("chalk").ChalkInstance;
|
|
8
|
+
toolLabel: import("chalk").ChalkInstance;
|
|
9
|
+
toolSuccess: import("chalk").ChalkInstance;
|
|
10
|
+
toolError: import("chalk").ChalkInstance;
|
|
11
|
+
dim: import("chalk").ChalkInstance;
|
|
12
|
+
bold: import("chalk").ChalkInstance;
|
|
13
|
+
code: import("chalk").ChalkInstance;
|
|
14
|
+
separator: import("chalk").ChalkInstance;
|
|
15
|
+
hint: import("chalk").ChalkInstance;
|
|
16
|
+
header: import("chalk").ChalkInstance;
|
|
17
|
+
headerAccent: import("chalk").ChalkInstance;
|
|
18
|
+
border: import("chalk").ChalkInstance;
|
|
19
|
+
inputPrompt: import("chalk").ChalkInstance;
|
|
20
|
+
warning: import("chalk").ChalkInstance;
|
|
21
|
+
success: import("chalk").ChalkInstance;
|
|
22
|
+
error: import("chalk").ChalkInstance;
|
|
23
|
+
fileAttach: import("chalk").ChalkInstance;
|
|
24
|
+
tokenInfo: import("chalk").ChalkInstance;
|
|
25
|
+
};
|
|
26
|
+
export declare class Spinner {
|
|
27
|
+
private frameIdx;
|
|
28
|
+
private interval;
|
|
29
|
+
private text;
|
|
30
|
+
constructor(text: string);
|
|
31
|
+
start(): void;
|
|
32
|
+
private render;
|
|
33
|
+
update(text: string): void;
|
|
34
|
+
stop(finalText?: string): void;
|
|
35
|
+
}
|
|
36
|
+
export declare function renderMarkdown(text: string): string;
|
|
37
|
+
export declare function printHeader(projectDir: string): void;
|
|
38
|
+
export declare function printUserMessage(message: string): void;
|
|
39
|
+
export declare function printAssistantStart(): void;
|
|
40
|
+
export declare function printAssistantToken(token: string): void;
|
|
41
|
+
export declare function printAssistantEnd(): void;
|
|
42
|
+
export declare function printAssistantMessage(message: string): void;
|
|
43
|
+
export declare function printToolCall(name: string, args?: Record<string, unknown>): void;
|
|
44
|
+
export declare function printToolResult(name: string, result: string, success: boolean): void;
|
|
45
|
+
export declare function printSeparator(): void;
|
|
46
|
+
export declare function printError(message: string): void;
|
|
47
|
+
export declare function printHelp(): void;
|
|
48
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;CAoBlB,CAAC;AAIF,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,EAAE,MAAM;IAIxB,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,MAAM;IAMd,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAU/B;AAID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BnD;AAID,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAepD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAO3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUhF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpF;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAwDhC"}
|