glyph-ai 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 (106) hide show
  1. package/README.md +69 -0
  2. package/bundled/overlay/overlay.js +63 -0
  3. package/bundled/server/context/brand-references.d.ts +7 -0
  4. package/bundled/server/context/brand-references.d.ts.map +1 -0
  5. package/bundled/server/context/brand-references.js +20 -0
  6. package/bundled/server/context/brand-references.js.map +1 -0
  7. package/bundled/server/context/design-philosophy.d.ts +6 -0
  8. package/bundled/server/context/design-philosophy.d.ts.map +1 -0
  9. package/bundled/server/context/design-philosophy.js +82 -0
  10. package/bundled/server/context/design-philosophy.js.map +1 -0
  11. package/bundled/server/context/design-system-loader.d.ts +11 -0
  12. package/bundled/server/context/design-system-loader.d.ts.map +1 -0
  13. package/bundled/server/context/design-system-loader.js +169 -0
  14. package/bundled/server/context/design-system-loader.js.map +1 -0
  15. package/bundled/server/context/design-system.d.ts +7 -0
  16. package/bundled/server/context/design-system.d.ts.map +1 -0
  17. package/bundled/server/context/design-system.js +75 -0
  18. package/bundled/server/context/design-system.js.map +1 -0
  19. package/bundled/server/context/prompt-builder.d.ts +15 -0
  20. package/bundled/server/context/prompt-builder.d.ts.map +1 -0
  21. package/bundled/server/context/prompt-builder.js +123 -0
  22. package/bundled/server/context/prompt-builder.js.map +1 -0
  23. package/bundled/server/context/token-template.d.ts +36 -0
  24. package/bundled/server/context/token-template.d.ts.map +1 -0
  25. package/bundled/server/context/token-template.js +226 -0
  26. package/bundled/server/context/token-template.js.map +1 -0
  27. package/bundled/server/data/design-systems/apple-design-system.md +474 -0
  28. package/bundled/server/data/design-systems/arc-design-system.md +922 -0
  29. package/bundled/server/data/design-systems/claude-ai-design-system.md +1443 -0
  30. package/bundled/server/data/design-systems/elevenlabs-design-system.md +669 -0
  31. package/bundled/server/data/design-systems/generating_design.md +9 -0
  32. package/bundled/server/data/design-systems/linear-design-system.md +607 -0
  33. package/bundled/server/data/design-systems/notion-design-system.md +866 -0
  34. package/bundled/server/data/design-systems/raycast-design-system.md +709 -0
  35. package/bundled/server/data/design-systems/stripe-design-system.md +592 -0
  36. package/bundled/server/data/design-systems/vercel-design-system.md +824 -0
  37. package/bundled/server/data/design.md +971 -0
  38. package/bundled/server/index.d.ts +2 -0
  39. package/bundled/server/index.d.ts.map +1 -0
  40. package/bundled/server/index.js +310 -0
  41. package/bundled/server/index.js.map +1 -0
  42. package/bundled/server/mcp/tools/apply-variation.d.ts +3 -0
  43. package/bundled/server/mcp/tools/apply-variation.d.ts.map +1 -0
  44. package/bundled/server/mcp/tools/apply-variation.js +43 -0
  45. package/bundled/server/mcp/tools/apply-variation.js.map +1 -0
  46. package/bundled/server/mcp/tools/generate-variations.d.ts +3 -0
  47. package/bundled/server/mcp/tools/generate-variations.d.ts.map +1 -0
  48. package/bundled/server/mcp/tools/generate-variations.js +58 -0
  49. package/bundled/server/mcp/tools/generate-variations.js.map +1 -0
  50. package/bundled/server/mcp/tools/index.d.ts +3 -0
  51. package/bundled/server/mcp/tools/index.d.ts.map +1 -0
  52. package/bundled/server/mcp/tools/index.js +11 -0
  53. package/bundled/server/mcp/tools/index.js.map +1 -0
  54. package/bundled/server/mcp/tools/scan-design-system.d.ts +3 -0
  55. package/bundled/server/mcp/tools/scan-design-system.d.ts.map +1 -0
  56. package/bundled/server/mcp/tools/scan-design-system.js +27 -0
  57. package/bundled/server/mcp/tools/scan-design-system.js.map +1 -0
  58. package/bundled/server/mcp/tools/submit-variations.d.ts +3 -0
  59. package/bundled/server/mcp/tools/submit-variations.d.ts.map +1 -0
  60. package/bundled/server/mcp/tools/submit-variations.js +50 -0
  61. package/bundled/server/mcp/tools/submit-variations.js.map +1 -0
  62. package/bundled/server/mcp-entry.d.ts +2 -0
  63. package/bundled/server/mcp-entry.d.ts.map +1 -0
  64. package/bundled/server/mcp-entry.js +56 -0
  65. package/bundled/server/mcp-entry.js.map +1 -0
  66. package/bundled/server/preview/css-resolver.d.ts +6 -0
  67. package/bundled/server/preview/css-resolver.d.ts.map +1 -0
  68. package/bundled/server/preview/css-resolver.js +57 -0
  69. package/bundled/server/preview/css-resolver.js.map +1 -0
  70. package/bundled/server/preview/html-builder.d.ts +6 -0
  71. package/bundled/server/preview/html-builder.d.ts.map +1 -0
  72. package/bundled/server/preview/html-builder.js +85 -0
  73. package/bundled/server/preview/html-builder.js.map +1 -0
  74. package/bundled/server/telemetry.d.ts +4 -0
  75. package/bundled/server/telemetry.d.ts.map +1 -0
  76. package/bundled/server/telemetry.js +71 -0
  77. package/bundled/server/telemetry.js.map +1 -0
  78. package/bundled/server/types.d.ts +69 -0
  79. package/bundled/server/types.d.ts.map +1 -0
  80. package/bundled/server/types.js +2 -0
  81. package/bundled/server/types.js.map +1 -0
  82. package/bundled/server/variations/file-writer.d.ts +5 -0
  83. package/bundled/server/variations/file-writer.d.ts.map +1 -0
  84. package/bundled/server/variations/file-writer.js +29 -0
  85. package/bundled/server/variations/file-writer.js.map +1 -0
  86. package/bundled/server/variations/git-utils.d.ts +3 -0
  87. package/bundled/server/variations/git-utils.d.ts.map +1 -0
  88. package/bundled/server/variations/git-utils.js +23 -0
  89. package/bundled/server/variations/git-utils.js.map +1 -0
  90. package/bundled/server/variations/store.d.ts +11 -0
  91. package/bundled/server/variations/store.d.ts.map +1 -0
  92. package/bundled/server/variations/store.js +52 -0
  93. package/bundled/server/variations/store.js.map +1 -0
  94. package/dist/commands/init.d.ts +2 -0
  95. package/dist/commands/init.d.ts.map +1 -0
  96. package/dist/commands/init.js +299 -0
  97. package/dist/commands/init.js.map +1 -0
  98. package/dist/commands/stop.d.ts +2 -0
  99. package/dist/commands/stop.d.ts.map +1 -0
  100. package/dist/commands/stop.js +32 -0
  101. package/dist/commands/stop.js.map +1 -0
  102. package/dist/index.d.ts +3 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +35 -0
  105. package/dist/index.js.map +1 -0
  106. package/package.json +35 -0
@@ -0,0 +1,299 @@
1
+ import chalk from 'chalk';
2
+ import path from 'path';
3
+ import fs from 'node:fs';
4
+ import { spawn } from 'child_process';
5
+ import { fileURLToPath } from 'url';
6
+ import fsExtra from 'fs-extra';
7
+ const { pathExists, readFile, writeFile, readJson, writeJson, ensureDir } = fsExtra;
8
+ // ---------------------------------------------------------------------------
9
+ // Helpers
10
+ // ---------------------------------------------------------------------------
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ /** Resolve the path to @glyph/server dist from this CLI package. */
14
+ function resolveServerDist() {
15
+ // Bundled (installed from npm): dist/commands/ → cli root → bundled/server
16
+ const bundled = path.resolve(__dirname, '..', '..', 'bundled', 'server');
17
+ if (fs.existsSync(bundled))
18
+ return bundled;
19
+ // Dev (monorepo): dist/commands/ → cli → packages → server/dist
20
+ return path.resolve(__dirname, '..', '..', '..', 'server', 'dist');
21
+ }
22
+ // ---------------------------------------------------------------------------
23
+ // Step 1 — Detect framework
24
+ // ---------------------------------------------------------------------------
25
+ async function detectFramework(cwd) {
26
+ const nextConfigs = ['next.config.js', 'next.config.ts', 'next.config.mjs', 'next.config.cjs'];
27
+ for (const name of nextConfigs) {
28
+ if (await pathExists(path.join(cwd, name)))
29
+ return 'nextjs';
30
+ }
31
+ const viteConfigs = ['vite.config.js', 'vite.config.ts', 'vite.config.mjs', 'vite.config.cjs'];
32
+ for (const name of viteConfigs) {
33
+ if (await pathExists(path.join(cwd, name)))
34
+ return 'vite';
35
+ }
36
+ if ((await pathExists(path.join(cwd, 'public', 'index.html'))) &&
37
+ (await pathExists(path.join(cwd, 'src')))) {
38
+ return 'cra';
39
+ }
40
+ return 'unknown';
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Step 2 — Inject overlay script
44
+ // ---------------------------------------------------------------------------
45
+ const GLYPH_PORT = Number(process.env.GLYPH_PORT) || 3001;
46
+ const OVERLAY_SRC = `http://localhost:${GLYPH_PORT}/overlay.js`;
47
+ const MARKER_START = '<!-- glyph-overlay-start -->';
48
+ const MARKER_END = '<!-- glyph-overlay-end -->';
49
+ async function injectNextJs(cwd) {
50
+ // Prefer app/layout.tsx, fall back to pages/_document.tsx
51
+ const candidates = [
52
+ path.join(cwd, 'app', 'layout.tsx'),
53
+ path.join(cwd, 'src', 'app', 'layout.tsx'),
54
+ path.join(cwd, 'pages', '_document.tsx'),
55
+ path.join(cwd, 'src', 'pages', '_document.tsx'),
56
+ ];
57
+ let target = null;
58
+ for (const c of candidates) {
59
+ if (await pathExists(c)) {
60
+ target = c;
61
+ break;
62
+ }
63
+ }
64
+ if (!target) {
65
+ console.log(chalk.yellow(' Could not find app/layout.tsx or pages/_document.tsx — skipping overlay injection.'));
66
+ return false;
67
+ }
68
+ let content = await readFile(target, 'utf-8');
69
+ // Already injected?
70
+ if (content.includes(OVERLAY_SRC)) {
71
+ console.log(chalk.yellow(' Glyph overlay already configured.'));
72
+ return true;
73
+ }
74
+ // Ensure Script import exists
75
+ if (!content.includes("from 'next/script'") && !content.includes('from "next/script"')) {
76
+ // Add import after the last existing import
77
+ const lastImportIdx = content.lastIndexOf('\nimport ');
78
+ if (lastImportIdx !== -1) {
79
+ const endOfLine = content.indexOf('\n', lastImportIdx + 1);
80
+ content =
81
+ content.slice(0, endOfLine + 1) +
82
+ "import Script from 'next/script';\n" +
83
+ content.slice(endOfLine + 1);
84
+ }
85
+ else {
86
+ content = "import Script from 'next/script';\n" + content;
87
+ }
88
+ }
89
+ // Inject snippet before </body>
90
+ const snippet = `\n {process.env.NODE_ENV === 'development' && (\n <Script src="${OVERLAY_SRC}" strategy="afterInteractive" />\n )}`;
91
+ const bodyCloseIdx = content.lastIndexOf('</body>');
92
+ if (bodyCloseIdx !== -1) {
93
+ content = content.slice(0, bodyCloseIdx) + snippet + '\n ' + content.slice(bodyCloseIdx);
94
+ }
95
+ else {
96
+ console.log(chalk.yellow(' Could not find </body> tag — appending overlay snippet at end of file.'));
97
+ content += '\n' + snippet + '\n';
98
+ }
99
+ await writeFile(target, content, 'utf-8');
100
+ console.log(chalk.green(` Injected overlay into ${path.relative(cwd, target)}`));
101
+ return true;
102
+ }
103
+ async function injectHtmlFile(filePath, cwd) {
104
+ if (!(await pathExists(filePath))) {
105
+ console.log(chalk.yellow(` Could not find ${path.relative(cwd, filePath)} — skipping overlay injection.`));
106
+ return false;
107
+ }
108
+ let content = await readFile(filePath, 'utf-8');
109
+ if (content.includes(OVERLAY_SRC) || content.includes(MARKER_START)) {
110
+ console.log(chalk.yellow(' Glyph overlay already configured.'));
111
+ return true;
112
+ }
113
+ const snippet = ` ${MARKER_START}\n <script src="${OVERLAY_SRC}" defer></script>\n ${MARKER_END}`;
114
+ const bodyCloseIdx = content.lastIndexOf('</body>');
115
+ if (bodyCloseIdx !== -1) {
116
+ content = content.slice(0, bodyCloseIdx) + snippet + '\n ' + content.slice(bodyCloseIdx);
117
+ }
118
+ else {
119
+ content += '\n' + snippet + '\n';
120
+ }
121
+ await writeFile(filePath, content, 'utf-8');
122
+ console.log(chalk.green(` Injected overlay into ${path.relative(cwd, filePath)}`));
123
+ return true;
124
+ }
125
+ async function injectOverlay(cwd, framework) {
126
+ switch (framework) {
127
+ case 'nextjs':
128
+ return injectNextJs(cwd);
129
+ case 'vite':
130
+ return injectHtmlFile(path.join(cwd, 'index.html'), cwd);
131
+ case 'cra':
132
+ return injectHtmlFile(path.join(cwd, 'public', 'index.html'), cwd);
133
+ case 'unknown':
134
+ console.log(chalk.yellow(' Unknown framework — skipping overlay injection.'));
135
+ console.log(chalk.yellow(` Manually add <script src="${OVERLAY_SRC}" defer></script> to your HTML.`));
136
+ return false;
137
+ }
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Step 3 — Write MCP config files
141
+ // ---------------------------------------------------------------------------
142
+ async function writeMcpConfigs(cwd) {
143
+ const serverDist = resolveServerDist();
144
+ const mcpEntryPath = path.join(serverDist, 'mcp-entry.js');
145
+ const glyphEntry = {
146
+ command: 'node',
147
+ args: [mcpEntryPath],
148
+ env: {
149
+ GLYPH_PROJECT_ROOT: cwd,
150
+ GLYPH_PORT: String(GLYPH_PORT),
151
+ GLYPH_TELEMETRY_URL: 'https://rlvschfrrpzxqkwwwdfh.supabase.co/functions/v1/glyph-ingest',
152
+ },
153
+ };
154
+ // Claude Code — .mcp.json at project root
155
+ const claudeConfigPath = path.join(cwd, '.mcp.json');
156
+ await mergeMcpConfig(claudeConfigPath, glyphEntry);
157
+ console.log(chalk.green(' Wrote .mcp.json (Claude Code)'));
158
+ // Cursor — .cursor/mcp.json
159
+ const cursorDir = path.join(cwd, '.cursor');
160
+ await ensureDir(cursorDir);
161
+ const cursorConfigPath = path.join(cursorDir, 'mcp.json');
162
+ await mergeMcpConfig(cursorConfigPath, glyphEntry);
163
+ console.log(chalk.green(' Wrote .cursor/mcp.json (Cursor)'));
164
+ }
165
+ async function mergeMcpConfig(filePath, entry) {
166
+ let config = {};
167
+ if (await pathExists(filePath)) {
168
+ try {
169
+ config = await readJson(filePath);
170
+ }
171
+ catch {
172
+ // If file is malformed, overwrite
173
+ config = {};
174
+ }
175
+ }
176
+ if (!config.mcpServers) {
177
+ config.mcpServers = {};
178
+ }
179
+ config.mcpServers.glyph = entry;
180
+ await writeJson(filePath, config, { spaces: 2 });
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Step 4 — Create .glyph directory
184
+ // ---------------------------------------------------------------------------
185
+ async function createGlyphDir(cwd) {
186
+ await ensureDir(path.join(cwd, '.glyph', 'backups'));
187
+ console.log(chalk.green(' Created .glyph/backups directory'));
188
+ }
189
+ // ---------------------------------------------------------------------------
190
+ // Step 5 — Start server
191
+ // ---------------------------------------------------------------------------
192
+ async function startServer(cwd) {
193
+ const serverDist = resolveServerDist();
194
+ const serverEntry = path.join(serverDist, 'index.js');
195
+ if (!(await pathExists(serverEntry))) {
196
+ console.log(chalk.yellow(` Server entry not found at ${serverEntry}`));
197
+ console.log(chalk.yellow(' Build the server first: cd packages/server && npm run build'));
198
+ return false;
199
+ }
200
+ const child = spawn('node', [serverEntry], {
201
+ cwd,
202
+ detached: true,
203
+ stdio: 'ignore',
204
+ env: {
205
+ ...process.env,
206
+ GLYPH_PROJECT_ROOT: cwd,
207
+ GLYPH_PORT: String(GLYPH_PORT),
208
+ GLYPH_TELEMETRY_URL: 'https://rlvschfrrpzxqkwwwdfh.supabase.co/functions/v1/glyph-ingest',
209
+ },
210
+ });
211
+ child.unref();
212
+ const pid = child.pid;
213
+ if (!pid) {
214
+ console.log(chalk.red(' Failed to start Glyph server.'));
215
+ return false;
216
+ }
217
+ // Save PID
218
+ const pidFile = path.join(cwd, '.glyph', 'server.pid');
219
+ await writeFile(pidFile, String(pid), 'utf-8');
220
+ // Wait briefly and check health
221
+ const healthy = await checkHealth(3, 800);
222
+ if (healthy) {
223
+ console.log(chalk.green(` Glyph server running (PID ${pid})`));
224
+ }
225
+ else {
226
+ console.log(chalk.yellow(` Server spawned (PID ${pid}) but health check did not respond.`));
227
+ console.log(chalk.yellow(` It may still be starting — check http://localhost:${GLYPH_PORT}/health`));
228
+ }
229
+ return healthy;
230
+ }
231
+ async function checkHealth(retries, delayMs) {
232
+ for (let i = 0; i < retries; i++) {
233
+ await sleep(delayMs);
234
+ try {
235
+ const res = await fetch(`http://localhost:${GLYPH_PORT}/health`);
236
+ if (res.ok)
237
+ return true;
238
+ }
239
+ catch {
240
+ // Server not ready yet
241
+ }
242
+ }
243
+ return false;
244
+ }
245
+ function sleep(ms) {
246
+ return new Promise((resolve) => setTimeout(resolve, ms));
247
+ }
248
+ // ---------------------------------------------------------------------------
249
+ // Main init flow
250
+ // ---------------------------------------------------------------------------
251
+ export async function init() {
252
+ const cwd = process.cwd();
253
+ console.log();
254
+ console.log(chalk.bold('Glyph — Design intelligence for the vibe coding era'));
255
+ console.log();
256
+ // Step 1
257
+ console.log(chalk.bold('1. Detecting framework...'));
258
+ const framework = await detectFramework(cwd);
259
+ const frameworkLabels = {
260
+ nextjs: 'Next.js',
261
+ vite: 'Vite',
262
+ cra: 'Create React App',
263
+ unknown: 'Unknown',
264
+ };
265
+ console.log(chalk.green(` Detected: ${frameworkLabels[framework]}`));
266
+ console.log();
267
+ // Step 2
268
+ console.log(chalk.bold('2. Injecting overlay script...'));
269
+ const overlayInjected = await injectOverlay(cwd, framework);
270
+ console.log();
271
+ // Step 3
272
+ console.log(chalk.bold('3. Writing MCP config files...'));
273
+ await writeMcpConfigs(cwd);
274
+ console.log();
275
+ // Step 4
276
+ console.log(chalk.bold('4. Creating .glyph directory...'));
277
+ await createGlyphDir(cwd);
278
+ console.log();
279
+ // Step 5
280
+ console.log(chalk.bold('5. Starting Glyph server...'));
281
+ const serverStarted = await startServer(cwd);
282
+ console.log();
283
+ // Summary
284
+ console.log(chalk.bold('Setup complete!'));
285
+ console.log();
286
+ console.log(` Framework: ${frameworkLabels[framework]}`);
287
+ console.log(` Overlay: ${overlayInjected ? chalk.green('injected') : chalk.yellow('skipped')}`);
288
+ console.log(` MCP configs: ${chalk.green('written')}`);
289
+ console.log(` Server: ${serverStarted ? chalk.green('running') : chalk.yellow('not confirmed')}`);
290
+ console.log();
291
+ console.log(chalk.bold('Next steps:'));
292
+ console.log(' 1. Start your dev server (npm run dev)');
293
+ console.log(' 2. Open your app in the browser');
294
+ console.log(' 3. In Claude Code, ask for design variations:');
295
+ console.log(' "give me 3 variations of the hero section in app/page.tsx"');
296
+ console.log(' 4. Variations appear in a preview panel — click to preview, click Implement to keep');
297
+ console.log();
298
+ }
299
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function stop(): Promise<void>;
2
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAKA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B1C"}
@@ -0,0 +1,32 @@
1
+ import chalk from 'chalk';
2
+ import fsExtra from 'fs-extra';
3
+ const { readFile, remove, pathExists } = fsExtra;
4
+ import path from 'path';
5
+ export async function stop() {
6
+ const cwd = process.cwd();
7
+ const pidFile = path.join(cwd, '.glyph', 'server.pid');
8
+ if (!(await pathExists(pidFile))) {
9
+ console.log(chalk.yellow('No running Glyph server found (missing .glyph/server.pid)'));
10
+ return;
11
+ }
12
+ const pid = parseInt(await readFile(pidFile, 'utf-8'), 10);
13
+ if (isNaN(pid)) {
14
+ console.log(chalk.red('Invalid PID in .glyph/server.pid'));
15
+ await remove(pidFile);
16
+ return;
17
+ }
18
+ try {
19
+ process.kill(pid, 'SIGTERM');
20
+ console.log(chalk.green(`Glyph server (PID ${pid}) stopped.`));
21
+ }
22
+ catch (err) {
23
+ if (err.code === 'ESRCH') {
24
+ console.log(chalk.yellow(`Process ${pid} not found — server may have already stopped.`));
25
+ }
26
+ else {
27
+ console.log(chalk.red(`Failed to stop server: ${err.message}`));
28
+ }
29
+ }
30
+ await remove(pidFile);
31
+ }
32
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;AACjD,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3D,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,GAAG,YAAY,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,+CAA+C,CAAC,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { init } from './commands/init.js';
4
+ import { stop } from './commands/stop.js';
5
+ const program = new Command();
6
+ program
7
+ .name('glyph')
8
+ .version('0.1.0')
9
+ .description('Design intelligence for the vibe coding era');
10
+ program
11
+ .command('init')
12
+ .description('Set up Glyph in the current project')
13
+ .action(async () => {
14
+ try {
15
+ await init();
16
+ }
17
+ catch (err) {
18
+ console.error(err);
19
+ process.exit(1);
20
+ }
21
+ });
22
+ program
23
+ .command('stop')
24
+ .description('Stop the running Glyph server')
25
+ .action(async () => {
26
+ try {
27
+ await stop();
28
+ }
29
+ catch (err) {
30
+ console.error(err);
31
+ process.exit(1);
32
+ }
33
+ });
34
+ program.parse();
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,6CAA6C,CAAC,CAAC;AAE9D,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "glyph-ai",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "glyph": "./dist/index.js",
7
+ "glyph-ai": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "bundled"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsx src/index.ts",
16
+ "prepublishOnly": "cd ../.. && npm run build:dist"
17
+ },
18
+ "dependencies": {
19
+ "@modelcontextprotocol/sdk": "^1.27.0",
20
+ "chalk": "^5.4.1",
21
+ "commander": "^13.1.0",
22
+ "cors": "^2.8.5",
23
+ "esbuild": "^0.25.0",
24
+ "express": "^4.21.2",
25
+ "fs-extra": "^11.2.0",
26
+ "glob": "^11.0.1",
27
+ "ws": "^8.18.0",
28
+ "zod": "^3.24.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/fs-extra": "^11.0.4",
32
+ "tsx": "^4.19.0",
33
+ "typescript": "^5.7.3"
34
+ }
35
+ }