@guidekit/cli 0.1.0-beta.1 → 0.1.0-beta.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 GuideKit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/cli.js CHANGED
@@ -106,9 +106,9 @@ import { createSessionToken } from '@guidekit/server';
106
106
  export async function POST() {
107
107
  const token = await createSessionToken({
108
108
  signingSecret: process.env.GUIDEKIT_SECRET!,
109
- geminiKey: process.env.GEMINI_KEY!,
110
- deepgramKey: process.env.DEEPGRAM_KEY,
111
- elevenlabsKey: process.env.ELEVENLABS_KEY,
109
+ llmApiKey: process.env.LLM_API_KEY!,
110
+ sttApiKey: process.env.STT_API_KEY,
111
+ ttsApiKey: process.env.TTS_API_KEY,
112
112
  expiresIn: '15m',
113
113
  });
114
114
 
@@ -131,9 +131,9 @@ export default async function handler(
131
131
 
132
132
  const token = await createSessionToken({
133
133
  signingSecret: process.env.GUIDEKIT_SECRET!,
134
- geminiKey: process.env.GEMINI_KEY!,
135
- deepgramKey: process.env.DEEPGRAM_KEY,
136
- elevenlabsKey: process.env.ELEVENLABS_KEY,
134
+ llmApiKey: process.env.LLM_API_KEY!,
135
+ sttApiKey: process.env.STT_API_KEY,
136
+ ttsApiKey: process.env.TTS_API_KEY,
137
137
  expiresIn: '15m',
138
138
  });
139
139
 
@@ -147,9 +147,9 @@ import { createSessionToken } from '@guidekit/server';
147
147
  export async function handleTokenRequest(req: any, res: any) {
148
148
  const token = await createSessionToken({
149
149
  signingSecret: process.env.GUIDEKIT_SECRET!,
150
- geminiKey: process.env.GEMINI_KEY!,
151
- deepgramKey: process.env.DEEPGRAM_KEY,
152
- elevenlabsKey: process.env.ELEVENLABS_KEY,
150
+ llmApiKey: process.env.LLM_API_KEY!,
151
+ sttApiKey: process.env.STT_API_KEY,
152
+ ttsApiKey: process.env.TTS_API_KEY,
153
153
  expiresIn: '15m',
154
154
  });
155
155
 
@@ -211,11 +211,11 @@ function envTemplate() {
211
211
  GUIDEKIT_SECRET=
212
212
 
213
213
  # LLM Provider (required)
214
- GEMINI_KEY=
214
+ LLM_API_KEY=
215
215
 
216
216
  # Voice Providers (optional \u2014 for voice mode)
217
- DEEPGRAM_KEY=
218
- ELEVENLABS_KEY=
217
+ STT_API_KEY=
218
+ TTS_API_KEY=
219
219
  `;
220
220
  }
221
221
  function getTokenEndpointPath(root, framework) {
@@ -278,7 +278,7 @@ async function runInit() {
278
278
  success(`Created ${c.dim}${path2.relative(root, envPath)}${c.reset}`);
279
279
  }
280
280
  } else {
281
- info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and GEMINI_KEY are set");
281
+ info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and LLM_API_KEY are set");
282
282
  }
283
283
  if (authMode === 0) {
284
284
  const tokenPath = getTokenEndpointPath(root, framework);
@@ -352,45 +352,45 @@ function checkGuidekitSecret() {
352
352
  }
353
353
  return { name: "GUIDEKIT_SECRET", status: "ok", message: "Set and valid length" };
354
354
  }
355
- function checkGeminiKey() {
356
- const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
355
+ function checkLlmApiKey() {
356
+ const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
357
357
  if (!key) {
358
358
  return {
359
- name: "Gemini API Key",
359
+ name: "LLM API Key",
360
360
  status: "warn",
361
- message: "Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
361
+ message: "Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
362
362
  };
363
363
  }
364
364
  if (!key.startsWith("AI") && key.length < 20) {
365
365
  return {
366
- name: "Gemini API Key",
366
+ name: "LLM API Key",
367
367
  status: "warn",
368
- message: "Key format looks unusual. Verify at https://aistudio.google.com/apikey"
368
+ message: "Key format looks unusual. Verify with your LLM provider."
369
369
  };
370
370
  }
371
- return { name: "Gemini API Key", status: "ok", message: "Found" };
371
+ return { name: "LLM API Key", status: "ok", message: "Found" };
372
372
  }
373
- function checkDeepgramKey() {
374
- const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
373
+ function checkSttApiKey() {
374
+ const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
375
375
  if (!key) {
376
376
  return {
377
- name: "Deepgram API Key",
377
+ name: "STT API Key",
378
378
  status: "skip",
379
379
  message: "Not set (optional \u2014 required for voice/STT)"
380
380
  };
381
381
  }
382
- return { name: "Deepgram API Key", status: "ok", message: "Found" };
382
+ return { name: "STT API Key", status: "ok", message: "Found" };
383
383
  }
384
- function checkElevenlabsKey() {
385
- const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
384
+ function checkTtsApiKey() {
385
+ const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
386
386
  if (!key) {
387
387
  return {
388
- name: "ElevenLabs API Key",
388
+ name: "TTS API Key",
389
389
  status: "skip",
390
390
  message: "Not set (optional \u2014 required for voice/TTS)"
391
391
  };
392
392
  }
393
- return { name: "ElevenLabs API Key", status: "ok", message: "Found" };
393
+ return { name: "TTS API Key", status: "ok", message: "Found" };
394
394
  }
395
395
  function checkPackageInstalled(root, pkg) {
396
396
  const pkgPath = path2.join(root, "package.json");
@@ -458,9 +458,9 @@ async function runDoctor() {
458
458
  results.push(checkEnvFile(root));
459
459
  results.push(checkGitignore(root));
460
460
  results.push(checkGuidekitSecret());
461
- results.push(checkGeminiKey());
462
- results.push(checkDeepgramKey());
463
- results.push(checkElevenlabsKey());
461
+ results.push(checkLlmApiKey());
462
+ results.push(checkSttApiKey());
463
+ results.push(checkTtsApiKey());
464
464
  log(`${c.bold}Packages${c.reset}`);
465
465
  results.push(checkPackageInstalled(root, "@guidekit/core"));
466
466
  results.push(checkPackageInstalled(root, "@guidekit/react"));
@@ -521,7 +521,7 @@ async function runGenerateSecret() {
521
521
  }
522
522
 
523
523
  // src/cli.ts
524
- var VERSION = "0.1.0";
524
+ var VERSION = "0.1.0-beta.2";
525
525
  var HELP = `
526
526
  ${c.bold}guidekit${c.reset} \u2014 CLI tools for GuideKit SDK
527
527
 
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["path","path3"],"mappings":"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","file":"cli.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nGEMINI_KEY=\n\n# Voice Providers (optional — for voice mode)\nDEEPGRAM_KEY=\nELEVENLABS_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and GEMINI_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkGeminiKey(): CheckResult {\n const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify at https://aistudio.google.com/apikey',\n };\n }\n return { name: 'Gemini API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkDeepgramKey(): CheckResult {\n const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'Deepgram API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'Deepgram API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkElevenlabsKey(): CheckResult {\n const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'ElevenLabs API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'ElevenLabs API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkGeminiKey());\n results.push(checkDeepgramKey());\n results.push(checkElevenlabsKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["path","path3"],"mappings":"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","file":"cli.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nLLM_API_KEY=\n\n# Voice Providers (optional — for voice mode)\nSTT_API_KEY=\nTTS_API_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and LLM_API_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkLlmApiKey(): CheckResult {\n const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify with your LLM provider.',\n };\n }\n return { name: 'LLM API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkSttApiKey(): CheckResult {\n const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'STT API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'STT API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkTtsApiKey(): CheckResult {\n const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'TTS API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'TTS API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkLlmApiKey());\n results.push(checkSttApiKey());\n results.push(checkTtsApiKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0-beta.2';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
package/dist/index.cjs CHANGED
@@ -130,9 +130,9 @@ import { createSessionToken } from '@guidekit/server';
130
130
  export async function POST() {
131
131
  const token = await createSessionToken({
132
132
  signingSecret: process.env.GUIDEKIT_SECRET!,
133
- geminiKey: process.env.GEMINI_KEY!,
134
- deepgramKey: process.env.DEEPGRAM_KEY,
135
- elevenlabsKey: process.env.ELEVENLABS_KEY,
133
+ llmApiKey: process.env.LLM_API_KEY!,
134
+ sttApiKey: process.env.STT_API_KEY,
135
+ ttsApiKey: process.env.TTS_API_KEY,
136
136
  expiresIn: '15m',
137
137
  });
138
138
 
@@ -155,9 +155,9 @@ export default async function handler(
155
155
 
156
156
  const token = await createSessionToken({
157
157
  signingSecret: process.env.GUIDEKIT_SECRET!,
158
- geminiKey: process.env.GEMINI_KEY!,
159
- deepgramKey: process.env.DEEPGRAM_KEY,
160
- elevenlabsKey: process.env.ELEVENLABS_KEY,
158
+ llmApiKey: process.env.LLM_API_KEY!,
159
+ sttApiKey: process.env.STT_API_KEY,
160
+ ttsApiKey: process.env.TTS_API_KEY,
161
161
  expiresIn: '15m',
162
162
  });
163
163
 
@@ -171,9 +171,9 @@ import { createSessionToken } from '@guidekit/server';
171
171
  export async function handleTokenRequest(req: any, res: any) {
172
172
  const token = await createSessionToken({
173
173
  signingSecret: process.env.GUIDEKIT_SECRET!,
174
- geminiKey: process.env.GEMINI_KEY!,
175
- deepgramKey: process.env.DEEPGRAM_KEY,
176
- elevenlabsKey: process.env.ELEVENLABS_KEY,
174
+ llmApiKey: process.env.LLM_API_KEY!,
175
+ sttApiKey: process.env.STT_API_KEY,
176
+ ttsApiKey: process.env.TTS_API_KEY,
177
177
  expiresIn: '15m',
178
178
  });
179
179
 
@@ -235,11 +235,11 @@ function envTemplate() {
235
235
  GUIDEKIT_SECRET=
236
236
 
237
237
  # LLM Provider (required)
238
- GEMINI_KEY=
238
+ LLM_API_KEY=
239
239
 
240
240
  # Voice Providers (optional \u2014 for voice mode)
241
- DEEPGRAM_KEY=
242
- ELEVENLABS_KEY=
241
+ STT_API_KEY=
242
+ TTS_API_KEY=
243
243
  `;
244
244
  }
245
245
  function getTokenEndpointPath(root, framework) {
@@ -302,7 +302,7 @@ async function runInit() {
302
302
  success(`Created ${c.dim}${path2__namespace.relative(root, envPath)}${c.reset}`);
303
303
  }
304
304
  } else {
305
- info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and GEMINI_KEY are set");
305
+ info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and LLM_API_KEY are set");
306
306
  }
307
307
  if (authMode === 0) {
308
308
  const tokenPath = getTokenEndpointPath(root, framework);
@@ -376,45 +376,45 @@ function checkGuidekitSecret() {
376
376
  }
377
377
  return { name: "GUIDEKIT_SECRET", status: "ok", message: "Set and valid length" };
378
378
  }
379
- function checkGeminiKey() {
380
- const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
379
+ function checkLlmApiKey() {
380
+ const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
381
381
  if (!key) {
382
382
  return {
383
- name: "Gemini API Key",
383
+ name: "LLM API Key",
384
384
  status: "warn",
385
- message: "Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
385
+ message: "Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
386
386
  };
387
387
  }
388
388
  if (!key.startsWith("AI") && key.length < 20) {
389
389
  return {
390
- name: "Gemini API Key",
390
+ name: "LLM API Key",
391
391
  status: "warn",
392
- message: "Key format looks unusual. Verify at https://aistudio.google.com/apikey"
392
+ message: "Key format looks unusual. Verify with your LLM provider."
393
393
  };
394
394
  }
395
- return { name: "Gemini API Key", status: "ok", message: "Found" };
395
+ return { name: "LLM API Key", status: "ok", message: "Found" };
396
396
  }
397
- function checkDeepgramKey() {
398
- const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
397
+ function checkSttApiKey() {
398
+ const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
399
399
  if (!key) {
400
400
  return {
401
- name: "Deepgram API Key",
401
+ name: "STT API Key",
402
402
  status: "skip",
403
403
  message: "Not set (optional \u2014 required for voice/STT)"
404
404
  };
405
405
  }
406
- return { name: "Deepgram API Key", status: "ok", message: "Found" };
406
+ return { name: "STT API Key", status: "ok", message: "Found" };
407
407
  }
408
- function checkElevenlabsKey() {
409
- const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
408
+ function checkTtsApiKey() {
409
+ const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
410
410
  if (!key) {
411
411
  return {
412
- name: "ElevenLabs API Key",
412
+ name: "TTS API Key",
413
413
  status: "skip",
414
414
  message: "Not set (optional \u2014 required for voice/TTS)"
415
415
  };
416
416
  }
417
- return { name: "ElevenLabs API Key", status: "ok", message: "Found" };
417
+ return { name: "TTS API Key", status: "ok", message: "Found" };
418
418
  }
419
419
  function checkPackageInstalled(root, pkg) {
420
420
  const pkgPath = path2__namespace.join(root, "package.json");
@@ -482,9 +482,9 @@ async function runDoctor() {
482
482
  results.push(checkEnvFile(root));
483
483
  results.push(checkGitignore(root));
484
484
  results.push(checkGuidekitSecret());
485
- results.push(checkGeminiKey());
486
- results.push(checkDeepgramKey());
487
- results.push(checkElevenlabsKey());
485
+ results.push(checkLlmApiKey());
486
+ results.push(checkSttApiKey());
487
+ results.push(checkTtsApiKey());
488
488
  log(`${c.bold}Packages${c.reset}`);
489
489
  results.push(checkPackageInstalled(root, "@guidekit/core"));
490
490
  results.push(checkPackageInstalled(root, "@guidekit/react"));
@@ -545,7 +545,7 @@ async function runGenerateSecret() {
545
545
  }
546
546
 
547
547
  // src/cli.ts
548
- var VERSION = "0.1.0";
548
+ var VERSION = "0.1.0-beta.2";
549
549
  var HELP = `
550
550
  ${c.bold}guidekit${c.reset} \u2014 CLI tools for GuideKit SDK
551
551
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["readline","stdin","stdout","fs","path","path2","path3","generateSecret"],"mappings":"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","file":"index.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nGEMINI_KEY=\n\n# Voice Providers (optional — for voice mode)\nDEEPGRAM_KEY=\nELEVENLABS_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and GEMINI_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkGeminiKey(): CheckResult {\n const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify at https://aistudio.google.com/apikey',\n };\n }\n return { name: 'Gemini API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkDeepgramKey(): CheckResult {\n const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'Deepgram API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'Deepgram API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkElevenlabsKey(): CheckResult {\n const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'ElevenLabs API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'ElevenLabs API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkGeminiKey());\n results.push(checkDeepgramKey());\n results.push(checkElevenlabsKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["readline","stdin","stdout","fs","path","path2","path3","generateSecret"],"mappings":"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","file":"index.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nLLM_API_KEY=\n\n# Voice Providers (optional — for voice mode)\nSTT_API_KEY=\nTTS_API_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and LLM_API_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkLlmApiKey(): CheckResult {\n const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify with your LLM provider.',\n };\n }\n return { name: 'LLM API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkSttApiKey(): CheckResult {\n const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'STT API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'STT API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkTtsApiKey(): CheckResult {\n const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'TTS API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'TTS API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkLlmApiKey());\n results.push(checkSttApiKey());\n results.push(checkTtsApiKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0-beta.2';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
package/dist/index.js CHANGED
@@ -106,9 +106,9 @@ import { createSessionToken } from '@guidekit/server';
106
106
  export async function POST() {
107
107
  const token = await createSessionToken({
108
108
  signingSecret: process.env.GUIDEKIT_SECRET!,
109
- geminiKey: process.env.GEMINI_KEY!,
110
- deepgramKey: process.env.DEEPGRAM_KEY,
111
- elevenlabsKey: process.env.ELEVENLABS_KEY,
109
+ llmApiKey: process.env.LLM_API_KEY!,
110
+ sttApiKey: process.env.STT_API_KEY,
111
+ ttsApiKey: process.env.TTS_API_KEY,
112
112
  expiresIn: '15m',
113
113
  });
114
114
 
@@ -131,9 +131,9 @@ export default async function handler(
131
131
 
132
132
  const token = await createSessionToken({
133
133
  signingSecret: process.env.GUIDEKIT_SECRET!,
134
- geminiKey: process.env.GEMINI_KEY!,
135
- deepgramKey: process.env.DEEPGRAM_KEY,
136
- elevenlabsKey: process.env.ELEVENLABS_KEY,
134
+ llmApiKey: process.env.LLM_API_KEY!,
135
+ sttApiKey: process.env.STT_API_KEY,
136
+ ttsApiKey: process.env.TTS_API_KEY,
137
137
  expiresIn: '15m',
138
138
  });
139
139
 
@@ -147,9 +147,9 @@ import { createSessionToken } from '@guidekit/server';
147
147
  export async function handleTokenRequest(req: any, res: any) {
148
148
  const token = await createSessionToken({
149
149
  signingSecret: process.env.GUIDEKIT_SECRET!,
150
- geminiKey: process.env.GEMINI_KEY!,
151
- deepgramKey: process.env.DEEPGRAM_KEY,
152
- elevenlabsKey: process.env.ELEVENLABS_KEY,
150
+ llmApiKey: process.env.LLM_API_KEY!,
151
+ sttApiKey: process.env.STT_API_KEY,
152
+ ttsApiKey: process.env.TTS_API_KEY,
153
153
  expiresIn: '15m',
154
154
  });
155
155
 
@@ -211,11 +211,11 @@ function envTemplate() {
211
211
  GUIDEKIT_SECRET=
212
212
 
213
213
  # LLM Provider (required)
214
- GEMINI_KEY=
214
+ LLM_API_KEY=
215
215
 
216
216
  # Voice Providers (optional \u2014 for voice mode)
217
- DEEPGRAM_KEY=
218
- ELEVENLABS_KEY=
217
+ STT_API_KEY=
218
+ TTS_API_KEY=
219
219
  `;
220
220
  }
221
221
  function getTokenEndpointPath(root, framework) {
@@ -278,7 +278,7 @@ async function runInit() {
278
278
  success(`Created ${c.dim}${path2.relative(root, envPath)}${c.reset}`);
279
279
  }
280
280
  } else {
281
- info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and GEMINI_KEY are set");
281
+ info(".env file already exists \u2014 make sure GUIDEKIT_SECRET and LLM_API_KEY are set");
282
282
  }
283
283
  if (authMode === 0) {
284
284
  const tokenPath = getTokenEndpointPath(root, framework);
@@ -352,45 +352,45 @@ function checkGuidekitSecret() {
352
352
  }
353
353
  return { name: "GUIDEKIT_SECRET", status: "ok", message: "Set and valid length" };
354
354
  }
355
- function checkGeminiKey() {
356
- const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
355
+ function checkLlmApiKey() {
356
+ const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;
357
357
  if (!key) {
358
358
  return {
359
- name: "Gemini API Key",
359
+ name: "LLM API Key",
360
360
  status: "warn",
361
- message: "Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
361
+ message: "Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM."
362
362
  };
363
363
  }
364
364
  if (!key.startsWith("AI") && key.length < 20) {
365
365
  return {
366
- name: "Gemini API Key",
366
+ name: "LLM API Key",
367
367
  status: "warn",
368
- message: "Key format looks unusual. Verify at https://aistudio.google.com/apikey"
368
+ message: "Key format looks unusual. Verify with your LLM provider."
369
369
  };
370
370
  }
371
- return { name: "Gemini API Key", status: "ok", message: "Found" };
371
+ return { name: "LLM API Key", status: "ok", message: "Found" };
372
372
  }
373
- function checkDeepgramKey() {
374
- const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
373
+ function checkSttApiKey() {
374
+ const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;
375
375
  if (!key) {
376
376
  return {
377
- name: "Deepgram API Key",
377
+ name: "STT API Key",
378
378
  status: "skip",
379
379
  message: "Not set (optional \u2014 required for voice/STT)"
380
380
  };
381
381
  }
382
- return { name: "Deepgram API Key", status: "ok", message: "Found" };
382
+ return { name: "STT API Key", status: "ok", message: "Found" };
383
383
  }
384
- function checkElevenlabsKey() {
385
- const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
384
+ function checkTtsApiKey() {
385
+ const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;
386
386
  if (!key) {
387
387
  return {
388
- name: "ElevenLabs API Key",
388
+ name: "TTS API Key",
389
389
  status: "skip",
390
390
  message: "Not set (optional \u2014 required for voice/TTS)"
391
391
  };
392
392
  }
393
- return { name: "ElevenLabs API Key", status: "ok", message: "Found" };
393
+ return { name: "TTS API Key", status: "ok", message: "Found" };
394
394
  }
395
395
  function checkPackageInstalled(root, pkg) {
396
396
  const pkgPath = path2.join(root, "package.json");
@@ -458,9 +458,9 @@ async function runDoctor() {
458
458
  results.push(checkEnvFile(root));
459
459
  results.push(checkGitignore(root));
460
460
  results.push(checkGuidekitSecret());
461
- results.push(checkGeminiKey());
462
- results.push(checkDeepgramKey());
463
- results.push(checkElevenlabsKey());
461
+ results.push(checkLlmApiKey());
462
+ results.push(checkSttApiKey());
463
+ results.push(checkTtsApiKey());
464
464
  log(`${c.bold}Packages${c.reset}`);
465
465
  results.push(checkPackageInstalled(root, "@guidekit/core"));
466
466
  results.push(checkPackageInstalled(root, "@guidekit/react"));
@@ -521,7 +521,7 @@ async function runGenerateSecret() {
521
521
  }
522
522
 
523
523
  // src/cli.ts
524
- var VERSION = "0.1.0";
524
+ var VERSION = "0.1.0-beta.2";
525
525
  var HELP = `
526
526
  ${c.bold}guidekit${c.reset} \u2014 CLI tools for GuideKit SDK
527
527
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["path","path3"],"mappings":"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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n geminiKey: process.env.GEMINI_KEY!,\n deepgramKey: process.env.DEEPGRAM_KEY,\n elevenlabsKey: process.env.ELEVENLABS_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nGEMINI_KEY=\n\n# Voice Providers (optional — for voice mode)\nDEEPGRAM_KEY=\nELEVENLABS_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and GEMINI_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkGeminiKey(): CheckResult {\n const key = process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Not found (GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'Gemini API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify at https://aistudio.google.com/apikey',\n };\n }\n return { name: 'Gemini API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkDeepgramKey(): CheckResult {\n const key = process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'Deepgram API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'Deepgram API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkElevenlabsKey(): CheckResult {\n const key = process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'ElevenLabs API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'ElevenLabs API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkGeminiKey());\n results.push(checkDeepgramKey());\n results.push(checkElevenlabsKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/generate-secret.ts","../src/cli.ts"],"names":["path","path3"],"mappings":";;;;;;;AAWA,IAAM,aAAA,GACJ,OAAO,OAAA,KAAY,WAAA,IACnB,QAAQ,MAAA,EAAQ,KAAA,IAChB,CAAC,OAAA,CAAQ,GAAA,CAAI,QAAA;AAER,IAAM,CAAA,GAAI;AAAA,EACf,KAAA,EAAO,gBAAgB,SAAA,GAAY,EAAA;AAAA,EACnC,IAAA,EAAM,gBAAgB,SAAA,GAAY,EAAA;AAAA,EAClC,GAAA,EAAK,gBAAgB,SAAA,GAAY,EAAA;AAAA,EACjC,GAAA,EAAK,gBAAgB,UAAA,GAAa,EAAA;AAAA,EAClC,KAAA,EAAO,gBAAgB,UAAA,GAAa,EAAA;AAAA,EACpC,MAAA,EAAQ,gBAAgB,UAAA,GAAa,EAAA;AAAA,EACrC,IAAA,EAAM,gBAAgB,UAAA,GAAa,EAAA;AAAA,EACnC,IAAA,EAAM,gBAAgB,UAAA,GAAa;AACrC,CAAA;AAEO,SAAS,IAAI,GAAA,EAAmB;AACrC,EAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AACjB;AAEO,SAAS,QAAQ,GAAA,EAAmB;AACzC,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAE,KAAK,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC5C;AAEO,SAAS,KAAK,GAAA,EAAmB;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC7C;AAEO,SAAS,MAAM,GAAA,EAAmB;AACvC,EAAA,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAG,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC5C;AAEO,SAAS,KAAK,GAAA,EAAmB;AACtC,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAE,IAAI,SAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC3C;AAEO,SAAS,QAAQ,GAAA,EAAmB;AACzC,EAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAK,EAAE,IAAI,CAAA,EAAG,GAAG,CAAA,EAAG,EAAE,KAAK;AAAA,CAAI,CAAA;AAC7C;AAMA,eAAsB,OAAO,QAAA,EAAmC;AAC9D,EAAA,MAAM,KAAc,QAAA,CAAA,eAAA,CAAgB,EAAE,OAAO,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AACpE,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,EAAA,CAAG,QAAA,CAAS,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9D,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEA,eAAsB,OAAA,CAAQ,QAAA,EAAkB,UAAA,GAAa,IAAA,EAAwB;AACnF,EAAA,MAAM,IAAA,GAAO,aAAa,OAAA,GAAU,OAAA;AACpC,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACnE,EAAA,IAAI,MAAA,CAAO,IAAA,EAAK,KAAM,EAAA,EAAI,OAAO,UAAA;AACjC,EAAA,OAAO,OAAO,IAAA,EAAK,CAAE,WAAA,EAAY,CAAE,WAAW,GAAG,CAAA;AACnD;AAEA,eAAsB,MAAA,CACpB,UACA,OAAA,EACiB;AACjB,EAAA,GAAA,CAAI,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,EAAE,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AACtC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACnD;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACnF,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,CAAO,IAAA,IAAQ,EAAE,CAAA;AACtC,EAAA,IAAI,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,GAAM,KAAK,GAAA,GAAM,OAAA,CAAQ,QAAQ,OAAO,CAAA;AAC1D,EAAA,OAAO,GAAA,GAAM,CAAA;AACf;AASO,SAAS,WAAW,QAAA,EAA2B;AACpD,EAAA,OAAU,cAAW,QAAQ,CAAA;AAC/B;AAEO,SAAS,SAAS,QAAA,EAA0B;AACjD,EAAA,OAAU,EAAA,CAAA,YAAA,CAAa,UAAU,OAAO,CAAA;AAC1C;AAEO,SAAS,SAAA,CAAU,UAAkB,OAAA,EAAuB;AACjE,EAAA,MAAM,GAAA,GAAWA,cAAQ,QAAQ,CAAA;AACjC,EAAA,IAAI,CAAI,EAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,IAAG,EAAA,CAAA,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EACvC;AACA,EAAG,EAAA,CAAA,aAAA,CAAc,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAC7C;AAEO,SAAS,eAAA,GAA0B;AACxC,EAAA,IAAI,GAAA,GAAM,QAAQ,GAAA,EAAI;AACtB,EAAA,OAAO,GAAA,KAAaA,KAAA,CAAA,OAAA,CAAQ,GAAG,CAAA,EAAG;AAChC,IAAA,IAAO,EAAA,CAAA,UAAA,CAAgBA,KAAA,CAAA,IAAA,CAAK,GAAA,EAAK,cAAc,CAAC,CAAA,EAAG;AACjD,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,GAAA,GAAWA,cAAQ,GAAG,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,QAAQ,GAAA,EAAI;AACrB;AAEO,SAAS,gBACd,IAAA,EACqD;AACrD,EAAA,MAAM,OAAA,GAAeA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,cAAc,CAAA;AAC9C,EAAA,IAAI,CAAI,EAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,SAAA;AAEpC,EAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAS,EAAA,CAAA,YAAA,CAAa,OAAA,EAAS,OAAO,CAAC,CAAA;AACxD,EAAA,MAAM,OAAO,EAAE,GAAG,IAAI,YAAA,EAAc,GAAG,IAAI,eAAA,EAAgB;AAE3D,EAAA,IAAI,KAAK,IAAA,EAAM;AAEb,IAAA,IAAO,cAAgBA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAK,CAAC,GAAG,OAAO,YAAA;AAClD,IAAA,IAAO,cAAgBA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,OAAO,KAAK,CAAC,GAAG,OAAO,YAAA;AACzD,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,OAAO,OAAO,OAAA;AACvB,EAAA,OAAO,SAAA;AACT;;;AChHA,SAAS,sBAAsB,SAAA,EAA2B;AACxD,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,OAAO,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAAA,EAeT;AAEA,EAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,IAAA,OAAO,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAAA,EAuBT;AAGA,EAAA,OAAO,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAeT;AAEA,SAAS,iBAAiB,SAAA,EAA2B;AACnD,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,OAAO,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAuBT;AAEA,EAAA,OAAO,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAqBT;AAEA,SAAS,WAAA,GAAsB;AAC7B,EAAA,OAAO,CAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;AAWT;AAMA,SAAS,oBAAA,CAAqB,MAAc,SAAA,EAA2B;AACrE,EAAA,IAAI,cAAc,YAAA,EAAc;AAE9B,IAAA,IAAI,WAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,CAAA,EAAG;AAC7C,MAAA,OAAY,WAAK,IAAA,EAAM,KAAA,EAAO,OAAO,KAAA,EAAO,UAAA,EAAY,SAAS,UAAU,CAAA;AAAA,IAC7E;AACA,IAAA,OAAY,WAAK,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,SAAS,UAAU,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,IAAA,IAAI,WAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,OAAO,CAAC,CAAA,EAAG;AAC/C,MAAA,OAAY,WAAK,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,YAAY,UAAU,CAAA;AAAA,IACtE;AACA,IAAA,OAAY,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAY,UAAU,CAAA;AAAA,EAC/D;AACA,EAAA,OAAY,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,mBAAmB,CAAA;AACtD;AAEA,SAAS,eAAA,CAAgB,MAAc,SAAA,EAA2B;AAChE,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,IAAI,WAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,CAAA,EAAG;AAC7C,MAAA,OAAY,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,eAAe,CAAA;AAAA,IACtD;AACA,IAAA,OAAY,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,eAAe,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,EAAA;AACT;AAMA,eAAsB,OAAA,GAAyB;AAC7C,EAAA,OAAA,CAAQ,+BAA0B,CAAA;AAElC,EAAA,MAAM,OAAO,eAAA,EAAgB;AAC7B,EAAA,MAAM,SAAA,GAAY,gBAAgB,IAAI,CAAA;AAEtC,EAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,EAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC9C,EAAA,IAAA,CAAK,CAAA,oBAAA,EAAuB,EAAE,IAAI,CAAA,EAAG,SAAS,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC1D,EAAA,GAAA,CAAI,EAAE,CAAA;AAGN,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,cAAc,CAAA;AAC9C,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAC,CAAA;AACxC,IAAA,MAAM,OAAO,EAAE,GAAG,IAAI,YAAA,EAAc,GAAG,IAAI,eAAA,EAAgB;AAE3D,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,CAAC,IAAA,CAAK,gBAAgB,CAAA,EAAG,OAAA,CAAQ,KAAK,gBAAgB,CAAA;AAC1D,IAAA,IAAI,CAAC,IAAA,CAAK,iBAAiB,CAAA,EAAG,OAAA,CAAQ,KAAK,iBAAiB,CAAA;AAC5D,IAAA,IAAI,CAAC,IAAA,CAAK,kBAAkB,CAAA,EAAG,OAAA,CAAQ,KAAK,kBAAkB,CAAA;AAE9D,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,CAAA,kBAAA,EAAqB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9C,MAAA,GAAA,CAAI,CAAA,OAAA,EAAU,CAAA,CAAE,IAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAChE,MAAA,GAAA,CAAI,EAAE,CAAA;AAAA,IACR,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,qCAAqC,CAAA;AAAA,IAC/C;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,kCAAA,EAAoC;AAAA,IAChE,6CAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,GAAA,CAAI,EAAE,CAAA;AAGN,EAAA,MAAM,OAAA,GAAe,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAC5C,EAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,IAAK,CAAC,WAAgB,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAM,CAAC,CAAA,EAAG;AAChE,IAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,4CAA4C,CAAA;AAC5E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,OAAA,EAAS,aAAa,CAAA;AAChC,MAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,CAAA,CAAE,GAAG,CAAA,EAAQ,KAAA,CAAA,QAAA,CAAS,IAAA,EAAM,OAAO,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,IACrE;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,mFAA8E,CAAA;AAAA,EACrF;AAGA,EAAA,IAAI,aAAa,CAAA,EAAG;AAClB,IAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,IAAA,EAAM,SAAS,CAAA;AACtD,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,CAAA,yBAAA,EAA4B,EAAE,GAAG,CAAA,EAAQ,KAAA,CAAA,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAA,CAAG,CAAA;AACjH,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,SAAA,CAAU,SAAA,EAAW,qBAAA,CAAsB,SAAS,CAAC,CAAA;AACrD,QAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,CAAA,CAAE,GAAG,CAAA,EAAQ,KAAA,CAAA,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,MACvE;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,+BAA+B,CAAA;AAAA,IACtC;AAAA,EACF;AAGA,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,IAAA,EAAM,SAAS,CAAA;AACpD,IAAA,IAAI,YAAA,IAAgB,CAAC,UAAA,CAAW,YAAY,CAAA,EAAG;AAC7C,MAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,CAAA,6BAAA,EAAgC,EAAE,GAAG,CAAA,EAAQ,KAAA,CAAA,QAAA,CAAS,IAAA,EAAM,YAAY,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAA,CAAG,CAAA;AAC3H,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,SAAA,CAAU,YAAA,EAAc,gBAAA,CAAiB,SAAS,CAAC,CAAA;AACnD,QAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,CAAA,CAAE,GAAG,CAAA,EAAQ,KAAA,CAAA,QAAA,CAAS,IAAA,EAAM,YAAY,CAAC,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAGA,EAAA,GAAA,CAAI,EAAE,CAAA;AACN,EAAA,OAAA,CAAQ,YAAY,CAAA;AAEpB,EAAA,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,2BAAA,CAA6B,CAAA;AACxD,EAAA,GAAA,CAAI,QAAQ,CAAA,CAAE,IAAI,CAAA,4BAAA,EAA+B,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC1D,EAAA,GAAA,CAAI,EAAE,CAAA;AACN,EAAA,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,sBAAA,EAAyB,CAAA,CAAE,IAAI,CAAA,UAAA,EAAa,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAChF,EAAA,GAAA,CAAI,EAAE,CAAA;AACN,EAAA,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,IAAI,CAAA,kBAAA,EAAqB,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAEpF,EAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,IAAA,GAAA,CAAI,CAAA,sDAAA,CAAwD,CAAA;AAAA,EAC9D;AAEA,EAAA,GAAA,CAAI,EAAE,CAAA;AACN,EAAA,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,qCAAA,CAAuC,CAAA;AAClE,EAAA,GAAA,CAAI,QAAQ,CAAA,CAAE,IAAI,CAAA,mBAAA,EAAsB,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACjD,EAAA,GAAA,CAAI,EAAE,CAAA;AAEN,EAAA,OAAA,CAAQ,iBAAiB,CAAA;AAC3B;ACvQA,SAAS,aAAa,IAAA,EAA2B;AAC/C,EAAA,MAAM,OAAA,GAAeC,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AACtC,EAAA,MAAM,YAAA,GAAoBA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAEjD,EAAA,IAAI,UAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,IAAA,EAAM,SAAS,kBAAA,EAAmB;AAAA,EACxE;AACA,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,IAAA,EAAM,SAAS,YAAA,EAAa;AAAA,EAClE;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,mBAAA,GAAmC;AAC1C,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,eAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,IAAI,MAAA,CAAO,SAAS,EAAA,EAAI;AACtB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,IAAA,EAAM,SAAS,sBAAA,EAAuB;AAClF;AAEA,SAAS,cAAA,GAA8B;AACrC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,WAAA,IAAe,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB,OAAA,CAAQ,GAAA,CAAI,aAAA;AAC3G,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA,CAAI,SAAS,EAAA,EAAI;AAC5C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,IAAA,EAAM,SAAS,OAAA,EAAQ;AAC/D;AAEA,SAAS,cAAA,GAA8B;AACrC,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,WAAA,IAAe,QAAQ,GAAA,CAAI,YAAA,IAAgB,QAAQ,GAAA,CAAI,gBAAA;AAC/E,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,IAAA,EAAM,SAAS,OAAA,EAAQ;AAC/D;AAEA,SAAS,cAAA,GAA8B;AACrC,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,WAAA,IAAe,QAAQ,GAAA,CAAI,cAAA,IAAkB,QAAQ,GAAA,CAAI,kBAAA;AACjF,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,IAAA,EAAM,SAAS,OAAA,EAAQ;AAC/D;AAEA,SAAS,qBAAA,CAAsB,MAAc,GAAA,EAA0B;AACrE,EAAA,MAAM,OAAA,GAAeA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,cAAc,CAAA;AAC9C,EAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,uBAAA,EAAwB;AAAA,EACxE;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,OAAO,CAAC,CAAA;AAC5C,EAAA,MAAM,OAAO,EAAE,GAAG,QAAQ,YAAA,EAAc,GAAG,QAAQ,eAAA,EAAgB;AAEnE,EAAA,IAAI,IAAA,CAAK,GAAG,CAAA,EAAG;AACb,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,SAAS,CAAA,WAAA,EAAc,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA,EAAI;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,SAAS,eAAA,EAAgB;AAChE;AAEA,SAAS,eAAe,IAAA,EAA2B;AACjD,EAAA,MAAM,aAAA,GAAqBA,KAAA,CAAA,IAAA,CAAK,IAAA,EAAM,YAAY,CAAA;AAClD,EAAA,IAAI,CAAC,UAAA,CAAW,aAAa,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAU,SAAS,aAAa,CAAA;AACtC,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,YAAA;AAAA,MACN,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,SAAS,wBAAA,EAAyB;AAC/E;AAEA,eAAe,yBAAA,CACb,MACA,GAAA,EACsB;AACtB,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,UAAU,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,GAAI,CAAA;AAEzD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,QAAQ,UAAA,CAAW;AAAA,KACpB,CAAA;AACD,IAAA,YAAA,CAAa,OAAO,CAAA;AAEpB,IAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,SAAS,MAAA,KAAW,GAAA,IAAO,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChG,MAAA,OAAO,EAAE,MAAM,CAAA,EAAG,IAAI,iBAAiB,MAAA,EAAQ,IAAA,EAAM,SAAS,WAAA,EAAY;AAAA,IAC5E;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,GAAG,IAAI,CAAA,aAAA,CAAA;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA;AAAA,KAClC;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,OAAA,GAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,eAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7B,MAAA,OAAO,EAAE,MAAM,CAAA,EAAG,IAAI,iBAAiB,MAAA,EAAQ,OAAA,EAAS,SAAS,cAAA,EAAe;AAAA,IAClF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,EAAiB,MAAA,EAAQ,SAAS,OAAA,EAAQ;AAAA,EAClE;AACF;AAMA,eAAsB,SAAA,GAA2B;AAC/C,EAAA,OAAA,CAAQ,4CAAuC,CAAA;AAE/C,EAAA,MAAM,OAAO,eAAA,EAAgB;AAC7B,EAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,EAAE,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAC9C,EAAA,GAAA,CAAI,EAAE,CAAA;AAEN,EAAA,MAAM,UAAyB,EAAC;AAGhC,EAAA,GAAA,CAAI,GAAG,CAAA,CAAE,IAAI,CAAA,WAAA,EAAc,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACpC,EAAA,OAAA,CAAQ,IAAA,CAAK,YAAA,CAAa,IAAI,CAAC,CAAA;AAC/B,EAAA,OAAA,CAAQ,IAAA,CAAK,cAAA,CAAe,IAAI,CAAC,CAAA;AACjC,EAAA,OAAA,CAAQ,IAAA,CAAK,qBAAqB,CAAA;AAClC,EAAA,OAAA,CAAQ,IAAA,CAAK,gBAAgB,CAAA;AAC7B,EAAA,OAAA,CAAQ,IAAA,CAAK,gBAAgB,CAAA;AAC7B,EAAA,OAAA,CAAQ,IAAA,CAAK,gBAAgB,CAAA;AAE7B,EAAA,GAAA,CAAI,GAAG,CAAA,CAAE,IAAI,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACjC,EAAA,OAAA,CAAQ,IAAA,CAAK,qBAAA,CAAsB,IAAA,EAAM,gBAAgB,CAAC,CAAA;AAC1D,EAAA,OAAA,CAAQ,IAAA,CAAK,qBAAA,CAAsB,IAAA,EAAM,iBAAiB,CAAC,CAAA;AAC3D,EAAA,OAAA,CAAQ,IAAA,CAAK,qBAAA,CAAsB,IAAA,EAAM,kBAAkB,CAAC,CAAA;AAG5D,EAAA,GAAA,CAAI,GAAG,CAAA,CAAE,IAAI,CAAA,YAAA,EAAe,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACrC,EAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,yBAAA,CAA0B,WAAA,EAAa,2CAA2C,CAAC,CAAA;AACtG,EAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,yBAAA,CAA0B,UAAA,EAAY,0BAA0B,CAAC,CAAA;AACpF,EAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,yBAAA,CAA0B,YAAA,EAAc,2BAA2B,CAAC,CAAA;AAGvF,EAAA,GAAA,CAAI,EAAE,CAAA;AACN,EAAA,OAAA,CAAQ,SAAS,CAAA;AAEjB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,KAAA;AACJ,IAAA,QAAQ,OAAO,MAAA;AAAQ,MACrB,KAAK,IAAA;AACH,QAAA,IAAA,GAAO,QAAA;AACP,QAAA,KAAA,GAAQ,CAAA,CAAE,KAAA;AACV,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,GAAO,GAAA;AACP,QAAA,KAAA,GAAQ,CAAA,CAAE,MAAA;AACV,QAAA,QAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAA,GAAO,QAAA;AACP,QAAA,KAAA,GAAQ,CAAA,CAAE,GAAA;AACV,QAAA,MAAA,EAAA;AACA,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,IAAA,GAAO,QAAA;AACP,QAAA,KAAA,GAAQ,CAAA,CAAE,GAAA;AACV,QAAA;AAAA;AAEJ,IAAA,GAAA,CAAI,KAAK,KAAK,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAG,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,EACvF;AAEA,EAAA,GAAA,CAAI,EAAE,CAAA;AAEN,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,4CAAA,CAA8C,CAAA;AAAA,EAC/D,CAAA,MAAA,IAAW,WAAW,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,mEAAA,CAAqE,CAAA;AAAA,EACvF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,oDAAoD,CAAA;AAAA,EAC9D;AACF;AC1OA,eAAsB,iBAAA,GAAmC;AACvD,EAAA,OAAA,CAAQ,yCAAoC,CAAA;AAE5C,EAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,EAAA,OAAA,CAAQ,gEAAgE,CAAA;AACxE,EAAA,GAAA,CAAI,KAAK,CAAA,CAAE,IAAI,GAAG,MAAM,CAAA,EAAG,EAAE,KAAK;AAAA,CAAI,CAAA;AACtC,EAAA,GAAA,CAAI,CAAA,iBAAA,EAAoB,CAAA,CAAE,IAAI,CAAA,IAAA,EAAO,EAAE,KAAK,CAAA;AAAA,CAAU,CAAA;AACtD,EAAA,GAAA,CAAI,KAAK,CAAA,CAAE,GAAG,mBAAmB,MAAM,CAAA,EAAG,EAAE,KAAK;AAAA,CAAI,CAAA;AACrD,EAAA,GAAA,CAAI,GAAG,CAAA,CAAE,MAAM,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK,CAAA,2DAAA,CAA6D,CAAA;AAChG;;;ACDA,IAAM,OAAA,GAAU,cAAA;AAEhB,IAAM,IAAA,GAAO;AAAA,EACX,CAAA,CAAE,IAAI,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK,CAAA;;AAAA,EAExB,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,KAAK;AAAA;;AAAA,EAGtB,CAAA,CAAE,IAAI,CAAA,SAAA,EAAY,CAAA,CAAE,KAAK;AAAA;AAAA;AAAA;;AAAA,EAKzB,CAAA,CAAE,IAAI,CAAA,QAAA,EAAW,CAAA,CAAE,KAAK;AAAA;AAAA;;AAAA,EAIxB,CAAA,CAAE,IAAI,CAAA,SAAA,EAAY,CAAA,CAAE,KAAK;AAAA,EAAA,EACvB,CAAA,CAAE,GAAG,CAAA,mBAAA,EAAsB,CAAA,CAAE,KAAK;AAAA,EAAA,EAClC,CAAA,CAAE,GAAG,CAAA,qBAAA,EAAwB,CAAA,CAAE,KAAK;AAAA,EAAA,EACpC,CAAA,CAAE,GAAG,CAAA,8BAAA,EAAiC,CAAA,CAAE,KAAK;;AAAA,EAE/C,CAAA,CAAE,GAAG,CAAA,4CAAA,EAA+C,CAAA,CAAE,KAAK;AAAA,CAAA;AAG7D,eAAsB,IAAI,IAAA,GAAiB,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,EAAkB;AAC/E,EAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AAEtB,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AACxD,IAAA,GAAA,CAAI,IAAI,CAAA;AACR,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,KAAY,WAAA,IAAe,OAAA,KAAY,IAAA,EAAM;AAC/C,IAAA,GAAA,CAAI,OAAO,CAAA;AACX,IAAA;AAAA,EACF;AAEA,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,MAAA;AACH,MAAA,MAAM,OAAA,EAAQ;AACd,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,MAAM,SAAA,EAAU;AAChB,MAAA;AAAA,IAEF,KAAK,iBAAA;AACH,MAAA,MAAM,iBAAA,EAAkB;AACxB,MAAA;AAAA,IAEF;AACE,MAAA,KAAA,CAAS,CAAA,iBAAA,EAAoB,EAAE,IAAI,CAAA,EAAG,OAAO,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AACzD,MAAA,GAAA,CAAI,OAAO,CAAA,CAAE,IAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,KAAK,CAAA,wBAAA,CAA0B,CAAA;AACpE,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA;AAEzB;AAGA,GAAA,EAAI,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AACnB,EAAA,KAAA,CAAS,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACzD,EAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACrB,CAAC,CAAA","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Shared CLI utilities\n// ---------------------------------------------------------------------------\n\nimport * as readline from 'node:readline/promises';\nimport { stdin, stdout } from 'node:process';\n\n// ---------------------------------------------------------------------------\n// Colors (ANSI — no dependency needed)\n// ---------------------------------------------------------------------------\n\nconst supportsColor =\n typeof process !== 'undefined' &&\n process.stdout?.isTTY &&\n !process.env.NO_COLOR;\n\nexport const c = {\n reset: supportsColor ? '\\x1b[0m' : '',\n bold: supportsColor ? '\\x1b[1m' : '',\n dim: supportsColor ? '\\x1b[2m' : '',\n red: supportsColor ? '\\x1b[31m' : '',\n green: supportsColor ? '\\x1b[32m' : '',\n yellow: supportsColor ? '\\x1b[33m' : '',\n blue: supportsColor ? '\\x1b[34m' : '',\n cyan: supportsColor ? '\\x1b[36m' : '',\n};\n\nexport function log(msg: string): void {\n console.log(msg);\n}\n\nexport function success(msg: string): void {\n console.log(`${c.green}✓${c.reset} ${msg}`);\n}\n\nexport function warn(msg: string): void {\n console.log(`${c.yellow}!${c.reset} ${msg}`);\n}\n\nexport function error(msg: string): void {\n console.error(`${c.red}✗${c.reset} ${msg}`);\n}\n\nexport function info(msg: string): void {\n console.log(`${c.blue}ℹ${c.reset} ${msg}`);\n}\n\nexport function heading(msg: string): void {\n console.log(`\\n${c.bold}${msg}${c.reset}\\n`);\n}\n\n// ---------------------------------------------------------------------------\n// Prompt helpers\n// ---------------------------------------------------------------------------\n\nexport async function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({ input: stdin, output: stdout });\n try {\n return await rl.question(`${c.cyan}?${c.reset} ${question} `);\n } finally {\n rl.close();\n }\n}\n\nexport async function confirm(question: string, defaultYes = true): Promise<boolean> {\n const hint = defaultYes ? '[Y/n]' : '[y/N]';\n const answer = await prompt(`${question} ${c.dim}${hint}${c.reset}`);\n if (answer.trim() === '') return defaultYes;\n return answer.trim().toLowerCase().startsWith('y');\n}\n\nexport async function select(\n question: string,\n options: string[],\n): Promise<number> {\n log(`${c.cyan}?${c.reset} ${question}`);\n for (let i = 0; i < options.length; i++) {\n log(` ${c.dim}${i + 1}.${c.reset} ${options[i]}`);\n }\n const answer = await prompt(`${c.dim}Enter number (1-${options.length}):${c.reset}`);\n const num = parseInt(answer.trim(), 10);\n if (isNaN(num) || num < 1 || num > options.length) return 0;\n return num - 1;\n}\n\n// ---------------------------------------------------------------------------\n// File system helpers\n// ---------------------------------------------------------------------------\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf-8');\n}\n\nexport function writeFile(filePath: string, content: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n\nexport function findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== path.dirname(dir)) {\n if (fs.existsSync(path.join(dir, 'package.json'))) {\n return dir;\n }\n dir = path.dirname(dir);\n }\n return process.cwd();\n}\n\nexport function detectFramework(\n root: string,\n): 'nextjs-app' | 'nextjs-pages' | 'react' | 'unknown' {\n const pkgPath = path.join(root, 'package.json');\n if (!fs.existsSync(pkgPath)) return 'unknown';\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (deps.next) {\n // Check for app/ vs pages/ directory\n if (fs.existsSync(path.join(root, 'app'))) return 'nextjs-app';\n if (fs.existsSync(path.join(root, 'src', 'app'))) return 'nextjs-app';\n return 'nextjs-pages';\n }\n\n if (deps.react) return 'react';\n return 'unknown';\n}\n","// ---------------------------------------------------------------------------\n// guidekit init — Scaffold GuideKit configuration in a project\n// ---------------------------------------------------------------------------\n\nimport * as path from 'node:path';\nimport {\n c,\n log,\n success,\n warn,\n info,\n heading,\n confirm,\n select,\n fileExists,\n readFile,\n writeFile,\n findProjectRoot,\n detectFramework,\n} from '../utils.js';\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\nfunction tokenEndpointTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/api/guidekit/token/route.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function POST() {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return Response.json(token);\n}\n`;\n }\n\n if (framework === 'nextjs-pages') {\n return `// pages/api/guidekit/token.ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\nimport { createSessionToken } from '@guidekit/server';\n\nexport default async function handler(\n _req: NextApiRequest,\n res: NextApiResponse,\n) {\n if (_req.method !== 'POST') {\n return res.status(405).json({ error: 'Method not allowed' });\n }\n\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n return res.json(token);\n}\n`;\n }\n\n // Generic Express-style\n return `// server/guidekit-token.ts\nimport { createSessionToken } from '@guidekit/server';\n\nexport async function handleTokenRequest(req: any, res: any) {\n const token = await createSessionToken({\n signingSecret: process.env.GUIDEKIT_SECRET!,\n llmApiKey: process.env.LLM_API_KEY!,\n sttApiKey: process.env.STT_API_KEY,\n ttsApiKey: process.env.TTS_API_KEY,\n expiresIn: '15m',\n });\n\n res.json(token);\n}\n`;\n}\n\nfunction providerTemplate(framework: string): string {\n if (framework === 'nextjs-app') {\n return `// app/providers.tsx\n'use client';\n\nimport { GuideKitProvider } from '@guidekit/react';\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n }\n\n return `// Add GuideKitProvider to your app root:\nimport { GuideKitProvider } from '@guidekit/react';\n\nfunction App({ children }) {\n return (\n <GuideKitProvider\n tokenEndpoint=\"/api/guidekit/token\"\n agent={{\n name: 'Guide',\n greeting: 'Hi! How can I help you today?',\n }}\n options={{\n mode: 'text',\n debug: process.env.NODE_ENV === 'development',\n }}\n >\n {children}\n </GuideKitProvider>\n );\n}\n`;\n}\n\nfunction envTemplate(): string {\n return `# GuideKit SDK Configuration\n# Generate a signing secret: npx guidekit generate-secret\nGUIDEKIT_SECRET=\n\n# LLM Provider (required)\nLLM_API_KEY=\n\n# Voice Providers (optional — for voice mode)\nSTT_API_KEY=\nTTS_API_KEY=\n`;\n}\n\n// ---------------------------------------------------------------------------\n// File path helpers\n// ---------------------------------------------------------------------------\n\nfunction getTokenEndpointPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n // Check src/app vs app\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n return path.join(root, 'app', 'api', 'guidekit', 'token', 'route.ts');\n }\n if (framework === 'nextjs-pages') {\n if (fileExists(path.join(root, 'src', 'pages'))) {\n return path.join(root, 'src', 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'pages', 'api', 'guidekit', 'token.ts');\n }\n return path.join(root, 'server', 'guidekit-token.ts');\n}\n\nfunction getProviderPath(root: string, framework: string): string {\n if (framework === 'nextjs-app') {\n if (fileExists(path.join(root, 'src', 'app'))) {\n return path.join(root, 'src', 'app', 'providers.tsx');\n }\n return path.join(root, 'app', 'providers.tsx');\n }\n return ''; // No file created for other frameworks — just show instructions\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runInit(): Promise<void> {\n heading('GuideKit — Project Setup');\n\n const root = findProjectRoot();\n const framework = detectFramework(root);\n\n info(`Project root: ${c.dim}${root}${c.reset}`);\n info(`Detected framework: ${c.bold}${framework}${c.reset}`);\n log('');\n\n // Step 1: Check if packages are installed\n const pkgPath = path.join(root, 'package.json');\n if (fileExists(pkgPath)) {\n const pkg = JSON.parse(readFile(pkgPath));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const missing: string[] = [];\n if (!deps['@guidekit/core']) missing.push('@guidekit/core');\n if (!deps['@guidekit/react']) missing.push('@guidekit/react');\n if (!deps['@guidekit/server']) missing.push('@guidekit/server');\n\n if (missing.length > 0) {\n warn(`Missing packages: ${missing.join(', ')}`);\n log(` Run: ${c.cyan}npm install ${missing.join(' ')}${c.reset}`);\n log('');\n } else {\n success('All GuideKit packages are installed');\n }\n }\n\n // Step 2: Auth mode selection\n const authMode = await select('How do you want to authenticate?', [\n 'Token endpoint (recommended for production)',\n 'Direct API keys (quick prototyping only)',\n ]);\n\n log('');\n\n // Step 3: Create .env file\n const envPath = path.join(root, '.env.local');\n if (!fileExists(envPath) && !fileExists(path.join(root, '.env'))) {\n const createEnv = await confirm('Create .env.local with GuideKit variables?');\n if (createEnv) {\n writeFile(envPath, envTemplate());\n success(`Created ${c.dim}${path.relative(root, envPath)}${c.reset}`);\n }\n } else {\n info('.env file already exists — make sure GUIDEKIT_SECRET and LLM_API_KEY are set');\n }\n\n // Step 4: Create token endpoint (if token auth)\n if (authMode === 0) {\n const tokenPath = getTokenEndpointPath(root, framework);\n if (!fileExists(tokenPath)) {\n const createToken = await confirm(`Create token endpoint at ${c.dim}${path.relative(root, tokenPath)}${c.reset}?`);\n if (createToken) {\n writeFile(tokenPath, tokenEndpointTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, tokenPath)}${c.reset}`);\n }\n } else {\n info('Token endpoint already exists');\n }\n }\n\n // Step 5: Create provider wrapper (for Next.js App Router)\n if (framework === 'nextjs-app') {\n const providerPath = getProviderPath(root, framework);\n if (providerPath && !fileExists(providerPath)) {\n const createProvider = await confirm(`Create provider component at ${c.dim}${path.relative(root, providerPath)}${c.reset}?`);\n if (createProvider) {\n writeFile(providerPath, providerTemplate(framework));\n success(`Created ${c.dim}${path.relative(root, providerPath)}${c.reset}`);\n }\n }\n }\n\n // Step 6: Summary\n log('');\n heading('Next steps');\n\n log(` ${c.bold}1.${c.reset} Generate a signing secret:`);\n log(` ${c.cyan}npx guidekit generate-secret${c.reset}`);\n log('');\n log(` ${c.bold}2.${c.reset} Add your API keys to ${c.cyan}.env.local${c.reset}`);\n log('');\n log(` ${c.bold}3.${c.reset} Wrap your app in ${c.cyan}<GuideKitProvider>${c.reset}`);\n\n if (framework === 'nextjs-app') {\n log(` Import the Providers component in your layout.tsx`);\n }\n\n log('');\n log(` ${c.bold}4.${c.reset} Run the doctor to verify your setup:`);\n log(` ${c.cyan}npx guidekit doctor${c.reset}`);\n log('');\n\n success('Setup complete!');\n}\n","// ---------------------------------------------------------------------------\n// guidekit doctor — Validate API keys and provider connectivity\n// ---------------------------------------------------------------------------\n\nimport { c, log, success, warn, error, info, heading, fileExists, readFile, findProjectRoot } from '../utils.js';\nimport * as path from 'node:path';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error' | 'skip';\n message: string;\n}\n\n// ---------------------------------------------------------------------------\n// Individual checks\n// ---------------------------------------------------------------------------\n\nfunction checkEnvFile(root: string): CheckResult {\n const envPath = path.join(root, '.env');\n const envLocalPath = path.join(root, '.env.local');\n\n if (fileExists(envLocalPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env.local' };\n }\n if (fileExists(envPath)) {\n return { name: '.env file', status: 'ok', message: 'Found .env' };\n }\n return {\n name: '.env file',\n status: 'warn',\n message: 'No .env or .env.local found. API keys should be in environment variables.',\n };\n}\n\nfunction checkGuidekitSecret(): CheckResult {\n const secret = process.env.GUIDEKIT_SECRET;\n if (!secret) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'warn',\n message: 'Not set. Run `npx guidekit generate-secret` to create one.',\n };\n }\n if (secret.length < 32) {\n return {\n name: 'GUIDEKIT_SECRET',\n status: 'error',\n message: 'Secret is too short (< 32 chars). Generate a new one with `npx guidekit generate-secret`.',\n };\n }\n return { name: 'GUIDEKIT_SECRET', status: 'ok', message: 'Set and valid length' };\n}\n\nfunction checkLlmApiKey(): CheckResult {\n const key = process.env.LLM_API_KEY || process.env.GEMINI_KEY || process.env.GEMINI_API_KEY || process.env.GOOGLE_AI_KEY;\n if (!key) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Not found (LLM_API_KEY / GEMINI_KEY / GEMINI_API_KEY / GOOGLE_AI_KEY). Required for LLM.',\n };\n }\n if (!key.startsWith('AI') && key.length < 20) {\n return {\n name: 'LLM API Key',\n status: 'warn',\n message: 'Key format looks unusual. Verify with your LLM provider.',\n };\n }\n return { name: 'LLM API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkSttApiKey(): CheckResult {\n const key = process.env.STT_API_KEY || process.env.DEEPGRAM_KEY || process.env.DEEPGRAM_API_KEY;\n if (!key) {\n return {\n name: 'STT API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/STT)',\n };\n }\n return { name: 'STT API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkTtsApiKey(): CheckResult {\n const key = process.env.TTS_API_KEY || process.env.ELEVENLABS_KEY || process.env.ELEVENLABS_API_KEY;\n if (!key) {\n return {\n name: 'TTS API Key',\n status: 'skip',\n message: 'Not set (optional — required for voice/TTS)',\n };\n }\n return { name: 'TTS API Key', status: 'ok', message: 'Found' };\n}\n\nfunction checkPackageInstalled(root: string, pkg: string): CheckResult {\n const pkgPath = path.join(root, 'package.json');\n if (!fileExists(pkgPath)) {\n return { name: pkg, status: 'error', message: 'No package.json found' };\n }\n\n const pkgJson = JSON.parse(readFile(pkgPath));\n const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n\n if (deps[pkg]) {\n return { name: pkg, status: 'ok', message: `Installed (${deps[pkg]})` };\n }\n return { name: pkg, status: 'error', message: 'Not installed' };\n}\n\nfunction checkGitignore(root: string): CheckResult {\n const gitignorePath = path.join(root, '.gitignore');\n if (!fileExists(gitignorePath)) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: 'No .gitignore found. Ensure .env files are not committed.',\n };\n }\n const content = readFile(gitignorePath);\n if (!content.includes('.env')) {\n return {\n name: '.gitignore',\n status: 'warn',\n message: '.env is not in .gitignore. API keys could be accidentally committed.',\n };\n }\n return { name: '.gitignore', status: 'ok', message: '.env files are ignored' };\n}\n\nasync function checkProviderConnectivity(\n name: string,\n url: string,\n): Promise<CheckResult> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n\n const response = await fetch(url, {\n method: 'HEAD',\n signal: controller.signal,\n });\n clearTimeout(timeout);\n\n if (response.ok || response.status === 401 || response.status === 403 || response.status === 405) {\n return { name: `${name} connectivity`, status: 'ok', message: 'Reachable' };\n }\n return {\n name: `${name} connectivity`,\n status: 'warn',\n message: `HTTP ${response.status}`,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Unknown error';\n if (message.includes('abort')) {\n return { name: `${name} connectivity`, status: 'error', message: 'Timeout (5s)' };\n }\n return { name: `${name} connectivity`, status: 'error', message };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main\n// ---------------------------------------------------------------------------\n\nexport async function runDoctor(): Promise<void> {\n heading('GuideKit Doctor — Checking your setup');\n\n const root = findProjectRoot();\n info(`Project root: ${c.dim}${root}${c.reset}`);\n log('');\n\n const results: CheckResult[] = [];\n\n // Static checks\n log(`${c.bold}Environment${c.reset}`);\n results.push(checkEnvFile(root));\n results.push(checkGitignore(root));\n results.push(checkGuidekitSecret());\n results.push(checkLlmApiKey());\n results.push(checkSttApiKey());\n results.push(checkTtsApiKey());\n\n log(`${c.bold}Packages${c.reset}`);\n results.push(checkPackageInstalled(root, '@guidekit/core'));\n results.push(checkPackageInstalled(root, '@guidekit/react'));\n results.push(checkPackageInstalled(root, '@guidekit/server'));\n\n // Connectivity checks\n log(`${c.bold}Connectivity${c.reset}`);\n results.push(await checkProviderConnectivity('Google AI', 'https://generativelanguage.googleapis.com'));\n results.push(await checkProviderConnectivity('Deepgram', 'https://api.deepgram.com'));\n results.push(await checkProviderConnectivity('ElevenLabs', 'https://api.elevenlabs.io'));\n\n // Print results\n log('');\n heading('Results');\n\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n let icon: string;\n let color: string;\n switch (result.status) {\n case 'ok':\n icon = '✓';\n color = c.green;\n break;\n case 'warn':\n icon = '!';\n color = c.yellow;\n warnings++;\n break;\n case 'error':\n icon = '✗';\n color = c.red;\n errors++;\n break;\n case 'skip':\n icon = '○';\n color = c.dim;\n break;\n }\n log(` ${color}${icon}${c.reset} ${result.name}: ${c.dim}${result.message}${c.reset}`);\n }\n\n log('');\n\n if (errors > 0) {\n error(`${errors} error(s) found. Fix these before deploying.`);\n } else if (warnings > 0) {\n warn(`${warnings} warning(s). Everything should work, but review the warnings above.`);\n } else {\n success('All checks passed! Your GuideKit setup looks good.');\n }\n}\n","// ---------------------------------------------------------------------------\n// guidekit generate-secret — Generate a signing secret for JWT tokens\n// ---------------------------------------------------------------------------\n\nimport { generateSecret } from '@guidekit/server';\nimport { c, log, success, heading } from '../utils.js';\n\nexport async function runGenerateSecret(): Promise<void> {\n heading('GuideKit — Generate Signing Secret');\n\n const secret = generateSecret();\n\n success('Generated a cryptographically random 256-bit signing secret:\\n');\n log(` ${c.bold}${secret}${c.reset}\\n`);\n log(`Add this to your ${c.cyan}.env${c.reset} file:\\n`);\n log(` ${c.dim}GUIDEKIT_SECRET=${secret}${c.reset}\\n`);\n log(`${c.yellow}Warning:${c.reset} Keep this secret safe. Never commit it to version control.`);\n}\n","// ---------------------------------------------------------------------------\n// @guidekit/cli — Main CLI entry point\n// ---------------------------------------------------------------------------\n// Usage:\n// npx guidekit init\n// npx guidekit doctor\n// npx guidekit generate-secret\n// npx guidekit --help\n// npx guidekit --version\n// ---------------------------------------------------------------------------\n\nimport { runInit } from './commands/init.js';\nimport { runDoctor } from './commands/doctor.js';\nimport { runGenerateSecret } from './commands/generate-secret.js';\nimport { c, log, error as logError } from './utils.js';\n\nconst VERSION = '0.1.0-beta.2';\n\nconst HELP = `\n${c.bold}guidekit${c.reset} — CLI tools for GuideKit SDK\n\n${c.bold}Usage:${c.reset}\n guidekit <command>\n\n${c.bold}Commands:${c.reset}\n init Scaffold GuideKit configuration in your project\n doctor Validate API keys, packages, and provider connectivity\n generate-secret Generate a signing secret for JWT token authentication\n\n${c.bold}Options:${c.reset}\n --help, -h Show this help message\n --version, -v Show version number\n\n${c.bold}Examples:${c.reset}\n ${c.dim}$ npx guidekit init${c.reset}\n ${c.dim}$ npx guidekit doctor${c.reset}\n ${c.dim}$ npx guidekit generate-secret${c.reset}\n\n${c.dim}Documentation: https://guidekit.dev/docs/cli${c.reset}\n`;\n\nexport async function run(args: string[] = process.argv.slice(2)): Promise<void> {\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n log(HELP);\n return;\n }\n\n if (command === '--version' || command === '-v') {\n log(VERSION);\n return;\n }\n\n switch (command) {\n case 'init':\n await runInit();\n break;\n\n case 'doctor':\n await runDoctor();\n break;\n\n case 'generate-secret':\n await runGenerateSecret();\n break;\n\n default:\n logError(`Unknown command: ${c.bold}${command}${c.reset}`);\n log(`Run ${c.cyan}guidekit --help${c.reset} for available commands.`);\n process.exitCode = 1;\n }\n}\n\n// Auto-run when executed directly\nrun().catch((err) => {\n logError(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guidekit/cli",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
4
4
  "description": "CLI tools for GuideKit SDK — init, doctor, generate-secret",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -18,20 +18,11 @@
18
18
  },
19
19
  "files": [
20
20
  "dist",
21
- "../../LICENSE",
21
+ "LICENSE",
22
22
  "README.md"
23
23
  ],
24
- "scripts": {
25
- "build": "tsup",
26
- "dev": "tsup --watch",
27
- "test": "vitest run --config ../../vitest.config.ts",
28
- "test:unit": "vitest run --config ../../vitest.config.ts",
29
- "test:watch": "vitest --config ../../vitest.config.ts",
30
- "typecheck": "tsc --noEmit",
31
- "clean": "rm -rf dist"
32
- },
33
24
  "dependencies": {
34
- "@guidekit/server": "workspace:*"
25
+ "@guidekit/server": "^0.1.0-beta.3"
35
26
  },
36
27
  "devDependencies": {
37
28
  "typescript": "^5.7.0",
@@ -40,5 +31,35 @@
40
31
  "@types/node": "^22.0.0"
41
32
  },
42
33
  "sideEffects": false,
43
- "license": "MIT"
44
- }
34
+ "license": "MIT",
35
+ "author": "Riazul Islam",
36
+ "keywords": [
37
+ "guidekit",
38
+ "cli",
39
+ "sdk",
40
+ "ai",
41
+ "scaffolding",
42
+ "developer-tools"
43
+ ],
44
+ "engines": {
45
+ "node": ">=18"
46
+ },
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/riaz37/guidekit.git",
50
+ "directory": "packages/cli"
51
+ },
52
+ "homepage": "https://github.com/riaz37/guidekit#readme",
53
+ "bugs": {
54
+ "url": "https://github.com/riaz37/guidekit/issues"
55
+ },
56
+ "scripts": {
57
+ "build": "tsup",
58
+ "dev": "tsup --watch",
59
+ "test": "vitest run --config ../../vitest.config.ts",
60
+ "test:unit": "vitest run --config ../../vitest.config.ts",
61
+ "test:watch": "vitest --config ../../vitest.config.ts",
62
+ "typecheck": "tsc --noEmit",
63
+ "clean": "rm -rf dist"
64
+ }
65
+ }