@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 +21 -0
- package/dist/cli.js +32 -32
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +32 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +32 -32
- package/dist/index.js.map +1 -1
- package/package.json +35 -14
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
214
|
+
LLM_API_KEY=
|
|
215
215
|
|
|
216
216
|
# Voice Providers (optional \u2014 for voice mode)
|
|
217
|
-
|
|
218
|
-
|
|
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
|
|
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
|
|
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: "
|
|
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: "
|
|
366
|
+
name: "LLM API Key",
|
|
367
367
|
status: "warn",
|
|
368
|
-
message: "Key format looks unusual. Verify
|
|
368
|
+
message: "Key format looks unusual. Verify with your LLM provider."
|
|
369
369
|
};
|
|
370
370
|
}
|
|
371
|
-
return { name: "
|
|
371
|
+
return { name: "LLM API Key", status: "ok", message: "Found" };
|
|
372
372
|
}
|
|
373
|
-
function
|
|
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: "
|
|
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: "
|
|
382
|
+
return { name: "STT API Key", status: "ok", message: "Found" };
|
|
383
383
|
}
|
|
384
|
-
function
|
|
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: "
|
|
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: "
|
|
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(
|
|
462
|
-
results.push(
|
|
463
|
-
results.push(
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
238
|
+
LLM_API_KEY=
|
|
239
239
|
|
|
240
240
|
# Voice Providers (optional \u2014 for voice mode)
|
|
241
|
-
|
|
242
|
-
|
|
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
|
|
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
|
|
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: "
|
|
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: "
|
|
390
|
+
name: "LLM API Key",
|
|
391
391
|
status: "warn",
|
|
392
|
-
message: "Key format looks unusual. Verify
|
|
392
|
+
message: "Key format looks unusual. Verify with your LLM provider."
|
|
393
393
|
};
|
|
394
394
|
}
|
|
395
|
-
return { name: "
|
|
395
|
+
return { name: "LLM API Key", status: "ok", message: "Found" };
|
|
396
396
|
}
|
|
397
|
-
function
|
|
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: "
|
|
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: "
|
|
406
|
+
return { name: "STT API Key", status: "ok", message: "Found" };
|
|
407
407
|
}
|
|
408
|
-
function
|
|
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: "
|
|
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: "
|
|
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(
|
|
486
|
-
results.push(
|
|
487
|
-
results.push(
|
|
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
|
|
package/dist/index.cjs.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":["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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
-
|
|
214
|
+
LLM_API_KEY=
|
|
215
215
|
|
|
216
216
|
# Voice Providers (optional \u2014 for voice mode)
|
|
217
|
-
|
|
218
|
-
|
|
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
|
|
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
|
|
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: "
|
|
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: "
|
|
366
|
+
name: "LLM API Key",
|
|
367
367
|
status: "warn",
|
|
368
|
-
message: "Key format looks unusual. Verify
|
|
368
|
+
message: "Key format looks unusual. Verify with your LLM provider."
|
|
369
369
|
};
|
|
370
370
|
}
|
|
371
|
-
return { name: "
|
|
371
|
+
return { name: "LLM API Key", status: "ok", message: "Found" };
|
|
372
372
|
}
|
|
373
|
-
function
|
|
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: "
|
|
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: "
|
|
382
|
+
return { name: "STT API Key", status: "ok", message: "Found" };
|
|
383
383
|
}
|
|
384
|
-
function
|
|
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: "
|
|
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: "
|
|
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(
|
|
462
|
-
results.push(
|
|
463
|
-
results.push(
|
|
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":"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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 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.
|
|
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
|
-
"
|
|
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": "
|
|
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
|
+
}
|