@standardagents/cli 0.9.1 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +613 -1170
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/wrangler-config.ts","../src/utils/logger.ts","../src/commands/init.ts","../src/commands/scaffold.ts","../src/index.ts"],"names":["path","fs"],"mappings":"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AAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;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;AAwfxB,IAAM,aAAA,GAAgB,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;AA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","file":"index.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { parse, modify, applyEdits } from 'jsonc-parser';\n\nexport interface WranglerConfig {\n durable_objects?: {\n bindings: Array<{\n name: string;\n class_name: string;\n }>;\n };\n migrations?: Array<{\n tag: string;\n new_sqlite_classes: string[];\n }>;\n env?: {\n [key: string]: {\n durable_objects?: {\n bindings: Array<{\n name: string;\n class_name: string;\n }>;\n };\n migrations?: Array<{\n tag: string;\n new_sqlite_classes: string[];\n }>;\n };\n };\n}\n\nexport function findWranglerConfig(cwd: string): string | null {\n const jsonc = path.join(cwd, 'wrangler.jsonc');\n const json = path.join(cwd, 'wrangler.json');\n\n if (fs.existsSync(jsonc)) {\n return jsonc;\n }\n if (fs.existsSync(json)) {\n return json;\n }\n return null;\n}\n\nexport function readWranglerConfig(filePath: string): { config: WranglerConfig; text: string } {\n const text = fs.readFileSync(filePath, 'utf-8');\n const config = parse(text) as WranglerConfig;\n return { config, text };\n}\n\nexport function updateWranglerConfig(\n filePath: string,\n text: string,\n updates: Partial<WranglerConfig>\n): string {\n let result = text;\n\n // Update Durable Objects\n if (updates.durable_objects) {\n const edits = modify(result, ['durable_objects'], updates.durable_objects, {});\n result = applyEdits(result, edits);\n }\n\n // Update migrations\n if (updates.migrations) {\n const edits = modify(result, ['migrations'], updates.migrations, {});\n result = applyEdits(result, edits);\n }\n\n // Update env configurations\n if (updates.env) {\n for (const [envName, envConfig] of Object.entries(updates.env)) {\n if (envConfig.durable_objects) {\n const edits = modify(result, ['env', envName, 'durable_objects'], envConfig.durable_objects, {});\n result = applyEdits(result, edits);\n }\n if (envConfig.migrations) {\n const edits = modify(result, ['env', envName, 'migrations'], envConfig.migrations, {});\n result = applyEdits(result, edits);\n }\n }\n }\n\n return result;\n}\n\nexport function writeWranglerConfig(filePath: string, content: string): void {\n fs.writeFileSync(filePath, content, 'utf-8');\n}\n","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 path from 'node:path';\nimport {\n findWranglerConfig,\n readWranglerConfig,\n updateWranglerConfig,\n writeWranglerConfig,\n type WranglerConfig,\n} from '../utils/wrangler-config.js';\nimport { logger } from '../utils/logger.js';\n\ninterface InitOptions {\n force?: boolean;\n}\n\nexport async function init(options: InitOptions = {}) {\n const cwd = process.cwd();\n\n logger.info('Initializing Standard Agents configuration...');\n\n // Find wrangler config\n const configPath = findWranglerConfig(cwd);\n\n if (!configPath) {\n logger.error('No wrangler.jsonc or wrangler.json found in current directory');\n logger.log('\\nTo use Standard Agents, you need a Cloudflare Workers project with wrangler configuration.');\n logger.log('\\nExample wrangler.jsonc:');\n logger.log(`\n{\n \"name\": \"my-agent\",\n \"main\": \"server/index.ts\",\n \"compatibility_date\": \"2025-08-13\",\n \"compatibility_flags\": [\"nodejs_compat\"],\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\n \"migrations\": [\n {\n \"tag\": \"v1\",\n \"new_sqlite_classes\": [\"DurableThread\", \"DurableAgentBuilder\"]\n }\n ]\n}\n`);\n process.exit(1);\n }\n\n logger.success(`Found configuration: ${path.relative(cwd, configPath)}`);\n\n // Read existing config\n const { config, text } = readWranglerConfig(configPath);\n\n // Check if already configured\n const hasAgentBuilderThread = config.durable_objects?.bindings?.some(\n (binding) => binding.name === 'AGENT_BUILDER_THREAD'\n );\n const hasAgentBuilder = config.durable_objects?.bindings?.some(\n (binding) => binding.name === 'AGENT_BUILDER'\n );\n\n if (hasAgentBuilderThread && hasAgentBuilder && !options.force) {\n logger.success('Standard Agents is already configured!');\n logger.info('Use --force to overwrite existing configuration');\n return;\n }\n\n // Prepare updates\n const updates: Partial<WranglerConfig> = {};\n\n // Update Durable Objects\n updates.durable_objects = config.durable_objects || { bindings: [] };\n\n // Remove existing bindings if force\n if (options.force) {\n updates.durable_objects.bindings = updates.durable_objects.bindings.filter(\n (binding) => binding.name !== 'AGENT_BUILDER_THREAD' && binding.name !== 'AGENT_BUILDER'\n );\n }\n\n // Add AGENT_BUILDER_THREAD if not present\n if (!hasAgentBuilderThread || options.force) {\n updates.durable_objects.bindings.push({\n name: 'AGENT_BUILDER_THREAD',\n class_name: 'DurableThread',\n });\n logger.info('Added AGENT_BUILDER_THREAD binding');\n }\n\n // Add AGENT_BUILDER if not present\n if (!hasAgentBuilder || options.force) {\n updates.durable_objects.bindings.push({\n name: 'AGENT_BUILDER',\n class_name: 'DurableAgentBuilder',\n });\n logger.info('Added AGENT_BUILDER binding');\n }\n\n // Ensure migrations array exists with both classes\n if (!config.migrations || config.migrations.length === 0) {\n updates.migrations = [\n {\n tag: 'v1',\n new_sqlite_classes: ['DurableThread', 'DurableAgentBuilder'],\n },\n ];\n logger.info('Added Durable Object migrations');\n }\n\n // Update test environment if it exists\n if (config.env?.test) {\n updates.env = updates.env || {};\n updates.env.test = config.env.test;\n\n // Update test Durable Objects\n if (!updates.env.test.durable_objects) {\n updates.env.test.durable_objects = { bindings: [] };\n }\n\n const hasTestThread = updates.env.test.durable_objects.bindings.some(\n (binding) => binding.name === 'AGENT_BUILDER_THREAD'\n );\n const hasTestBuilder = updates.env.test.durable_objects.bindings.some(\n (binding) => binding.name === 'AGENT_BUILDER'\n );\n\n if (!hasTestThread) {\n updates.env.test.durable_objects.bindings.push({\n name: 'AGENT_BUILDER_THREAD',\n class_name: 'DurableThread',\n });\n logger.info('Added test environment AGENT_BUILDER_THREAD binding');\n }\n\n if (!hasTestBuilder) {\n updates.env.test.durable_objects.bindings.push({\n name: 'AGENT_BUILDER',\n class_name: 'DurableAgentBuilder',\n });\n logger.info('Added test environment AGENT_BUILDER binding');\n }\n\n // Ensure test migrations\n if (!updates.env.test.migrations) {\n updates.env.test.migrations = [\n {\n tag: 'v1',\n new_sqlite_classes: ['DurableThread', 'DurableAgentBuilder'],\n },\n ];\n logger.info('Added test environment Durable Object migrations');\n }\n }\n\n // Apply updates\n const updatedText = updateWranglerConfig(configPath, text, updates);\n writeWranglerConfig(configPath, updatedText);\n\n logger.success('Configuration updated successfully!');\n logger.log('\\nNext steps:');\n logger.log('1. Create your agent definitions in agents/agents/');\n logger.log('2. Start your development server');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { logger } from '../utils/logger.js';\n\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 following the naming convention:\n\n\\`\\`\\`\nagents/tools/\n├── my_tool.ts # ✓ snake_case recommended\n├── another_tool.ts # ✓ Valid\n└── CamelCaseTool.ts # ⚠ Works but triggers warning\n\\`\\`\\`\n\n### Tool File Structure\n\nEach tool file should export a default function created with \\`defineTool\\`:\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\n// With arguments\nexport default defineTool(\n 'Description of what this tool does',\n z.object({\n param1: z.string().describe('Description of param1'),\n param2: z.number().optional().describe('Optional parameter'),\n }),\n async (flow, args) => {\n // Tool implementation\n const result = await doSomething(args.param1, args.param2);\n\n return {\n status: 'success',\n result: JSON.stringify(result)\n };\n }\n);\n\n// Without arguments\nexport default defineTool(\n 'Simple tool with no parameters',\n async (flow) => {\n return {\n status: 'success',\n result: 'Done!'\n };\n }\n);\n\\`\\`\\`\n\n### FlowState Object\n\nThe \\`flow\\` parameter provides execution context:\n\n\\`\\`\\`typescript\ninterface FlowState {\n env: Env; // Cloudflare bindings (KV, R2, etc.)\n storage: DurableObjectStorage; // Thread's SQLite storage\n threadId: string; // Current thread ID\n agentId: string; // Current agent ID\n currentSide: 'a' | 'b'; // Which side is executing\n turnCount: number; // Current turn number\n context: Record<string, any>; // Arbitrary state data\n // ... and more\n}\n\\`\\`\\`\n\n### Return Value\n\nTools must return a ToolResult object:\n\n\\`\\`\\`typescript\ninterface ToolResult {\n status: 'success' | 'error';\n result?: string; // Success data\n error?: string; // Error message\n}\n\\`\\`\\`\n\n## Tool Discovery\n\nTools are **auto-discovered** at runtime. No manual registration needed!\n\n1. Vite plugin scans this directory on startup\n2. Generates virtual module with dynamic imports\n3. Tools become available to all agents\n4. HMR (Hot Module Replacement) works in development\n\n## Examples\n\n### API Fetch Tool\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool(\n 'Fetch weather data for a city',\n z.object({\n city: z.string().describe('City name'),\n units: z.enum(['metric', 'imperial']).optional(),\n }),\n async (flow, args) => {\n try {\n const response = await fetch(\n \\`https://api.weather.com/\\${args.city}\\`\n );\n const data = await response.json();\n\n return {\n status: 'success',\n result: JSON.stringify(data),\n };\n } catch (error) {\n return {\n status: 'error',\n error: error.message,\n };\n }\n }\n);\n\\`\\`\\`\n\n### Thread Storage Tool\n\n\\`\\`\\`typescript\nimport { defineTool } from '@standardagents/builder';\nimport { z } from 'zod';\n\nexport default defineTool(\n 'Get custom data from thread storage',\n z.object({\n key: z.string().describe('Storage key to look up'),\n }),\n async (flow, args) => {\n try {\n // Use thread's SQLite storage\n const result = await flow.storage.sql.exec(\n \\`SELECT value FROM custom_data WHERE key = ?\\`,\n args.key\n ).toArray();\n\n if (result.length === 0) {\n return {\n status: 'error',\n error: 'Data not found',\n };\n }\n\n return {\n status: 'success',\n result: JSON.stringify(result[0]),\n };\n } catch (error) {\n return {\n status: 'error',\n error: error.message,\n };\n }\n }\n);\n\\`\\`\\`\n\n## Best Practices\n\n1. **Descriptive Names**: Use clear, action-oriented names (e.g., \\`fetch_weather\\`, not \\`weather\\`)\n2. **Detailed Descriptions**: The description helps the LLM understand when to use the tool\n3. **Zod Descriptions**: Add \\`.describe()\\` to all schema fields for better LLM understanding\n4. **Error Handling**: Always wrap in try/catch and return proper error status\n5. **Type Safety**: Use Zod for runtime validation and TypeScript inference\n6. **Keep It Simple**: Each tool should do one thing well\n7. **Stateless**: Don't rely on global state; use FlowState for context\n\n## Debugging\n\n- Check console output for tool execution logs\n- Tool errors appear in the logs table\n- Use \\`console.log\\` within tools (visible in dev mode)\n- Check message history to see tool calls and responses\n\n## Testing\n\nTools can be tested independently:\n\n\\`\\`\\`typescript\nimport myTool from './my_tool';\n\nconst [description, schema, handler] = myTool;\n\n// Mock FlowState\nconst mockFlow = {\n env: mockEnv,\n storage: mockStorage,\n threadId: 'test-123',\n // ...\n};\n\nconst result = await handler(mockFlow, { param1: 'test' });\nconsole.log(result);\n\\`\\`\\`\n\n## Limitations\n\n- No nested directories (tools must be directly in this folder)\n- Tool execution is **sequential** (no parallel execution)\n- Tool results must be JSON-serializable strings\n- Maximum execution time limited by Workers CPU time\n\n## Related\n\n- **Hooks**: \\`agents/hooks/CLAUDE.md\\` - Lifecycle hooks\n- **APIs**: \\`agents/api/CLAUDE.md\\` - Thread-specific endpoints\n- **Documentation**: Project root \\`CLAUDE.md\\` for architecture overview\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\nUnlike tools (which agents explicitly call), hooks run **automatically** when their trigger point occurs.\n\n## Using defineHook for Type Safety\n\nAll hooks should use the \\`defineHook\\` utility for strict typing:\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('filter_messages', async (state, rows) => {\n // TypeScript knows exactly what state and rows are!\n return rows;\n});\n\\`\\`\\`\n\nThe \\`defineHook\\` function provides:\n- **Strict typing** for hook parameters based on the hook name\n- **IntelliSense** support in your editor\n- **Type checking** to catch errors before runtime\n- **Better documentation** through type hints\n\n## Available Hooks\n\n### \\`filter_messages\\`\n\n**When**: Before message history is transformed to chat completion format\n**Purpose**: Filter or modify SQL row data with access to ALL database columns\n\n\\`\\`\\`typescript\nimport { defineHook, type MessageRow } from '@standardagents/builder';\n\nexport default defineHook('filter_messages', async (state, rows) => {\n // rows contains ALL columns from messages table:\n // id, role, content, name, tool_calls, tool_call_id, log_id,\n // created_at, request_sent_at, response_completed_at, status,\n // silent, tool_status\n\n // Your filtering logic here\n return rows;\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Filter out failed tool messages (\\`tool_status = 'error'\\`)\n- Remove messages older than a certain time\n- Filter by status (pending, completed, failed)\n- Access columns not available in chat format\n- Filter based on database-specific metadata\n\n**Example - Filter Out Failed Tools**:\n\\`\\`\\`typescript\nexport default defineHook('filter_messages', async (state, rows) => {\n // Remove tool messages that failed execution\n return rows.filter(row => {\n if (row.role === 'tool' && row.tool_status === 'error') {\n return false;\n }\n return true;\n });\n});\n\\`\\`\\`\n\n**Important**: This hook runs **before** messages are transformed to Message objects and receives raw SQL data. Use this when you need access to database columns like \\`tool_status\\`, \\`silent\\`, or \\`status\\`.\n\n### \\`prefilter_llm_history\\`\n\n**When**: Immediately after message transformation, before sending to LLM\n**Purpose**: Modify, filter, or limit message history in chat completion format\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n // messages are in chat completion format (already transformed from SQL rows)\n // Available fields: role, content, tool_calls, tool_call_id, name\n\n // Your filtering logic here\n return messages;\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Limit conversation history to last N messages\n- Remove old tool messages to reduce token usage\n- Summarize old messages before sending\n- Add dynamic context based on message patterns\n- Filter out sensitive information\n\n**Example - Limit to Last 10 Messages**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n // Keep all system messages\n const systemMessages = messages.filter(m => m.role === 'system');\n\n // Take only last 10 non-system messages\n const otherMessages = messages\n .filter(m => m.role !== 'system')\n .slice(-10);\n\n return [...systemMessages, ...otherMessages];\n});\n\\`\\`\\`\n\n**Example - Remove Old Tool Messages**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n // Keep messages from last 5 turns, remove old tool messages\n const recentThreshold = messages.length - 10;\n\n return messages.filter((m, index) => {\n if (m.role === 'tool' && index < recentThreshold) {\n return false; // Remove old tool messages\n }\n return true;\n });\n});\n\\`\\`\\`\n\n**Important**: The **filtered messages are logged**, so you can see exactly what was sent to the LLM in the logs table.\n\n### \\`post_process_message\\`\n\n**When**: After receiving a response from the LLM\n**Purpose**: Modify or enhance the assistant's message\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('post_process_message', async (state, message) => {\n // Your post-processing logic here\n return message;\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Format or clean up LLM output\n- Add metadata or tracking information\n- Inject additional context into responses\n- Transform tool call formats\n\n**Example - Add Metadata**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('post_process_message', async (state, message) => {\n if (message.content) {\n message.content += \\`\\\\n\\\\n_Generated at turn \\${state.turnCount}_\\`;\n }\n return message;\n});\n\\`\\`\\`\n\n**Note**: This hook is currently defined but **not yet invoked** in FlowEngine. It will be activated in a future update.\n\n### Message Lifecycle Hooks\n\nThe following hooks run for **ANY** message being created or updated in the database, whether it's an agent message, tool message, user message, or system message.\n\n#### \\`before_create_message\\`\n\n**When**: Immediately before a message is inserted into the database\n**Purpose**: Modify message data before it's stored\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('before_create_message', async (state, message) => {\n // Your modification logic here\n return message;\n});\n\\`\\`\\`\n\n**Message Structure**:\n\\`\\`\\`typescript\n{\n id: string;\n role: string;\n content: string | null;\n tool_calls?: string | null;\n tool_call_id?: string | null;\n name?: string | null;\n created_at: number;\n status?: string;\n silent?: boolean;\n}\n\\`\\`\\`\n\n**Common Use Cases**:\n- Add prefixes or metadata to message content\n- Modify message based on agent configuration\n- Add tracking IDs or identifiers\n- Transform message format before storage\n\n**Example - Add Metadata**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('before_create_message', async (state, message) => {\n // Add agent ID to all messages\n if (message.content && message.role === 'assistant') {\n message.name = state.agentConfig.title;\n }\n return message;\n});\n\\`\\`\\`\n\n#### \\`after_create_message\\`\n\n**When**: Immediately after a message is inserted into the database\n**Purpose**: Perform actions based on newly created messages\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_create_message', async (state, message) => {\n // Your post-creation logic here\n // No return value needed\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Log messages to external systems\n- Trigger webhooks or notifications\n- Update analytics or metrics\n- Send real-time updates to monitoring services\n\n**Example - Log to External Service**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_create_message', async (state, message) => {\n // Log all assistant messages to analytics\n if (message.role === 'assistant' && message.content) {\n try {\n await fetch('https://analytics.example.com/message', {\n method: 'POST',\n body: JSON.stringify({\n threadId: state.threadId,\n messageId: message.id,\n contentLength: message.content.length,\n })\n });\n } catch (error) {\n console.error('Analytics logging failed:', error);\n }\n }\n});\n\\`\\`\\`\n\n#### \\`before_update_message\\`\n\n**When**: Immediately before a message is updated in the database\n**Purpose**: Modify update data before it's applied\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('before_update_message', async (state, messageId, updates) => {\n // Your modification logic here\n return updates;\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Validate or sanitize updated content\n- Add completion timestamps\n- Transform status values\n- Inject metadata into updates\n\n**Example - Add Completion Timestamp**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('before_update_message', async (state, messageId, updates) => {\n // Add custom completion timestamp for completed messages\n if (updates.status === 'completed' && !updates.response_completed_at) {\n updates.response_completed_at = Date.now() * 1000; // microseconds\n }\n return updates;\n});\n\\`\\`\\`\n\n#### \\`after_update_message\\`\n\n**When**: Immediately after a message is updated in the database\n**Purpose**: Perform actions based on message updates\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_update_message', async (state, messageId, updates) => {\n // Your post-update logic here\n // No return value needed\n});\n\\`\\`\\`\n\n**Common Use Cases**:\n- Track message status changes\n- Trigger notifications on completion\n- Update external systems\n- Log state transitions\n\n**Example - Notify on Failure**:\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('after_update_message', async (state, messageId, updates) => {\n // Send notification when message is marked as failed\n if (updates.status === 'failed') {\n console.log(\\`[Alert] Message \\${messageId} failed in thread \\${state.threadId}\\`);\n }\n});\n\\`\\`\\`\n\n**Important**:\n- \\`before_*\\` hooks must return the modified data object\n- \\`after_*\\` hooks don't need to return anything\n- All 4 hooks run for ANY message operation (agent, tool, user, system messages)\n- Updates passed to update hooks contain only the fields being updated\n\n## Creating a Hook\n\n1. Create a file named exactly as the hook (e.g., \\`prefilter_llm_history.ts\\`)\n2. Use \\`defineHook\\` to ensure correct typing\n3. Return the modified data (or original if no changes)\n\n\\`\\`\\`typescript\n// agents/hooks/prefilter_llm_history.ts\nimport { defineHook } from '@standardagents/builder';\n\nexport default defineHook('prefilter_llm_history', async (state, messages) => {\n console.log(\\`Processing \\${messages.length} messages\\`);\n\n // Your logic here\n\n return messages; // Return modified or original\n});\n\\`\\`\\`\n\n## Hook Lifecycle\n\n1. **Discovery**: Vite plugin scans this directory on startup\n2. **Virtual Module**: Generates \\`virtual:@standardagents-hooks\\` with lazy imports\n3. **Lazy Loading**: Hooks are loaded on first use (not at startup)\n4. **Caching**: Once loaded, hooks are cached for performance\n5. **HMR**: Changes trigger hot reload in development\n\n## Error Handling\n\nHooks are designed to be **safe**:\n- If hook file doesn't exist → Silently skipped (no error)\n- If hook throws error → Logged to console, original data returned\n- If hook returns invalid data → Original data used as fallback\n\nThis ensures hooks never break agent execution.\n\n## FlowState Object\n\nAll hooks receive the FlowState context:\n\n\\`\\`\\`typescript\ninterface FlowState {\n threadId: string; // Current thread ID\n flowId: string; // Unique execution ID\n agentConfig: Agent; // Full agent configuration\n currentSide: 'a' | 'b'; // Which side is executing (dual_ai)\n turnCount: number; // Current turn number\n stopped: boolean; // Whether execution should stop\n messageHistory: Message[]; // Full conversation history\n env: Env; // Cloudflare bindings\n storage: DurableObjectStorage; // Thread's SQLite storage\n context: Record<string, any>; // Arbitrary state data\n // ... and more\n}\n\\`\\`\\`\n\nUse this to make context-aware decisions in your hooks.\n\n## Best Practices\n\n1. **Keep Hooks Fast**: They run on every execution, avoid heavy operations\n2. **Always Return Data**: Never return \\`undefined\\` or \\`null\\`\n3. **Log Thoughtfully**: Use \\`console.log\\` sparingly (visible in logs)\n4. **Handle Errors**: Wrap risky operations in try/catch\n5. **Document Behavior**: Add comments explaining what your hook does\n6. **Test Thoroughly**: Hooks affect ALL agent executions\n\n## Debugging\n\n- Check console output for hook loading/execution logs\n- Hook errors are logged with \\`[Hooks] ✗\\` prefix\n- Inspect logs table to see filtered messages (for prefilter hook)\n- Use \\`console.log\\` within hooks for debugging\n\n## Performance Considerations\n\nHooks run on **every turn**, so:\n- Avoid expensive operations (heavy computation, slow APIs)\n- Cache results when possible\n- Consider using FlowState context to skip unnecessary work\n- Use async operations efficiently\n\n## Message Data & Tool Status\n\nThe \\`filter_messages\\` hook receives SQL row data with ALL columns from the messages table:\n\n\\`\\`\\`typescript\ninterface MessageRow {\n id: string;\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | null;\n name: string | null;\n tool_calls: string | null; // JSON string of tool calls\n tool_call_id: string | null; // For role='tool' messages\n log_id: string | null; // Reference to logs table\n created_at: number; // Microseconds timestamp\n request_sent_at: number | null; // When request was sent to LLM\n response_completed_at: number | null; // When response completed\n status: 'pending' | 'completed' | 'failed' | null;\n silent: number | null; // 1 if message should be hidden, 0/null otherwise\n tool_status: 'success' | 'error' | null; // Status of tool execution (tool messages only)\n}\n\\`\\`\\`\n\nThe \\`tool_status\\` column is automatically set when tool messages are created:\n- \\`'success'\\` - Tool executed successfully\n- \\`'error'\\` - Tool execution failed or threw an error\n- \\`null\\` - Not a tool message (role !== 'tool')\n\n## Testing\n\nExample test for a hook:\n\n\\`\\`\\`typescript\nimport { defineHook } from '@standardagents/builder';\nimport prefilterHook from './prefilter_llm_history';\n\nconst mockState = {\n turnCount: 5,\n currentSide: 'a',\n // ... other FlowState fields\n};\n\nconst mockMessages = [\n { role: 'system', content: 'You are helpful' },\n { role: 'user', content: 'Hello' },\n { role: 'assistant', content: 'Hi there!' },\n // ... more messages\n];\n\nconst result = await prefilterHook(mockState, mockMessages);\nconsole.log('Filtered:', result.length, 'messages');\n\\`\\`\\`\n\n## Hook File Naming\n\n**Critical**: Hook files must be named **exactly** as expected:\n- ✓ \\`filter_messages.ts\\`\n- ✓ \\`prefilter_llm_history.ts\\`\n- ✓ \\`post_process_message.ts\\`\n- ✓ \\`before_create_message.ts\\`\n- ✓ \\`after_create_message.ts\\`\n- ✓ \\`before_update_message.ts\\`\n- ✓ \\`after_update_message.ts\\`\n- ✗ \\`filterMessages.ts\\` (wrong case)\n- ✗ \\`prefilterLLMHistory.ts\\` (wrong case)\n- ✗ \\`before-create-message.ts\\` (wrong separator)\n\nThe file name determines which hook point it intercepts.\n\n## Available Hooks\n\nCurrently implemented hooks:\n- \\`filter_messages\\` - Filter SQL row data before transformation to chat format (access to all DB columns including tool_status)\n- \\`prefilter_llm_history\\` - Filter messages before sending to LLM (after transformation to chat format)\n- \\`before_create_message\\` - Before inserting message into database\n- \\`after_create_message\\` - After message is created in database\n- \\`before_update_message\\` - Before updating message in database\n- \\`after_update_message\\` - After message is updated in database\n- \\`after_tool_call_success\\` - After successful tool execution (can modify result or return null to remove)\n- \\`after_tool_call_failure\\` - After failed tool execution (can modify error or return null to remove)\n\n## Related\n\n- **Tools**: \\`agents/tools/CLAUDE.md\\` - Custom tools\n- **APIs**: \\`agents/api/CLAUDE.md\\` - Thread endpoints\n- **Documentation**: Project root \\`CLAUDE.md\\` for architecture\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## File-Based Routing\n\nCreate files following this naming convention:\n\n\\`\\`\\`\nagents/api/\n├── summary.get.ts # GET /agents/api/threads/:id/summary\n├── export.post.ts # POST /agents/api/threads/:id/export\n├── metadata.put.ts # PUT /agents/api/threads/:id/metadata\n└── archive.delete.ts # DELETE /agents/api/threads/:id/archive\n\\`\\`\\`\n\n**Pattern**: \\`{name}.{method}.ts\\`\n\n**Methods**: \\`get\\`, \\`post\\`, \\`put\\`, \\`delete\\`, \\`patch\\`\n\n**URL**: \\`/agents/api/threads/:id/{name}\\`\n\n## Creating a Thread Endpoint\n\nUse \\`defineThreadEndpoint\\` from \\`@standardagents/builder\\`:\n\n\\`\\`\\`typescript\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // thread is the DurableObject stub for the requested thread\n // request is the incoming Request object\n // env is the Cloudflare environment with bindings\n\n // Access thread's storage directly\n const messages = await thread.getMessages();\n\n // Perform operations\n const summary = generateSummary(messages);\n\n // Return response\n return new Response(JSON.stringify({ summary }), {\n headers: { 'Content-Type': 'application/json' }\n });\n});\n\\`\\`\\`\n\n## Thread Object\n\nThe \\`thread\\` parameter is a DurableObject stub with RPC methods:\n\n\\`\\`\\`typescript\ninterface DurableThread {\n // Get messages from thread's SQLite storage\n getMessages(limit?: number, offset?: number): Promise<Message[]>;\n\n // Get execution logs\n getLogs(limit?: number, offset?: number): Promise<Log[]>;\n\n // Process a new message (starts agent execution)\n processMessage(content: string, role?: string): Promise<Response>;\n\n // Get thread metadata\n getThreadMeta(threadId: string): Promise<ThreadMetadata>;\n\n // Direct storage access (advanced)\n storage: DurableObjectStorage;\n}\n\\`\\`\\`\n\n## Examples\n\n### GET Summary Endpoint\n\n\\`\\`\\`typescript\n// agents/api/summary.get.ts\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // Fetch messages from thread\n const messages = await thread.getMessages();\n\n // Generate summary\n const userMessages = messages.filter(m => m.role === 'user');\n const assistantMessages = messages.filter(m => m.role === 'assistant');\n\n return new Response(JSON.stringify({\n total_messages: messages.length,\n user_messages: userMessages.length,\n assistant_messages: assistantMessages.length,\n first_message: messages[0]?.content,\n last_message: messages[messages.length - 1]?.content,\n }), {\n headers: { 'Content-Type': 'application/json' }\n });\n});\n\\`\\`\\`\n\n**Usage**: \\`GET /agents/api/threads/{threadId}/summary\\`\n\n### POST Export Endpoint\n\n\\`\\`\\`typescript\n// agents/api/export.post.ts\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const { format } = await request.json();\n\n // Get messages\n const messages = await thread.getMessages();\n\n // Export based on format\n let content: string;\n let contentType: string;\n\n if (format === 'json') {\n content = JSON.stringify(messages, null, 2);\n contentType = 'application/json';\n } else if (format === 'markdown') {\n content = messages\n .map(m => \\`**\\${m.role}**: \\${m.content}\\`)\n .join('\\\\n\\\\n');\n contentType = 'text/markdown';\n } else {\n return new Response('Invalid format', { status: 400 });\n }\n\n return new Response(content, {\n headers: {\n 'Content-Type': contentType,\n 'Content-Disposition': \\`attachment; filename=\"thread-export.\\${format}\"\\`\n }\n });\n});\n\\`\\`\\`\n\n**Usage**: \\`POST /agents/api/threads/{threadId}/export\\`\n\n### Direct Storage Access\n\n\\`\\`\\`typescript\n// agents/api/stats.get.ts\nimport { defineThreadEndpoint } from '@standardagents/builder';\n\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // Access SQLite storage directly\n const storage = (thread as any).storage;\n\n const cursor = await storage.sql.exec(\\`\n SELECT\n COUNT(*) as count,\n role,\n AVG(LENGTH(content)) as avg_length\n FROM messages\n GROUP BY role\n \\`);\n\n const stats = cursor.toArray();\n\n return new Response(JSON.stringify({ stats }), {\n headers: { 'Content-Type': 'application/json' }\n });\n});\n\\`\\`\\`\n\n## Request Handling\n\n### Reading Request Body\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // JSON\n const body = await request.json();\n\n // FormData\n const formData = await request.formData();\n\n // Text\n const text = await request.text();\n\n // ...\n});\n\\`\\`\\`\n\n### Query Parameters\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const url = new URL(request.url);\n const limit = url.searchParams.get('limit') || '10';\n\n const messages = await thread.getMessages(parseInt(limit));\n\n // ...\n});\n\\`\\`\\`\n\n### Headers\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n const authHeader = request.headers.get('Authorization');\n\n if (!authHeader) {\n return new Response('Unauthorized', { status: 401 });\n }\n\n // ...\n});\n\\`\\`\\`\n\n## Error Handling\n\nAlways wrap in try/catch for robust error handling:\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n try {\n // Your endpoint logic\n const result = await doSomething();\n\n return new Response(JSON.stringify(result), {\n headers: { 'Content-Type': 'application/json' }\n });\n } catch (error) {\n console.error('Endpoint error:', error);\n\n return new Response(\n JSON.stringify({\n error: error.message\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n }\n});\n\\`\\`\\`\n\n## Environment Bindings\n\nAccess Cloudflare bindings via \\`env\\`:\n\n\\`\\`\\`typescript\nexport default defineThreadEndpoint(async (thread, request, env) => {\n // Durable Objects\n const agentBuilder = env.AGENT_BUILDER.get(env.AGENT_BUILDER.idFromName(\"singleton\"));\n const threadData = await agentBuilder.getThread(threadId);\n\n // KV (if configured)\n const cache = await env.MY_KV.get('cache-key');\n\n // R2 (if configured)\n const object = await env.MY_BUCKET.get('file.txt');\n\n // ...\n});\n\\`\\`\\`\n\n## Auto-Discovery\n\nThread endpoints are **auto-discovered**:\n\n1. Vite plugin scans this directory on startup\n2. Generates virtual module with dynamic imports\n3. Routes registered in the main router\n4. HMR works in development\n\nNo manual registration needed!\n\n## URL Structure\n\nAll thread endpoints follow this pattern:\n\n\\`\\`\\`\n/agents/api/threads/:id/{endpoint-name}\n\\`\\`\\`\n\nExamples:\n- \\`GET /agents/api/threads/abc-123/summary\\`\n- \\`POST /agents/api/threads/abc-123/export\\`\n- \\`PUT /agents/api/threads/abc-123/metadata\\`\n\nThe \\`:id\\` is automatically used to fetch the correct Durable Object.\n\n## Built-In Endpoints\n\nStandard Agents includes built-in thread endpoints (these are in the framework, not this directory):\n\n- \\`GET /agents/api/threads/:id/messages\\` - Get message history\n- \\`POST /agents/api/threads/:id/messages\\` - Send a message\n- \\`DELETE /agents/api/threads/:id\\` - Delete thread\n- \\`GET /agents/api/threads/:id/logs\\` - Get execution logs\n\nYour custom endpoints extend these built-in routes.\n\n## Best Practices\n\n1. **Descriptive Names**: Use clear endpoint names (e.g., \\`summary\\`, \\`export\\`)\n2. **Proper HTTP Methods**: Use GET for reads, POST for creates, etc.\n3. **Error Handling**: Always wrap in try/catch\n4. **Type Safety**: Use TypeScript interfaces for request/response\n5. **Performance**: Be mindful of SQLite query performance\n6. **Authentication**: Add auth checks if endpoints are sensitive\n7. **CORS**: Add CORS headers if accessed from browser\n\n## Testing\n\nTest endpoints with curl or any HTTP client:\n\n\\`\\`\\`bash\n# GET summary\ncurl http://localhost:8787/agents/api/threads/abc-123/summary\n\n# POST export\ncurl -X POST http://localhost:8787/agents/api/threads/abc-123/export \\\\\n -H \"Content-Type: application/json\" \\\\\n -d '{\"format\": \"json\"}'\n\\`\\`\\`\n\n## Limitations\n\n- No nested directories (endpoints must be directly in this folder)\n- Thread ID must be in URL path (handled automatically)\n- No support for multiple path parameters beyond thread ID\n- Response must be a Web API \\`Response\\` object\n\n## Related\n\n- **Tools**: \\`agents/tools/CLAUDE.md\\` - Custom tools\n- **Hooks**: \\`agents/hooks/CLAUDE.md\\` - Lifecycle hooks\n- **Built-in APIs**: \\`packages/builder/src/api/\\` - Framework endpoints\n- **Documentation**: Project root \\`CLAUDE.md\\` for architecture\n`;\n\nexport async function scaffold() {\n const cwd = process.cwd();\n\n logger.info('Scaffolding Standard Agents directories...');\n\n const directories = [\n {\n path: path.join(cwd, 'agents', 'tools'),\n claudeMd: TOOLS_CLAUDE_MD,\n name: 'tools',\n },\n {\n path: path.join(cwd, 'agents', 'hooks'),\n claudeMd: HOOKS_CLAUDE_MD,\n name: 'hooks',\n },\n {\n path: path.join(cwd, 'agents', 'api'),\n claudeMd: API_CLAUDE_MD,\n name: 'api',\n },\n ];\n\n let created = 0;\n let skipped = 0;\n\n for (const dir of directories) {\n // Create directory if it doesn't exist\n if (!fs.existsSync(dir.path)) {\n fs.mkdirSync(dir.path, { recursive: true });\n logger.success(`Created directory: agents/${dir.name}`);\n created++;\n } else {\n logger.info(`Directory already exists: agents/${dir.name}`);\n }\n\n // Create CLAUDE.md if it doesn't exist\n const claudeMdPath = path.join(dir.path, 'CLAUDE.md');\n if (!fs.existsSync(claudeMdPath)) {\n fs.writeFileSync(claudeMdPath, dir.claudeMd, 'utf-8');\n logger.success(`Created documentation: agents/${dir.name}/CLAUDE.md`);\n created++;\n } else {\n logger.info(`Documentation already exists: agents/${dir.name}/CLAUDE.md (not overwriting)`);\n skipped++;\n }\n }\n\n logger.log('');\n if (created > 0) {\n logger.success(`Scaffolding complete! Created ${created} file(s).`);\n }\n if (skipped > 0) {\n logger.info(`Skipped ${skipped} existing file(s).`);\n }\n\n logger.log('\\nNext steps:');\n logger.log('1. Read the CLAUDE.md files in each directory for detailed documentation');\n logger.log('2. Create your first tool in agents/tools/');\n logger.log('3. Add lifecycle hooks in agents/hooks/ (optional)');\n logger.log('4. Create custom thread endpoints in agents/api/ (optional)');\n}\n","import { Command } from 'commander';\nimport { init } from './commands/init.js';\nimport { scaffold } from './commands/scaffold.js';\n\nconst program = new Command();\n\nprogram\n .name('agentbuilder')\n .description('CLI tool for AgentBuilder initialization')\n .version('0.0.0');\n\nprogram\n .command('init')\n .description('Initialize AgentBuilder configuration in wrangler.jsonc')\n .option('--force', 'Overwrite existing configuration')\n .action(init);\n\nprogram\n .command('scaffold')\n .description('Create agentbuilder directories (tools, hooks, api) with documentation')\n .action(scaffold);\n\nprogram.parse();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/logger.ts","../src/commands/scaffold.ts","../src/commands/init.ts","../src/index.ts"],"names":["pkg","resolve","fs","path"],"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 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\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n cwd,\n stdio: 'inherit',\n shell: true,\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 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\nexport async function init(projectNameArg?: string, options: InitOptions = {}) {\n const cwd = process.cwd();\n const pm = 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 // 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 // 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 ], 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: Generate Cloudflare types\n logger.log('');\n logger.info('Step 4: 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.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"commander": "^12.1.0",
|
|
29
29
|
"jsonc-parser": "^3.3.1",
|
|
30
|
-
"chalk": "^5.3.0"
|
|
30
|
+
"chalk": "^5.3.0",
|
|
31
|
+
"magicast": "^0.3.5"
|
|
31
32
|
},
|
|
32
33
|
"peerDependencies": {
|
|
33
34
|
"@standardagents/builder": "workspace:*"
|