@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.
- package/.prettierrc +9 -0
- package/dist/components/catalog.d.ts +24 -0
- package/dist/components/catalog.d.ts.map +1 -0
- package/dist/components/catalog.js +186 -0
- package/dist/components/catalog.js.map +1 -0
- package/dist/config/index.d.ts +60 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +199 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context/builder.d.ts +32 -0
- package/dist/context/builder.d.ts.map +1 -0
- package/dist/context/builder.js +194 -0
- package/dist/context/builder.js.map +1 -0
- package/dist/context/filter.d.ts +28 -0
- package/dist/context/filter.d.ts.map +1 -0
- package/dist/context/filter.js +136 -0
- package/dist/context/filter.js.map +1 -0
- package/dist/context/grounding.d.ts +27 -0
- package/dist/context/grounding.d.ts.map +1 -0
- package/dist/context/grounding.js +162 -0
- package/dist/context/grounding.js.map +1 -0
- package/dist/context/guards.d.ts +31 -0
- package/dist/context/guards.d.ts.map +1 -0
- package/dist/context/guards.js +76 -0
- package/dist/context/guards.js.map +1 -0
- package/dist/context/repo-hints.d.ts +12 -0
- package/dist/context/repo-hints.d.ts.map +1 -0
- package/dist/context/repo-hints.js +40 -0
- package/dist/context/repo-hints.js.map +1 -0
- package/dist/generation/gemini-client.d.ts +27 -0
- package/dist/generation/gemini-client.d.ts.map +1 -0
- package/dist/generation/gemini-client.js +64 -0
- package/dist/generation/gemini-client.js.map +1 -0
- package/dist/generation/litellm-client.d.ts +16 -0
- package/dist/generation/litellm-client.d.ts.map +1 -0
- package/dist/generation/litellm-client.js +98 -0
- package/dist/generation/litellm-client.js.map +1 -0
- package/dist/generation/remote-client.d.ts +20 -0
- package/dist/generation/remote-client.d.ts.map +1 -0
- package/dist/generation/remote-client.js +69 -0
- package/dist/generation/remote-client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/output/file-writer.d.ts +39 -0
- package/dist/output/file-writer.d.ts.map +1 -0
- package/dist/output/file-writer.js +153 -0
- package/dist/output/file-writer.js.map +1 -0
- package/dist/output/formatter.d.ts +26 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +156 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -0
- package/dist/stack/detect.d.ts +49 -0
- package/dist/stack/detect.d.ts.map +1 -0
- package/dist/stack/detect.js +157 -0
- package/dist/stack/detect.js.map +1 -0
- package/dist/tokens/sync.d.ts +32 -0
- package/dist/tokens/sync.d.ts.map +1 -0
- package/dist/tokens/sync.js +188 -0
- package/dist/tokens/sync.js.map +1 -0
- package/dist/tools/analyze-screenshot-ui.d.ts +18 -0
- package/dist/tools/analyze-screenshot-ui.d.ts.map +1 -0
- package/dist/tools/analyze-screenshot-ui.js +133 -0
- package/dist/tools/analyze-screenshot-ui.js.map +1 -0
- package/dist/tools/analyze-tokens.d.ts +10 -0
- package/dist/tools/analyze-tokens.d.ts.map +1 -0
- package/dist/tools/analyze-tokens.js +107 -0
- package/dist/tools/analyze-tokens.js.map +1 -0
- package/dist/tools/catalog-components.d.ts +14 -0
- package/dist/tools/catalog-components.d.ts.map +1 -0
- package/dist/tools/catalog-components.js +85 -0
- package/dist/tools/catalog-components.js.map +1 -0
- package/dist/tools/create-ui.d.ts +10 -0
- package/dist/tools/create-ui.d.ts.map +1 -0
- package/dist/tools/create-ui.js +167 -0
- package/dist/tools/create-ui.js.map +1 -0
- package/dist/tools/detect-ui-stack.d.ts +15 -0
- package/dist/tools/detect-ui-stack.d.ts.map +1 -0
- package/dist/tools/detect-ui-stack.js +52 -0
- package/dist/tools/detect-ui-stack.js.map +1 -0
- package/dist/tools/generate-component-variants.d.ts +15 -0
- package/dist/tools/generate-component-variants.d.ts.map +1 -0
- package/dist/tools/generate-component-variants.js +199 -0
- package/dist/tools/generate-component-variants.js.map +1 -0
- package/dist/tools/generate-vibes.d.ts +10 -0
- package/dist/tools/generate-vibes.d.ts.map +1 -0
- package/dist/tools/generate-vibes.js +145 -0
- package/dist/tools/generate-vibes.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/modify-ui.d.ts +11 -0
- package/dist/tools/modify-ui.d.ts.map +1 -0
- package/dist/tools/modify-ui.js +207 -0
- package/dist/tools/modify-ui.js.map +1 -0
- package/dist/tools/scaffold-project.d.ts +10 -0
- package/dist/tools/scaffold-project.d.ts.map +1 -0
- package/dist/tools/scaffold-project.js +122 -0
- package/dist/tools/scaffold-project.js.map +1 -0
- package/dist/tools/snippet-ui.d.ts +11 -0
- package/dist/tools/snippet-ui.d.ts.map +1 -0
- package/dist/tools/snippet-ui.js +194 -0
- package/dist/tools/snippet-ui.js.map +1 -0
- package/dist/tools/sync-design-tokens.d.ts +14 -0
- package/dist/tools/sync-design-tokens.d.ts.map +1 -0
- package/dist/tools/sync-design-tokens.js +233 -0
- package/dist/tools/sync-design-tokens.js.map +1 -0
- package/dist/utils/walk.d.ts +15 -0
- package/dist/utils/walk.d.ts.map +1 -0
- package/dist/utils/walk.js +63 -0
- package/dist/utils/walk.js.map +1 -0
- package/eslint.config.js +37 -0
- package/package.json +56 -0
- package/src/__tests__/builder.test.ts +31 -0
- package/src/__tests__/config.test.ts +52 -0
- package/src/__tests__/filter.test.ts +109 -0
- package/src/components/catalog.ts +214 -0
- package/src/config/index.ts +237 -0
- package/src/context/builder.ts +233 -0
- package/src/context/filter.ts +164 -0
- package/src/context/grounding.ts +191 -0
- package/src/context/guards.ts +94 -0
- package/src/context/repo-hints.ts +43 -0
- package/src/generation/gemini-client.ts +94 -0
- package/src/generation/litellm-client.ts +121 -0
- package/src/generation/remote-client.ts +103 -0
- package/src/index.ts +36 -0
- package/src/output/file-writer.ts +181 -0
- package/src/output/formatter.ts +186 -0
- package/src/server.ts +28 -0
- package/src/stack/detect.ts +204 -0
- package/src/tokens/sync.ts +212 -0
- package/src/tools/analyze-screenshot-ui.ts +150 -0
- package/src/tools/analyze-tokens.ts +123 -0
- package/src/tools/catalog-components.ts +99 -0
- package/src/tools/create-ui.ts +194 -0
- package/src/tools/detect-ui-stack.ts +64 -0
- package/src/tools/generate-component-variants.ts +218 -0
- package/src/tools/generate-vibes.ts +177 -0
- package/src/tools/index.ts +42 -0
- package/src/tools/modify-ui.ts +230 -0
- package/src/tools/scaffold-project.ts +138 -0
- package/src/tools/snippet-ui.ts +222 -0
- package/src/tools/sync-design-tokens.ts +256 -0
- package/src/utils/walk.ts +75 -0
- package/tsconfig.json +34 -0
- package/vitest.config.ts +15 -0
package/.prettierrc
ADDED
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAElD,+EAA+E;IAC/E,uFAAuF;IACvF,kFAAkF;IAClF,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAE/D,uDAAuD;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,yDAAyD;IACzD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAE3C,4CAA4C;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEnC,uCAAuC;IACvC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE1D,uCAAuC;IACvC,gBAAgB,EAAE,CAAC;SACd,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACrD,OAAO,CAAC,OAAO,CAAC;IAErB,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAElD,0EAA0E;IAC1E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEnC,8BAA8B;IAC9B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAEnF,yBAAyB;IACzB,WAAW,EAAE,CAAC;SACT,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB,OAAO,CAAC;QACL,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,GAAG;QACP,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,IAAI;KACd,CAAC;IAEN,aAAa;IACb,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpC,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;IACxC,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;IAE5C,4DAA4D;IAC5D,MAAM,MAAM,GAAG;QACX,GAAG,cAAc;QACjB,GAAG,aAAa;QAChB,GAAG,cAAc;KACpB,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,mCAAmC;IACnC,sFAAsF;IACtF,mCAAmC;IACnC,IAAI,GAAG,GAAW,MAAM,CAAC,IAAI,CAAC;IAE9B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,SAAS,EAAE,CAAC;gBACZ,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;gBAC7F,CAAC;gBACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,IAAI,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;gBAC5F,CAAC;gBACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,+DAA+D;QAC/D,IAAI,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC3F,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAErE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACtB,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAA0C,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC;QAC7C,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,8BAAyD,CAAC;IACjG,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,CAAC;QAC7C,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;QAC/C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;QACxC,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAuD,CAAC;IAClG,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/B,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC9B,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5B,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;QAC1B,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAA4B,CAAC;QAChE,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,GAAG,KAAK,oBAAoB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,GAAG,KAAK,iBAAiB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -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"}
|