atomsystem 0.4.3 โ†’ 0.5.1

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/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":["path","fileURLToPath","fs"],"mappings":"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","file":"cli.cjs","sourcesContent":["#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` โœ“ Created ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n๐Ÿš€ Initializing AtomSystem in your project...\\n');\n\n // 1. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n const destSkill = path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, destSkill, 'AI Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 2. Install Design Guide (.design.md)\n const srcDesign = path.join(PKG_ROOT, 'presets', 'default.design.md');\n const destDesign = path.join(cwd, 'atom.design.md');\n if (fs.existsSync(srcDesign)) {\n copyFileSafe(srcDesign, destDesign, 'Design Guide (atom.design.md)');\n }\n\n // 3. Install UX Pattern Guide (.uxPattern.md)\n const srcPattern = path.join(PKG_ROOT, 'presets', 'uxPattern.md');\n const destPattern = path.join(cwd, 'atom.uxPattern.md');\n if (fs.existsSync(srcPattern)) {\n copyFileSafe(srcPattern, destPattern, 'UX Pattern Guide (atom.uxPattern.md)');\n }\n\n // 4. Install Token JSON (tokens.json)\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n const destToken = path.join(cwd, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, destToken, 'Token JSON (tokens/token.json)');\n }\n\n console.log('\\nโœจ AtomSystem initialization completed!');\n console.log('\\n๐Ÿ“Œ Next Steps:');\n console.log('1. Import AtomSystem CSS in your app (e.g. layout.tsx, App.vue, index.html):');\n console.log(' import \"atomsystem/css/atom-ui.css\";');\n console.log('2. Ask your AI coding assistant (Antigravity, Cursor, Copilot) to build UI:');\n console.log(' \"atom.design.md์™€ atom.uxPattern.md๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฒฐ์ œ ํ™”๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.\"\\n');\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AtomSystem assets (AI Skill, design.md, uxPattern.md, token.json)\n help Display this help message\n version Print version info\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.4.3');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n\n"]}
1
+ {"version":3,"sources":["../src/tokenCompiler.ts","../src/studioServer.ts","../src/cli.ts"],"names":["path","http","fs","fileURLToPath"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * W3C DTCG Token JSON -> CSS Custom Properties ๋ณ€ํ™˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ\n */\nexport function compileTokensToCss(tokenJson: Record<string, any>): string {\n const cssVars: string[] = [];\n\n function traverse(obj: any) {\n if (!obj || typeof obj !== 'object') return;\n\n if (obj.variable && obj.$value !== undefined) {\n cssVars.push(` ${obj.variable}: ${obj.$value};`);\n return;\n }\n\n for (const key of Object.keys(obj)) {\n if (key.startsWith('$')) continue;\n traverse(obj[key]);\n }\n }\n\n traverse(tokenJson);\n\n return `:root {\\n${cssVars.join('\\n')}\\n}\\n`;\n}\n","import http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport { compileTokensToCss } from './tokenCompiler';\n\nexport function startLocalTokenStudio(options: { port?: number; cwd?: string } = {}) {\n const port = options.port || 4000;\n const cwd = options.cwd || process.cwd();\n\n // Find token files\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n const designMdPath = path.join(cwd, 'atom.design.md');\n\n const server = http.createServer((req, res) => {\n // CORS headers for local usage\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const url = new URL(req.url || '/', `http://localhost:${port}`);\n\n // API: GET tokens\n if (url.pathname === '/api/tokens' && req.method === 'GET') {\n let data: any = {};\n if (fs.existsSync(tokenJsonPath)) {\n try {\n data = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n } catch (e) {\n data = { error: 'Failed to parse tokens/token.json' };\n }\n }\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify(data));\n return;\n }\n\n // API: POST update tokens\n if (url.pathname === '/api/tokens' && req.method === 'POST') {\n let body = '';\n req.on('data', (chunk) => {\n body += chunk;\n });\n req.on('end', () => {\n try {\n const newTokens = JSON.parse(body);\n\n // 1. Save tokens/token.json\n const tokensDir = path.dirname(tokenJsonPath);\n if (!fs.existsSync(tokensDir)) fs.mkdirSync(tokensDir, { recursive: true });\n fs.writeFileSync(tokenJsonPath, JSON.stringify(newTokens, null, 2), 'utf-8');\n\n // 2. Compile and save to css/atom-ui.css\n const compiledCss = compileTokensToCss(newTokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, compiledCss, 'utf-8');\n\n res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: true, message: 'Tokens and CSS compiled successfully!' }));\n } catch (err: any) {\n res.writeHead(400, { 'Content-Type': 'application/json; charset=utf-8' });\n res.end(JSON.stringify({ success: false, error: err.message }));\n }\n });\n return;\n }\n\n // Serve Local Token Studio Web UI\n if (url.pathname === '/' || url.pathname === '/index.html') {\n res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });\n res.end(getStudioHtml());\n return;\n }\n\n res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });\n res.end('Not Found');\n });\n\n server.listen(port, () => {\n console.log(`\\n๐ŸŽจ AtomSystem Local Token Studio running at:`);\n console.log(` ๐Ÿ‘‰ http://localhost:${port}\\n`);\n console.log(` Tokens file: ${path.relative(cwd, tokenJsonPath)}`);\n console.log(` Compiled CSS: ${path.relative(cwd, cssPath)}`);\n console.log(`\\nPress Ctrl+C to stop the studio server.\\n`);\n });\n\n return server;\n}\n\nfunction getStudioHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"ko\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>AtomSystem Local Token Studio</title>\n <style>\n :root {\n --bg: #0a0a0a;\n --card-bg: #141414;\n --border: #262626;\n --text: #ededed;\n --muted: #888888;\n --accent: #3182f6;\n --radius: 8px;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n background: var(--bg);\n color: var(--text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Pretendard, sans-serif;\n padding: 32px 20px;\n line-height: 1.5;\n }\n .container { max-width: 1100px; margin: 0 auto; }\n header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n padding-bottom: 24px;\n border-bottom: 1px solid var(--border);\n margin-bottom: 32px;\n }\n h1 { font-size: 24px; font-weight: 700; letter-spacing: -0.02em; }\n p.desc { font-size: 13px; color: var(--muted); margin-top: 4px; }\n .badge {\n font-size: 11px;\n font-family: monospace;\n padding: 3px 8px;\n background: #1a1a1a;\n border: 1px solid var(--border);\n border-radius: 4px;\n color: var(--muted);\n }\n .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }\n @media (max-width: 860px) { .grid { grid-template-columns: 1fr; } }\n .card {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 20px;\n }\n h2 { font-size: 15px; font-weight: 600; margin-bottom: 16px; display: flex; align-items: center; justify-content: space-between; }\n .field { margin-bottom: 16px; }\n label { display: block; font-size: 12px; font-weight: 500; margin-bottom: 6px; color: var(--text); }\n .meta { font-size: 11px; color: var(--muted); font-family: monospace; margin-top: 4px; }\n .input-row { display: flex; gap: 8px; align-items: center; }\n input[type=\"text\"], select {\n flex: 1;\n background: #1e1e1e;\n border: 1px solid var(--border);\n color: var(--text);\n padding: 8px 12px;\n font-size: 13px;\n border-radius: 6px;\n outline: none;\n }\n input[type=\"color\"] {\n -webkit-appearance: none;\n border: 1px solid var(--border);\n width: 38px;\n height: 38px;\n border-radius: 6px;\n background: none;\n cursor: pointer;\n padding: 2px;\n }\n .btn-save {\n background: var(--text);\n color: var(--bg);\n border: none;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n .btn-save:hover { opacity: 0.9; }\n .preview-box {\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 20px;\n background: #0f0f0f;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n .preview-btn {\n padding: 10px 18px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-primary, #3182f6);\n color: #ffffff;\n border: none;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n }\n .preview-card {\n padding: 16px;\n border-radius: var(--sample-radius, 8px);\n background: var(--sample-surface, #18181b);\n border: 1px solid var(--border);\n color: var(--text);\n font-size: 13px;\n }\n .toast {\n position: fixed;\n bottom: 24px;\n right: 24px;\n background: #10b981;\n color: #000;\n padding: 10px 18px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n box-shadow: 0 4px 12px rgba(0,0,0,0.5);\n display: none;\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <header>\n <div>\n <div class=\"badge\" style=\"margin-bottom: 8px; display: inline-block;\">W3C DTCG Zero-Runtime</div>\n <h1>AtomSystem Local Token Studio</h1>\n <p class=\"desc\">๋กœ์ปฌ ํ™˜๊ฒฝ(tokens/token.json)์˜ ํ† ํฐ์„ GUI๋กœ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ css/atom-ui.css๋กœ ์žฌ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.</p>\n </div>\n <button class=\"btn-save\" onclick=\"saveTokens()\">์ €์žฅ ๋ฐ CSS ์žฌ์ปดํŒŒ์ผ</button>\n </header>\n\n <div class=\"grid\">\n <!-- 1. Color Tokens -->\n <div class=\"card\">\n <h2>๐ŸŽจ ์‹œ๋งจํ‹ฑ ๋ธŒ๋žœ๋“œ & ์„œํ”ผ์Šค ํ† ํฐ</h2>\n \n <div class=\"field\">\n <label>๋ธŒ๋žœ๋“œ ๋Œ€ํ‘œ ์ƒ‰์ƒ (Primary Color)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary\" oninput=\"onColorChange('primary', this.value)\">\n <input type=\"text\" id=\"val-primary\" oninput=\"onColorChange('primary', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary)</div>\n </div>\n\n <div class=\"field\">\n <label>ํ˜ธ๋ฒ„ ์ƒํƒœ ์ƒ‰์ƒ (Primary Hover)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n <input type=\"text\" id=\"val-primary-hover\" oninput=\"onColorChange('primary-hover', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-color-primary-hover)</div>\n </div>\n\n <div class=\"field\">\n <label>์„œํ”ผ์Šค ๋ฐฐ๊ฒฝ (Surface Background)</label>\n <div class=\"input-row\">\n <input type=\"color\" id=\"picker-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n <input type=\"text\" id=\"val-bg-surface\" oninput=\"onColorChange('bg-surface', this.value)\">\n </div>\n <div class=\"meta\">var(--atom-bg-surface)</div>\n </div>\n\n <div class=\"field\">\n <label>๊ธฐ๋ณธ ๋ชจ์„œ๋ฆฌ ๊ณก๋ฅ  (Border Radius)</label>\n <select id=\"val-radius\" onchange=\"onRadiusChange(this.value)\">\n <option value=\"4px\">4px (Sharp Minimal)</option>\n <option value=\"6px\">6px (Swiss Modern)</option>\n <option value=\"8px\">8px (Standard Clean)</option>\n <option value=\"12px\">12px (Rounded Friendly)</option>\n <option value=\"16px\">16px (Toss Soft)</option>\n </select>\n <div class=\"meta\">var(--atom-radius-md)</div>\n </div>\n </div>\n\n <!-- 2. Live Previewer -->\n <div class=\"card\">\n <h2>โšก ์‹ค์‹œ๊ฐ„ ํ† ํฐ ๋ฐ˜์˜ ํ”„๋ฆฌ๋ทฐ</h2>\n <div class=\"preview-box\" id=\"preview-box\">\n <div class=\"preview-card\" id=\"sample-card\">\n <div style=\"font-weight: 600; margin-bottom: 4px;\">๋Œ€์‹œ๋ณด๋“œ ์œ„์ ฏ ์ปดํฌ๋„ŒํŠธ</div>\n <div style=\"color: var(--muted); font-size: 12px; margin-bottom: 14px;\">\n ํ† ํฐ ๋ณ€๊ฒฝ ์‹œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋””์ž์ธ์ด ๋ฐ˜์˜๋˜๋ฉฐ ์ฆ‰์‹œ CSS ํŒŒ์ผ์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.\n </div>\n <button class=\"preview-btn\" id=\"sample-btn\">ํ™•์ธ ๋ฐ ์Šน์ธ</button>\n </div>\n\n <div style=\"font-size: 11px; font-family: monospace; color: var(--muted); background: #161616; padding: 12px; border-radius: 6px; border: 1px solid var(--border);\">\n <div>// ์ปดํŒŒ์ผ ๋Œ€์ƒ ํŒŒ์ผ</div>\n <div style=\"color: #60a5fa; margin-top: 4px;\">tokens/token.json (W3C DTCG)</div>\n <div style=\"color: #34d399; margin-top: 2px;\">css/atom-ui.css (0KB Pure CSS)</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div id=\"toast\" class=\"toast\">โœ“ ํ† ํฐ ๋ฐ CSS๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ์ปดํŒŒ์ผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!</div>\n\n <script>\n let currentTokens = {};\n\n async function loadTokens() {\n try {\n const res = await fetch('/api/tokens');\n currentTokens = await res.json();\n populateFields();\n updatePreview();\n } catch (e) {\n console.error('Failed to fetch tokens', e);\n }\n }\n\n function populateFields() {\n const primary = currentTokens?.color?.brand?.['color-primary']?.$value || '#3182f6';\n const hover = currentTokens?.color?.brand?.['color-primary-hover']?.$value || '#1b64da';\n const surface = currentTokens?.color?.surface?.['bg-surface']?.$value || '#18181b';\n const radius = currentTokens?.borderRadius?.md?.$value || '8px';\n\n document.getElementById('picker-primary').value = primary.startsWith('#') ? primary : '#3182f6';\n document.getElementById('val-primary').value = primary;\n\n document.getElementById('picker-primary-hover').value = hover.startsWith('#') ? hover : '#1b64da';\n document.getElementById('val-primary-hover').value = hover;\n\n document.getElementById('picker-bg-surface').value = surface.startsWith('#') ? surface : '#18181b';\n document.getElementById('val-bg-surface').value = surface;\n\n document.getElementById('val-radius').value = radius;\n }\n\n function onColorChange(key, val) {\n if (!currentTokens.color) currentTokens.color = {};\n if (key === 'primary') {\n document.getElementById('picker-primary').value = val.startsWith('#') ? val : '#3182f6';\n document.getElementById('val-primary').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary']) currentTokens.color.brand['color-primary'] = { variable: '--atom-color-primary' };\n currentTokens.color.brand['color-primary'].$value = val;\n }\n if (key === 'primary-hover') {\n document.getElementById('picker-primary-hover').value = val.startsWith('#') ? val : '#1b64da';\n document.getElementById('val-primary-hover').value = val;\n if (!currentTokens.color.brand) currentTokens.color.brand = {};\n if (!currentTokens.color.brand['color-primary-hover']) currentTokens.color.brand['color-primary-hover'] = { variable: '--atom-color-primary-hover' };\n currentTokens.color.brand['color-primary-hover'].$value = val;\n }\n if (key === 'bg-surface') {\n document.getElementById('picker-bg-surface').value = val.startsWith('#') ? val : '#18181b';\n document.getElementById('val-bg-surface').value = val;\n if (!currentTokens.color.surface) currentTokens.color.surface = {};\n if (!currentTokens.color.surface['bg-surface']) currentTokens.color.surface['bg-surface'] = { variable: '--atom-bg-surface' };\n currentTokens.color.surface['bg-surface'].$value = val;\n }\n updatePreview();\n }\n\n function onRadiusChange(val) {\n if (!currentTokens.borderRadius) currentTokens.borderRadius = {};\n if (!currentTokens.borderRadius.md) currentTokens.borderRadius.md = { variable: '--atom-radius-md' };\n currentTokens.borderRadius.md.$value = val;\n updatePreview();\n }\n\n function updatePreview() {\n const primary = document.getElementById('val-primary').value;\n const surface = document.getElementById('val-bg-surface').value;\n const radius = document.getElementById('val-radius').value;\n\n const btn = document.getElementById('sample-btn');\n const card = document.getElementById('sample-card');\n\n btn.style.backgroundColor = primary;\n btn.style.borderRadius = radius;\n card.style.backgroundColor = surface;\n card.style.borderRadius = radius;\n }\n\n async function saveTokens() {\n try {\n const res = await fetch('/api/tokens', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(currentTokens)\n });\n const result = await res.json();\n if (result.success) {\n showToast();\n } else {\n alert('์ €์žฅ ์‹คํŒจ: ' + result.error);\n }\n } catch (e) {\n alert('์„œ๋ฒ„ ํ†ต์‹  ์˜ค๋ฅ˜: ' + e.message);\n }\n }\n\n function showToast() {\n const toast = document.getElementById('toast');\n toast.style.display = 'block';\n setTimeout(() => { toast.style.display = 'none'; }, 2500);\n }\n\n loadTokens();\n </script>\n</body>\n</html>`;\n}\n","#!/usr/bin/env node\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { startLocalTokenStudio } from './studioServer';\nimport { compileTokensToCss } from './tokenCompiler';\n\nfunction getPkgRoot(): string {\n try {\n if (typeof __dirname !== 'undefined') {\n return path.resolve(__dirname, '..');\n }\n const currentFile = fileURLToPath(import.meta.url);\n return path.resolve(path.dirname(currentFile), '..');\n } catch {\n return process.cwd();\n }\n}\n\nconst PKG_ROOT = getPkgRoot();\nconst args = process.argv.slice(2);\nconst command = args[0] || 'help';\nconst targetName = args[1];\n\nfunction copyFileSafe(src: string, dest: string, label: string) {\n const targetDir = path.dirname(dest);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.copyFileSync(src, dest);\n console.log(` โœ“ ${label} -> ${path.relative(process.cwd(), dest)}`);\n}\n\nfunction handleInit() {\n const cwd = process.cwd();\n console.log('\\n๐Ÿš€ Initializing AtomSystem Universal Design System...\\n');\n\n // 1. AI Assistant Master Guidelines (Multi-agent SSOT)\n const srcAgentGuide = path.join(PKG_ROOT, 'presets', 'agents.guide.md');\n if (fs.existsSync(srcAgentGuide)) {\n // AGENTS.md (Universal)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'AGENTS.md'), 'Universal AI Guide (AGENTS.md)');\n // CLAUDE.md (Claude Code)\n copyFileSafe(srcAgentGuide, path.join(cwd, 'CLAUDE.md'), 'Claude Code Guidelines (CLAUDE.md)');\n // .cursorrules (Cursor IDE)\n copyFileSafe(srcAgentGuide, path.join(cwd, '.cursorrules'), 'Cursor Rules (.cursorrules)');\n }\n\n // 2. Install AI Agent Skill\n const srcSkill = path.join(PKG_ROOT, 'skills', 'atomsystem.skill.md');\n if (fs.existsSync(srcSkill)) {\n copyFileSafe(srcSkill, path.join(cwd, '.agents', 'skills', 'atomsystem', 'SKILL.md'), 'Agent Skill (.agents/skills/atomsystem/SKILL.md)');\n }\n\n // 3. Install 4-Tier Specifications\n const specs = [\n { src: path.join(PKG_ROOT, 'presets', 'default.design.md'), dest: path.join(cwd, 'atom.design.md'), label: 'Design Tokens (atom.design.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'components.md'), dest: path.join(cwd, 'atom.components.md'), label: 'Components Spec (atom.components.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'blocks.md'), dest: path.join(cwd, 'atom.blocks.md'), label: 'Design Blocks Spec (atom.blocks.md)' },\n { src: path.join(PKG_ROOT, 'presets', 'uxPattern.md'), dest: path.join(cwd, 'atom.uxPattern.md'), label: 'UX Patterns (atom.uxPattern.md)' },\n ];\n\n specs.forEach((s) => {\n if (fs.existsSync(s.src)) {\n copyFileSafe(s.src, s.dest, s.label);\n }\n });\n\n // 4. Install Token JSON & Zero-Runtime CSS\n const srcToken = path.join(PKG_ROOT, 'tokens', 'token.json');\n if (fs.existsSync(srcToken)) {\n copyFileSafe(srcToken, path.join(cwd, 'tokens', 'token.json'), 'W3C DTCG Token JSON (tokens/token.json)');\n }\n\n const srcCss = path.join(PKG_ROOT, 'css', 'atom-ui.css');\n if (fs.existsSync(srcCss)) {\n copyFileSafe(srcCss, path.join(cwd, 'css', 'atom-ui.css'), 'Zero-Runtime Semantic CSS (css/atom-ui.css)');\n }\n\n console.log('\\nโœจ AtomSystem initialization completed successfully!');\n console.log('\\n๐ŸŽจ Local Token Studio Available:');\n console.log(' Run \"npx atomsystem studio\" to launch the local web customizer GUI.');\n console.log(' You can visually edit tokens and immediately recompile css/atom-ui.css.');\n console.log('\\n๐Ÿ“Œ How AI Coding Works Now:');\n console.log(' Any AI assistant (Claude Code, Cursor, Copilot, Antigravity) will now');\n console.log(' AUTOMATICALLY detect the design tokens, components, and UX patterns.');\n console.log('\\n๐Ÿ“Œ You can now ask your AI:');\n console.log(' \"๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด์— ์‹ค์‹œ๊ฐ„ ์ฐจํŠธ์™€ ๊ฐ€๊ฒฉ ์ •์ฑ… ๋ธ”๋ก์„ ๋ ˆ๊ณ ์ฒ˜๋Ÿผ ์กฐ๋ฆฝํ•ด์ค˜.\"');\n console.log(' \"atom.design.md์˜ ์ƒ‰์ƒ ํ† ํฐ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ์ œ ํ™•์ธ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ค์–ด์ค˜.\"\\n');\n}\n\nconst COMPONENT_MAP: Record<string, string> = {\n button: 'Button.tsx',\n card: 'Card.tsx',\n badge: 'Badge.tsx',\n input: 'Input.tsx',\n table: 'Table.tsx',\n tabs: 'Tabs.tsx',\n switch: 'Switch.tsx',\n modal: 'Modal.tsx',\n container: 'Container.tsx',\n layout: 'Layout.tsx',\n};\n\nconst BLOCK_MAP: Record<string, { file: string; deps: string[] }> = {\n 'realtime-chart': { file: 'RealtimeChartBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'interactive-chat': { file: 'InteractiveChatBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'pricing-table': { file: 'PricingPlanBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'card-list': { file: 'CardListBlock.tsx', deps: ['card', 'input', 'button', 'badge'] },\n 'interactive-slider': { file: 'SliderShowcaseBlock.tsx', deps: ['card', 'button', 'badge'] },\n 'metric-stats': { file: 'MetricStatsBlock.tsx', deps: ['card', 'badge'] },\n 'file-explorer': { file: 'FileExplorerBlock.tsx', deps: ['card', 'button', 'badge'] },\n};\n\nfunction handleAdd(name?: string) {\n if (!name) {\n console.error('\\nโŒ Please specify an item to add. Example: npx atomsystem add button\\n');\n handleList();\n return;\n }\n\n const cwd = process.cwd();\n const normalized = name.toLowerCase().trim();\n\n // 1. Check if it's a component\n if (COMPONENT_MAP[normalized]) {\n const fileName = COMPONENT_MAP[normalized];\n const src = path.join(PKG_ROOT, 'components', 'ui', fileName);\n const dest = path.join(cwd, 'components', 'ui', fileName);\n if (fs.existsSync(src)) {\n copyFileSafe(src, dest, `Component (${fileName})`);\n console.log(`\\nโœ… Added ${normalized} component to components/ui/${fileName}\\n`);\n } else {\n console.error(`\\nโŒ Source component file not found: ${src}\\n`);\n }\n return;\n }\n\n // 2. Check if it's a block\n if (BLOCK_MAP[normalized]) {\n const { file, deps } = BLOCK_MAP[normalized];\n console.log(`\\n๐Ÿ“ฆ Adding block \"${normalized}\" and its dependent components...\\n`);\n\n // Copy dependencies first (Component-First rule)\n deps.forEach((dep) => {\n const depFile = COMPONENT_MAP[dep];\n if (depFile) {\n const srcDep = path.join(PKG_ROOT, 'components', 'ui', depFile);\n const destDep = path.join(cwd, 'components', 'ui', depFile);\n if (fs.existsSync(srcDep)) {\n copyFileSafe(srcDep, destDep, `Dependent Component (${depFile})`);\n }\n }\n });\n\n // Copy block file\n const srcBlock = path.join(PKG_ROOT, 'components', 'blocks', file);\n const destBlock = path.join(cwd, 'components', 'blocks', file);\n if (fs.existsSync(srcBlock)) {\n copyFileSafe(srcBlock, destBlock, `Block (${file})`);\n console.log(`\\nโœ… Block \"${normalized}\" successfully added to components/blocks/${file}\\n`);\n } else {\n console.error(`\\nโŒ Source block file not found: ${srcBlock}\\n`);\n }\n return;\n }\n\n console.error(`\\nโŒ Unknown item: \"${name}\".`);\n handleList();\n}\n\nfunction handleList() {\n console.log(`\nAvailable Components:\n - button (Button, ButtonVariants)\n - card (Card container)\n - badge (Status badge)\n - input (Input with status)\n - table (Table, Header, Row, Cell)\n - tabs (TabsList, TabsTrigger)\n - switch (A11y Switch toggle)\n - modal (Dialog with Esc key support)\n\nAvailable Design Blocks:\n - realtime-chart (Live streaming candlestick/line chart)\n - interactive-chat (AI chatbot feed with suggestions)\n - pricing-table (Monthly/annual tier pricing table)\n - card-list (Responsive grid & list filter)\n - interactive-slider (Cost simulation calculator & carousel)\n - metric-stats (4 KPI executive metric cards)\n - file-explorer (Hierarchical directory tree explorer)\n\nInstall any item:\n npx atomsystem add <item-name>\n`);\n}\n\nfunction handleBuildTokens() {\n const cwd = process.cwd();\n const tokenJsonPath = path.join(cwd, 'tokens', 'token.json');\n const cssPath = path.join(cwd, 'css', 'atom-ui.css');\n\n if (!fs.existsSync(tokenJsonPath)) {\n console.error(`\\nโŒ tokens/token.json not found at ${tokenJsonPath}. Run 'npx atomsystem init' first.\\n`);\n return;\n }\n\n try {\n const tokens = JSON.parse(fs.readFileSync(tokenJsonPath, 'utf-8'));\n const css = compileTokensToCss(tokens);\n const cssDir = path.dirname(cssPath);\n if (!fs.existsSync(cssDir)) fs.mkdirSync(cssDir, { recursive: true });\n fs.writeFileSync(cssPath, css, 'utf-8');\n console.log(`\\nโœจ Successfully compiled tokens to ${path.relative(cwd, cssPath)}!\\n`);\n } catch (err: any) {\n console.error(`\\nโŒ Failed to compile tokens: ${err.message}\\n`);\n }\n}\n\nfunction handleStudio() {\n const portArg = args.find((a) => a.startsWith('--port='));\n const port = portArg ? parseInt(portArg.split('=')[1], 10) : 4000;\n startLocalTokenStudio({ port, cwd: process.cwd() });\n}\n\nfunction showHelp() {\n console.log(`\nAtomSystem CLI - Universal Design Token & Agentic UI System\n\nUsage:\n npx atomsystem <command> [options]\n\nCommands:\n init Initialize AI guidelines, tokens, specs, and CSS in your project\n studio Launch Local Web Token Studio GUI (interactive token customizer)\n build:tokens Compile tokens/token.json into zero-runtime css/atom-ui.css\n add <name> Add a component or block directly to your project\n list List all available components and blocks\n help Display this help message\n version Print version info\n\nOptions for studio:\n --port=<port> Port for the local studio server (default: 4000)\n`);\n}\n\nfunction showVersion() {\n const pkgPath = path.join(PKG_ROOT, 'package.json');\n if (fs.existsSync(pkgPath)) {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n console.log(`atomsystem v${pkg.version}`);\n } else {\n console.log('atomsystem v0.5.1');\n }\n}\n\nswitch (command) {\n case 'init':\n handleInit();\n break;\n case 'studio':\n case 'editor':\n handleStudio();\n break;\n case 'build:tokens':\n case 'compile':\n handleBuildTokens();\n break;\n case 'add':\n handleAdd(targetName);\n break;\n case 'list':\n handleList();\n break;\n case 'version':\n case '-v':\n case '--version':\n showVersion();\n break;\n case 'help':\n case '-h':\n case '--help':\n default:\n showHelp();\n break;\n}\n"]}