@standardagents/cli 0.9.13 → 0.9.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/logger.ts","../src/commands/scaffold.ts","../src/commands/init.ts","../src/index.ts"],"names":["pkg","resolve","fs","path","__dirname"],"mappings":"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","file":"index.js","sourcesContent":["import chalk from 'chalk';\n\nexport const logger = {\n success: (message: string) => {\n console.log(chalk.green('✓'), message);\n },\n error: (message: string) => {\n console.log(chalk.red('✗'), message);\n },\n warning: (message: string) => {\n console.log(chalk.yellow('⚠'), message);\n },\n info: (message: string) => {\n console.log(chalk.blue('ℹ'), message);\n },\n log: (message: string) => {\n console.log(message);\n },\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, modify, applyEdits } from 'jsonc-parser';\nimport { loadFile, writeFile, generateCode, parseModule, builders } from 'magicast';\nimport { addVitePlugin } from 'magicast/helpers';\nimport { logger } from '../utils/logger.js';\n\ninterface ScaffoldOptions {\n force?: boolean;\n}\n\n// Template for wrangler.jsonc\nconst WRANGLER_TEMPLATE = (name: string) => `{\n \"$schema\": \"node_modules/wrangler/config-schema.json\",\n \"name\": \"${name}\",\n \"main\": \"worker/index.ts\",\n \"compatibility_date\": \"2025-01-01\",\n \"compatibility_flags\": [\"nodejs_compat\"],\n \"observability\": {\n \"enabled\": true\n },\n \"assets\": {\n \"directory\": \"dist\",\n \"not_found_handling\": \"single-page-application\",\n \"binding\": \"ASSETS\",\n \"run_worker_first\": [\"/**\"]\n },\n \"durable_objects\": {\n \"bindings\": [\n {\n \"name\": \"AGENT_BUILDER_THREAD\",\n \"class_name\": \"DurableThread\"\n },\n {\n \"name\": \"AGENT_BUILDER\",\n \"class_name\": \"DurableAgentBuilder\"\n }\n ]\n },\n \"migrations\": [\n {\n \"tag\": \"v1\",\n \"new_sqlite_classes\": [\"DurableThread\"]\n },\n {\n \"tag\": \"v2\",\n \"new_sqlite_classes\": [\"DurableAgentBuilder\"]\n }\n ]\n}\n`;\n\n// Templates for Durable Object files\nconst THREAD_TS = `import { DurableThread } from 'virtual:@standardagents/builder'\n\nexport default class Thread extends DurableThread {}\n`;\n\nconst AGENT_BUILDER_TS = `import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n\nexport default class AgentBuilder extends DurableAgentBuilder {}\n`;\n\n// Worker entry point template\nconst WORKER_INDEX = `import { router } from \"virtual:@standardagents/builder\"\nimport DurableThread from '../agents/Thread';\nimport DurableAgentBuilder from '../agents/AgentBuilder';\n\nexport default {\n async fetch(request, env) {\n const res = await router(request, env)\n return res ?? new Response(null, { status: 404 })\n },\n} satisfies ExportedHandler<Env>\n\nexport { DurableThread, DurableAgentBuilder }\n`;\n\n// CLAUDE.md documentation files\nconst TOOLS_CLAUDE_MD = `# Custom Tools\n\nThis directory contains custom tools that your AI agents can call during execution.\n\n## What Are Tools?\n\nTools are functions that extend your agent's capabilities beyond text generation. They allow agents to:\n- Fetch external data (APIs, databases)\n- Perform calculations\n- Execute side effects (send emails, create records)\n- Chain to other prompts or agents\n\n## Creating a Tool\n\nCreate a new file in this directory:\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool(\n 'Description of what this tool does',\n z.object({\n param1: z.string().describe('Description of param1'),\n }),\n async (flow, args) => {\n // Tool implementation\n return {\n status: 'success',\n result: JSON.stringify({ data: 'result' })\n };\n }\n);\n\\`\\`\\`\n\nTools are auto-discovered at runtime. No manual registration needed!\n`;\n\nconst HOOKS_CLAUDE_MD = `# Lifecycle Hooks\n\nThis directory contains lifecycle hooks that intercept and modify agent execution at key points.\n\n## What Are Hooks?\n\nHooks are optional functions that run at specific points during agent execution:\n- **Before** LLM requests (prefilter messages)\n- **After** LLM responses (post-process messages)\n- At other lifecycle events (message creation, tool execution, etc.)\n\n## Creating a Hook\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n // Filter or modify messages before sending to LLM\n return messages;\n});\n\\`\\`\\`\n\nHook files must be named exactly as the hook type (e.g., \\`prefilter_llm_history.ts\\`).\n`;\n\nconst API_CLAUDE_MD = `# Thread-Specific API Endpoints\n\nThis directory contains custom API endpoints that operate on specific threads.\n\n## What Are Thread Endpoints?\n\nThread endpoints are API routes that:\n- Automatically receive a specific thread's Durable Object instance\n- Can access thread-local SQLite storage\n- Perform operations in the context of a conversation\n- Use file-based routing for automatic discovery\n\n## Creating an Endpoint\n\n\\`\\`\\`typescript\n// agents/api/summary.get.ts -> GET /agents/api/threads/:id/summary\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const messages = await thread.getMessages();\n return new Response(JSON.stringify({ count: messages.length }), {\n headers: { 'Content-Type': 'application/json' }\n });\n});\n\\`\\`\\`\n\nPattern: \\`{name}.{method}.ts\\` (e.g., \\`summary.get.ts\\`, \\`export.post.ts\\`)\n`;\n\nconst AGENTS_CLAUDE_MD = `# Agent Definitions\n\nThis directory contains your AI agent definitions.\n\n## Creating an Agent\n\n\\`\\`\\`typescript\nimport { defineAgent } from '@standardagents/builder';\n\nexport default defineAgent({\n name: 'my-agent',\n type: 'ai_human',\n title: 'My Agent',\n defaultPrompt: 'my-prompt',\n defaultModel: 'gpt-4o',\n tools: ['my_tool'],\n});\n\\`\\`\\`\n\nAgent types:\n- \\`ai_human\\`: Human interacts with AI agent\n- \\`dual_ai\\`: Two AI agents interact with each other\n`;\n\nconst PROMPTS_CLAUDE_MD = `# Prompt Definitions\n\nThis directory contains your prompt/system message definitions.\n\n## Creating a Prompt\n\n\\`\\`\\`typescript\nimport { definePrompt } from '@standardagents/builder';\n\nexport default definePrompt({\n name: 'my-prompt',\n model: 'gpt-4o',\n systemPrompt: 'You are a helpful assistant...',\n tools: ['search', 'calculate'],\n});\n\\`\\`\\`\n`;\n\nconst MODELS_CLAUDE_MD = `# Model Definitions\n\nThis directory contains your AI model configurations.\n\n## Creating a Model\n\n\\`\\`\\`typescript\nimport { defineModel } from '@standardagents/builder';\n\nexport default defineModel({\n name: 'gpt-4o',\n model: 'gpt-4o',\n provider: 'openai',\n inputPrice: 2.5,\n outputPrice: 10,\n});\n\\`\\`\\`\n\nSupported providers: \\`openai\\`, \\`anthropic\\`, \\`openrouter\\`, \\`google\\`\n`;\n\n// Utility functions\nfunction getProjectName(cwd: string): string {\n const packageJsonPath = path.join(cwd, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkg.name) {\n return pkg.name.replace(/^@[^/]+\\//, ''); // Remove scope if present\n }\n } catch {\n // Ignore parse errors\n }\n }\n return path.basename(cwd);\n}\n\nfunction findViteConfig(cwd: string): string | null {\n const candidates = ['vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nfunction findWranglerConfig(cwd: string): string | null {\n const candidates = ['wrangler.jsonc', 'wrangler.json'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nasync function modifyViteConfig(configPath: string, force: boolean): Promise<boolean> {\n try {\n const mod = await loadFile(configPath);\n\n // Check if plugins already include our plugins\n const code = fs.readFileSync(configPath, 'utf-8');\n const hasCloudflare = code.includes('@cloudflare/vite-plugin') || code.includes('cloudflare()');\n const hasAgentBuilder = code.includes('@standardagents/builder') || code.includes('agentbuilder()');\n\n if (hasCloudflare && hasAgentBuilder && !force) {\n logger.info('Vite config already includes Standard Agents plugins');\n return true;\n }\n\n // Add cloudflare plugin if not present\n if (!hasCloudflare || force) {\n addVitePlugin(mod, {\n from: '@cloudflare/vite-plugin',\n imported: 'cloudflare',\n constructor: 'cloudflare',\n });\n logger.success('Added cloudflare plugin to vite.config');\n }\n\n // Add agentbuilder plugin if not present\n if (!hasAgentBuilder || force) {\n addVitePlugin(mod, {\n from: '@standardagents/builder',\n imported: 'agentbuilder',\n constructor: 'agentbuilder',\n options: { mountPoint: '/' },\n });\n logger.success('Added agentbuilder plugin to vite.config');\n }\n\n await writeFile(mod, configPath);\n return true;\n } catch (error) {\n logger.warning(`Could not automatically modify vite.config: ${error}`);\n logger.log('');\n logger.log('Please manually add the following to your vite.config.ts:');\n logger.log('');\n logger.log(` import { cloudflare } from '@cloudflare/vite-plugin'`);\n logger.log(` import { agentbuilder } from '@standardagents/builder'`);\n logger.log('');\n logger.log(` plugins: [cloudflare(), agentbuilder({ mountPoint: '/' })]`);\n logger.log('');\n return false;\n }\n}\n\nfunction createOrUpdateWranglerConfig(cwd: string, projectName: string, force: boolean): boolean {\n const existingConfig = findWranglerConfig(cwd);\n\n if (existingConfig && !force) {\n // Update existing config\n try {\n const text = fs.readFileSync(existingConfig, 'utf-8');\n const config = parse(text);\n\n // Check if already configured\n const hasBindings = config.durable_objects?.bindings?.some(\n (b: any) => b.name === 'AGENT_BUILDER_THREAD' || b.name === 'AGENT_BUILDER'\n );\n\n if (hasBindings) {\n logger.info('wrangler.jsonc already configured for Standard Agents');\n return true;\n }\n\n // Add bindings to existing config\n let result = text;\n\n // Add durable_objects if not present\n if (!config.durable_objects) {\n const edits = modify(result, ['durable_objects'], {\n bindings: [\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n ]\n }, {});\n result = applyEdits(result, edits);\n } else {\n // Add to existing bindings\n const bindings = config.durable_objects.bindings || [];\n bindings.push(\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n );\n const edits = modify(result, ['durable_objects', 'bindings'], bindings, {});\n result = applyEdits(result, edits);\n }\n\n // Add migrations if not present\n if (!config.migrations) {\n const edits = modify(result, ['migrations'], [\n { tag: 'v1', new_sqlite_classes: ['DurableThread'] },\n { tag: 'v2', new_sqlite_classes: ['DurableAgentBuilder'] }\n ], {});\n result = applyEdits(result, edits);\n }\n\n // Update main entry point if needed\n if (!config.main || !config.main.includes('worker')) {\n const edits = modify(result, ['main'], 'worker/index.ts', {});\n result = applyEdits(result, edits);\n }\n\n // Add assets configuration if not present\n if (!config.assets) {\n const edits = modify(result, ['assets'], {\n directory: 'dist',\n not_found_handling: 'single-page-application',\n binding: 'ASSETS',\n run_worker_first: ['/**']\n }, {});\n result = applyEdits(result, edits);\n }\n\n fs.writeFileSync(existingConfig, result, 'utf-8');\n logger.success('Updated wrangler.jsonc with Standard Agents configuration');\n return true;\n } catch (error) {\n logger.warning(`Could not update wrangler config: ${error}`);\n return false;\n }\n }\n\n // Create new wrangler.jsonc\n const wranglerPath = path.join(cwd, 'wrangler.jsonc');\n const sanitizedName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n fs.writeFileSync(wranglerPath, WRANGLER_TEMPLATE(sanitizedName), 'utf-8');\n logger.success('Created wrangler.jsonc');\n return true;\n}\n\nfunction getWorkerEntryPoint(cwd: string): string {\n // Check wrangler config for main entry\n const wranglerConfig = findWranglerConfig(cwd);\n if (wranglerConfig) {\n try {\n const text = fs.readFileSync(wranglerConfig, 'utf-8');\n const config = parse(text);\n if (config.main) {\n return path.join(cwd, config.main);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Default to worker/index.ts\n return path.join(cwd, 'worker', 'index.ts');\n}\n\nasync function createOrUpdateWorkerEntry(cwd: string, force: boolean): Promise<boolean> {\n const entryPath = getWorkerEntryPoint(cwd);\n const entryDir = path.dirname(entryPath);\n\n // Create worker directory if needed\n if (!fs.existsSync(entryDir)) {\n fs.mkdirSync(entryDir, { recursive: true });\n logger.success(`Created ${path.relative(cwd, entryDir)} directory`);\n }\n\n // If file doesn't exist, create it\n if (!fs.existsSync(entryPath)) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n // File exists - try to modify it\n const content = fs.readFileSync(entryPath, 'utf-8');\n\n // Check if already configured\n const hasRouter = content.includes('virtual:@standardagents/builder') && content.includes('router');\n const hasDurableExports = content.includes('DurableThread') && content.includes('DurableAgentBuilder');\n\n if (hasRouter && hasDurableExports && !force) {\n logger.info(`${path.relative(cwd, entryPath)} already configured`);\n return true;\n }\n\n try {\n const mod = await loadFile(entryPath);\n\n // Add imports\n if (!content.includes('virtual:@standardagents/builder') || force) {\n mod.imports.$add({\n from: 'virtual:@standardagents/builder',\n imported: 'router',\n local: 'router',\n });\n }\n\n if (!content.includes(\"'../agents/Thread'\") || force) {\n mod.imports.$add({\n from: '../agents/Thread',\n imported: 'default',\n local: 'DurableThread',\n });\n }\n\n if (!content.includes(\"'../agents/AgentBuilder'\") || force) {\n mod.imports.$add({\n from: '../agents/AgentBuilder',\n imported: 'default',\n local: 'DurableAgentBuilder',\n });\n }\n\n // Check if there's a default export with fetch\n const { code } = generateCode(mod);\n\n // If we can't easily add the router, just overwrite\n if (force || !hasRouter) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Updated ${path.relative(cwd, entryPath)} with Standard Agents router`);\n }\n\n return true;\n } catch (error) {\n // Fall back to template\n if (force) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n logger.warning(`Could not automatically modify ${path.relative(cwd, entryPath)}`);\n logger.log('');\n logger.log('Please ensure your worker entry point includes:');\n logger.log('');\n logger.log(` import { router } from \"virtual:@standardagents/builder\"`);\n logger.log(` import DurableThread from '../agents/Thread';`);\n logger.log(` import DurableAgentBuilder from '../agents/AgentBuilder';`);\n logger.log('');\n logger.log(' // In your fetch handler:');\n logger.log(' const res = router(request, env)');\n logger.log(' if (res) return res');\n logger.log('');\n logger.log(' // Export Durable Objects:');\n logger.log(' export { DurableThread, DurableAgentBuilder }');\n logger.log('');\n return false;\n }\n}\n\nfunction createDurableObjects(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n // Create Thread.ts\n const threadPath = path.join(agentsDir, 'Thread.ts');\n if (!fs.existsSync(threadPath)) {\n fs.writeFileSync(threadPath, THREAD_TS, 'utf-8');\n logger.success('Created agents/Thread.ts');\n } else {\n logger.info('agents/Thread.ts already exists');\n }\n\n // Create AgentBuilder.ts\n const agentBuilderPath = path.join(agentsDir, 'AgentBuilder.ts');\n if (!fs.existsSync(agentBuilderPath)) {\n fs.writeFileSync(agentBuilderPath, AGENT_BUILDER_TS, 'utf-8');\n logger.success('Created agents/AgentBuilder.ts');\n } else {\n logger.info('agents/AgentBuilder.ts already exists');\n }\n}\n\nfunction createDirectoriesAndDocs(cwd: string): void {\n const directories = [\n { path: 'agents/agents', doc: AGENTS_CLAUDE_MD },\n { path: 'agents/prompts', doc: PROMPTS_CLAUDE_MD },\n { path: 'agents/models', doc: MODELS_CLAUDE_MD },\n { path: 'agents/tools', doc: TOOLS_CLAUDE_MD },\n { path: 'agents/hooks', doc: HOOKS_CLAUDE_MD },\n { path: 'agents/api', doc: API_CLAUDE_MD },\n ];\n\n for (const dir of directories) {\n const dirPath = path.join(cwd, dir.path);\n const docPath = path.join(dirPath, 'CLAUDE.md');\n\n // Create directory\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n logger.success(`Created ${dir.path}`);\n }\n\n // Create CLAUDE.md\n if (!fs.existsSync(docPath)) {\n fs.writeFileSync(docPath, dir.doc, 'utf-8');\n logger.success(`Created ${dir.path}/CLAUDE.md`);\n }\n }\n}\n\nfunction updateTsConfig(cwd: string): void {\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsconfigPath)) {\n logger.info('No tsconfig.json found, skipping TypeScript configuration');\n return;\n }\n\n try {\n const text = fs.readFileSync(tsconfigPath, 'utf-8');\n const config = parse(text);\n let result = text;\n\n // Add types to compilerOptions\n const types = config.compilerOptions?.types || [];\n const newTypes = [\n './worker-configuration.d.ts',\n './.agents/types.d.ts',\n './.agents/virtual-module.d.ts'\n ].filter(t => !types.includes(t));\n\n if (newTypes.length > 0) {\n const allTypes = [...types, ...newTypes];\n const edits = modify(result, ['compilerOptions', 'types'], allTypes, {});\n result = applyEdits(result, edits);\n }\n\n // Add worker and agents to include\n const include = config.include || [];\n const newIncludes = ['worker', 'agents'].filter(i => !include.includes(i));\n\n if (newIncludes.length > 0) {\n const allIncludes = [...include, ...newIncludes];\n const edits = modify(result, ['include'], allIncludes, {});\n result = applyEdits(result, edits);\n }\n\n if (newTypes.length > 0 || newIncludes.length > 0) {\n fs.writeFileSync(tsconfigPath, result, 'utf-8');\n logger.success('Updated tsconfig.json with Standard Agents types');\n } else {\n logger.info('tsconfig.json already configured');\n }\n } catch (error) {\n logger.warning('Could not update tsconfig.json, you may need to add types manually');\n }\n}\n\nfunction cleanupViteDefaults(cwd: string): void {\n // Remove default Vite files that we don't need\n const filesToRemove = [\n 'src/main.ts',\n 'src/style.css',\n 'src/counter.ts',\n 'src/typescript.svg',\n 'src/vite-env.d.ts',\n 'index.html',\n 'public/vite.svg',\n ];\n\n const dirsToRemove = ['src', 'public'];\n\n for (const file of filesToRemove) {\n const filePath = path.join(cwd, file);\n if (fs.existsSync(filePath)) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // Ignore errors\n }\n }\n }\n\n // Remove empty directories\n for (const dir of dirsToRemove) {\n const dirPath = path.join(cwd, dir);\n if (fs.existsSync(dirPath)) {\n try {\n const files = fs.readdirSync(dirPath);\n if (files.length === 0) {\n fs.rmdirSync(dirPath);\n }\n } catch {\n // Ignore errors\n }\n }\n }\n}\n\nexport async function scaffold(options: ScaffoldOptions = {}) {\n const cwd = process.cwd();\n const projectName = getProjectName(cwd);\n const force = options.force || false;\n\n logger.info('Scaffolding Standard Agents...');\n logger.log('');\n\n // 1. Find and modify vite.config\n const viteConfigPath = findViteConfig(cwd);\n if (viteConfigPath) {\n await modifyViteConfig(viteConfigPath, force);\n } else {\n logger.warning('No vite.config found. Please create one with cloudflare and agentbuilder plugins.');\n }\n\n // 2. Create or update wrangler.jsonc\n createOrUpdateWranglerConfig(cwd, projectName, force);\n\n // 3. Create or update worker entry point\n await createOrUpdateWorkerEntry(cwd, force);\n\n // 4. Create Durable Object files\n createDurableObjects(cwd);\n\n // 5. Create agent directories with documentation\n createDirectoriesAndDocs(cwd);\n\n // 6. Update tsconfig.json\n updateTsConfig(cwd);\n\n // 7. Clean up default Vite files (only if force is true, meaning fresh project)\n if (force) {\n cleanupViteDefaults(cwd);\n }\n\n logger.log('');\n logger.success('Standard Agents scaffolding complete!');\n logger.log('');\n logger.log('Your project structure:');\n logger.log('');\n logger.log(' agents/');\n logger.log(' ├── Thread.ts # Durable Object for threads');\n logger.log(' ├── AgentBuilder.ts # Durable Object for agent state');\n logger.log(' ├── agents/ # Agent definitions');\n logger.log(' ├── prompts/ # Prompt definitions');\n logger.log(' ├── models/ # Model configurations');\n logger.log(' ├── tools/ # Custom tools');\n logger.log(' ├── hooks/ # Lifecycle hooks');\n logger.log(' └── api/ # Thread API endpoints');\n logger.log(' worker/');\n logger.log(' └── index.ts # Cloudflare Worker entry point');\n logger.log('');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport crypto from 'node:crypto';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { logger } from '../utils/logger.js';\nimport { scaffold } from './scaffold.js';\n\ninterface InitOptions {\n yes?: boolean;\n template?: string;\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const onData = (char: string) => {\n const c = char.toString();\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004': // Ctrl+D\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n break;\n case '\\u0003': // Ctrl+C\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F': // Backspace\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n }\n break;\n default:\n password += c;\n stdout.write('*');\n break;\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Use shell: false to properly handle arguments with spaces\n // Node's spawn will handle argument escaping automatically\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with hyphens\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n}\n\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | 'bun' {\n // Check environment variable first (most reliable when running via npx/pnpm exec)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n // Check for lockfiles\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\nasync function selectPackageManager(detected: 'npm' | 'pnpm' | 'yarn' | 'bun'): Promise<'npm' | 'pnpm' | 'yarn' | 'bun'> {\n const options = ['npm', 'pnpm', 'yarn', 'bun'] as const;\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n // Move cursor up to overwrite previous render (except first time)\n stdout.write('\\x1B[?25l'); // Hide cursor\n\n // Clear and redraw\n stdout.write(`\\x1B[${options.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n // Handle arrow keys (escape sequences)\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nexport async function init(projectNameArg?: string, options: InitOptions = {}) {\n const cwd = process.cwd();\n const detectedPm = detectPackageManager();\n const template = options.template || 'vanilla-ts';\n\n logger.log('');\n logger.info('Creating a new Standard Agents project...');\n logger.log('');\n\n // Select package manager\n let pm: 'npm' | 'pnpm' | 'yarn' | 'bun';\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Run create vite\n logger.log('');\n logger.info(`Step 1: Creating Vite project with ${template} template...`);\n logger.log('');\n\n try {\n // Determine the correct create command based on package manager\n // All package managers should use create-vite@latest to ensure the latest version\n // Use --no-interactive to skip prompts (like \"Install with npm and start now?\")\n let createCmd: string;\n let createArgs: string[];\n\n switch (pm) {\n case 'pnpm':\n createCmd = 'pnpm';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'yarn':\n createCmd = 'yarn';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'bun':\n createCmd = 'bun';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n default:\n createCmd = 'npm';\n createArgs = ['create', 'vite@latest', projectName, '--', '--template', template, '--no-interactive'];\n }\n\n await runCommand(createCmd, createArgs, cwd);\n } catch (error) {\n logger.error('Failed to create Vite project');\n process.exit(1);\n }\n\n // Create vite.config.ts if it doesn't exist (some templates may not include one)\n const viteConfigPath = path.join(projectPath, 'vite.config.ts');\n if (!fs.existsSync(viteConfigPath)) {\n const viteConfigContent = `import { defineConfig } from 'vite'\n\nexport default defineConfig({\n plugins: [],\n})\n`;\n fs.writeFileSync(viteConfigPath, viteConfigContent, 'utf-8');\n logger.success('Created vite.config.ts');\n }\n\n // Update package.json name to kebab-case (handles spaces and special characters)\n const packageJsonPath = path.join(projectPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const kebabName = toKebabCase(projectName);\n if (packageJson.name !== kebabName) {\n packageJson.name = kebabName;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n // Step 2: Install Standard Agents dependencies\n logger.log('');\n logger.info('Step 2: Installing Standard Agents dependencies...');\n logger.log('');\n\n try {\n const installCmd = pm === 'npm' ? 'install' : 'add';\n const devFlag = pm === 'npm' ? '--save-dev' : '-D';\n\n await runCommand(pm, [\n installCmd, devFlag,\n '@cloudflare/vite-plugin',\n '@standardagents/builder',\n 'wrangler',\n 'zod'\n ], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Step 3: Run scaffold in the new project directory\n logger.log('');\n logger.info('Step 3: Configuring Standard Agents...');\n logger.log('');\n\n // Change to project directory for scaffold\n process.chdir(projectPath);\n\n await scaffold({ force: true });\n\n // Step 4: Configure environment variables\n logger.log('');\n logger.info('Step 4: Configuring environment variables...');\n logger.log('');\n\n // Generate encryption key\n const encryptionKey = crypto.randomBytes(32).toString('hex');\n\n // Ask for API keys and admin password\n let openrouterKey = '';\n let openaiKey = '';\n let adminPassword = '';\n\n if (!options.yes) {\n logger.log('API keys are optional but required to use AI models.');\n logger.log('You can add them later by editing .dev.vars');\n logger.log('');\n\n openrouterKey = await prompt('OpenRouter API key (optional, press Enter to skip): ');\n openaiKey = await prompt('OpenAI API key (optional, press Enter to skip): ');\n\n logger.log('');\n logger.log('Set a temporary admin password for development access.');\n logger.log('Press Enter to use the default password \"admin\".');\n logger.log('');\n\n while (true) {\n adminPassword = await promptPassword('Temporary admin password: ');\n\n if (!adminPassword) {\n adminPassword = 'admin';\n break;\n }\n\n const confirmPassword = await promptPassword('Confirm password: ');\n\n if (adminPassword === confirmPassword) {\n break;\n } else {\n logger.warning('Passwords do not match. Please try again.');\n logger.log('');\n adminPassword = '';\n }\n }\n }\n\n // Default admin password if not provided (for --yes flag)\n if (!adminPassword) {\n adminPassword = 'admin';\n }\n\n // Create .dev.vars file\n const devVarsLines: string[] = [\n '# Standard Agents Environment Variables',\n '# This file contains secrets for local development only',\n '# Do not commit this file to version control',\n '',\n '# Encryption key for secure data (auto-generated)',\n `ENCRYPTION_KEY=${encryptionKey}`,\n '',\n '# Temporary admin password for development access',\n `SUPER_ADMIN_PASSWORD=${adminPassword}`,\n '',\n '# AI Provider API Keys',\n '# Uncomment and add your keys as needed',\n ];\n\n if (openrouterKey) {\n devVarsLines.push(`OPENROUTER_API_KEY=${openrouterKey}`);\n } else {\n devVarsLines.push('# OPENROUTER_API_KEY=your-openrouter-key');\n }\n\n if (openaiKey) {\n devVarsLines.push(`OPENAI_API_KEY=${openaiKey}`);\n } else {\n devVarsLines.push('# OPENAI_API_KEY=your-openai-key');\n }\n\n devVarsLines.push('');\n\n const devVarsPath = path.join(projectPath, '.dev.vars');\n fs.writeFileSync(devVarsPath, devVarsLines.join('\\n'), 'utf-8');\n logger.success('Created .dev.vars with encryption key');\n\n // Add .dev.vars to .gitignore if it exists\n const gitignorePath = path.join(projectPath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.dev.vars')) {\n fs.appendFileSync(gitignorePath, '\\n# Local environment variables\\n.dev.vars\\n');\n logger.success('Added .dev.vars to .gitignore');\n }\n }\n\n // Step 5: Generate Cloudflare types\n logger.log('');\n logger.info('Step 5: Generating Cloudflare types...');\n logger.log('');\n\n try {\n await runCommand('npx', ['wrangler', 'types'], projectPath);\n } catch (error) {\n logger.warning('Could not generate types automatically. Run \"npx wrangler types\" manually.');\n }\n\n // Done!\n logger.log('');\n logger.success('Project created successfully!');\n logger.log('');\n logger.log('Next steps:');\n logger.log('');\n logger.log(` cd ${projectName}`);\n logger.log(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n logger.log('');\n logger.log('For more information, visit: https://standardagents.ai/docs');\n}\n","import { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { init } from './commands/init.js';\nimport { scaffold } from './commands/scaffold.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('agents')\n .description('CLI tool for Standard Agents / AgentBuilder')\n .version(pkg.version);\n\nprogram\n .command('init [project-name]')\n .description('Create a new Standard Agents project (runs create vite, then scaffold)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--template <template>', 'Vite template to use', 'vanilla-ts')\n .action(init);\n\nprogram\n .command('scaffold')\n .description('Add Standard Agents to an existing Vite project')\n .option('--force', 'Overwrite existing configuration')\n .action(scaffold);\n\nprogram.parse();\n"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/templates/root.ts","../src/templates/models.ts","../src/templates/prompts.ts","../src/templates/agents.ts","../src/templates/tools.ts","../src/templates/hooks.ts","../src/templates/api.ts","../src/commands/scaffold.ts","../src/commands/init.ts","../src/index.ts"],"names":["pkg","resolve","fs","path","__dirname"],"mappings":";;;;;;;;;;;;;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,QAAG,GAAG,OAAO,CAAA;AAAA,EACvC,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,OAAA,KAAoB;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,QAAG,GAAG,OAAO,CAAA;AAAA,EACrC,CAAA;AAAA,EACA,OAAA,EAAS,CAAC,OAAA,KAAoB;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,QAAG,GAAG,OAAO,CAAA;AAAA,EACxC,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,OAAA,KAAoB;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,QAAG,GAAG,OAAO,CAAA;AAAA,EACtC,CAAA;AAAA,EACA,GAAA,EAAK,CAAC,OAAA,KAAoB;AACxB,IAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,EACrB;AACF,CAAA;;;AClBO,IAAM,cAAA,GAAiB,CAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;;;ACAvB,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,iBAAA,GAAoB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACA1B,IAAM,gBAAA,GAAmB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAzB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;;;ACAxB,IAAM,eAAA,GAAkB,CAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AA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","file":"index.js","sourcesContent":["import chalk from 'chalk';\n\nexport const logger = {\n success: (message: string) => {\n console.log(chalk.green('✓'), message);\n },\n error: (message: string) => {\n console.log(chalk.red('✗'), message);\n },\n warning: (message: string) => {\n console.log(chalk.yellow('⚠'), message);\n },\n info: (message: string) => {\n console.log(chalk.blue('ℹ'), message);\n },\n log: (message: string) => {\n console.log(message);\n },\n};\n","export const ROOT_CLAUDE_MD = `# Standard Agents\n\nThis project uses Standard Agents - a framework for building AI agents on Cloudflare Workers.\n\n## Architecture Overview\n\nStandard Agents uses a **composition model** where four core components work together:\n\n\\`\\`\\`\nModel → Prompt → Agent → Thread\n │ │ │ │\n │ │ │ └─ Conversation instance (Durable Object)\n │ │ └─ Orchestrates conversation flow\n │ └─ System instructions + tools\n └─ LLM provider configuration\n\\`\\`\\`\n\n**Models** define which LLM to use (provider, model ID, pricing, fallbacks).\n**Prompts** define what the LLM should do (system instructions, available tools).\n**Agents** orchestrate conversations (which prompt, stop conditions, turn limits).\n**Threads** are individual conversation instances with persistent storage.\n\n## How Components Compose\n\n### Basic Flow\n1. User creates a thread with an agent\n2. Agent uses its configured prompt\n3. Prompt specifies the model and tools\n4. LLM responds, potentially calling tools\n5. Tools execute and return results\n6. Loop continues until stop condition\n\n### Sub-Prompts (Prompts as Tools)\nPrompts can call other prompts as tools. This enables:\n- **Specialized reasoning**: A main prompt delegates to expert sub-prompts\n- **Structured outputs**: Sub-prompt validates and formats data\n- **Context isolation**: Sub-prompt gets fresh context without full history\n\n\\`\\`\\`typescript\n// Main prompt can call 'data_extractor' as a tool\ndefinePrompt({\n name: 'main_assistant',\n tools: ['data_extractor'], // Another prompt exposed as tool\n // ...\n});\n\\`\\`\\`\n\n### Agent Handoffs (Agents as Tools)\nAgents can delegate to other agents entirely:\n- **Specialization**: Route to domain-specific agents\n- **Escalation**: Hand off to more capable agents\n- **Workflows**: Chain agents for multi-step processes\n\n\\`\\`\\`typescript\ndefineAgent({\n name: 'triage_agent',\n exposeAsTool: true,\n toolDescription: 'Hand off to triage for initial assessment',\n // ...\n});\n\\`\\`\\`\n\n## File Structure\n\n\\`\\`\\`\nagents/\n├── CLAUDE.md # This file\n├── Thread.ts # Durable Object for conversation threads\n├── AgentBuilder.ts # Durable Object for metadata\n├── agents/ # Agent definitions (defineAgent)\n│ └── CLAUDE.md\n├── prompts/ # Prompt definitions (definePrompt)\n│ └── CLAUDE.md\n├── models/ # Model configurations (defineModel)\n│ └── CLAUDE.md\n├── tools/ # Custom tools (defineTool)\n│ └── CLAUDE.md\n├── hooks/ # Lifecycle hooks (defineHook)\n│ └── CLAUDE.md\n└── api/ # Thread API endpoints (defineThreadEndpoint)\n └── CLAUDE.md\n\\`\\`\\`\n\nFiles are **auto-discovered** at runtime. No manual registration needed.\n\n## FlowState\n\n\\`FlowState\\` is the central state object available in tools and hooks:\n\n\\`\\`\\`typescript\ninterface FlowState {\n thread: {\n id: string; // Thread identifier\n instance: DurableThread; // Durable Object instance\n };\n agent: AgentConfig; // Current agent configuration\n prompt: PromptConfig; // Current prompt configuration\n model: ModelConfig; // Current model configuration\n messages: Message[]; // Conversation history\n env: Env; // Cloudflare Worker environment\n rootState: FlowState; // Parent state (for sub-prompts)\n}\n\\`\\`\\`\n\nAccess in tools:\n\\`\\`\\`typescript\nexport default defineTool('...', schema, async (flow, args) => {\n const threadId = flow.thread.id;\n const messages = flow.messages;\n // ...\n});\n\\`\\`\\`\n\n## Quick Reference\n\n| Function | Purpose | Directory |\n|----------|---------|-----------|\n| \\`defineModel()\\` | Configure LLM provider | \\`agents/models/\\` |\n| \\`definePrompt()\\` | System instructions + tools | \\`agents/prompts/\\` |\n| \\`defineAgent()\\` | Conversation orchestration | \\`agents/agents/\\` |\n| \\`defineTool()\\` | Custom tool functions | \\`agents/tools/\\` |\n| \\`defineHook()\\` | Lifecycle interception | \\`agents/hooks/\\` |\n| \\`defineThreadEndpoint()\\` | Custom API routes | \\`agents/api/\\` |\n\n## Runtime Utilities\n\nImport from \\`@standardagents/builder\\`:\n\n\\`\\`\\`typescript\nimport {\n queueTool, // Queue another tool for execution\n injectMessage, // Add message without triggering execution\n getMessages, // Retrieve message history\n emitThreadEvent, // Send custom WebSocket events\n} from '@standardagents/builder';\n\\`\\`\\`\n\n## Documentation\n\nFull documentation: https://docs.standardagentbuilder.com\n\n- [Architecture Overview](https://docs.standardagentbuilder.com/introduction/architecture)\n- [Models](https://docs.standardagentbuilder.com/core-concepts/models)\n- [Prompts](https://docs.standardagentbuilder.com/core-concepts/prompts)\n- [Agents](https://docs.standardagentbuilder.com/core-concepts/agents)\n- [Tools](https://docs.standardagentbuilder.com/core-concepts/tools)\n- [Hooks](https://docs.standardagentbuilder.com/core-concepts/hooks)\n- [FlowState](https://docs.standardagentbuilder.com/core-concepts/flowstate)\n- [Thread API](https://docs.standardagentbuilder.com/core-concepts/api)\n`;\n","export const MODELS_CLAUDE_MD = `# Model Definitions\n\nModels define which LLM provider and model to use for prompts.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this model configuration |\n| \\`provider\\` | \\`'openai' \\\\| 'anthropic' \\\\| 'openrouter' \\\\| 'google'\\` | Yes | LLM provider |\n| \\`model\\` | \\`string\\` | Yes | Model ID sent to provider API |\n| \\`fallbacks\\` | \\`string[]\\` | No | Fallback model names to try if primary fails |\n| \\`inputPrice\\` | \\`number\\` | No | Cost per 1M input tokens (USD) |\n| \\`outputPrice\\` | \\`number\\` | No | Cost per 1M output tokens (USD) |\n| \\`cachedPrice\\` | \\`number\\` | No | Cost per 1M cached input tokens |\n| \\`includedProviders\\` | \\`string[]\\` | No | Provider prefixes for OpenRouter routing |\n\n## Example\n\n\\`\\`\\`typescript\nimport { defineModel } from '@standardagents/builder';\n\nexport default defineModel({\n name: 'gpt-4o',\n provider: 'openai',\n model: 'gpt-4o',\n fallbacks: ['gpt-4-turbo', 'gpt-3.5-turbo'],\n inputPrice: 2.5,\n outputPrice: 10,\n});\n\\`\\`\\`\n\n## Provider API Keys\n\nSet these environment variables in \\`.dev.vars\\` (local) or Cloudflare secrets (production):\n\n| Provider | Environment Variable |\n|----------|---------------------|\n| OpenAI | \\`OPENAI_API_KEY\\` |\n| Anthropic | \\`ANTHROPIC_API_KEY\\` |\n| OpenRouter | \\`OPENROUTER_API_KEY\\` |\n| Google | \\`GOOGLE_API_KEY\\` |\n\n## Fallback Strategy\n\nWhen a model fails, fallbacks are tried in order:\n1. Primary model (2 attempts)\n2. First fallback (2 attempts)\n3. Second fallback (2 attempts)\n4. ...and so on\n\nRetries occur on: network errors, rate limits (429), server errors (5xx), auth errors (401).\n\n## OpenRouter Configuration\n\nFor OpenRouter, use the full model path:\n\n\\`\\`\\`typescript\nexport default defineModel({\n name: 'claude-3-opus',\n provider: 'openrouter',\n model: 'anthropic/claude-3-opus',\n includedProviders: ['anthropic'], // Prefer Anthropic's servers\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Name by use case**, not model ID (e.g., \\`fast_reasoning\\` not \\`gpt-4o-mini\\`)\n- **Configure fallbacks** for production reliability\n- **Set pricing** for cost tracking in logs\n- **Use environment variables** for API keys, never hardcode\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/model\n`;\n","export const PROMPTS_CLAUDE_MD = `# Prompt Definitions\n\nPrompts define system instructions, model selection, and available tools for LLM interactions.\n\n## Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this prompt |\n| \\`toolDescription\\` | \\`string\\` | Yes | Description shown when used as a tool |\n| \\`prompt\\` | \\`string \\\\| StructuredPrompt\\` | Yes | System instructions |\n| \\`model\\` | \\`string\\` | Yes | Model name to use (references \\`agents/models/\\`) |\n| \\`tools\\` | \\`(string \\\\| ToolConfig)[]\\` | No | Available tools for LLM |\n| \\`handoffAgents\\` | \\`string[]\\` | No | Agents this prompt can hand off to |\n| \\`includeChat\\` | \\`boolean\\` | No | Include full conversation history |\n| \\`includePastTools\\` | \\`boolean\\` | No | Include previous tool results |\n| \\`parallelToolCalls\\` | \\`boolean\\` | No | Allow multiple concurrent tool calls |\n| \\`toolChoice\\` | \\`'auto' \\\\| 'none' \\\\| 'required'\\` | No | Tool calling strategy |\n| \\`requiredSchema\\` | \\`z.ZodObject\\` | No | Input validation when called as tool |\n| \\`beforeTool\\` | \\`string\\` | No | Tool to run before LLM request |\n| \\`afterTool\\` | \\`string\\` | No | Tool to run after LLM response |\n| \\`reasoning\\` | \\`ReasoningConfig\\` | No | Extended thinking configuration |\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { definePrompt } from '@standardagents/builder';\n\nexport default definePrompt({\n name: 'customer_support',\n toolDescription: 'Handle customer support inquiries',\n model: 'gpt-4o',\n prompt: \\`You are a helpful customer support agent.\nAlways be polite and professional.\nIf you cannot help, escalate to a human.\\`,\n tools: ['search_knowledge_base', 'create_ticket'],\n includeChat: true,\n});\n\\`\\`\\`\n\n## Structured Prompts\n\nInclude other prompts for reusable instruction blocks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'main_assistant',\n toolDescription: 'Primary assistant',\n model: 'gpt-4o',\n prompt: [\n { type: 'text', content: 'You are a helpful assistant.\\\\n\\\\n' },\n { type: 'include', prompt: 'common_rules' }, // Includes another prompt\n { type: 'text', content: '\\\\n\\\\nBe concise.' },\n ],\n});\n\\`\\`\\`\n\n## Tool Configuration\n\nTools can be simple names or detailed configs:\n\n\\`\\`\\`typescript\ntools: [\n 'simple_tool', // Just the tool name\n {\n name: 'complex_tool',\n includeTextResponse: true, // Include sub-prompt text in result\n includeToolCalls: false, // Exclude sub-prompt tool calls\n includeErrors: true, // Include error details\n initUserMessageProperty: 'query', // Use this arg as initial message\n },\n],\n\\`\\`\\`\n\n## Input Validation\n\nValidate inputs when prompt is called as a tool:\n\n\\`\\`\\`typescript\nimport { z } from 'zod';\n\nexport default definePrompt({\n name: 'data_extractor',\n toolDescription: 'Extract structured data from text',\n model: 'gpt-4o',\n prompt: 'Extract the requested data from the input.',\n requiredSchema: z.object({\n text: z.string().describe('Text to extract from'),\n fields: z.array(z.string()).describe('Fields to extract'),\n }),\n});\n\\`\\`\\`\n\n## Extended Thinking (Reasoning)\n\nEnable for complex reasoning tasks:\n\n\\`\\`\\`typescript\nexport default definePrompt({\n name: 'code_reviewer',\n toolDescription: 'Review code for issues',\n model: 'claude-3-opus',\n prompt: 'Review the code thoroughly...',\n reasoning: {\n effort: 'high', // 'low' | 'medium' | 'high'\n maxTokens: 16000, // Max thinking tokens\n exclude: true, // Don't include thinking in response\n },\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Write clear instructions** - Structure with headers and bullet points\n- **Describe tools thoroughly** - LLMs decide based on descriptions\n- **Validate inputs with Zod** - Catch errors early\n- **Use \\`includeChat\\`** for conversational context\n- **Name by purpose**, not model (e.g., \\`support_agent\\` not \\`gpt4_prompt\\`)\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/prompt\n`;\n","export const AGENTS_CLAUDE_MD = `# Agent Definitions\n\nAgents orchestrate conversations by defining prompts, stop conditions, and turn limits.\n\n## Agent Properties\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`name\\` | \\`string\\` | Yes | Unique identifier for this agent |\n| \\`type\\` | \\`'ai_human' \\\\| 'dual_ai'\\` | No | Conversation type (default: \\`ai_human\\`) |\n| \\`sideA\\` | \\`SideConfig\\` | Yes | Configuration for side A (AI in ai_human) |\n| \\`sideB\\` | \\`SideConfig\\` | No | Configuration for side B (required for dual_ai) |\n| \\`maxSessionTurns\\` | \\`number\\` | No | Max total turns across both sides |\n| \\`exposeAsTool\\` | \\`boolean\\` | No | Allow other prompts to hand off to this agent |\n| \\`toolDescription\\` | \\`string\\` | No | Description when used as tool (required if exposeAsTool) |\n| \\`tags\\` | \\`string[]\\` | No | Tags for categorization and filtering |\n\n## Side Configuration\n\n| Property | Type | Required | Description |\n|----------|------|----------|-------------|\n| \\`label\\` | \\`string\\` | No | Display name for this side |\n| \\`prompt\\` | \\`string\\` | Yes | Prompt name to use (references \\`agents/prompts/\\`) |\n| \\`stopOnResponse\\` | \\`boolean\\` | No | Stop turn when LLM returns text (default: true) |\n| \\`stopTool\\` | \\`string\\` | No | Tool that stops this side's turn |\n| \\`stopToolResponseProperty\\` | \\`string\\` | No | Property to extract from stop tool result |\n| \\`endConversationTool\\` | \\`string\\` | No | Tool that ends the entire conversation |\n| \\`maxTurns\\` | \\`number\\` | No | Maximum turns for this side |\n| \\`manualStopCondition\\` | \\`boolean\\` | No | Enable custom stop handling via hooks |\n\n## Basic Example (AI-Human)\n\n\\`\\`\\`typescript\nimport { defineAgent } from '@standardagents/builder';\n\nexport default defineAgent({\n name: 'support_agent',\n type: 'ai_human',\n sideA: {\n label: 'Support',\n prompt: 'customer_support',\n stopOnResponse: true,\n endConversationTool: 'close_ticket',\n maxTurns: 50,\n },\n tags: ['support', 'tier-1'],\n});\n\\`\\`\\`\n\n## Dual-AI Example\n\nTwo AI agents conversing (e.g., debate, iterative refinement):\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'code_review_debate',\n type: 'dual_ai',\n maxSessionTurns: 20,\n sideA: {\n label: 'Reviewer',\n prompt: 'code_reviewer',\n stopOnResponse: true,\n },\n sideB: {\n label: 'Developer',\n prompt: 'code_defender',\n stopOnResponse: true,\n },\n});\n\\`\\`\\`\n\n## Agent Handoffs\n\nExpose an agent for handoffs from other prompts:\n\n\\`\\`\\`typescript\nexport default defineAgent({\n name: 'escalation_agent',\n type: 'ai_human',\n exposeAsTool: true,\n toolDescription: 'Escalate to senior support for complex issues',\n sideA: {\n prompt: 'senior_support',\n },\n});\n\\`\\`\\`\n\nOther prompts can then include it in their \\`handoffAgents\\` array.\n\n## Stop Conditions (Priority Order)\n\n1. **endConversationTool** - Ends entire conversation (highest priority)\n2. **stopTool** - Ends current side's turn\n3. **maxTurns** - Ends side's participation when reached\n4. **stopOnResponse** - Ends turn when LLM returns text\n5. **maxSessionTurns** - Ends conversation (hard limit: 250)\n\n## Best Practices\n\n- **Use descriptive names** (\\`customer_support_agent\\` not \\`agent1\\`)\n- **Always set maxTurns** as a safety limit\n- **Match stop conditions to use case** - chat apps use stopOnResponse, workflows use stopTool\n- **Use labels** for clarity in logs and UI\n- **Organize with tags** for filtering\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/agent\n`;\n","export const TOOLS_CLAUDE_MD = `# Custom Tools\n\nTools extend agent capabilities beyond text generation. They allow LLMs to fetch data, perform calculations, execute side effects, and chain to other prompts or agents.\n\n## Function Signature\n\n\\`\\`\\`typescript\ndefineTool(\n description: string, // What the tool does (shown to LLM)\n args: z.ZodObject, // Input validation schema\n handler: (flow, args) => ToolResult, // Implementation\n returnSchema?: z.ZodObject // Optional output schema\n)\n\\`\\`\\`\n\n## Basic Example\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool(\n 'Search the knowledge base for articles matching a query',\n z.object({\n query: z.string().describe('Search query'),\n limit: z.number().optional().default(10).describe('Max results'),\n }),\n async (flow, args) => {\n const results = await searchKB(args.query, args.limit);\n return {\n status: 'success',\n result: JSON.stringify(results),\n };\n }\n);\n\\`\\`\\`\n\n## ToolResult Interface\n\n| Property | Type | Description |\n|----------|------|-------------|\n| \\`status\\` | \\`'success' \\\\| 'error'\\` | Whether the tool succeeded |\n| \\`result\\` | \\`string\\` | Tool output (required for success) |\n| \\`error\\` | \\`string\\` | Error message (for error status) |\n\n## FlowState Access\n\nThe \\`flow\\` parameter provides access to:\n\n\\`\\`\\`typescript\nasync (flow, args) => {\n // Thread information\n const threadId = flow.thread.id;\n const thread = flow.thread.instance;\n\n // Configuration\n const agentName = flow.agent.name;\n const modelName = flow.model.name;\n\n // Message history\n const messages = flow.messages;\n\n // Environment bindings\n const env = flow.env;\n\n // Parent state (for sub-prompts)\n const root = flow.rootState;\n}\n\\`\\`\\`\n\n## Tool Without Arguments\n\n\\`\\`\\`typescript\nexport default defineTool(\n 'Get current server time',\n async (flow) => {\n return {\n status: 'success',\n result: new Date().toISOString(),\n };\n }\n);\n\\`\\`\\`\n\n## Error Handling\n\nReturn errors gracefully instead of throwing:\n\n\\`\\`\\`typescript\nexport default defineTool(\n 'Fetch user data',\n z.object({ userId: z.string() }),\n async (flow, args) => {\n try {\n const user = await fetchUser(args.userId);\n return { status: 'success', result: JSON.stringify(user) };\n } catch (error) {\n return {\n status: 'error',\n error: \\`Failed to fetch user: \\${error.message}\\`,\n };\n }\n }\n);\n\\`\\`\\`\n\n## Queueing Additional Tools\n\nQueue another tool to run after the current one:\n\n\\`\\`\\`typescript\nimport { queueTool } from '@standardagents/builder';\n\nexport default defineTool(\n 'Create order and send confirmation',\n z.object({ items: z.array(z.string()) }),\n async (flow, args) => {\n const order = await createOrder(args.items);\n\n // Queue email tool to run next\n queueTool(flow, 'send_confirmation_email', {\n orderId: order.id,\n email: flow.thread.metadata.userEmail,\n });\n\n return { status: 'success', result: JSON.stringify(order) };\n }\n);\n\\`\\`\\`\n\n## Injecting Messages\n\nAdd messages without triggering re-execution:\n\n\\`\\`\\`typescript\nimport { injectMessage } from '@standardagents/builder';\n\nexport default defineTool(\n 'Log audit event',\n z.object({ event: z.string() }),\n async (flow, args) => {\n await injectMessage(flow, {\n role: 'system',\n content: \\`[AUDIT] \\${args.event}\\`,\n });\n return { status: 'success', result: 'Logged' };\n }\n);\n\\`\\`\\`\n\n## Best Practices\n\n- **Write clear descriptions** - LLMs decide tool usage based on descriptions\n- **Describe all parameters** with \\`.describe()\\` in Zod schemas\n- **Handle errors gracefully** - return error status, don't throw\n- **Use snake_case** for file names (\\`search_knowledge_base.ts\\`)\n- **Keep tools focused** - one task per tool\n- **Use \\`flow.rootState\\`** when queueing from sub-prompts\n\n## Supported Zod Types\n\n- Primitives: \\`string\\`, \\`number\\`, \\`boolean\\`, \\`null\\`\n- Enums: \\`z.enum(['a', 'b', 'c'])\\`\n- Arrays: \\`z.array(z.string())\\`\n- Objects: \\`z.object({ ... })\\`\n- Optional: \\`z.string().optional()\\`\n- Default: \\`z.number().default(10)\\`\n- Nullable: \\`z.string().nullable()\\`\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/tool\n`;\n","export const HOOKS_CLAUDE_MD = `# Lifecycle Hooks\n\nHooks intercept and modify agent execution at specific lifecycle points.\n\n## Available Hooks\n\n| Hook | Signature | Purpose |\n|------|-----------|---------|\n| \\`filter_messages\\` | \\`(state, rows) => Message[]\\` | Filter raw message rows before LLM context |\n| \\`prefilter_llm_history\\` | \\`(state, messages) => Message[]\\` | Modify messages after filtering, before LLM |\n| \\`before_create_message\\` | \\`(state, message) => Message\\` | Modify message before database insert |\n| \\`after_create_message\\` | \\`(state, message) => void\\` | Run logic after message created |\n| \\`before_update_message\\` | \\`(state, id, updates) => Updates\\` | Modify updates before message update |\n| \\`after_update_message\\` | \\`(state, message) => void\\` | Run logic after message updated |\n| \\`before_store_tool_result\\` | \\`(state, toolCall, result) => Result\\` | Modify tool result before storage |\n| \\`after_tool_call_success\\` | \\`(state, toolCall, result) => Result\\` | Process successful tool execution |\n| \\`after_tool_call_failure\\` | \\`(state, toolCall, result) => Result\\` | Process failed tool execution |\n\n## File Naming\n\nHook files **must** be named exactly as the hook type:\n\n\\`\\`\\`\nagents/hooks/\n├── filter_messages.ts\n├── prefilter_llm_history.ts\n├── before_create_message.ts\n├── after_create_message.ts\n├── before_update_message.ts\n├── after_update_message.ts\n├── before_store_tool_result.ts\n├── after_tool_call_success.ts\n└── after_tool_call_failure.ts\n\\`\\`\\`\n\n## Examples\n\n### Filter Messages (Limit Context)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('filter_messages', async (state, rows) => {\n // Only include last 20 messages\n return rows.slice(-20);\n});\n\\`\\`\\`\n\n### Prefilter LLM History (Modify Content)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n // Remove sensitive data from message content\n return messages.map(msg => ({\n ...msg,\n content: msg.content?.replace(/\\\\b\\\\d{4}-\\\\d{4}-\\\\d{4}-\\\\d{4}\\\\b/g, '[REDACTED]'),\n }));\n});\n\\`\\`\\`\n\n### Before Create Message (Add Metadata)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('before_create_message', async (state, message) => {\n return {\n ...message,\n metadata: {\n ...message.metadata,\n createdAt: Date.now(),\n agentVersion: '1.0.0',\n },\n };\n});\n\\`\\`\\`\n\n### After Tool Call Success (Logging)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_tool_call_success', async (state, toolCall, result) => {\n console.log(\\`Tool \\${toolCall.function.name} succeeded:\\`, result);\n return result; // Return result unchanged, or modify it\n});\n\\`\\`\\`\n\n### After Tool Call Failure (Recovery)\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_tool_call_failure', async (state, toolCall, result) => {\n // Override error with fallback result\n if (toolCall.function.name === 'fetch_weather') {\n return {\n status: 'success',\n result: JSON.stringify({ temp: 'unavailable', fallback: true }),\n };\n }\n return result; // Return original error\n});\n\\`\\`\\`\n\n## Hook Categories\n\n**Transformation hooks** (return modified data):\n- \\`filter_messages\\`\n- \\`prefilter_llm_history\\`\n- \\`before_create_message\\`\n- \\`before_update_message\\`\n- \\`before_store_tool_result\\`\n- \\`after_tool_call_success\\`\n- \\`after_tool_call_failure\\`\n\n**Event hooks** (side effects only):\n- \\`after_create_message\\`\n- \\`after_update_message\\`\n\n## Best Practices\n\n- **Keep hooks fast** - target <100ms execution\n- **Wrap in try-catch** - hooks continue on error\n- **Validate input data** before processing\n- **Document purpose** with clear comments\n- **Use for cross-cutting concerns** - logging, redaction, enrichment\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/api-reference/define/hook\n`;\n","export const API_CLAUDE_MD = `# Thread-Specific API Endpoints\n\nDefine custom API endpoints that operate on specific threads with access to the thread's Durable Object instance and SQLite storage.\n\n## File-Based Routing\n\n| File Pattern | HTTP Method | Route |\n|--------------|-------------|-------|\n| \\`name.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.get.ts\\` | GET | \\`/api/threads/:id/name\\` |\n| \\`name.post.ts\\` | POST | \\`/api/threads/:id/name\\` |\n| \\`name.put.ts\\` | PUT | \\`/api/threads/:id/name\\` |\n| \\`name.delete.ts\\` | DELETE | \\`/api/threads/:id/name\\` |\n| \\`nested/route.ts\\` | GET | \\`/api/threads/:id/nested/route\\` |\n\n## Basic Example\n\n\\`\\`\\`typescript\n// agents/api/status.get.ts -> GET /api/threads/:id/status\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const messages = await thread.getMessages();\n return new Response(JSON.stringify({\n messageCount: messages.length,\n status: 'active',\n }), {\n headers: { 'Content-Type': 'application/json' },\n });\n});\n\\`\\`\\`\n\n## Handler Parameters\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| \\`thread\\` | \\`DurableThread\\` | The thread's Durable Object instance |\n| \\`request\\` | \\`Request\\` | The incoming HTTP request |\n| \\`env\\` | \\`Env\\` | Cloudflare Worker environment bindings |\n\n## Thread Methods\n\nAccess thread data through the instance:\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // Message operations\n const messages = await thread.getMessages({ limit: 100, offset: 0 });\n const count = await thread.getMessageCount();\n\n // Thread metadata\n const metadata = thread.getMetadata();\n\n // Execution control\n await thread.stop();\n\n // Custom SQL queries\n const result = thread.ctx.storage.sql.exec(\\`\n SELECT * FROM messages WHERE role = 'user'\n \\`);\n});\n\\`\\`\\`\n\n## POST with Request Body\n\n\\`\\`\\`typescript\n// agents/api/export.post.ts -> POST /api/threads/:id/export\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const body = await request.json();\n const { format = 'json' } = body;\n\n const messages = await thread.getMessages();\n\n if (format === 'csv') {\n const csv = messages.map(m => \\`\\${m.role},\\${m.content}\\`).join('\\\\n');\n return new Response(csv, {\n headers: { 'Content-Type': 'text/csv' },\n });\n }\n\n return new Response(JSON.stringify(messages), {\n headers: { 'Content-Type': 'application/json' },\n });\n});\n\\`\\`\\`\n\n## Nested Routes\n\nCreate directories for nested routes:\n\n\\`\\`\\`\nagents/api/\n├── status.get.ts -> GET /api/threads/:id/status\n├── export.post.ts -> POST /api/threads/:id/export\n└── messages/\n ├── count.ts -> GET /api/threads/:id/messages/count\n └── search.post.ts -> POST /api/threads/:id/messages/search\n\\`\\`\\`\n\n## Error Handling\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n try {\n const data = await riskyOperation();\n return new Response(JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n return new Response(JSON.stringify({\n error: error.message,\n }), {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n});\n\\`\\`\\`\n\n## Using Environment Variables\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // Access secrets and bindings\n const apiKey = env.EXTERNAL_API_KEY;\n const kv = env.MY_KV_NAMESPACE;\n\n const data = await fetchExternalAPI(apiKey);\n await kv.put(\\`thread:\\${thread.id}\\`, JSON.stringify(data));\n\n return new Response('OK');\n});\n\\`\\`\\`\n\n## Best Practices\n\n- **Keep handlers fast** - endpoints are in the request path\n- **Paginate large queries** - use limit/offset for messages\n- **Validate input data** - check request body before processing\n- **Use descriptive file names** - \\`export.post.ts\\` not \\`ep1.ts\\`\n- **Return proper status codes** - 200, 400, 404, 500\n\n## Documentation\n\nFull reference: https://docs.standardagentbuilder.com/core-concepts/api\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, modify, applyEdits } from 'jsonc-parser';\nimport { loadFile, writeFile, generateCode, parseModule, builders } from 'magicast';\nimport { addVitePlugin } from 'magicast/helpers';\nimport { logger } from '../utils/logger.js';\nimport {\n ROOT_CLAUDE_MD,\n MODELS_CLAUDE_MD,\n PROMPTS_CLAUDE_MD,\n AGENTS_CLAUDE_MD,\n TOOLS_CLAUDE_MD,\n HOOKS_CLAUDE_MD,\n API_CLAUDE_MD,\n} from '../templates/index.js';\n\ninterface ScaffoldOptions {\n force?: boolean;\n}\n\n// Template for wrangler.jsonc\nconst WRANGLER_TEMPLATE = (name: string) => `{\n \"$schema\": \"node_modules/wrangler/config-schema.json\",\n \"name\": \"${name}\",\n \"main\": \"worker/index.ts\",\n \"compatibility_date\": \"2025-01-01\",\n \"compatibility_flags\": [\"nodejs_compat\"],\n \"observability\": {\n \"enabled\": true\n },\n \"assets\": {\n \"directory\": \"dist\",\n \"not_found_handling\": \"single-page-application\",\n \"binding\": \"ASSETS\",\n \"run_worker_first\": [\"/**\"]\n },\n \"durable_objects\": {\n \"bindings\": [\n {\n \"name\": \"AGENT_BUILDER_THREAD\",\n \"class_name\": \"DurableThread\"\n },\n {\n \"name\": \"AGENT_BUILDER\",\n \"class_name\": \"DurableAgentBuilder\"\n }\n ]\n },\n \"migrations\": [\n {\n \"tag\": \"v1\",\n \"new_sqlite_classes\": [\"DurableThread\"]\n },\n {\n \"tag\": \"v2\",\n \"new_sqlite_classes\": [\"DurableAgentBuilder\"]\n }\n ]\n}\n`;\n\n// Templates for Durable Object files\nconst THREAD_TS = `import { DurableThread } from 'virtual:@standardagents/builder'\n\nexport default class Thread extends DurableThread {}\n`;\n\nconst AGENT_BUILDER_TS = `import { DurableAgentBuilder } from 'virtual:@standardagents/builder'\n\nexport default class AgentBuilder extends DurableAgentBuilder {}\n`;\n\n// Worker entry point template\nconst WORKER_INDEX = `import { router } from \"virtual:@standardagents/builder\"\nimport DurableThread from '../agents/Thread';\nimport DurableAgentBuilder from '../agents/AgentBuilder';\n\nexport default {\n async fetch(request, env) {\n const res = await router(request, env)\n return res ?? new Response(null, { status: 404 })\n },\n} satisfies ExportedHandler<Env>\n\nexport { DurableThread, DurableAgentBuilder }\n`;\n\n// Utility functions\nfunction getProjectName(cwd: string): string {\n const packageJsonPath = path.join(cwd, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkg.name) {\n return pkg.name.replace(/^@[^/]+\\//, ''); // Remove scope if present\n }\n } catch {\n // Ignore parse errors\n }\n }\n return path.basename(cwd);\n}\n\nfunction findViteConfig(cwd: string): string | null {\n const candidates = ['vite.config.ts', 'vite.config.js', 'vite.config.mts', 'vite.config.mjs'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nfunction findWranglerConfig(cwd: string): string | null {\n const candidates = ['wrangler.jsonc', 'wrangler.json'];\n for (const candidate of candidates) {\n const configPath = path.join(cwd, candidate);\n if (fs.existsSync(configPath)) {\n return configPath;\n }\n }\n return null;\n}\n\nasync function modifyViteConfig(configPath: string, force: boolean): Promise<boolean> {\n try {\n const mod = await loadFile(configPath);\n\n // Check if plugins already include our plugins\n const code = fs.readFileSync(configPath, 'utf-8');\n const hasCloudflare = code.includes('@cloudflare/vite-plugin') || code.includes('cloudflare()');\n const hasAgentBuilder = code.includes('@standardagents/builder') || code.includes('agentbuilder()');\n\n if (hasCloudflare && hasAgentBuilder && !force) {\n logger.info('Vite config already includes Standard Agents plugins');\n return true;\n }\n\n // Add cloudflare plugin if not present\n if (!hasCloudflare || force) {\n addVitePlugin(mod, {\n from: '@cloudflare/vite-plugin',\n imported: 'cloudflare',\n constructor: 'cloudflare',\n });\n logger.success('Added cloudflare plugin to vite.config');\n }\n\n // Add agentbuilder plugin if not present\n if (!hasAgentBuilder || force) {\n addVitePlugin(mod, {\n from: '@standardagents/builder',\n imported: 'agentbuilder',\n constructor: 'agentbuilder',\n options: { mountPoint: '/' },\n });\n logger.success('Added agentbuilder plugin to vite.config');\n }\n\n await writeFile(mod, configPath);\n return true;\n } catch (error) {\n logger.warning(`Could not automatically modify vite.config: ${error}`);\n logger.log('');\n logger.log('Please manually add the following to your vite.config.ts:');\n logger.log('');\n logger.log(` import { cloudflare } from '@cloudflare/vite-plugin'`);\n logger.log(` import { agentbuilder } from '@standardagents/builder'`);\n logger.log('');\n logger.log(` plugins: [cloudflare(), agentbuilder({ mountPoint: '/' })]`);\n logger.log('');\n return false;\n }\n}\n\nfunction createOrUpdateWranglerConfig(cwd: string, projectName: string, force: boolean): boolean {\n const existingConfig = findWranglerConfig(cwd);\n\n if (existingConfig && !force) {\n // Update existing config\n try {\n const text = fs.readFileSync(existingConfig, 'utf-8');\n const config = parse(text);\n\n // Check if already configured\n const hasBindings = config.durable_objects?.bindings?.some(\n (b: any) => b.name === 'AGENT_BUILDER_THREAD' || b.name === 'AGENT_BUILDER'\n );\n\n if (hasBindings) {\n logger.info('wrangler.jsonc already configured for Standard Agents');\n return true;\n }\n\n // Add bindings to existing config\n let result = text;\n\n // Add durable_objects if not present\n if (!config.durable_objects) {\n const edits = modify(result, ['durable_objects'], {\n bindings: [\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n ]\n }, {});\n result = applyEdits(result, edits);\n } else {\n // Add to existing bindings\n const bindings = config.durable_objects.bindings || [];\n bindings.push(\n { name: 'AGENT_BUILDER_THREAD', class_name: 'DurableThread' },\n { name: 'AGENT_BUILDER', class_name: 'DurableAgentBuilder' }\n );\n const edits = modify(result, ['durable_objects', 'bindings'], bindings, {});\n result = applyEdits(result, edits);\n }\n\n // Add migrations if not present\n if (!config.migrations) {\n const edits = modify(result, ['migrations'], [\n { tag: 'v1', new_sqlite_classes: ['DurableThread'] },\n { tag: 'v2', new_sqlite_classes: ['DurableAgentBuilder'] }\n ], {});\n result = applyEdits(result, edits);\n }\n\n // Update main entry point if needed\n if (!config.main || !config.main.includes('worker')) {\n const edits = modify(result, ['main'], 'worker/index.ts', {});\n result = applyEdits(result, edits);\n }\n\n // Add assets configuration if not present\n if (!config.assets) {\n const edits = modify(result, ['assets'], {\n directory: 'dist',\n not_found_handling: 'single-page-application',\n binding: 'ASSETS',\n run_worker_first: ['/**']\n }, {});\n result = applyEdits(result, edits);\n }\n\n fs.writeFileSync(existingConfig, result, 'utf-8');\n logger.success('Updated wrangler.jsonc with Standard Agents configuration');\n return true;\n } catch (error) {\n logger.warning(`Could not update wrangler config: ${error}`);\n return false;\n }\n }\n\n // Create new wrangler.jsonc\n const wranglerPath = path.join(cwd, 'wrangler.jsonc');\n const sanitizedName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n fs.writeFileSync(wranglerPath, WRANGLER_TEMPLATE(sanitizedName), 'utf-8');\n logger.success('Created wrangler.jsonc');\n return true;\n}\n\nfunction getWorkerEntryPoint(cwd: string): string {\n // Check wrangler config for main entry\n const wranglerConfig = findWranglerConfig(cwd);\n if (wranglerConfig) {\n try {\n const text = fs.readFileSync(wranglerConfig, 'utf-8');\n const config = parse(text);\n if (config.main) {\n return path.join(cwd, config.main);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n // Default to worker/index.ts\n return path.join(cwd, 'worker', 'index.ts');\n}\n\nasync function createOrUpdateWorkerEntry(cwd: string, force: boolean): Promise<boolean> {\n const entryPath = getWorkerEntryPoint(cwd);\n const entryDir = path.dirname(entryPath);\n\n // Create worker directory if needed\n if (!fs.existsSync(entryDir)) {\n fs.mkdirSync(entryDir, { recursive: true });\n logger.success(`Created ${path.relative(cwd, entryDir)} directory`);\n }\n\n // If file doesn't exist, create it\n if (!fs.existsSync(entryPath)) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n // File exists - try to modify it\n const content = fs.readFileSync(entryPath, 'utf-8');\n\n // Check if already configured\n const hasRouter = content.includes('virtual:@standardagents/builder') && content.includes('router');\n const hasDurableExports = content.includes('DurableThread') && content.includes('DurableAgentBuilder');\n\n if (hasRouter && hasDurableExports && !force) {\n logger.info(`${path.relative(cwd, entryPath)} already configured`);\n return true;\n }\n\n try {\n const mod = await loadFile(entryPath);\n\n // Add imports\n if (!content.includes('virtual:@standardagents/builder') || force) {\n mod.imports.$add({\n from: 'virtual:@standardagents/builder',\n imported: 'router',\n local: 'router',\n });\n }\n\n if (!content.includes(\"'../agents/Thread'\") || force) {\n mod.imports.$add({\n from: '../agents/Thread',\n imported: 'default',\n local: 'DurableThread',\n });\n }\n\n if (!content.includes(\"'../agents/AgentBuilder'\") || force) {\n mod.imports.$add({\n from: '../agents/AgentBuilder',\n imported: 'default',\n local: 'DurableAgentBuilder',\n });\n }\n\n // Check if there's a default export with fetch\n const { code } = generateCode(mod);\n\n // If we can't easily add the router, just overwrite\n if (force || !hasRouter) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Updated ${path.relative(cwd, entryPath)} with Standard Agents router`);\n }\n\n return true;\n } catch (error) {\n // Fall back to template\n if (force) {\n fs.writeFileSync(entryPath, WORKER_INDEX, 'utf-8');\n logger.success(`Created ${path.relative(cwd, entryPath)}`);\n return true;\n }\n\n logger.warning(`Could not automatically modify ${path.relative(cwd, entryPath)}`);\n logger.log('');\n logger.log('Please ensure your worker entry point includes:');\n logger.log('');\n logger.log(` import { router } from \"virtual:@standardagents/builder\"`);\n logger.log(` import DurableThread from '../agents/Thread';`);\n logger.log(` import DurableAgentBuilder from '../agents/AgentBuilder';`);\n logger.log('');\n logger.log(' // In your fetch handler:');\n logger.log(' const res = router(request, env)');\n logger.log(' if (res) return res');\n logger.log('');\n logger.log(' // Export Durable Objects:');\n logger.log(' export { DurableThread, DurableAgentBuilder }');\n logger.log('');\n return false;\n }\n}\n\nfunction createDurableObjects(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n if (!fs.existsSync(agentsDir)) {\n fs.mkdirSync(agentsDir, { recursive: true });\n }\n\n // Create Thread.ts\n const threadPath = path.join(agentsDir, 'Thread.ts');\n if (!fs.existsSync(threadPath)) {\n fs.writeFileSync(threadPath, THREAD_TS, 'utf-8');\n logger.success('Created agents/Thread.ts');\n } else {\n logger.info('agents/Thread.ts already exists');\n }\n\n // Create AgentBuilder.ts\n const agentBuilderPath = path.join(agentsDir, 'AgentBuilder.ts');\n if (!fs.existsSync(agentBuilderPath)) {\n fs.writeFileSync(agentBuilderPath, AGENT_BUILDER_TS, 'utf-8');\n logger.success('Created agents/AgentBuilder.ts');\n } else {\n logger.info('agents/AgentBuilder.ts already exists');\n }\n}\n\nfunction createDirectoriesAndDocs(cwd: string): void {\n const agentsDir = path.join(cwd, 'agents');\n\n // Create root agents/CLAUDE.md\n const rootDocPath = path.join(agentsDir, 'CLAUDE.md');\n if (!fs.existsSync(rootDocPath)) {\n fs.writeFileSync(rootDocPath, ROOT_CLAUDE_MD, 'utf-8');\n logger.success('Created agents/CLAUDE.md');\n }\n\n // Create subdirectories with their CLAUDE.md files\n const directories = [\n { path: 'agents/agents', doc: AGENTS_CLAUDE_MD },\n { path: 'agents/prompts', doc: PROMPTS_CLAUDE_MD },\n { path: 'agents/models', doc: MODELS_CLAUDE_MD },\n { path: 'agents/tools', doc: TOOLS_CLAUDE_MD },\n { path: 'agents/hooks', doc: HOOKS_CLAUDE_MD },\n { path: 'agents/api', doc: API_CLAUDE_MD },\n ];\n\n for (const dir of directories) {\n const dirPath = path.join(cwd, dir.path);\n const docPath = path.join(dirPath, 'CLAUDE.md');\n\n // Create directory\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n logger.success(`Created ${dir.path}`);\n }\n\n // Create CLAUDE.md\n if (!fs.existsSync(docPath)) {\n fs.writeFileSync(docPath, dir.doc, 'utf-8');\n logger.success(`Created ${dir.path}/CLAUDE.md`);\n }\n }\n}\n\nfunction updateTsConfig(cwd: string): void {\n const tsconfigPath = path.join(cwd, 'tsconfig.json');\n\n if (!fs.existsSync(tsconfigPath)) {\n logger.info('No tsconfig.json found, skipping TypeScript configuration');\n return;\n }\n\n try {\n const text = fs.readFileSync(tsconfigPath, 'utf-8');\n const config = parse(text);\n let result = text;\n\n // Add types to compilerOptions\n const types = config.compilerOptions?.types || [];\n const newTypes = [\n './worker-configuration.d.ts',\n './.agents/types.d.ts',\n './.agents/virtual-module.d.ts'\n ].filter(t => !types.includes(t));\n\n if (newTypes.length > 0) {\n const allTypes = [...types, ...newTypes];\n const edits = modify(result, ['compilerOptions', 'types'], allTypes, {});\n result = applyEdits(result, edits);\n }\n\n // Add worker and agents to include\n const include = config.include || [];\n const newIncludes = ['worker', 'agents'].filter(i => !include.includes(i));\n\n if (newIncludes.length > 0) {\n const allIncludes = [...include, ...newIncludes];\n const edits = modify(result, ['include'], allIncludes, {});\n result = applyEdits(result, edits);\n }\n\n if (newTypes.length > 0 || newIncludes.length > 0) {\n fs.writeFileSync(tsconfigPath, result, 'utf-8');\n logger.success('Updated tsconfig.json with Standard Agents types');\n } else {\n logger.info('tsconfig.json already configured');\n }\n } catch (error) {\n logger.warning('Could not update tsconfig.json, you may need to add types manually');\n }\n}\n\nfunction cleanupViteDefaults(cwd: string): void {\n // Remove default Vite files that we don't need\n const filesToRemove = [\n 'src/main.ts',\n 'src/style.css',\n 'src/counter.ts',\n 'src/typescript.svg',\n 'src/vite-env.d.ts',\n 'index.html',\n 'public/vite.svg',\n ];\n\n const dirsToRemove = ['src', 'public'];\n\n for (const file of filesToRemove) {\n const filePath = path.join(cwd, file);\n if (fs.existsSync(filePath)) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // Ignore errors\n }\n }\n }\n\n // Remove empty directories\n for (const dir of dirsToRemove) {\n const dirPath = path.join(cwd, dir);\n if (fs.existsSync(dirPath)) {\n try {\n const files = fs.readdirSync(dirPath);\n if (files.length === 0) {\n fs.rmdirSync(dirPath);\n }\n } catch {\n // Ignore errors\n }\n }\n }\n}\n\nexport async function scaffold(options: ScaffoldOptions = {}) {\n const cwd = process.cwd();\n const projectName = getProjectName(cwd);\n const force = options.force || false;\n\n logger.info('Scaffolding Standard Agents...');\n logger.log('');\n\n // 1. Find and modify vite.config\n const viteConfigPath = findViteConfig(cwd);\n if (viteConfigPath) {\n await modifyViteConfig(viteConfigPath, force);\n } else {\n logger.warning('No vite.config found. Please create one with cloudflare and agentbuilder plugins.');\n }\n\n // 2. Create or update wrangler.jsonc\n createOrUpdateWranglerConfig(cwd, projectName, force);\n\n // 3. Create or update worker entry point\n await createOrUpdateWorkerEntry(cwd, force);\n\n // 4. Create Durable Object files\n createDurableObjects(cwd);\n\n // 5. Create agent directories with documentation\n createDirectoriesAndDocs(cwd);\n\n // 6. Update tsconfig.json\n updateTsConfig(cwd);\n\n // 7. Clean up default Vite files (only if force is true, meaning fresh project)\n if (force) {\n cleanupViteDefaults(cwd);\n }\n\n logger.log('');\n logger.success('Standard Agents scaffolding complete!');\n logger.log('');\n logger.log('Your project structure:');\n logger.log('');\n logger.log(' agents/');\n logger.log(' ├── CLAUDE.md # Architecture documentation');\n logger.log(' ├── Thread.ts # Durable Object for threads');\n logger.log(' ├── AgentBuilder.ts # Durable Object for agent state');\n logger.log(' ├── agents/ # Agent definitions');\n logger.log(' ├── prompts/ # Prompt definitions');\n logger.log(' ├── models/ # Model configurations');\n logger.log(' ├── tools/ # Custom tools');\n logger.log(' ├── hooks/ # Lifecycle hooks');\n logger.log(' └── api/ # Thread API endpoints');\n logger.log(' worker/');\n logger.log(' └── index.ts # Cloudflare Worker entry point');\n logger.log('');\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport crypto from 'node:crypto';\nimport readline from 'node:readline';\nimport { spawn } from 'node:child_process';\nimport { logger } from '../utils/logger.js';\nimport { scaffold } from './scaffold.js';\n\ninterface InitOptions {\n yes?: boolean;\n template?: string;\n}\n\nasync function prompt(question: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nasync function promptPassword(question: string): Promise<string> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n stdout.write(question);\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n let password = '';\n\n const onData = (char: string) => {\n const c = char.toString();\n\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u0004': // Ctrl+D\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\n');\n resolve(password);\n break;\n case '\\u0003': // Ctrl+C\n stdout.write('\\n');\n process.exit(1);\n break;\n case '\\u007F': // Backspace\n case '\\b':\n if (password.length > 0) {\n password = password.slice(0, -1);\n stdout.clearLine(0);\n stdout.cursorTo(0);\n stdout.write(question + '*'.repeat(password.length));\n }\n break;\n default:\n password += c;\n stdout.write('*');\n break;\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Use shell: false to properly handle arguments with spaces\n // Node's spawn will handle argument escaping automatically\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: false,\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n\n child.on('error', reject);\n });\n}\n\nfunction toKebabCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with hyphens\n .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens\n}\n\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | 'bun' {\n // Check environment variable first (most reliable when running via npx/pnpm exec)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n if (userAgent.includes('pnpm')) return 'pnpm';\n if (userAgent.includes('yarn')) return 'yarn';\n if (userAgent.includes('bun')) return 'bun';\n }\n\n // Check for lockfiles\n if (fs.existsSync('pnpm-lock.yaml')) return 'pnpm';\n if (fs.existsSync('yarn.lock')) return 'yarn';\n if (fs.existsSync('bun.lockb')) return 'bun';\n if (fs.existsSync('package-lock.json')) return 'npm';\n\n return 'npm';\n}\n\nasync function selectPackageManager(detected: 'npm' | 'pnpm' | 'yarn' | 'bun'): Promise<'npm' | 'pnpm' | 'yarn' | 'bun'> {\n const options = ['npm', 'pnpm', 'yarn', 'bun'] as const;\n const detectedIndex = options.indexOf(detected);\n\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const stdout = process.stdout;\n\n let selectedIndex = detectedIndex;\n\n const renderOptions = () => {\n // Move cursor up to overwrite previous render (except first time)\n stdout.write('\\x1B[?25l'); // Hide cursor\n\n // Clear and redraw\n stdout.write(`\\x1B[${options.length + 1}A`); // Move up\n stdout.write('\\x1B[0J'); // Clear from cursor to end\n\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n };\n\n // Initial render\n stdout.write('Select a package manager (use arrows, enter to confirm):\\n');\n options.forEach((opt, i) => {\n const marker = i === detectedIndex ? ' (detected)' : '';\n const prefix = i === selectedIndex ? '\\x1B[36m❯\\x1B[0m' : ' ';\n const highlight = i === selectedIndex ? '\\x1B[36m' : '\\x1B[90m';\n stdout.write(`${prefix} ${highlight}${opt}${marker}\\x1B[0m\\n`);\n });\n\n const wasRaw = stdin.isRaw;\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const cleanup = () => {\n stdin.setRawMode(wasRaw ?? false);\n stdin.pause();\n stdin.removeListener('data', onData);\n stdout.write('\\x1B[?25h'); // Show cursor\n };\n\n const onData = (key: string) => {\n // Handle arrow keys (escape sequences)\n if (key === '\\x1B[A' || key === 'k') { // Up arrow or k\n selectedIndex = (selectedIndex - 1 + options.length) % options.length;\n renderOptions();\n } else if (key === '\\x1B[B' || key === 'j') { // Down arrow or j\n selectedIndex = (selectedIndex + 1) % options.length;\n renderOptions();\n } else if (key === '\\r' || key === '\\n') { // Enter\n cleanup();\n resolve(options[selectedIndex]);\n } else if (key === '\\x03') { // Ctrl+C\n cleanup();\n stdout.write('\\n');\n process.exit(1);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n\nexport async function init(projectNameArg?: string, options: InitOptions = {}) {\n const cwd = process.cwd();\n const detectedPm = detectPackageManager();\n const template = options.template || 'vanilla-ts';\n\n logger.log('');\n logger.info('Creating a new Standard Agents project...');\n logger.log('');\n\n // Select package manager\n let pm: 'npm' | 'pnpm' | 'yarn' | 'bun';\n if (options.yes) {\n pm = detectedPm;\n } else {\n pm = await selectPackageManager(detectedPm);\n logger.log('');\n }\n\n // Get project name\n let projectName = projectNameArg;\n\n if (!projectName && !options.yes) {\n projectName = await prompt('Project name: ');\n }\n\n if (!projectName) {\n logger.error('Project name is required');\n process.exit(1);\n }\n\n const projectPath = path.join(cwd, projectName);\n\n // Check if directory already exists\n if (fs.existsSync(projectPath)) {\n logger.error(`Directory \"${projectName}\" already exists`);\n process.exit(1);\n }\n\n // Step 1: Run create vite\n logger.log('');\n logger.info(`Step 1: Creating Vite project with ${template} template...`);\n logger.log('');\n\n try {\n // Determine the correct create command based on package manager\n // All package managers should use create-vite@latest to ensure the latest version\n // Use --no-interactive to skip prompts (like \"Install with npm and start now?\")\n let createCmd: string;\n let createArgs: string[];\n\n switch (pm) {\n case 'pnpm':\n createCmd = 'pnpm';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'yarn':\n createCmd = 'yarn';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n case 'bun':\n createCmd = 'bun';\n createArgs = ['create', 'vite@latest', projectName, '--template', template, '--no-interactive'];\n break;\n default:\n createCmd = 'npm';\n createArgs = ['create', 'vite@latest', projectName, '--', '--template', template, '--no-interactive'];\n }\n\n await runCommand(createCmd, createArgs, cwd);\n } catch (error) {\n logger.error('Failed to create Vite project');\n process.exit(1);\n }\n\n // Create vite.config.ts if it doesn't exist (some templates may not include one)\n const viteConfigPath = path.join(projectPath, 'vite.config.ts');\n if (!fs.existsSync(viteConfigPath)) {\n const viteConfigContent = `import { defineConfig } from 'vite'\n\nexport default defineConfig({\n plugins: [],\n})\n`;\n fs.writeFileSync(viteConfigPath, viteConfigContent, 'utf-8');\n logger.success('Created vite.config.ts');\n }\n\n // Update package.json name to kebab-case (handles spaces and special characters)\n const packageJsonPath = path.join(projectPath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const kebabName = toKebabCase(projectName);\n if (packageJson.name !== kebabName) {\n packageJson.name = kebabName;\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n }\n }\n\n // Step 2: Install Standard Agents dependencies\n logger.log('');\n logger.info('Step 2: Installing Standard Agents dependencies...');\n logger.log('');\n\n try {\n const installCmd = pm === 'npm' ? 'install' : 'add';\n const devFlag = pm === 'npm' ? '--save-dev' : '-D';\n\n await runCommand(pm, [\n installCmd, devFlag,\n '@cloudflare/vite-plugin',\n '@standardagents/builder',\n 'wrangler',\n 'zod'\n ], projectPath);\n } catch (error) {\n logger.error('Failed to install dependencies');\n process.exit(1);\n }\n\n // Step 3: Run scaffold in the new project directory\n logger.log('');\n logger.info('Step 3: Configuring Standard Agents...');\n logger.log('');\n\n // Change to project directory for scaffold\n process.chdir(projectPath);\n\n await scaffold({ force: true });\n\n // Step 4: Configure environment variables\n logger.log('');\n logger.info('Step 4: Configuring environment variables...');\n logger.log('');\n\n // Generate encryption key\n const encryptionKey = crypto.randomBytes(32).toString('hex');\n\n // Ask for API keys and admin password\n let openrouterKey = '';\n let openaiKey = '';\n let adminPassword = '';\n\n if (!options.yes) {\n logger.log('API keys are optional but required to use AI models.');\n logger.log('You can add them later by editing .dev.vars');\n logger.log('');\n\n openrouterKey = await prompt('OpenRouter API key (optional, press Enter to skip): ');\n openaiKey = await prompt('OpenAI API key (optional, press Enter to skip): ');\n\n logger.log('');\n logger.log('Set a temporary admin password for development access.');\n logger.log('Press Enter to use the default password \"admin\".');\n logger.log('');\n\n while (true) {\n adminPassword = await promptPassword('Temporary admin password: ');\n\n if (!adminPassword) {\n adminPassword = 'admin';\n break;\n }\n\n const confirmPassword = await promptPassword('Confirm password: ');\n\n if (adminPassword === confirmPassword) {\n break;\n } else {\n logger.warning('Passwords do not match. Please try again.');\n logger.log('');\n adminPassword = '';\n }\n }\n }\n\n // Default admin password if not provided (for --yes flag)\n if (!adminPassword) {\n adminPassword = 'admin';\n }\n\n // Create .dev.vars file\n const devVarsLines: string[] = [\n '# Standard Agents Environment Variables',\n '# This file contains secrets for local development only',\n '# Do not commit this file to version control',\n '',\n '# Encryption key for secure data (auto-generated)',\n `ENCRYPTION_KEY=${encryptionKey}`,\n '',\n '# Temporary admin password for development access',\n `SUPER_ADMIN_PASSWORD=${adminPassword}`,\n '',\n '# AI Provider API Keys',\n '# Uncomment and add your keys as needed',\n ];\n\n if (openrouterKey) {\n devVarsLines.push(`OPENROUTER_API_KEY=${openrouterKey}`);\n } else {\n devVarsLines.push('# OPENROUTER_API_KEY=your-openrouter-key');\n }\n\n if (openaiKey) {\n devVarsLines.push(`OPENAI_API_KEY=${openaiKey}`);\n } else {\n devVarsLines.push('# OPENAI_API_KEY=your-openai-key');\n }\n\n devVarsLines.push('');\n\n const devVarsPath = path.join(projectPath, '.dev.vars');\n fs.writeFileSync(devVarsPath, devVarsLines.join('\\n'), 'utf-8');\n logger.success('Created .dev.vars with encryption key');\n\n // Add .dev.vars to .gitignore if it exists\n const gitignorePath = path.join(projectPath, '.gitignore');\n if (fs.existsSync(gitignorePath)) {\n const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');\n if (!gitignoreContent.includes('.dev.vars')) {\n fs.appendFileSync(gitignorePath, '\\n# Local environment variables\\n.dev.vars\\n');\n logger.success('Added .dev.vars to .gitignore');\n }\n }\n\n // Step 5: Generate Cloudflare types\n logger.log('');\n logger.info('Step 5: Generating Cloudflare types...');\n logger.log('');\n\n try {\n await runCommand('npx', ['wrangler', 'types'], projectPath);\n } catch (error) {\n logger.warning('Could not generate types automatically. Run \"npx wrangler types\" manually.');\n }\n\n // Done!\n logger.log('');\n logger.success('Project created successfully!');\n logger.log('');\n logger.log('Next steps:');\n logger.log('');\n logger.log(` cd ${projectName}`);\n logger.log(` ${pm === 'npm' ? 'npm run' : pm} dev`);\n logger.log('');\n logger.log('For more information, visit: https://standardagents.ai/docs');\n}\n","import { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { fileURLToPath } from 'url';\nimport { init } from './commands/init.js';\nimport { scaffold } from './commands/scaffold.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf-8'));\n\nconst program = new Command();\n\nprogram\n .name('agents')\n .description('CLI tool for Standard Agents / AgentBuilder')\n .version(pkg.version);\n\nprogram\n .command('init [project-name]')\n .description('Create a new Standard Agents project (runs create vite, then scaffold)')\n .option('-y, --yes', 'Skip prompts and use defaults')\n .option('--template <template>', 'Vite template to use', 'vanilla-ts')\n .action(init);\n\nprogram\n .command('scaffold')\n .description('Add Standard Agents to an existing Vite project')\n .option('--force', 'Overwrite existing configuration')\n .action(scaffold);\n\nprogram.parse();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standardagents/cli",
3
- "version": "0.9.13",
3
+ "version": "0.9.16",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "restricted",
@@ -22,7 +22,8 @@
22
22
  ],
23
23
  "scripts": {
24
24
  "build": "tsup",
25
- "dev": "tsup --watch"
25
+ "dev": "tsup --watch",
26
+ "typecheck": "tsc --noEmit"
26
27
  },
27
28
  "dependencies": {
28
29
  "commander": "^12.1.0",