@gemini-designer/mcp-server 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 (153) hide show
  1. package/.prettierrc +9 -0
  2. package/dist/components/catalog.d.ts +24 -0
  3. package/dist/components/catalog.d.ts.map +1 -0
  4. package/dist/components/catalog.js +186 -0
  5. package/dist/components/catalog.js.map +1 -0
  6. package/dist/config/index.d.ts +60 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +199 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/context/builder.d.ts +32 -0
  11. package/dist/context/builder.d.ts.map +1 -0
  12. package/dist/context/builder.js +194 -0
  13. package/dist/context/builder.js.map +1 -0
  14. package/dist/context/filter.d.ts +28 -0
  15. package/dist/context/filter.d.ts.map +1 -0
  16. package/dist/context/filter.js +136 -0
  17. package/dist/context/filter.js.map +1 -0
  18. package/dist/context/grounding.d.ts +27 -0
  19. package/dist/context/grounding.d.ts.map +1 -0
  20. package/dist/context/grounding.js +162 -0
  21. package/dist/context/grounding.js.map +1 -0
  22. package/dist/context/guards.d.ts +31 -0
  23. package/dist/context/guards.d.ts.map +1 -0
  24. package/dist/context/guards.js +76 -0
  25. package/dist/context/guards.js.map +1 -0
  26. package/dist/context/repo-hints.d.ts +12 -0
  27. package/dist/context/repo-hints.d.ts.map +1 -0
  28. package/dist/context/repo-hints.js +40 -0
  29. package/dist/context/repo-hints.js.map +1 -0
  30. package/dist/generation/gemini-client.d.ts +27 -0
  31. package/dist/generation/gemini-client.d.ts.map +1 -0
  32. package/dist/generation/gemini-client.js +64 -0
  33. package/dist/generation/gemini-client.js.map +1 -0
  34. package/dist/generation/litellm-client.d.ts +16 -0
  35. package/dist/generation/litellm-client.d.ts.map +1 -0
  36. package/dist/generation/litellm-client.js +98 -0
  37. package/dist/generation/litellm-client.js.map +1 -0
  38. package/dist/generation/remote-client.d.ts +20 -0
  39. package/dist/generation/remote-client.d.ts.map +1 -0
  40. package/dist/generation/remote-client.js +69 -0
  41. package/dist/generation/remote-client.js.map +1 -0
  42. package/dist/index.d.ts +9 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +30 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/output/file-writer.d.ts +39 -0
  47. package/dist/output/file-writer.d.ts.map +1 -0
  48. package/dist/output/file-writer.js +153 -0
  49. package/dist/output/file-writer.js.map +1 -0
  50. package/dist/output/formatter.d.ts +26 -0
  51. package/dist/output/formatter.d.ts.map +1 -0
  52. package/dist/output/formatter.js +156 -0
  53. package/dist/output/formatter.js.map +1 -0
  54. package/dist/server.d.ts +9 -0
  55. package/dist/server.d.ts.map +1 -0
  56. package/dist/server.js +22 -0
  57. package/dist/server.js.map +1 -0
  58. package/dist/stack/detect.d.ts +49 -0
  59. package/dist/stack/detect.d.ts.map +1 -0
  60. package/dist/stack/detect.js +157 -0
  61. package/dist/stack/detect.js.map +1 -0
  62. package/dist/tokens/sync.d.ts +32 -0
  63. package/dist/tokens/sync.d.ts.map +1 -0
  64. package/dist/tokens/sync.js +188 -0
  65. package/dist/tokens/sync.js.map +1 -0
  66. package/dist/tools/analyze-screenshot-ui.d.ts +18 -0
  67. package/dist/tools/analyze-screenshot-ui.d.ts.map +1 -0
  68. package/dist/tools/analyze-screenshot-ui.js +133 -0
  69. package/dist/tools/analyze-screenshot-ui.js.map +1 -0
  70. package/dist/tools/analyze-tokens.d.ts +10 -0
  71. package/dist/tools/analyze-tokens.d.ts.map +1 -0
  72. package/dist/tools/analyze-tokens.js +107 -0
  73. package/dist/tools/analyze-tokens.js.map +1 -0
  74. package/dist/tools/catalog-components.d.ts +14 -0
  75. package/dist/tools/catalog-components.d.ts.map +1 -0
  76. package/dist/tools/catalog-components.js +85 -0
  77. package/dist/tools/catalog-components.js.map +1 -0
  78. package/dist/tools/create-ui.d.ts +10 -0
  79. package/dist/tools/create-ui.d.ts.map +1 -0
  80. package/dist/tools/create-ui.js +167 -0
  81. package/dist/tools/create-ui.js.map +1 -0
  82. package/dist/tools/detect-ui-stack.d.ts +15 -0
  83. package/dist/tools/detect-ui-stack.d.ts.map +1 -0
  84. package/dist/tools/detect-ui-stack.js +52 -0
  85. package/dist/tools/detect-ui-stack.js.map +1 -0
  86. package/dist/tools/generate-component-variants.d.ts +15 -0
  87. package/dist/tools/generate-component-variants.d.ts.map +1 -0
  88. package/dist/tools/generate-component-variants.js +199 -0
  89. package/dist/tools/generate-component-variants.js.map +1 -0
  90. package/dist/tools/generate-vibes.d.ts +10 -0
  91. package/dist/tools/generate-vibes.d.ts.map +1 -0
  92. package/dist/tools/generate-vibes.js +145 -0
  93. package/dist/tools/generate-vibes.js.map +1 -0
  94. package/dist/tools/index.d.ts +12 -0
  95. package/dist/tools/index.d.ts.map +1 -0
  96. package/dist/tools/index.js +36 -0
  97. package/dist/tools/index.js.map +1 -0
  98. package/dist/tools/modify-ui.d.ts +11 -0
  99. package/dist/tools/modify-ui.d.ts.map +1 -0
  100. package/dist/tools/modify-ui.js +207 -0
  101. package/dist/tools/modify-ui.js.map +1 -0
  102. package/dist/tools/scaffold-project.d.ts +10 -0
  103. package/dist/tools/scaffold-project.d.ts.map +1 -0
  104. package/dist/tools/scaffold-project.js +122 -0
  105. package/dist/tools/scaffold-project.js.map +1 -0
  106. package/dist/tools/snippet-ui.d.ts +11 -0
  107. package/dist/tools/snippet-ui.d.ts.map +1 -0
  108. package/dist/tools/snippet-ui.js +194 -0
  109. package/dist/tools/snippet-ui.js.map +1 -0
  110. package/dist/tools/sync-design-tokens.d.ts +14 -0
  111. package/dist/tools/sync-design-tokens.d.ts.map +1 -0
  112. package/dist/tools/sync-design-tokens.js +233 -0
  113. package/dist/tools/sync-design-tokens.js.map +1 -0
  114. package/dist/utils/walk.d.ts +15 -0
  115. package/dist/utils/walk.d.ts.map +1 -0
  116. package/dist/utils/walk.js +63 -0
  117. package/dist/utils/walk.js.map +1 -0
  118. package/eslint.config.js +37 -0
  119. package/package.json +56 -0
  120. package/src/__tests__/builder.test.ts +31 -0
  121. package/src/__tests__/config.test.ts +52 -0
  122. package/src/__tests__/filter.test.ts +109 -0
  123. package/src/components/catalog.ts +214 -0
  124. package/src/config/index.ts +237 -0
  125. package/src/context/builder.ts +233 -0
  126. package/src/context/filter.ts +164 -0
  127. package/src/context/grounding.ts +191 -0
  128. package/src/context/guards.ts +94 -0
  129. package/src/context/repo-hints.ts +43 -0
  130. package/src/generation/gemini-client.ts +94 -0
  131. package/src/generation/litellm-client.ts +121 -0
  132. package/src/generation/remote-client.ts +103 -0
  133. package/src/index.ts +36 -0
  134. package/src/output/file-writer.ts +181 -0
  135. package/src/output/formatter.ts +186 -0
  136. package/src/server.ts +28 -0
  137. package/src/stack/detect.ts +204 -0
  138. package/src/tokens/sync.ts +212 -0
  139. package/src/tools/analyze-screenshot-ui.ts +150 -0
  140. package/src/tools/analyze-tokens.ts +123 -0
  141. package/src/tools/catalog-components.ts +99 -0
  142. package/src/tools/create-ui.ts +194 -0
  143. package/src/tools/detect-ui-stack.ts +64 -0
  144. package/src/tools/generate-component-variants.ts +218 -0
  145. package/src/tools/generate-vibes.ts +177 -0
  146. package/src/tools/index.ts +42 -0
  147. package/src/tools/modify-ui.ts +230 -0
  148. package/src/tools/scaffold-project.ts +138 -0
  149. package/src/tools/snippet-ui.ts +222 -0
  150. package/src/tools/sync-design-tokens.ts +256 -0
  151. package/src/utils/walk.ts +75 -0
  152. package/tsconfig.json +34 -0
  153. package/vitest.config.ts +15 -0
package/.prettierrc ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "semi": true,
3
+ "singleQuote": true,
4
+ "tabWidth": 2,
5
+ "trailingComma": "es5",
6
+ "printWidth": 100,
7
+ "bracketSpacing": true,
8
+ "arrowParens": "always"
9
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Component Catalog
3
+ *
4
+ * Scans TSX/JSX files and extracts exported component-like symbols.
5
+ *
6
+ * Notes:
7
+ * - Uses TypeScript compiler API when available.
8
+ * - Falls back to a lightweight regex scan if TypeScript is not installed.
9
+ */
10
+ export interface ComponentExport {
11
+ name: string;
12
+ exportType: 'named' | 'default';
13
+ file: string;
14
+ propsType?: string;
15
+ jsDoc?: string;
16
+ }
17
+ export interface CatalogResult {
18
+ root: string;
19
+ filesScanned: number;
20
+ components: ComponentExport[];
21
+ warnings: string[];
22
+ }
23
+ export declare function buildComponentCatalog(root: string, files: string[]): Promise<CatalogResult>;
24
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/components/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAiLD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CASjG"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Component Catalog
3
+ *
4
+ * Scans TSX/JSX files and extracts exported component-like symbols.
5
+ *
6
+ * Notes:
7
+ * - Uses TypeScript compiler API when available.
8
+ * - Falls back to a lightweight regex scan if TypeScript is not installed.
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { toPosixPath } from '../utils/walk.js';
13
+ function readFileSafe(filePath) {
14
+ try {
15
+ return fs.readFileSync(filePath, 'utf-8');
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ function rel(root, abs) {
22
+ return toPosixPath(path.relative(root, abs));
23
+ }
24
+ function extractJSDocFromLeadingComment(text) {
25
+ // Simple: capture /** ... */ immediately preceding export
26
+ const m = text.match(/\/\*\*([\s\S]*?)\*\//);
27
+ if (!m)
28
+ return undefined;
29
+ const cleaned = m[1]
30
+ .split('\n')
31
+ .map((l) => l.replace(/^\s*\*\s?/, '').trim())
32
+ .filter(Boolean)
33
+ .join(' ');
34
+ return cleaned || undefined;
35
+ }
36
+ async function scanWithTypeScript(root, files) {
37
+ const warnings = [];
38
+ const components = [];
39
+ const ts = await import('typescript');
40
+ const getScriptKind = (filePath) => {
41
+ const ext = path.extname(filePath).toLowerCase();
42
+ if (ext === '.tsx')
43
+ return ts.ScriptKind.TSX;
44
+ if (ext === '.jsx')
45
+ return ts.ScriptKind.JSX;
46
+ if (ext === '.ts')
47
+ return ts.ScriptKind.TS;
48
+ if (ext === '.js')
49
+ return ts.ScriptKind.JS;
50
+ return ts.ScriptKind.Unknown;
51
+ };
52
+ for (const f of files) {
53
+ const content = readFileSafe(f);
54
+ if (content == null)
55
+ continue;
56
+ const sf = ts.createSourceFile(f, content, ts.ScriptTarget.ES2022, true, getScriptKind(f));
57
+ const isExported = (node) => {
58
+ const mods = node.modifiers;
59
+ if (!mods)
60
+ return false;
61
+ return mods.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);
62
+ };
63
+ const isDefaultExport = (node) => {
64
+ const mods = node.modifiers;
65
+ if (!mods)
66
+ return false;
67
+ return mods.some((m) => m.kind === ts.SyntaxKind.DefaultKeyword);
68
+ };
69
+ const textOfType = (typeNode) => {
70
+ if (!typeNode)
71
+ return undefined;
72
+ return content.slice(typeNode.pos, typeNode.end).trim();
73
+ };
74
+ // Collect import modules (optional future use)
75
+ // const imports = sf.statements.filter(ts.isImportDeclaration).map((i: any) => i.moduleSpecifier.text);
76
+ for (const stmt of sf.statements) {
77
+ if (ts.isFunctionDeclaration(stmt) && isExported(stmt)) {
78
+ const name = stmt.name?.text || (isDefaultExport(stmt) ? 'default' : 'anonymous');
79
+ const firstParam = stmt.parameters?.[0];
80
+ const propsType = textOfType(firstParam?.type);
81
+ components.push({
82
+ name: name === 'default' ? path.basename(f, path.extname(f)) : name,
83
+ exportType: isDefaultExport(stmt) ? 'default' : 'named',
84
+ file: rel(root, f),
85
+ propsType,
86
+ });
87
+ continue;
88
+ }
89
+ if (ts.isVariableStatement(stmt) && isExported(stmt)) {
90
+ for (const decl of stmt.declarationList.declarations) {
91
+ const name = decl.name && ts.isIdentifier(decl.name) ? decl.name.text : undefined;
92
+ if (!name)
93
+ continue;
94
+ // Component-like initializers
95
+ const init = decl.initializer;
96
+ let propsType;
97
+ if (init && (ts.isArrowFunction(init) || ts.isFunctionExpression(init))) {
98
+ const firstParam = init.parameters?.[0];
99
+ propsType = textOfType(firstParam?.type);
100
+ }
101
+ // React.forwardRef(...) pattern: export const X = React.forwardRef<...>((props, ref) => ...)
102
+ if (init && ts.isCallExpression(init)) {
103
+ const args = init.arguments;
104
+ const firstArg = args?.[0];
105
+ if (firstArg && (ts.isArrowFunction(firstArg) || ts.isFunctionExpression(firstArg))) {
106
+ const firstParam = firstArg.parameters?.[0];
107
+ propsType = textOfType(firstParam?.type);
108
+ }
109
+ }
110
+ components.push({
111
+ name,
112
+ exportType: 'named',
113
+ file: rel(root, f),
114
+ propsType,
115
+ });
116
+ }
117
+ continue;
118
+ }
119
+ if (ts.isExportAssignment(stmt)) {
120
+ const expr = stmt.expression;
121
+ const name = ts.isIdentifier(expr) ? expr.text : path.basename(f, path.extname(f));
122
+ components.push({ name, exportType: 'default', file: rel(root, f) });
123
+ continue;
124
+ }
125
+ }
126
+ }
127
+ return {
128
+ root,
129
+ filesScanned: files.length,
130
+ components,
131
+ warnings,
132
+ };
133
+ }
134
+ function scanWithRegexFallback(root, files) {
135
+ const components = [];
136
+ const warnings = ['TypeScript compiler API unavailable; using regex fallback (less accurate).'];
137
+ for (const f of files) {
138
+ const content = readFileSafe(f);
139
+ if (content == null)
140
+ continue;
141
+ // export function Foo(...)
142
+ const fnRe = /export\s+(default\s+)?function\s+([A-Za-z0-9_]+)/g;
143
+ let m;
144
+ while ((m = fnRe.exec(content))) {
145
+ components.push({
146
+ name: m[2],
147
+ exportType: m[1] ? 'default' : 'named',
148
+ file: rel(root, f),
149
+ jsDoc: extractJSDocFromLeadingComment(content.slice(0, m.index)),
150
+ });
151
+ }
152
+ // export const Foo = (...)
153
+ const constRe = /export\s+const\s+([A-Za-z0-9_]+)/g;
154
+ while ((m = constRe.exec(content))) {
155
+ components.push({
156
+ name: m[1],
157
+ exportType: 'named',
158
+ file: rel(root, f),
159
+ jsDoc: extractJSDocFromLeadingComment(content.slice(0, m.index)),
160
+ });
161
+ }
162
+ // export default Identifier
163
+ const defRe = /export\s+default\s+([A-Za-z0-9_]+)/g;
164
+ while ((m = defRe.exec(content))) {
165
+ components.push({
166
+ name: m[1],
167
+ exportType: 'default',
168
+ file: rel(root, f),
169
+ jsDoc: extractJSDocFromLeadingComment(content.slice(0, m.index)),
170
+ });
171
+ }
172
+ }
173
+ return { root, filesScanned: files.length, components, warnings };
174
+ }
175
+ export async function buildComponentCatalog(root, files) {
176
+ try {
177
+ return await scanWithTypeScript(root, files);
178
+ }
179
+ catch (error) {
180
+ const msg = error instanceof Error ? error.message : 'unknown error';
181
+ const fallback = scanWithRegexFallback(root, files);
182
+ fallback.warnings.push(`TypeScript scan failed: ${msg}`);
183
+ return fallback;
184
+ }
185
+ }
186
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/components/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Configuration System
3
+ *
4
+ * Loads config from environment variables, config file, and CLI args.
5
+ * Priority: CLI > ENV > config file > defaults
6
+ */
7
+ import { z } from 'zod';
8
+ declare const ConfigSchema: z.ZodObject<{
9
+ mode: z.ZodDefault<z.ZodEnum<["local", "remote"]>>;
10
+ localProvider: z.ZodDefault<z.ZodEnum<["gemini", "litellm"]>>;
11
+ apiKey: z.ZodOptional<z.ZodString>;
12
+ remoteEndpoint: z.ZodOptional<z.ZodString>;
13
+ remoteApiKey: z.ZodOptional<z.ZodString>;
14
+ allowedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
15
+ defaultFramework: z.ZodDefault<z.ZodEnum<["vanilla", "react", "vue", "svelte", "nextjs"]>>;
16
+ model: z.ZodDefault<z.ZodString>;
17
+ litellmEndpoint: z.ZodOptional<z.ZodString>;
18
+ litellmApiKey: z.ZodOptional<z.ZodString>;
19
+ litellmModel: z.ZodOptional<z.ZodString>;
20
+ accessibility: z.ZodDefault<z.ZodEnum<["none", "wcag-a", "wcag-aa", "wcag-aaa"]>>;
21
+ breakpoints: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
22
+ debug: z.ZodDefault<z.ZodBoolean>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ mode: "local" | "remote";
25
+ localProvider: "gemini" | "litellm";
26
+ allowedPaths: string[];
27
+ defaultFramework: "vanilla" | "react" | "vue" | "svelte" | "nextjs";
28
+ model: string;
29
+ accessibility: "none" | "wcag-a" | "wcag-aa" | "wcag-aaa";
30
+ breakpoints: Record<string, number>;
31
+ debug: boolean;
32
+ apiKey?: string | undefined;
33
+ remoteEndpoint?: string | undefined;
34
+ remoteApiKey?: string | undefined;
35
+ litellmEndpoint?: string | undefined;
36
+ litellmApiKey?: string | undefined;
37
+ litellmModel?: string | undefined;
38
+ }, {
39
+ mode?: "local" | "remote" | undefined;
40
+ localProvider?: "gemini" | "litellm" | undefined;
41
+ apiKey?: string | undefined;
42
+ remoteEndpoint?: string | undefined;
43
+ remoteApiKey?: string | undefined;
44
+ allowedPaths?: string[] | undefined;
45
+ defaultFramework?: "vanilla" | "react" | "vue" | "svelte" | "nextjs" | undefined;
46
+ model?: string | undefined;
47
+ litellmEndpoint?: string | undefined;
48
+ litellmApiKey?: string | undefined;
49
+ litellmModel?: string | undefined;
50
+ accessibility?: "none" | "wcag-a" | "wcag-aa" | "wcag-aaa" | undefined;
51
+ breakpoints?: Record<string, number> | undefined;
52
+ debug?: boolean | undefined;
53
+ }>;
54
+ export type Config = z.infer<typeof ConfigSchema>;
55
+ /**
56
+ * Load configuration from all sources
57
+ */
58
+ export declare function loadConfig(): Config;
59
+ export {};
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAgEnC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Configuration System
3
+ *
4
+ * Loads config from environment variables, config file, and CLI args.
5
+ * Priority: CLI > ENV > config file > defaults
6
+ */
7
+ import { z } from 'zod';
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ const ConfigSchema = z.object({
11
+ // Mode: 'local' uses direct Gemini API, 'remote' uses gateway
12
+ mode: z.enum(['local', 'remote']).default('local'),
13
+ // Local provider: direct Gemini SDK, or OpenAI-compatible proxy (e.g. LiteLLM)
14
+ // Default to LiteLLM because it unlocks routing, retries, caching, and load balancing.
15
+ // If LiteLLM is not configured, we will automatically fall back to direct Gemini.
16
+ localProvider: z.enum(['gemini', 'litellm']).default('litellm'),
17
+ // API key for local mode (required if mode is 'local')
18
+ apiKey: z.string().optional(),
19
+ // Remote gateway endpoint (required if mode is 'remote')
20
+ remoteEndpoint: z.string().url().optional(),
21
+ // Remote API key for gateway authentication
22
+ remoteApiKey: z.string().optional(),
23
+ // Workspace paths that can be accessed
24
+ allowedPaths: z.array(z.string()).default([process.cwd()]),
25
+ // Default framework for generated code
26
+ defaultFramework: z
27
+ .enum(['vanilla', 'react', 'vue', 'svelte', 'nextjs'])
28
+ .default('react'),
29
+ // Gemini model to use (for local mode)
30
+ model: z.string().default('gemini-2.5-flash-lite'),
31
+ // LiteLLM (or other OpenAI-compatible proxy) configuration for local mode
32
+ litellmEndpoint: z.string().url().optional(),
33
+ litellmApiKey: z.string().optional(),
34
+ litellmModel: z.string().optional(),
35
+ // Default accessibility level
36
+ accessibility: z.enum(['none', 'wcag-a', 'wcag-aa', 'wcag-aaa']).default('wcag-aa'),
37
+ // Responsive breakpoints
38
+ breakpoints: z
39
+ .record(z.number())
40
+ .default({
41
+ sm: 640,
42
+ md: 768,
43
+ lg: 1024,
44
+ xl: 1280,
45
+ '2xl': 1536,
46
+ }),
47
+ // Debug mode
48
+ debug: z.boolean().default(false),
49
+ });
50
+ /**
51
+ * Load configuration from all sources
52
+ */
53
+ export function loadConfig() {
54
+ const configFromFile = loadConfigFile();
55
+ const configFromEnv = loadConfigFromEnv();
56
+ const configFromArgs = loadConfigFromArgs();
57
+ // Merge configs with priority: args > env > file > defaults
58
+ const merged = {
59
+ ...configFromFile,
60
+ ...configFromEnv,
61
+ ...configFromArgs,
62
+ };
63
+ const result = ConfigSchema.safeParse(merged);
64
+ if (!result.success) {
65
+ console.error('[config] Invalid configuration:', result.error.format());
66
+ throw new Error('Invalid configuration');
67
+ }
68
+ // Apply smart defaults / fallbacks
69
+ // - We default to localProvider=litellm, but automatically fall back to direct Gemini
70
+ // when LiteLLM isn't configured.
71
+ let cfg = result.data;
72
+ if (cfg.mode === 'local') {
73
+ const hasLite = Boolean(cfg.litellmEndpoint);
74
+ const hasGemini = Boolean(cfg.apiKey);
75
+ if (cfg.localProvider === 'litellm' && !hasLite) {
76
+ if (hasGemini) {
77
+ if (cfg.debug) {
78
+ console.error('[config] LITELLM_ENDPOINT missing; falling back to localProvider=gemini');
79
+ }
80
+ cfg = { ...cfg, localProvider: 'gemini' };
81
+ }
82
+ }
83
+ if (cfg.localProvider === 'gemini' && !hasGemini) {
84
+ if (hasLite) {
85
+ if (cfg.debug) {
86
+ console.error('[config] GEMINI_API_KEY missing; falling back to localProvider=litellm');
87
+ }
88
+ cfg = { ...cfg, localProvider: 'litellm' };
89
+ }
90
+ }
91
+ // Validate mode-specific requirements after applying fallbacks
92
+ if (cfg.localProvider === 'gemini' && !cfg.apiKey) {
93
+ console.error('[config] Local mode (gemini) requires GEMINI_API_KEY environment variable');
94
+ throw new Error('Missing Gemini API key for local mode');
95
+ }
96
+ if (cfg.localProvider === 'litellm' && !cfg.litellmEndpoint) {
97
+ console.error('[config] Local mode (litellm) requires LITELLM_ENDPOINT');
98
+ throw new Error('Missing LiteLLM endpoint for local mode');
99
+ }
100
+ }
101
+ if (cfg.mode === 'remote' && !cfg.remoteEndpoint) {
102
+ console.error('[config] Remote mode requires GEMINI_DESIGNER_REMOTE_ENDPOINT');
103
+ throw new Error('Missing remote endpoint for remote mode');
104
+ }
105
+ return cfg;
106
+ }
107
+ /**
108
+ * Load from .gemini-designer.json config file
109
+ */
110
+ function loadConfigFile() {
111
+ const configPath = path.join(process.cwd(), '.gemini-designer.json');
112
+ if (!fs.existsSync(configPath)) {
113
+ return {};
114
+ }
115
+ try {
116
+ const content = fs.readFileSync(configPath, 'utf-8');
117
+ return JSON.parse(content);
118
+ }
119
+ catch (error) {
120
+ console.error('[config] Error reading config file:', error);
121
+ return {};
122
+ }
123
+ }
124
+ /**
125
+ * Load from environment variables
126
+ */
127
+ function loadConfigFromEnv() {
128
+ const config = {};
129
+ if (process.env.GEMINI_API_KEY) {
130
+ config.apiKey = process.env.GEMINI_API_KEY;
131
+ }
132
+ if (process.env.GEMINI_DESIGNER_MODE) {
133
+ config.mode = process.env.GEMINI_DESIGNER_MODE;
134
+ }
135
+ if (process.env.GEMINI_DESIGNER_LOCAL_PROVIDER) {
136
+ config.localProvider = process.env.GEMINI_DESIGNER_LOCAL_PROVIDER;
137
+ }
138
+ if (process.env.GEMINI_DESIGNER_REMOTE_ENDPOINT) {
139
+ config.remoteEndpoint = process.env.GEMINI_DESIGNER_REMOTE_ENDPOINT;
140
+ }
141
+ if (process.env.GEMINI_DESIGNER_REMOTE_API_KEY) {
142
+ config.remoteApiKey = process.env.GEMINI_DESIGNER_REMOTE_API_KEY;
143
+ }
144
+ if (process.env.GEMINI_DESIGNER_DEBUG === 'true') {
145
+ config.debug = true;
146
+ }
147
+ if (process.env.GEMINI_DESIGNER_FRAMEWORK) {
148
+ config.defaultFramework = process.env.GEMINI_DESIGNER_FRAMEWORK;
149
+ }
150
+ if (process.env.GEMINI_MODEL) {
151
+ config.model = process.env.GEMINI_MODEL;
152
+ }
153
+ if (process.env.LITELLM_ENDPOINT) {
154
+ config.litellmEndpoint = process.env.LITELLM_ENDPOINT;
155
+ }
156
+ if (process.env.LITELLM_API_KEY) {
157
+ config.litellmApiKey = process.env.LITELLM_API_KEY;
158
+ }
159
+ if (process.env.LITELLM_MODEL) {
160
+ config.litellmModel = process.env.LITELLM_MODEL;
161
+ }
162
+ return config;
163
+ }
164
+ /**
165
+ * Load from CLI arguments
166
+ */
167
+ function loadConfigFromArgs() {
168
+ const args = process.argv.slice(2);
169
+ const config = {};
170
+ for (let i = 0; i < args.length; i++) {
171
+ const arg = args[i];
172
+ if (arg === '--local') {
173
+ config.mode = 'local';
174
+ }
175
+ else if (arg === '--remote') {
176
+ config.mode = 'remote';
177
+ }
178
+ else if (arg === '--provider' && args[i + 1]) {
179
+ config.localProvider = args[++i];
180
+ }
181
+ else if (arg === '--debug') {
182
+ config.debug = true;
183
+ }
184
+ else if (arg === '--api-key' && args[i + 1]) {
185
+ config.apiKey = args[++i];
186
+ }
187
+ else if (arg === '--litellm-endpoint' && args[i + 1]) {
188
+ config.litellmEndpoint = args[++i];
189
+ }
190
+ else if (arg === '--litellm-model' && args[i + 1]) {
191
+ config.litellmModel = args[++i];
192
+ }
193
+ else if (arg === '--endpoint' && args[i + 1]) {
194
+ config.remoteEndpoint = args[++i];
195
+ }
196
+ }
197
+ return config;
198
+ }
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Context Builder
3
+ *
4
+ * Builds token-optimized context from specified files.
5
+ * Filters out sensitive content and optimizes for relevance.
6
+ * Includes token counting for quota management.
7
+ */
8
+ import { Config } from '../config/index.js';
9
+ export interface ContextResult {
10
+ content: string;
11
+ estimatedTokens: number;
12
+ filesIncluded: string[];
13
+ filesSkipped: string[];
14
+ truncated: boolean;
15
+ }
16
+ /**
17
+ * Estimate token count from text
18
+ */
19
+ export declare function estimateTokens(text: string): number;
20
+ /**
21
+ * Build context from specified file paths with token optimization
22
+ */
23
+ export declare function buildContext(paths: string[], config: Config): Promise<string>;
24
+ /**
25
+ * Build context with full metadata (tokens, files included, etc.)
26
+ */
27
+ export declare function buildContextWithMetadata(paths: string[], config: Config): Promise<ContextResult>;
28
+ /**
29
+ * Automatically discover relevant UI files in a directory
30
+ */
31
+ export declare function discoverUIFiles(directory: string, config: Config): Promise<string[]>;
32
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAyFxB;AAgDD;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6C1F"}